changeset 156:3b6888bb53b5 beta

Traipse Beta 'OpenRPG' {091125-02} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary (Beta) Added Bookmarks Fix to Remote Admin Commands Minor fix to text based Server Fix to Pretty Print, from Core Fix to Splitter Nodes not being created Fix to massive amounts of images loading, from Core Added 'boot' command to remote admin Added confirmation window for sent nodes Minor changes to allow for portability to an OpenSUSE linux OS Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG Zoom Mouse plugin added Images added to Plugin UI Switching to Element Tree Map efficiency, from FlexiRPG Added Status Bar to Update Manager default_manifest.xml renamed to default_upmana.xml Cleaner clode for saved repositories New TrueDebug Class in orpg_log (See documentation for usage) Mercurial's hgweb folder is ported to upmana Pretty important update that can help remove thousands of dead children from your gametree. Children, <forms />, <group_atts />, <horizontal />, <cols />, <rows />, <height />, etc... are all tags now. Check your gametree and look for dead children!! New Gametree Recursion method, mapping, and context sensitivity. !Infinite Loops return error instead of freezing the software! New Syntax added for custom PC sheets Tip of the Day added, from Core and community Fixed Whiteboard ID to prevent random line or text deleting. Modified ID's to prevent non updated clients from ruining the fix.
author sirebral
date Wed, 25 Nov 2009 12:34:04 -0600
parents 316661c3ec3f
children cc1ae9386f87
files data/SWd20/SWd20classes.xml data/SWd20/d20armor.xml data/SWd20/d20feats.xml data/SWd20/d20weapons.xml data/d20/d20armor.xml data/d20/d20classes.xml data/d20/d20divine.xml data/d20/d20feats.xml data/d20/d20powers.xml data/d20/d20spells.xml data/d20/d20weapons.xml data/dnd35/books.txt data/dnd35/classes.txt data/dnd35/dnd35armor.xml data/dnd35/dnd35character.xml data/dnd35/dnd35classes.xml data/dnd35/dnd35feats.xml data/dnd35/dnd35weapons.xml data/dnd35/feats.txt data/dnd3e/dnd3earmor.xml data/dnd3e/dnd3echaracter.xml data/dnd3e/dnd3eclasses.xml data/dnd3e/dnd3edivine.xml data/dnd3e/dnd3efeats.xml data/dnd3e/dnd3epowers.xml data/dnd3e/dnd3espells.xml data/dnd3e/dnd3eweapons.xml data/dnd3e/feats.txt images/8ball.gif images/add.png images/add_button.png images/arc.png images/bricktile.gif images/check_button.png images/chess.gif images/circle.png images/d20.xpm images/dash.png images/defaultmap.png images/divider.png images/drugs.gif images/fetching.png images/fogoff.png images/fogon.png images/form.png images/grenade.gif images/gun1.gif images/gun2.gif images/hidefog.png images/icons.xml images/knight.gif images/money.gif images/player-whisper.gif images/r2d2.gif images/rectangle.png images/sflogo.png images/showfog.png images/spears.gif images/splash.jpg images/spotlight.png images/star.png images/startrek.gif images/tab_close.png images/tab_on.png images/tabber.png images/tank1.gif images/tank2.gif images/text.png images/tiefighter.gif images/wxPyButton.png images/wxWinButton.png license.txt myfiles/webfiles/Textures/grass11.jpg orpg/__init__.py orpg/chat/chat_msg.py orpg/chat/chat_util.py orpg/chat/chat_version.py orpg/chat/chatwnd.py orpg/chat/commands.py orpg/dieroller/HOWTO.txt orpg/dieroller/__init__.py orpg/dieroller/d20.py orpg/dieroller/die.py orpg/dieroller/dieroller.txt orpg/dieroller/gurps.py orpg/dieroller/hackmaster.py orpg/dieroller/hero.py orpg/dieroller/runequest.py orpg/dieroller/savage.py orpg/dieroller/shadowrun.py orpg/dieroller/sr4.py orpg/dieroller/srex.py orpg/dieroller/trinity.py orpg/dieroller/utils.py orpg/dieroller/wod.py orpg/dieroller/wodex.py orpg/dirpath/__init__.py orpg/dirpath/dirpath_tools.py orpg/gametree/__init__.py orpg/gametree/gametree.py orpg/gametree/gametree_version.py orpg/gametree/nodehandlers/__init__.py orpg/gametree/nodehandlers/chatmacro.py orpg/gametree/nodehandlers/containers.py orpg/gametree/nodehandlers/core.py orpg/gametree/nodehandlers/d20.py orpg/gametree/nodehandlers/dnd35.py orpg/gametree/nodehandlers/dnd3e.py orpg/gametree/nodehandlers/forms.py orpg/gametree/nodehandlers/map_miniature_nodehandler.py orpg/gametree/nodehandlers/minilib.py orpg/gametree/nodehandlers/nodehandler_version.py orpg/gametree/nodehandlers/rpg_grid.py orpg/gametree/nodehandlers/voxchat.py orpg/orpg_version.py orpg/templates/default_alias.alias orpg/templates/metaservers.cache plugins/images/samurai.gif start_noupdate.py start_release.py
diffstat 120 files changed, 35034 insertions(+), 35034 deletions(-) [+]
line wrap: on
line diff
--- a/data/SWd20/SWd20classes.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/SWd20/SWd20classes.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,47 +1,47 @@
-<classes>
-  <class level="1" name="Big-Game Hunter" vd="d10"/>
-  <class level="1" name="Blockade Runner" vd="d6"/>
-  <class level="1" name="Bounty Hunter" vd="d10"/>
-  <class level="1" name="Commoner" vd="d0"/>
-  <class level="1" name="Crimelord" vd="d6"/>
-  <class level="1" name="Dark Force Witch" vd="d8"/>
-  <class level="1" name="Dark Side Devotee" vd="d8"/>
-  <class level="1" name="Dark Side Marauder" vd="d10"/>
-  <class level="1" name="Deep Space Pilot" vd="d6"/>
-  <class level="1" name="Diplomat" vd="d0"/>
-  <class level="1" name="Elite Trooper" vd="d10"/>
-  <class level="1" name="Emperor's Hand" vd="d8"/>
-  <class level="1" name="Expert" vd="d0"/>
-  <class level="1" name="First-Contact Specialist" vd="d6"/>
-  <class level="1" name="Force Adept" vd="d8"/>
-  <class level="1" name="Fringer" vd="d8"/>
-  <class level="1" name="Gand Findsman" vd="d8"/>
-  <class level="1" name="Imperial Inquisitor" vd="d10"/>
-  <class level="1" name="Jedi Ace" vd="d8"/>
-  <class level="1" name="Jedi Consular" vd="d8"/>
-  <class level="1" name="Jedi Guardian" vd="d10"/>
-  <class level="1" name="Jedi Investigator" vd="d8"/>
-  <class level="1" name="Jedi Master" vd="d8"/>
-  <class level="1" name="Jedi Weapon Master" vd="d10"/>
-  <class level="1" name="Martial Artist" vd="d10"/>
-  <class level="1" name="Master Gunner" vd="d6"/>
-  <class level="1" name="Naval Officer" vd="d6"/>
-  <class level="1" name="Noble" vd="d6"/>
-  <class level="1" name="Noghri Bodyguard" vd="d8"/>
-  <class level="1" name="Officer" vd="d8"/>
-  <class level="1" name="Privateer" vd="d10"/>
-  <class level="1" name="Scoundrel" vd="d6"/>
-  <class level="1" name="Scout" vd="d8"/>
-  <class level="1" name="Sector Ranger" vd="d8"/>
-  <class level="1" name="Sharpshooter" vd="d6"/>
-  <class level="1" name="Sith Acolyte" vd="d8"/>
-  <class level="1" name="Sith Lord" vd="d10"/>
-  <class level="1" name="Sith Warrior" vd="d10"/>
-  <class level="1" name="Slicer" vd="d6"/>
-  <class level="1" name="Soldier" vd="d10"/>
-  <class level="1" name="Starfighter Ace" vd="d8"/>
-  <class level="1" name="Starship Ace" vd="d8"/>
-  <class level="1" name="Tech Specialist" vd="d6"/>
-  <class level="1" name="Thug" vd="d0"/>
-  <class level="1" name="Vehicle Ace" vd="d8"/>
-</classes>
+<classes>
+  <class level="1" name="Big-Game Hunter" vd="d10"/>
+  <class level="1" name="Blockade Runner" vd="d6"/>
+  <class level="1" name="Bounty Hunter" vd="d10"/>
+  <class level="1" name="Commoner" vd="d0"/>
+  <class level="1" name="Crimelord" vd="d6"/>
+  <class level="1" name="Dark Force Witch" vd="d8"/>
+  <class level="1" name="Dark Side Devotee" vd="d8"/>
+  <class level="1" name="Dark Side Marauder" vd="d10"/>
+  <class level="1" name="Deep Space Pilot" vd="d6"/>
+  <class level="1" name="Diplomat" vd="d0"/>
+  <class level="1" name="Elite Trooper" vd="d10"/>
+  <class level="1" name="Emperor's Hand" vd="d8"/>
+  <class level="1" name="Expert" vd="d0"/>
+  <class level="1" name="First-Contact Specialist" vd="d6"/>
+  <class level="1" name="Force Adept" vd="d8"/>
+  <class level="1" name="Fringer" vd="d8"/>
+  <class level="1" name="Gand Findsman" vd="d8"/>
+  <class level="1" name="Imperial Inquisitor" vd="d10"/>
+  <class level="1" name="Jedi Ace" vd="d8"/>
+  <class level="1" name="Jedi Consular" vd="d8"/>
+  <class level="1" name="Jedi Guardian" vd="d10"/>
+  <class level="1" name="Jedi Investigator" vd="d8"/>
+  <class level="1" name="Jedi Master" vd="d8"/>
+  <class level="1" name="Jedi Weapon Master" vd="d10"/>
+  <class level="1" name="Martial Artist" vd="d10"/>
+  <class level="1" name="Master Gunner" vd="d6"/>
+  <class level="1" name="Naval Officer" vd="d6"/>
+  <class level="1" name="Noble" vd="d6"/>
+  <class level="1" name="Noghri Bodyguard" vd="d8"/>
+  <class level="1" name="Officer" vd="d8"/>
+  <class level="1" name="Privateer" vd="d10"/>
+  <class level="1" name="Scoundrel" vd="d6"/>
+  <class level="1" name="Scout" vd="d8"/>
+  <class level="1" name="Sector Ranger" vd="d8"/>
+  <class level="1" name="Sharpshooter" vd="d6"/>
+  <class level="1" name="Sith Acolyte" vd="d8"/>
+  <class level="1" name="Sith Lord" vd="d10"/>
+  <class level="1" name="Sith Warrior" vd="d10"/>
+  <class level="1" name="Slicer" vd="d6"/>
+  <class level="1" name="Soldier" vd="d10"/>
+  <class level="1" name="Starfighter Ace" vd="d8"/>
+  <class level="1" name="Starship Ace" vd="d8"/>
+  <class level="1" name="Tech Specialist" vd="d6"/>
+  <class level="1" name="Thug" vd="d0"/>
+  <class level="1" name="Vehicle Ace" vd="d8"/>
+</classes>
--- a/data/SWd20/d20armor.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/SWd20/d20armor.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,46 +1,46 @@
-<ac>
-<armor name="Blast helmet, vest" cost="500" type="Light" maxdex="5" bonus="2" checkpenalty="-1" weight="3" speed="10" speed6="6" >
-<description >This armour consists of a lightweight helmet and a composite vest that, when worn together, offer limited protection against shrapnel, mele weapons, slugthrowers, and blasters
-</description >
-</armor>
-<armor name="Combat jumpsuit" cost="1500" type="Light" maxdex="4" bonus="3" checkpenalty="-3" weight="8" speed="10" speed6="6" >
-<description >
-</description >
-</armor>
-<armor name="Padded flight suit" cost="800" type="Light" maxdex="4" bonus="2" checkpenalty="-2" weight="5" speed="10" speed6="6" >
-<description >
-</description >
-</armor>
-<armor name="Armoured flight suit" cost="4000" type="Medium" maxdex="3" bonus="4" checkpenalty="-4" weight="20" speed="8" speed6="4" >
-<description >
-</description >
-</armor>
-<armor name="Battle armour, padded" cost="2000" type="Medium" maxdex="3" bonus="4" checkpenalty="-4" weight="13" speed="8" speed6="4" >
-<description >
-</description >
-</armor>
-<armor name="Battle armour, medium" cost="6000" type="Medium" maxdex="2" bonus="5" checkpenalty="-5" weight="16" speed="8" speed6="4" >
-<description >
-</description >
-</armor>
-<armor name="Armoured spacesuit" cost="10000" type="Heavy" maxdex="1" bonus="6" checkpenalty="-6" weight="45" speed="6" speed6="2" >
-<description >
-</description >
-</armor>
-<armor name="Battle armor, heavy" cost="12000" type="Heavy" maxdex="0" bonus="7" checkpenalty="-7" weight="35" speed="6" speed6="2" >
-<description >
-</description >
-</armor>
-<armor name="Corellian powersuit" cost="10000" type="Powered" maxdex="0" bonus="4" checkpenalty="-4" weight="18" speed="8" speed6="4" >
-<description >
-</description >
-</armor>
-<armor name="Stormtrooper armour" cost="8000" type="Powered" maxdex="2" bonus="5" checkpenalty="-2" weight="16" speed="8" speed6="4" >
-<description >
-</description >
-</armor>
-<armor name="Battleframe" cost="12000" type="Powered" maxdex="0" bonus="3" checkpenalty="-8" weight="20" speed="6" speed6="2" >
-<description >
-</description >
-</armor>
-</ac>
+<ac>
+<armor name="Blast helmet, vest" cost="500" type="Light" maxdex="5" bonus="2" checkpenalty="-1" weight="3" speed="10" speed6="6" >
+<description >This armour consists of a lightweight helmet and a composite vest that, when worn together, offer limited protection against shrapnel, mele weapons, slugthrowers, and blasters
+</description >
+</armor>
+<armor name="Combat jumpsuit" cost="1500" type="Light" maxdex="4" bonus="3" checkpenalty="-3" weight="8" speed="10" speed6="6" >
+<description >
+</description >
+</armor>
+<armor name="Padded flight suit" cost="800" type="Light" maxdex="4" bonus="2" checkpenalty="-2" weight="5" speed="10" speed6="6" >
+<description >
+</description >
+</armor>
+<armor name="Armoured flight suit" cost="4000" type="Medium" maxdex="3" bonus="4" checkpenalty="-4" weight="20" speed="8" speed6="4" >
+<description >
+</description >
+</armor>
+<armor name="Battle armour, padded" cost="2000" type="Medium" maxdex="3" bonus="4" checkpenalty="-4" weight="13" speed="8" speed6="4" >
+<description >
+</description >
+</armor>
+<armor name="Battle armour, medium" cost="6000" type="Medium" maxdex="2" bonus="5" checkpenalty="-5" weight="16" speed="8" speed6="4" >
+<description >
+</description >
+</armor>
+<armor name="Armoured spacesuit" cost="10000" type="Heavy" maxdex="1" bonus="6" checkpenalty="-6" weight="45" speed="6" speed6="2" >
+<description >
+</description >
+</armor>
+<armor name="Battle armor, heavy" cost="12000" type="Heavy" maxdex="0" bonus="7" checkpenalty="-7" weight="35" speed="6" speed6="2" >
+<description >
+</description >
+</armor>
+<armor name="Corellian powersuit" cost="10000" type="Powered" maxdex="0" bonus="4" checkpenalty="-4" weight="18" speed="8" speed6="4" >
+<description >
+</description >
+</armor>
+<armor name="Stormtrooper armour" cost="8000" type="Powered" maxdex="2" bonus="5" checkpenalty="-2" weight="16" speed="8" speed6="4" >
+<description >
+</description >
+</armor>
+<armor name="Battleframe" cost="12000" type="Powered" maxdex="0" bonus="3" checkpenalty="-8" weight="20" speed="6" speed6="2" >
+<description >
+</description >
+</armor>
+</ac>
--- a/data/SWd20/d20feats.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/SWd20/d20feats.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,217 +1,217 @@
-<feats>
-    <feat name='Absorb Energy' type='General' />
-    <feat name='Acrobatic' type='General' />
-    <feat name='Advanced Martial Arts' type='General' />
-    <feat name='Alertness' type='General' />
-    <feat name='Alter' type='General' />
-    <feat name='Ambidexterity' type='General' />
-    <feat name='Animal Affinity' type='General' />
-    <feat name='Armor Proficiency (heavy)' type='General' />
-    <feat name='Armor Proficiency (light)' type='General' />
-    <feat name='Armor Proficiency (medium)' type='General' />
-    <feat name='Armor Proficiency (powered)' type='General' />
-    <feat name='Athletic' type='General' />
-    <feat name='Attuned' type='General' />
-    <feat name='Aware' type='General' />
-    <feat name='Blind-fight' type='General' />
-    <feat name='Burst of Speed' type='General' />
-    <feat name='Cautious' type='General' />
-    <feat name='Cleave' type='General' />
-    <feat name='Combat Expertise' type='General' />
-    <feat name='Combat Reflexes' type='General' />
-    <feat name='Compassion' type='General' />
-    <feat name='Control' type='General' />
-    <feat name='Defensive Martial Arts' type='General' />
-    <feat name='Dissipate Energy' type='General' />
-    <feat name='Dodge' type='General' />
-    <feat name='Drain Force' type='General' />
-    <feat name='Endurance' type='General' />
-    <feat name='Exotic Weapon Proficiency (amphistaff)' type='General' />
-    <feat name='Exotic Weapon Proficiency (atlatl)' type='General' />
-    <feat name='Exotic Weapon Proficiency (bowcaster)' type='General' />
-    <feat name='Exotic Weapon Proficiency (cesta)' type='General' />
-    <feat name='Exotic Weapon Proficiency (double lightsaber)' type='General' />
-    <feat name='Exotic Weapon Proficiency (gaderffii)' type='General' />
-    <feat name='Exotic Weapon Proficiency (lightsaber)' type='General' />
-    <feat name='Exotic Weapon Proficiency (lightwhip)' type='General' />
-    <feat name='Exotic Weapon Proficiency (massassi lanvarok)' type='General' />
-    <feat name='Exotic Weapon Proficiency (plaeryin bol)' type='General' />
-    <feat name='Exotic Weapon Proficiency (quills)' type='General' />
-    <feat name='Exotic Weapon Proficiency (riot gun)' type='General' />
-    <feat name='Exotic Weapon Proficiency (san-ni staff)' type='General' />
-    <feat name='Exotic Weapon Proficiency (short lightsaber)' type='General' />
-    <feat name='Exotic Weapon Proficiency (sith lanvarok)' type='General' />
-    <feat name='Exotic Weapon Proficiency (sith sword)' type='General' />
-    <feat name='Exotic Weapon Proficiency (snare rifle)' type='General' />
-    <feat name='Exotic Weapon Proficiency (stinger)' type='General' />
-    <feat name='Exotic Weapon Proficiency (tsaisi)' type='General' />
-    <feat name='Expert Gunner' type='General' />
-    <feat name='Fame' type='General' />
-    <feat name='Far Shot' type='General' />
-    <feat name='Focus' type='General' />
-    <feat name='Force Dodge' type='General' />
-    <feat name='Force Flight' type='General' />
-    <feat name='Force Mastery' type='General' />
-    <feat name='Force Mind' type='General' />
-    <feat name='Force Pilot' type='General' />
-    <feat name='Force Shot' type='General' />
-    <feat name='Force Speed' type='General' />
-    <feat name='Force Whirlwind' type='General' />
-    <feat name='Force-Sensitive' type='General' />
-    <feat name='Frightful Presence' type='General' />
-    <feat name='Gearhead' type='General' />
-    <feat name='Great Cleave' type='General' />
-    <feat name='Great Fortitude' type='General' />
-    <feat name='Guided Shot' type='General' />
-    <feat name='Gunner' type='General' />
-    <feat name='Hatred' type='General' />
-    <feat name='Headstrong' type='General' />
-    <feat name='Heroic Surge' type='General' />
-    <feat name='High Force Mastery' type='General' />
-    <feat name='Improved Bantha Rush' type='General' />
-    <feat name='Improved Critical' type='General' />
-    <feat name='Improved Disarm' type='General' />
-    <feat name='Improved Force Mind' type='General' />
-    <feat name='Improved Initiative' type='General' />
-    <feat name='Improved Martial Arts' type='General' />
-    <feat name='Improved Trip' type='General' />
-    <feat name='Improved Two-weapon Fighting' type='General' />
-    <feat name='Infamy' type='General' />
-    <feat name='Influence' type='General' />
-    <feat name='Iron Will' type='General' />
-    <feat name='Knight Defense' type='General' />
-    <feat name='Knight Mind' type='General' />
-    <feat name='Knight Speed' type='General' />
-    <feat name='Lightning Reflexes' type='General' />
-    <feat name='Lightsaber Defense' type='General' />
-    <feat name='Link' type='General' />
-    <feat name='Low Profile' type='General' />
-    <feat name='Malevolant' type='General' />
-    <feat name='Maneuver Expertise' type='General' />
-    <feat name='Martial Arts' type='General' />
-    <feat name='Master Defense' type='General' />
-    <feat name='Master Mind' type='General' />
-    <feat name='Master Speed' type='General' />
-    <feat name='Mettle' type='General' />
-    <feat name='Mimic' type='General' />
-    <feat name='Mind Trick' type='General' />
-    <feat name='Mobility' type='General' />
-    <feat name='Multishot' type='General' />
-    <feat name='Nimble' type='General' />
-    <feat name='Persuasive' type='General' />
-    <feat name='Pinpoint Accuracy' type='General' />
-    <feat name='Point Blank Shot' type='General' />
-    <feat name='Power Attack' type='General' />
-    <feat name='Precise Shot' type='General' />
-    <feat name='Psychometry' type='General' />
-    <feat name='Quick Draw' type='General' />
-    <feat name='Quickness' type='General' />
-    <feat name='Rage' type='General' />
-    <feat name='Rapid Gunner' type='General' />
-    <feat name='Rapid Shot' type='General' />
-    <feat name='Rugged' type='General' />
-    <feat name='Run' type='General' />
-    <feat name='Sense' type='General' />
-    <feat name='Shapeshifter' type='General' />
-    <feat name='Sharp-eyed' type='General' />
-    <feat name='Shot On The Run' type='General' />
-    <feat name='Sith Sorcery' type='General' />
-    <feat name='Sith Sword Defense' type='General' />
-    <feat name='Sith Sword Expert Defense' type='General' />
-    <feat name='Sith Sword Mastery' type='General' />
-    <feat name='Skill Emphasis (Affect Mind)' type='General' />
-    <feat name='Skill Emphasis (Alchemy)' type='General' />
-    <feat name='Skill Emphasis (Appraise)' type='General' />
-    <feat name='Skill Emphasis (Astrogate)' type='General' />
-    <feat name='Skill Emphasis (Balance)' type='General' />
-    <feat name='Skill Emphasis (Battlemind)' type='General' />
-    <feat name='Skill Emphasis (Bluff)' type='General' />
-    <feat name='Skill Emphasis (Climb)' type='General' />
-    <feat name='Skill Emphasis (Computer Use)' type='General' />
-    <feat name='Skill Emphasis (Control Mind)' type='General' />
-    <feat name='Skill Emphasis (Craft)' type='General' />
-    <feat name='Skill Emphasis (Demolitions)' type='General' />
-    <feat name='Skill Emphasis (Diplomacy)' type='General' />
-    <feat name='Skill Emphasis (Disable Device)' type='General' />
-    <feat name='Skill Emphasis (Disguise)' type='General' />
-    <feat name='Skill Emphasis (Drain Energy)' type='General' />
-    <feat name='Skill Emphasis (Drain Knowledge)' type='General' />
-    <feat name='Skill Emphasis (Empathy)' type='General' />
-    <feat name='Skill Emphasis (Enhance Ability)' type='General' />
-    <feat name='Skill Emphasis (Enhance Senses)' type='General' />
-    <feat name='Skill Emphasis (Entertain)' type='General' />
-    <feat name='Skill Emphasis (Escape Artist)' type='General' />
-    <feat name='Skill Emphasis (Farseeing)' type='General' />
-    <feat name='Skill Emphasis (Fear)' type='General' />
-    <feat name='Skill Emphasis (Force Defense)' type='General' />
-    <feat name='Skill Emphasis (Force Grip)' type='General' />
-    <feat name='Skill Emphasis (Force Lightning)' type='General' />
-    <feat name='Skill Emphasis (Force Stealth)' type='General' />
-    <feat name='Skill Emphasis (Force Strike)' type='General' />
-    <feat name='Skill Emphasis (Forgery)' type='General' />
-    <feat name='Skill Emphasis (Friendship)' type='General' />
-    <feat name='Skill Emphasis (Gamble)' type='General' />
-    <feat name='Skill Emphasis (Gather Information)' type='General' />
-    <feat name='Skill Emphasis (Handle Animal)' type='General' />
-    <feat name='Skill Emphasis (Heal Another)' type='General' />
-    <feat name='Skill Emphasis (Heal Self)' type='General' />
-    <feat name='Skill Emphasis (Hide)' type='General' />
-    <feat name='Skill Emphasis (Illusion)' type='General' />
-    <feat name='Skill Emphasis (Intimidate)' type='General' />
-    <feat name='Skill Emphasis (Jump)' type='General' />
-    <feat name='Skill Emphasis (Knowledge)' type='General' />
-    <feat name='Skill Emphasis (Listen)' type='General' />
-    <feat name='Skill Emphasis (Move Object)' type='General' />
-    <feat name='Skill Emphasis (Move Silently)' type='General' />
-    <feat name='Skill Emphasis (Pilot)' type='General' />
-    <feat name='Skill Emphasis (Profession)' type='General' />
-    <feat name='Skill Emphasis (Repair)' type='General' />
-    <feat name='Skill Emphasis (Ride)' type='General' />
-    <feat name='Skill Emphasis (Search)' type='General' />
-    <feat name='Skill Emphasis (See Force)' type='General' />
-    <feat name='Skill Emphasis (Sense Motive)' type='General' />
-    <feat name='Skill Emphasis (Sleight of Hand)' type='General' />
-    <feat name='Skill Emphasis (Spot)' type='General' />
-    <feat name='Skill Emphasis (Survival)' type='General' />
-    <feat name='Skill Emphasis (Swim)' type='General' />
-    <feat name='Skill Emphasis (Telepathy)' type='General' />
-    <feat name='Skill Emphasis (Transfer Essence)' type='General' />
-    <feat name='Skill Emphasis (Treat Injury)' type='General' />
-    <feat name='Skill Emphasis (Tumble)' type='General' />
-    <feat name='Spacer' type='General' />
-    <feat name='Spring Attack' type='General' />
-    <feat name='Stamina' type='General' />
-    <feat name='Starship Dodge (space transport)' type='General' />
-    <feat name='Starship Dodge (starfighter)' type='General' />
-    <feat name='Starship Operation (capital ship)' type='General' />
-    <feat name='Starship Operation (space transport)' type='General' />
-    <feat name='Starship Operation (starfighter)' type='General' />
-    <feat name='Starship Point Blank Shot (capital ship)' type='General' />
-    <feat name='Starship Point Blank Shot (space transport)' type='General' />
-    <feat name='Starship Point Blank Shot (starfighter)' type='General' />
-    <feat name='Steady' type='General' />
-    <feat name='Stealthy' type='General' />
-    <feat name='Summon Storm' type='General' />
-    <feat name='Sunder' type='General' />
-    <feat name='Surgery' type='General' />
-    <feat name='Toughness' type='General' />
-    <feat name='Track' type='General' />
-    <feat name='Trick' type='General' />
-    <feat name='Trustworthy' type='General' />
-    <feat name='Two-weapon Fighting' type='General' />
-    <feat name='Vehicle Dodge' type='General' />
-    <feat name='Weapon Finesse' type='General' />
-    <feat name='Weapon Focus' type='General' />
-    <feat name='Weapons Group Proficiency (blaster pistols)' type='General' />
-    <feat name='Weapons Group Proficiency (blaster rifles)' type='General' />
-    <feat name='Weapons Group Proficiency (heavy weapons)' type='General' />
-    <feat name='Weapons Group Proficiency (primitive weapons)' type='General' />
-    <feat name='Weapons Group Proficiency (simple weapons)' type='General' />
-    <feat name='Weapons Group Proficiency (slug throwers)' type='General' />
-    <feat name='Weapons Group Proficiency (starship weapons)' type='General' />
-    <feat name='Weapons Group Proficiency (vehicle weapons)' type='General' />
-    <feat name='Weapons Group Proficiency (vibro weapons)' type='General' />
-    <feat name='Whirlwind Attack' type='General' />
-    <feat name='Wookiee Brachiation' type='General' />
-    <feat name='Zero-G Training' type='General' />
-</feats>
+<feats>
+    <feat name='Absorb Energy' type='General' />
+    <feat name='Acrobatic' type='General' />
+    <feat name='Advanced Martial Arts' type='General' />
+    <feat name='Alertness' type='General' />
+    <feat name='Alter' type='General' />
+    <feat name='Ambidexterity' type='General' />
+    <feat name='Animal Affinity' type='General' />
+    <feat name='Armor Proficiency (heavy)' type='General' />
+    <feat name='Armor Proficiency (light)' type='General' />
+    <feat name='Armor Proficiency (medium)' type='General' />
+    <feat name='Armor Proficiency (powered)' type='General' />
+    <feat name='Athletic' type='General' />
+    <feat name='Attuned' type='General' />
+    <feat name='Aware' type='General' />
+    <feat name='Blind-fight' type='General' />
+    <feat name='Burst of Speed' type='General' />
+    <feat name='Cautious' type='General' />
+    <feat name='Cleave' type='General' />
+    <feat name='Combat Expertise' type='General' />
+    <feat name='Combat Reflexes' type='General' />
+    <feat name='Compassion' type='General' />
+    <feat name='Control' type='General' />
+    <feat name='Defensive Martial Arts' type='General' />
+    <feat name='Dissipate Energy' type='General' />
+    <feat name='Dodge' type='General' />
+    <feat name='Drain Force' type='General' />
+    <feat name='Endurance' type='General' />
+    <feat name='Exotic Weapon Proficiency (amphistaff)' type='General' />
+    <feat name='Exotic Weapon Proficiency (atlatl)' type='General' />
+    <feat name='Exotic Weapon Proficiency (bowcaster)' type='General' />
+    <feat name='Exotic Weapon Proficiency (cesta)' type='General' />
+    <feat name='Exotic Weapon Proficiency (double lightsaber)' type='General' />
+    <feat name='Exotic Weapon Proficiency (gaderffii)' type='General' />
+    <feat name='Exotic Weapon Proficiency (lightsaber)' type='General' />
+    <feat name='Exotic Weapon Proficiency (lightwhip)' type='General' />
+    <feat name='Exotic Weapon Proficiency (massassi lanvarok)' type='General' />
+    <feat name='Exotic Weapon Proficiency (plaeryin bol)' type='General' />
+    <feat name='Exotic Weapon Proficiency (quills)' type='General' />
+    <feat name='Exotic Weapon Proficiency (riot gun)' type='General' />
+    <feat name='Exotic Weapon Proficiency (san-ni staff)' type='General' />
+    <feat name='Exotic Weapon Proficiency (short lightsaber)' type='General' />
+    <feat name='Exotic Weapon Proficiency (sith lanvarok)' type='General' />
+    <feat name='Exotic Weapon Proficiency (sith sword)' type='General' />
+    <feat name='Exotic Weapon Proficiency (snare rifle)' type='General' />
+    <feat name='Exotic Weapon Proficiency (stinger)' type='General' />
+    <feat name='Exotic Weapon Proficiency (tsaisi)' type='General' />
+    <feat name='Expert Gunner' type='General' />
+    <feat name='Fame' type='General' />
+    <feat name='Far Shot' type='General' />
+    <feat name='Focus' type='General' />
+    <feat name='Force Dodge' type='General' />
+    <feat name='Force Flight' type='General' />
+    <feat name='Force Mastery' type='General' />
+    <feat name='Force Mind' type='General' />
+    <feat name='Force Pilot' type='General' />
+    <feat name='Force Shot' type='General' />
+    <feat name='Force Speed' type='General' />
+    <feat name='Force Whirlwind' type='General' />
+    <feat name='Force-Sensitive' type='General' />
+    <feat name='Frightful Presence' type='General' />
+    <feat name='Gearhead' type='General' />
+    <feat name='Great Cleave' type='General' />
+    <feat name='Great Fortitude' type='General' />
+    <feat name='Guided Shot' type='General' />
+    <feat name='Gunner' type='General' />
+    <feat name='Hatred' type='General' />
+    <feat name='Headstrong' type='General' />
+    <feat name='Heroic Surge' type='General' />
+    <feat name='High Force Mastery' type='General' />
+    <feat name='Improved Bantha Rush' type='General' />
+    <feat name='Improved Critical' type='General' />
+    <feat name='Improved Disarm' type='General' />
+    <feat name='Improved Force Mind' type='General' />
+    <feat name='Improved Initiative' type='General' />
+    <feat name='Improved Martial Arts' type='General' />
+    <feat name='Improved Trip' type='General' />
+    <feat name='Improved Two-weapon Fighting' type='General' />
+    <feat name='Infamy' type='General' />
+    <feat name='Influence' type='General' />
+    <feat name='Iron Will' type='General' />
+    <feat name='Knight Defense' type='General' />
+    <feat name='Knight Mind' type='General' />
+    <feat name='Knight Speed' type='General' />
+    <feat name='Lightning Reflexes' type='General' />
+    <feat name='Lightsaber Defense' type='General' />
+    <feat name='Link' type='General' />
+    <feat name='Low Profile' type='General' />
+    <feat name='Malevolant' type='General' />
+    <feat name='Maneuver Expertise' type='General' />
+    <feat name='Martial Arts' type='General' />
+    <feat name='Master Defense' type='General' />
+    <feat name='Master Mind' type='General' />
+    <feat name='Master Speed' type='General' />
+    <feat name='Mettle' type='General' />
+    <feat name='Mimic' type='General' />
+    <feat name='Mind Trick' type='General' />
+    <feat name='Mobility' type='General' />
+    <feat name='Multishot' type='General' />
+    <feat name='Nimble' type='General' />
+    <feat name='Persuasive' type='General' />
+    <feat name='Pinpoint Accuracy' type='General' />
+    <feat name='Point Blank Shot' type='General' />
+    <feat name='Power Attack' type='General' />
+    <feat name='Precise Shot' type='General' />
+    <feat name='Psychometry' type='General' />
+    <feat name='Quick Draw' type='General' />
+    <feat name='Quickness' type='General' />
+    <feat name='Rage' type='General' />
+    <feat name='Rapid Gunner' type='General' />
+    <feat name='Rapid Shot' type='General' />
+    <feat name='Rugged' type='General' />
+    <feat name='Run' type='General' />
+    <feat name='Sense' type='General' />
+    <feat name='Shapeshifter' type='General' />
+    <feat name='Sharp-eyed' type='General' />
+    <feat name='Shot On The Run' type='General' />
+    <feat name='Sith Sorcery' type='General' />
+    <feat name='Sith Sword Defense' type='General' />
+    <feat name='Sith Sword Expert Defense' type='General' />
+    <feat name='Sith Sword Mastery' type='General' />
+    <feat name='Skill Emphasis (Affect Mind)' type='General' />
+    <feat name='Skill Emphasis (Alchemy)' type='General' />
+    <feat name='Skill Emphasis (Appraise)' type='General' />
+    <feat name='Skill Emphasis (Astrogate)' type='General' />
+    <feat name='Skill Emphasis (Balance)' type='General' />
+    <feat name='Skill Emphasis (Battlemind)' type='General' />
+    <feat name='Skill Emphasis (Bluff)' type='General' />
+    <feat name='Skill Emphasis (Climb)' type='General' />
+    <feat name='Skill Emphasis (Computer Use)' type='General' />
+    <feat name='Skill Emphasis (Control Mind)' type='General' />
+    <feat name='Skill Emphasis (Craft)' type='General' />
+    <feat name='Skill Emphasis (Demolitions)' type='General' />
+    <feat name='Skill Emphasis (Diplomacy)' type='General' />
+    <feat name='Skill Emphasis (Disable Device)' type='General' />
+    <feat name='Skill Emphasis (Disguise)' type='General' />
+    <feat name='Skill Emphasis (Drain Energy)' type='General' />
+    <feat name='Skill Emphasis (Drain Knowledge)' type='General' />
+    <feat name='Skill Emphasis (Empathy)' type='General' />
+    <feat name='Skill Emphasis (Enhance Ability)' type='General' />
+    <feat name='Skill Emphasis (Enhance Senses)' type='General' />
+    <feat name='Skill Emphasis (Entertain)' type='General' />
+    <feat name='Skill Emphasis (Escape Artist)' type='General' />
+    <feat name='Skill Emphasis (Farseeing)' type='General' />
+    <feat name='Skill Emphasis (Fear)' type='General' />
+    <feat name='Skill Emphasis (Force Defense)' type='General' />
+    <feat name='Skill Emphasis (Force Grip)' type='General' />
+    <feat name='Skill Emphasis (Force Lightning)' type='General' />
+    <feat name='Skill Emphasis (Force Stealth)' type='General' />
+    <feat name='Skill Emphasis (Force Strike)' type='General' />
+    <feat name='Skill Emphasis (Forgery)' type='General' />
+    <feat name='Skill Emphasis (Friendship)' type='General' />
+    <feat name='Skill Emphasis (Gamble)' type='General' />
+    <feat name='Skill Emphasis (Gather Information)' type='General' />
+    <feat name='Skill Emphasis (Handle Animal)' type='General' />
+    <feat name='Skill Emphasis (Heal Another)' type='General' />
+    <feat name='Skill Emphasis (Heal Self)' type='General' />
+    <feat name='Skill Emphasis (Hide)' type='General' />
+    <feat name='Skill Emphasis (Illusion)' type='General' />
+    <feat name='Skill Emphasis (Intimidate)' type='General' />
+    <feat name='Skill Emphasis (Jump)' type='General' />
+    <feat name='Skill Emphasis (Knowledge)' type='General' />
+    <feat name='Skill Emphasis (Listen)' type='General' />
+    <feat name='Skill Emphasis (Move Object)' type='General' />
+    <feat name='Skill Emphasis (Move Silently)' type='General' />
+    <feat name='Skill Emphasis (Pilot)' type='General' />
+    <feat name='Skill Emphasis (Profession)' type='General' />
+    <feat name='Skill Emphasis (Repair)' type='General' />
+    <feat name='Skill Emphasis (Ride)' type='General' />
+    <feat name='Skill Emphasis (Search)' type='General' />
+    <feat name='Skill Emphasis (See Force)' type='General' />
+    <feat name='Skill Emphasis (Sense Motive)' type='General' />
+    <feat name='Skill Emphasis (Sleight of Hand)' type='General' />
+    <feat name='Skill Emphasis (Spot)' type='General' />
+    <feat name='Skill Emphasis (Survival)' type='General' />
+    <feat name='Skill Emphasis (Swim)' type='General' />
+    <feat name='Skill Emphasis (Telepathy)' type='General' />
+    <feat name='Skill Emphasis (Transfer Essence)' type='General' />
+    <feat name='Skill Emphasis (Treat Injury)' type='General' />
+    <feat name='Skill Emphasis (Tumble)' type='General' />
+    <feat name='Spacer' type='General' />
+    <feat name='Spring Attack' type='General' />
+    <feat name='Stamina' type='General' />
+    <feat name='Starship Dodge (space transport)' type='General' />
+    <feat name='Starship Dodge (starfighter)' type='General' />
+    <feat name='Starship Operation (capital ship)' type='General' />
+    <feat name='Starship Operation (space transport)' type='General' />
+    <feat name='Starship Operation (starfighter)' type='General' />
+    <feat name='Starship Point Blank Shot (capital ship)' type='General' />
+    <feat name='Starship Point Blank Shot (space transport)' type='General' />
+    <feat name='Starship Point Blank Shot (starfighter)' type='General' />
+    <feat name='Steady' type='General' />
+    <feat name='Stealthy' type='General' />
+    <feat name='Summon Storm' type='General' />
+    <feat name='Sunder' type='General' />
+    <feat name='Surgery' type='General' />
+    <feat name='Toughness' type='General' />
+    <feat name='Track' type='General' />
+    <feat name='Trick' type='General' />
+    <feat name='Trustworthy' type='General' />
+    <feat name='Two-weapon Fighting' type='General' />
+    <feat name='Vehicle Dodge' type='General' />
+    <feat name='Weapon Finesse' type='General' />
+    <feat name='Weapon Focus' type='General' />
+    <feat name='Weapons Group Proficiency (blaster pistols)' type='General' />
+    <feat name='Weapons Group Proficiency (blaster rifles)' type='General' />
+    <feat name='Weapons Group Proficiency (heavy weapons)' type='General' />
+    <feat name='Weapons Group Proficiency (primitive weapons)' type='General' />
+    <feat name='Weapons Group Proficiency (simple weapons)' type='General' />
+    <feat name='Weapons Group Proficiency (slug throwers)' type='General' />
+    <feat name='Weapons Group Proficiency (starship weapons)' type='General' />
+    <feat name='Weapons Group Proficiency (vehicle weapons)' type='General' />
+    <feat name='Weapons Group Proficiency (vibro weapons)' type='General' />
+    <feat name='Whirlwind Attack' type='General' />
+    <feat name='Wookiee Brachiation' type='General' />
+    <feat name='Zero-G Training' type='General' />
+</feats>
--- a/data/SWd20/d20weapons.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/SWd20/d20weapons.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,125 +1,125 @@
-<weapons>
-    <weapon mod="0" name="Amphistaff" cost="5000" category="Exotic Weapon Proficiency (amphistaff)" size="Large" damage="1d6" critical="20" range="0" weight="2" type="Piercing/Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Atlatl" cost="50" category="Exotic Weapon Proficiency (atlatl)" size="Medium" damage="2d4" critical="20" range="0" weight="2" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Cannon)" cost="3000" category="Weapons Group Proficiency (heavy weapons)" size="Large" damage="4d8" critical="19" range="40" weight="18" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Carbine)" cost="900" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d8" critical="19" range="20" weight="2" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (E-Web Repeating)" cost="8000" category="Weapons Group Proficiency (heavy weapons)" size="Large" damage="6d8" critical="19" range="80" weight="38" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Heavy Pistol)" cost="750" category="Weapons Group Proficiency (blaster pistols)" size="Medium" damage="3d8" critical="20" range="8" weight="1" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Heavy Repeating)" cost="4000" category="Weapons Group Proficiency (heavy weapons)" size="Large" damage="4d8" critical="19" range="30" weight="12" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Hold-out)" cost="300" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d4" critical="20" range="4" weight="0" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Light Repeating)" cost="2000" category="Weapons Group Proficiency (blaster rifles)" size="Large" damage="3d8" critical="19" range="40" weight="6" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Pistol)" cost="500" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d6" critical="20" range="10" weight="1" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Rifle, Sporting)" cost="800" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d6" critical="19" range="40" weight="2" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Rifle)" cost="1000" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d8" critical="19" range="40" weight="4" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Blaster (Sporting)" cost="300" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d4" critical="20" range="8" weight="1" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Bow" cost="300" category="Weapons Group Proficiency (primitive weapons)" size="Medium" damage="1d8" critical="20" range="12" weight="1" type="Piercing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Bowcaster" cost="1500" category="Exotic Weapon Proficiency (bowcaster)" size="Large" damage="3d10" critical="19" range="10" weight="8" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Cesta" cost="100" category="Exotic Weapon Proficiency (cesta)" size="Large" damage="2d4" critical="20" range="0" weight="2" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Club/Baton" cost="15" category="Weapons Group Proficiency (simple weapons)" size="Medium" damage="1d6" critical="20" range="0" weight="2" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Combat Gloves" cost="200" category="Weapons Group Proficiency (simple weapons)" size="Medium" damage="+2" critical="0" range="0" weight="1" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Force Pike" cost="500" category="Weapons Group Proficiency (vibro weapons)" size="Large" damage="2d8" critical="20" range="0" weight="2" type="Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Gaderffii" cost="50" category="Exotic Weapon Proficiency (gaderffii)" size="Large" damage="1d8" damage2= "1d6" critical="20" range="0" weight="2" type="Piercing/Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Grenade (Frag)" cost="200" category="Weapons Group Proficiency (simple weapons)" size="Tiny" damage="4d6+1" critical="0" range="4" weight="0" type="Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Grenade (Stun)" cost="250" category="Weapons Group Proficiency (simple weapons)" size="Tiny" damage="-" critical="0" range="4" weight="0" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Ion Gun (Pistol)" cost="250" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d6" critical="20" range="8" weight="1" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Ion Gun (Rifle)" cost="800" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d8" critical="19" range="30" weight="2" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Knife" cost="25" category="Weapons Group Proficiency (simple weapons)" size="Small" damage="1d4" critical="20" range="0" weight="1" type="Piercing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Lightsaber" cost="3000" category="Exotic Weapon Proficiency (lightsaber)" size="Medium" damage="2d8" critical="19" range="0" weight="1" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Lightsaber (Double-bladed)" cost="7000" category="Exotic Weapon Proficiency (double lightsaber)" size="Medium" damage="2d8" damage2="2d8" critical="19" range="0" weight="2" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Net" cost="25" category="Weapons Group Proficiency (primitive weapons)" size="Medium" damage="-" critical="0" range="2" weight="4" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Quarterstaff" cost="65" category="Weapons Group Proficiency (simple weapons)" size="Large" damage="1d6" damage2 = "1d6" critical="20" range="0" weight="1" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Razorbug" cost="0" category="Weapons Group Proficiency (simple weapons)" size="Small" damage="2d6+2" critical="20" range="20" weight="1" type="Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Sling" cost="35" category="Weapons Group Proficiency (primitive weapons)" size="Small" damage="1d4" critical="20" range="6" weight="0" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Slugthrower (Pistol)" cost="275" category="Weapons Group Proficiency (slug throwers)" size="Small" damage="2d6" critical="20" range="10" weight="1" type="Piercing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Slugthrower (Rifle)" cost="300" category="Weapons Group Proficiency (slug throwers)" size="Medium" damage="2d8" critical="20" range="20" weight="4" type="Piercing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Spear" cost="60" category="Weapons Group Proficiency (primitive weapons)" size="Large" damage="1d8" critical="20" range="0" weight="1" type="Piercing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Stun Baton" cost="500" category="Weapons Group Proficiency (simple weapons)" size="Medium" damage="-" critical="20" range="0" weight="1" type="Bludgeoning" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Thermal Detonator" cost="200" category="Weapons Group Proficiency (simple weapons)" size="Tiny" damage="8d6+6" critical="20" range="4" weight="0" type="Energy" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Thud Bug" cost="0" category="Weapons Group Proficiency (simple weapons)" size="Small" damage="2d6" critical="20" range="20" weight="1" type="Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Tsaisi" cost="7500" category="Exotic Weapon Proficiency (tsaisi)" size="Medium" damage="1d6" critical="20" range="0" weight="1" type="Piercing/Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Vibro-Ax" cost="500" category="Weapons Group Proficiency (vibro weapons)" size="Large" damage="2d10" critical="20" range="0" weight="11" type="Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Vibroblade" cost="250" category="Weapons Group Proficiency (vibro weapons)" size="Medium" damage="2d6" critical="20" range="0" weight="2" type="Slashing" >
-    <description ></description >
-    </weapon>
-    <weapon mod="0" name="Vibrodagger" cost="200" category="Weapons Group Proficiency (vibro weapons)" size="Small" damage="2d4" critical="20" range="0" weight="1" type="Slashing" >
-    <description ></description >
-    </weapon>
-</weapons>
+<weapons>
+    <weapon mod="0" name="Amphistaff" cost="5000" category="Exotic Weapon Proficiency (amphistaff)" size="Large" damage="1d6" critical="20" range="0" weight="2" type="Piercing/Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Atlatl" cost="50" category="Exotic Weapon Proficiency (atlatl)" size="Medium" damage="2d4" critical="20" range="0" weight="2" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Cannon)" cost="3000" category="Weapons Group Proficiency (heavy weapons)" size="Large" damage="4d8" critical="19" range="40" weight="18" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Carbine)" cost="900" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d8" critical="19" range="20" weight="2" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (E-Web Repeating)" cost="8000" category="Weapons Group Proficiency (heavy weapons)" size="Large" damage="6d8" critical="19" range="80" weight="38" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Heavy Pistol)" cost="750" category="Weapons Group Proficiency (blaster pistols)" size="Medium" damage="3d8" critical="20" range="8" weight="1" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Heavy Repeating)" cost="4000" category="Weapons Group Proficiency (heavy weapons)" size="Large" damage="4d8" critical="19" range="30" weight="12" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Hold-out)" cost="300" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d4" critical="20" range="4" weight="0" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Light Repeating)" cost="2000" category="Weapons Group Proficiency (blaster rifles)" size="Large" damage="3d8" critical="19" range="40" weight="6" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Pistol)" cost="500" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d6" critical="20" range="10" weight="1" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Rifle, Sporting)" cost="800" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d6" critical="19" range="40" weight="2" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Rifle)" cost="1000" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d8" critical="19" range="40" weight="4" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Blaster (Sporting)" cost="300" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d4" critical="20" range="8" weight="1" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Bow" cost="300" category="Weapons Group Proficiency (primitive weapons)" size="Medium" damage="1d8" critical="20" range="12" weight="1" type="Piercing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Bowcaster" cost="1500" category="Exotic Weapon Proficiency (bowcaster)" size="Large" damage="3d10" critical="19" range="10" weight="8" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Cesta" cost="100" category="Exotic Weapon Proficiency (cesta)" size="Large" damage="2d4" critical="20" range="0" weight="2" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Club/Baton" cost="15" category="Weapons Group Proficiency (simple weapons)" size="Medium" damage="1d6" critical="20" range="0" weight="2" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Combat Gloves" cost="200" category="Weapons Group Proficiency (simple weapons)" size="Medium" damage="+2" critical="0" range="0" weight="1" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Force Pike" cost="500" category="Weapons Group Proficiency (vibro weapons)" size="Large" damage="2d8" critical="20" range="0" weight="2" type="Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Gaderffii" cost="50" category="Exotic Weapon Proficiency (gaderffii)" size="Large" damage="1d8" damage2= "1d6" critical="20" range="0" weight="2" type="Piercing/Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Grenade (Frag)" cost="200" category="Weapons Group Proficiency (simple weapons)" size="Tiny" damage="4d6+1" critical="0" range="4" weight="0" type="Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Grenade (Stun)" cost="250" category="Weapons Group Proficiency (simple weapons)" size="Tiny" damage="-" critical="0" range="4" weight="0" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Ion Gun (Pistol)" cost="250" category="Weapons Group Proficiency (blaster pistols)" size="Small" damage="3d6" critical="20" range="8" weight="1" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Ion Gun (Rifle)" cost="800" category="Weapons Group Proficiency (blaster rifles)" size="Medium" damage="3d8" critical="19" range="30" weight="2" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Knife" cost="25" category="Weapons Group Proficiency (simple weapons)" size="Small" damage="1d4" critical="20" range="0" weight="1" type="Piercing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Lightsaber" cost="3000" category="Exotic Weapon Proficiency (lightsaber)" size="Medium" damage="2d8" critical="19" range="0" weight="1" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Lightsaber (Double-bladed)" cost="7000" category="Exotic Weapon Proficiency (double lightsaber)" size="Medium" damage="2d8" damage2="2d8" critical="19" range="0" weight="2" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Net" cost="25" category="Weapons Group Proficiency (primitive weapons)" size="Medium" damage="-" critical="0" range="2" weight="4" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Quarterstaff" cost="65" category="Weapons Group Proficiency (simple weapons)" size="Large" damage="1d6" damage2 = "1d6" critical="20" range="0" weight="1" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Razorbug" cost="0" category="Weapons Group Proficiency (simple weapons)" size="Small" damage="2d6+2" critical="20" range="20" weight="1" type="Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Sling" cost="35" category="Weapons Group Proficiency (primitive weapons)" size="Small" damage="1d4" critical="20" range="6" weight="0" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Slugthrower (Pistol)" cost="275" category="Weapons Group Proficiency (slug throwers)" size="Small" damage="2d6" critical="20" range="10" weight="1" type="Piercing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Slugthrower (Rifle)" cost="300" category="Weapons Group Proficiency (slug throwers)" size="Medium" damage="2d8" critical="20" range="20" weight="4" type="Piercing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Spear" cost="60" category="Weapons Group Proficiency (primitive weapons)" size="Large" damage="1d8" critical="20" range="0" weight="1" type="Piercing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Stun Baton" cost="500" category="Weapons Group Proficiency (simple weapons)" size="Medium" damage="-" critical="20" range="0" weight="1" type="Bludgeoning" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Thermal Detonator" cost="200" category="Weapons Group Proficiency (simple weapons)" size="Tiny" damage="8d6+6" critical="20" range="4" weight="0" type="Energy" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Thud Bug" cost="0" category="Weapons Group Proficiency (simple weapons)" size="Small" damage="2d6" critical="20" range="20" weight="1" type="Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Tsaisi" cost="7500" category="Exotic Weapon Proficiency (tsaisi)" size="Medium" damage="1d6" critical="20" range="0" weight="1" type="Piercing/Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Vibro-Ax" cost="500" category="Weapons Group Proficiency (vibro weapons)" size="Large" damage="2d10" critical="20" range="0" weight="11" type="Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Vibroblade" cost="250" category="Weapons Group Proficiency (vibro weapons)" size="Medium" damage="2d6" critical="20" range="0" weight="2" type="Slashing" >
+    <description ></description >
+    </weapon>
+    <weapon mod="0" name="Vibrodagger" cost="200" category="Weapons Group Proficiency (vibro weapons)" size="Small" damage="2d4" critical="20" range="0" weight="1" type="Slashing" >
+    <description ></description >
+    </weapon>
+</weapons>
--- a/data/d20/d20armor.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20armor.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,75 +1,75 @@
-<ac>
-<armor  name="Banded mail" cost="250" type="Heavy" maxdex="1" bonus="6" spellfailure="35" checkpenalty="-6" weight="35" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of overlapping strips of metal sewn to a backing of leather and chainmail. The strips cover vulnerable areas, while the chain and leather protect the joints and provide freedom of movement. Straps and buckles distribute the weight evenly. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Breastplate" cost="200" type="Medium" maxdex="3" bonus="5" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
-<description >A breastplate covers the front and back. It comes with a helmet and matching greaves (plates to cover the lower legs). A light suit or skirt of studded leather beneath the breastplate protects limbs without restricting
-movement much.
-</description >
-</armor>
-<armor  name="Buckler" cost="15" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
-<description >This small metal shield is strapped to the forearm, allowing it to be worn and still use the hand. A bow or crossbow can be used without penalty. An off-hand weapon can be used, but a -1 penalty on attack rolls is imposed because of the extra weight on your arm. This penalty stacks with those for fighting with the off hand and, if appropriate, for fighting with two weapons. In any case, if a weapon is used in the off-hand, the character doesn't get the buckler's AC bonus for the rest of the round.
-</description >
-</armor>
-<armor  name="Chainmail" cost="150" type="Medium" maxdex="2" bonus="5" spellfailure="30" checkpenalty="-5" weight="40" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of interlocking metal rings. It includes a layer of quilted fabric underneath it to prevent chafing and to cushion the impact of blows. Several layers of mail are hung over vital areas. Most of the armor's weight hangs from the shoulders, making chainmail uncomfortable to wear for long periods of time. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Chainshirt" cost="100" type="Light" maxdex="4" bonus="4" spellfailure="20" checkpenalty="-2" weight="25" speed="30" speed20="20" speed30="30" >
-<description >A shirt of chainmail protects the torso while leaving the limbs free and mobile. A layer of quilted fabric underneath it prevents chafing and cushions the impact of blows. It comes with a steel cap.
-</description >
-</armor>
-<armor  name="Full Plate" cost="1500" type="Heavy" maxdex="1" bonus="8" spellfailure="35" checkpenalty="-6" weight="50" speed="20" speed20="15" speed30="20" >
-<description >This armor consists of shaped and fitted metal plates riveted and interlocked to cover the entire body. It includes gauntlets, heavy leather boots, and a visored helmet.
-</description >
-</armor>
-<armor  name="Half-Plate" cost="600" type="Heavy" maxdex="0" bonus="7" spellfailure="40" checkpenalty="-7" weight="50" speed="20" speed20="15" speed30="20" >
-<description >This armor is a combination of chainmail with metal plates (breastplate, epaulettes, elbow guards, gauntlets, tasses, and greaves) covering vital areas. Buckles and straps hold the whole suit together and distribute the weight, but the armor still hangs more loosely than full plate. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Hide" cost="15" type="Medium" maxdex="4" bonus="3" spellfailure="20" checkpenalty="-3" weight="25" speed="20" speed20="15" speed30="20" >
-<description >This armor is prepared from multiple layers of leather and animal hides. It is stiff and hard to move in.
-</description >
-</armor>
-<armor  name="Large SteelShield" cost="20" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="15" speed="30" speed20="20" speed30="30" >
-<description >A large shield is too heavy to use the shield hand for anything else.
-</description >
-</armor>
-<armor  name="Large Wooden Shield" cost="7" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="10" speed="30" speed20="20" speed30="30" >
-<description >A large shield is too heavy to use the shield hand for anything else.
-</description >
-</armor>
-<armor  name="Leather" cost="10" type="Light" maxdex="6" bonus="2" spellfailure="10" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
-<description >The breastplate and shoulder protectors of this armor are made of leather that has been stiffened by boiling in oil. The rest of the armor is softer and more flexible leather.
-</description >
-</armor>
-<armor  name="Padded" cost="5" type="Light" maxdex="8" bonus="1" spellfailure="5" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
-<description >Padded armor features quilted layers of cloth and batting.
-</description >
-</armor>
-<armor  name="Samll Steel Shield" cost="9" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="6" speed="30" speed20="20" speed30="30" >
-<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
-</description >
-</armor>
-<armor  name="Scale Mail" cost="50" type="Medium" maxdex="3" bonus="4" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
-<description >This is a coat and leggings (and perhaps a separate skirt) of leather covered with overlapping pieces of metal, much like the scales of a fish. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Small Wooden Shield" cost="300" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
-<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
-</description >
-</armor>
-<armor  name="Splint mail" cost="200" type="Heavy" maxdex="0" bonus="6" spellfailure="40" checkpenalty="-7" weight="45" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of narrow vertical strips of metal riveted to a backing of leather that is worn over cloth padding. Flexible chainmail protects the joints. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Studded Leather" cost="25" type="Light" maxdex="5" bonus="3" spellfailure="15" checkpenalty="-1" weight="20" speed="30" speed20="20" speed30="30" >
-<description >This armor is made from tough but flexible leather (not hardened leather as with normal leather armor) reinforced with close-set metal rivets.
-</description >
-</armor>
-<armor  name="Tower Shield" cost="30" type="Shield" maxdex="100" bonus="0" spellfailure="50" checkpenalty="-10" weight="45" speed="30" speed20="20" speed30="30" >
-<description >This massive wooden shield is nearly as tall as the wielder. Basically, it is a portable wall meant to provide cover. It can provide up to total cover, depending on how far a character comes out from behind it. A tower shield, however, does not provide cover against targeted spells; a spellcaster can cast a spell on a character by targeting the shield. A tower shield cannot be used for the shield bash action.
-</description >
-</armor>
-</ac>
+<ac>
+<armor  name="Banded mail" cost="250" type="Heavy" maxdex="1" bonus="6" spellfailure="35" checkpenalty="-6" weight="35" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of overlapping strips of metal sewn to a backing of leather and chainmail. The strips cover vulnerable areas, while the chain and leather protect the joints and provide freedom of movement. Straps and buckles distribute the weight evenly. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Breastplate" cost="200" type="Medium" maxdex="3" bonus="5" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
+<description >A breastplate covers the front and back. It comes with a helmet and matching greaves (plates to cover the lower legs). A light suit or skirt of studded leather beneath the breastplate protects limbs without restricting
+movement much.
+</description >
+</armor>
+<armor  name="Buckler" cost="15" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
+<description >This small metal shield is strapped to the forearm, allowing it to be worn and still use the hand. A bow or crossbow can be used without penalty. An off-hand weapon can be used, but a -1 penalty on attack rolls is imposed because of the extra weight on your arm. This penalty stacks with those for fighting with the off hand and, if appropriate, for fighting with two weapons. In any case, if a weapon is used in the off-hand, the character doesn't get the buckler's AC bonus for the rest of the round.
+</description >
+</armor>
+<armor  name="Chainmail" cost="150" type="Medium" maxdex="2" bonus="5" spellfailure="30" checkpenalty="-5" weight="40" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of interlocking metal rings. It includes a layer of quilted fabric underneath it to prevent chafing and to cushion the impact of blows. Several layers of mail are hung over vital areas. Most of the armor's weight hangs from the shoulders, making chainmail uncomfortable to wear for long periods of time. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Chainshirt" cost="100" type="Light" maxdex="4" bonus="4" spellfailure="20" checkpenalty="-2" weight="25" speed="30" speed20="20" speed30="30" >
+<description >A shirt of chainmail protects the torso while leaving the limbs free and mobile. A layer of quilted fabric underneath it prevents chafing and cushions the impact of blows. It comes with a steel cap.
+</description >
+</armor>
+<armor  name="Full Plate" cost="1500" type="Heavy" maxdex="1" bonus="8" spellfailure="35" checkpenalty="-6" weight="50" speed="20" speed20="15" speed30="20" >
+<description >This armor consists of shaped and fitted metal plates riveted and interlocked to cover the entire body. It includes gauntlets, heavy leather boots, and a visored helmet.
+</description >
+</armor>
+<armor  name="Half-Plate" cost="600" type="Heavy" maxdex="0" bonus="7" spellfailure="40" checkpenalty="-7" weight="50" speed="20" speed20="15" speed30="20" >
+<description >This armor is a combination of chainmail with metal plates (breastplate, epaulettes, elbow guards, gauntlets, tasses, and greaves) covering vital areas. Buckles and straps hold the whole suit together and distribute the weight, but the armor still hangs more loosely than full plate. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Hide" cost="15" type="Medium" maxdex="4" bonus="3" spellfailure="20" checkpenalty="-3" weight="25" speed="20" speed20="15" speed30="20" >
+<description >This armor is prepared from multiple layers of leather and animal hides. It is stiff and hard to move in.
+</description >
+</armor>
+<armor  name="Large SteelShield" cost="20" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="15" speed="30" speed20="20" speed30="30" >
+<description >A large shield is too heavy to use the shield hand for anything else.
+</description >
+</armor>
+<armor  name="Large Wooden Shield" cost="7" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="10" speed="30" speed20="20" speed30="30" >
+<description >A large shield is too heavy to use the shield hand for anything else.
+</description >
+</armor>
+<armor  name="Leather" cost="10" type="Light" maxdex="6" bonus="2" spellfailure="10" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
+<description >The breastplate and shoulder protectors of this armor are made of leather that has been stiffened by boiling in oil. The rest of the armor is softer and more flexible leather.
+</description >
+</armor>
+<armor  name="Padded" cost="5" type="Light" maxdex="8" bonus="1" spellfailure="5" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
+<description >Padded armor features quilted layers of cloth and batting.
+</description >
+</armor>
+<armor  name="Samll Steel Shield" cost="9" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="6" speed="30" speed20="20" speed30="30" >
+<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
+</description >
+</armor>
+<armor  name="Scale Mail" cost="50" type="Medium" maxdex="3" bonus="4" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
+<description >This is a coat and leggings (and perhaps a separate skirt) of leather covered with overlapping pieces of metal, much like the scales of a fish. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Small Wooden Shield" cost="300" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
+<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
+</description >
+</armor>
+<armor  name="Splint mail" cost="200" type="Heavy" maxdex="0" bonus="6" spellfailure="40" checkpenalty="-7" weight="45" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of narrow vertical strips of metal riveted to a backing of leather that is worn over cloth padding. Flexible chainmail protects the joints. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Studded Leather" cost="25" type="Light" maxdex="5" bonus="3" spellfailure="15" checkpenalty="-1" weight="20" speed="30" speed20="20" speed30="30" >
+<description >This armor is made from tough but flexible leather (not hardened leather as with normal leather armor) reinforced with close-set metal rivets.
+</description >
+</armor>
+<armor  name="Tower Shield" cost="30" type="Shield" maxdex="100" bonus="0" spellfailure="50" checkpenalty="-10" weight="45" speed="30" speed20="20" speed30="30" >
+<description >This massive wooden shield is nearly as tall as the wielder. Basically, it is a portable wall meant to provide cover. It can provide up to total cover, depending on how far a character comes out from behind it. A tower shield, however, does not provide cover against targeted spells; a spellcaster can cast a spell on a character by targeting the shield. A tower shield cannot be used for the shield bash action.
+</description >
+</armor>
+</ac>
--- a/data/d20/d20classes.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20classes.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,608 +1,608 @@
-<classes>
-<class level="1" name="Arcane Archer" hd="d8" >
-<requirements>Race: Elf or half-elf.
-Base Attack Bonus: +6.
-Feats: Weapon Focus (any bow other than a crossbow), Point Blank Shot, Precise Shot.
-Spellcasting: Ability to cast 1st-level arcane spells.</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>An arcane archer is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
-<features>Enchant Arrow: At 1st level, every nonmagical arrow an arcane archer nocks and lets fly becomes enchanted, gaining a +1 enhancement bonus. An archer's magic arrows only function for her. For every two levels of arcane archer the character advances past 1st level in the prestige class, the magic arrows she creates gain +1 greater potency.
-
-Imbue Arrow: At 2nd level, an arcane archer gains this spell-like ability, allowing her to place an area spell upon an arrow. When the arrow is fired, the spell's area is centered upon where the arrow lands, even if the spell could normally be centered only on the caster. This ability allows the archer to use the bow's range rather than the spell's range. It takes a standard action to cast the spell and fire the arrow. The arrow must be fired in the round the spell is cast, or the spell is wasted.
-
-Seeker Arrow: At 4th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target, even around corners. Only an unavoidable obstacle or the end of the arrow's range prevents the arrow's flight. This ability negates cover and concealment modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
-
-Phase Arrow: At 6th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target in a straight path, passing through any nonmagical barrier or wall in its way. (A wall of force, a wall of fire, or the like stops the arrow.) This ability negates cover, concealment, and even armor modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
-
-Hail of Arrows: In lieu of her regular attacks, once per day the 8th-level arcane archer can fire an arrow at each and every target within range, to a maximum of one target for every arcane archer level she has earned. Each attack uses the archer's primary attack bonus, and each enemy may only be targeted by a single arrow. This is a spell-like ability.
-
-Arrow of Death: At 10th level, the arcane archer can enchant an arrow of death that forces the target, if damaged by the arrow's attack, to make a Fortitude save (DC 20) or be slain immediately. It takes one day to create an arrow of death, and the arrow only functions for the arcane archer who created it. The enchantment lasts no longer than one year, and the archer can only have one such arrow in existence at a time.</features>
-</class>
-<class level="1" name="Assassin" hd="d6" >
-<requirements>Move Silently: 8 ranks.
-Hide: 8 ranks.
-Disguise: 4 ranks.
-Special: In addition, he must kill someone for no other reason than to join the assassins.</requirements>
-<alignment>Evil</alignment>
-<wa_proficiency>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.</wa_proficiency>
-<features>Sneak Attack: Any time the assassin's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the assassin's attack deals +1d6 points of damage. This extra damage increases by +1d6 points every other level (+2d6 at 3rd level, +3d6 at 5th level, and so on). Should the assassin score a critical hit with a sneak attack, this extra damage is not multiplied.
-
-It takes precision and penetration to hit a vital spot, so ranged attacks can only count as sneak attacks if the target is 30 feet away or less.
-
-With a sap or an unarmed strike, the assassin can make a sneak attack that deals subdual damage instead of normal damage. He cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty, because he must make optimal use of his weapon in order to execute the sneak attack.
-
-An assassin can only sneak attack living creatures with discernible anatomies-undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is similarly immune to sneak attacks. Also, the assassin must also be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The assassin cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
-
-If an assassin gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
-
-Death Attack: If the 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 her Fortitude saving throw (DC 10 + the assassin's class level + the assassin's Intelligence 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 completely 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.
-
-Poison Use: Assassins are trained in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
-
-Spells: Beginning at 1st level, an assassin gains the ability to cast a small number of arcane spells. To cast a spell, the assassin must have an Intelligence score of at least 10 + the spell's level, so an assassin with an Intelligence of 10 or lower cannot cast these spells. Assassin bonus spells are based on Intelligence, and saving throws against these spells have a DC of 10 + spell level + the assassin's Intelligence modifier (if any). When the assassin gets 0 spells of a given level, such as 0 1st-level spells at 1st level, the assassin gets only bonus spells. An assassin without a bonus spell for that level cannot yet cast a spell of that level. The assassin's spell list appears below. An assassin prepares and casts spells just as a wizard does.
-
-Saving Throw Bonus 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 levels the assassin gains (+1 at 2nd level, +2 at 4th level, +3 at 6th level, and so on).
-
-Uncanny Dodge: Starting at 2nd level, the assassin 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 his Dexterity bonus to AC if immobilized.)
-
-At 5th level, the 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).
-
-At 10th level, the assassin gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
-
-If the assassin has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
-
-Assassins choose their spells from the following list:
-
-1st level-change self, detect poison, ghost sound, obscuring mist, spider climb.
-2nd level-alter self, darkness, pass without trace, undetectable alignment.
-3rd level-deeper darkness, invisibility, misdirection, nondetection.
-4th level-dimension door, freedom of movement, improved invisibility, poison.</features>
-</class>
-<class level="1" name="Barbarian" hd="d12" >
-<requirements>None</requirements>
-<alignment>Nonlawful</alignment>
-<wa_proficiency>A barbarian is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
-<features>Barbarian Rage: Barbarian temporarily gains +4 to Strength, +4 to Constitution, and a +2 morale bonus on Will saves, but suffers a -2 penalty to AC.
-
-The increase in Constitution increases the barbarian's hit points by 2 points per level, but these hit points go away at the end of the rage when the Constitution score drops back to normal. While raging, a barbarian cannot use skills or abilities that require patience and concentration. (The only class skills he can't use while raging are Craft, Handle Animal, and Intuit Direction.) He can use any feat he might have except for Expertise, item creation feats, metamagic feats, and Skill Focus (if it's tied to a skill that requires patience or concentration).
-
-A fit of rage lasts for a number of rounds equal to 3 + the character's (newly improved) Constitution modifier. The barbarian may prematurely end the rage voluntarily. At the end of the rage, the barbarian is fatigued (-2 to Strength, -2 to Dexterity, can't charge or run) for the duration of that encounter (unless the barbarian is 20th level, when this limitation no longer applies). The barbarian can only fly into a rage once per encounter, and only a certain number of times per day (determined by level). Entering a rage takes no time itself, but the barbarian can only do it during his action.
-
-Starting at 15th level, the barbarian's rage bonuses become +6 to Strength, +6 to Constitution, and a +3 morale bonus to Will saves. (The AC penalty remains at -2.)
-
-Fast Movement: The barbarian has a speed faster than the norm for his race by +10 feet when wearing no armor, light armor, or medium armor (and not carrying a heavy load).
-
-Uncanny Dodge: At 2nd level and above, the barbarian retains his Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
-
-At 5th level, the barbarian can no longer be flanked. The exception to this defense is that a rogue at least four levels higher than the barbarian can still flank.
-
-At 10th level, the barbarian gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 13th level, these bonuses rise to +2. At 16th, they rise to +3, and at 19th they rise to +4.
-
-Damage Reduction: Starting at 11th level, the barbarian gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 1 from the damage the barbarian takes each time the barbarian is dealt damage. At 14th level, this damage reduction rises to 2. At 17th, it rises to 3. At 20th, it rises to 4. Damage reduction can reduce damage to 0 but not below 0.
-
-Illiteracy: Barbarians are the only characters that do not automatically know how to read and write. A barbarian must spend 2 skill points to gain the ability to read and write any language the barbarian is able to speak.
-
-Ex-Barbarians: A barbarian who becomes lawful loses the ability to rage and cannot gain more levels as a barbarian. The barbarian retains all the other benefits of the class.</features>
-</class>
-<class level="1" name="Bard" hd="d6" >
-<requirements>None</requirements>
-<alignment>Nonlawful</alignment>
-<wa_proficiency>A bard is proficient with all simple weapons. Additionally, the bard is proficient with one of the following weapons: longbow, composite longbow, longsword, rapier, sap, short composite bow, short sword, shortbow, or whip. Bards are proficient with light armor, medium armor, and shields.</wa_proficiency>
-<features>Spells: A bard casts arcane spells. The bard casts these spells without needing to memorize them beforehand or keep a spellbook. Bards receive bonus spells for high Charisma, and to cast a spell a bard must have a Charisma score at least equal to 10 + the level of the spell. The Difficulty Class for a saving throw against a bard's spell is 10 + the spell's level + the bard's Charisma modifier.
-
-Bardic Music: Once per day per level, a bard can use song or poetics to produce magical effects on those around him or her. While these abilities fall under the category of bardic music, they can include reciting poetry, chanting, singing lyrical songs, singing melodies, whistling, playing an instrument, or playing an instrument in combination with some spoken performance. As with casting a spell with a verbal component, a deaf bard suffers a 20% chance to fail with bardic music. If the bard fails, the attempt still counts against the daily limit.
-
-The Bardic Music effects are:
-
-* Inspire Courage: A bard with 3 or more ranks in Perform can to inspire courage in his or her allies. To be affected, an ally must hear the bard sing for a full round. The effect lasts as long as the bard sings and for 5 rounds after the bard stops singing (or 5 rounds after the ally can no longer hear the bard). While singing, the bard can fight but cannot cast spells, activate magic items by spell completion (such as scrolls), or activate magic items by magic word (such as wands). Affected allies receive a +2 morale bonus to saving throws against charm and fear effects and a +1 morale bonus to attack and weapon damage rolls. Inspire courage is a supernatural, mind-affecting ability.
-
-* Countersong: A bard with 3 or more ranks in Perform can counter magical effects that depend on sound (but not spells that simply have verbal components). As with inspire courage, a bard may sing, play, or recite a countersong while taking other mundane actions, but not magical actions. Each round of the countersong, the bard makes a Perform check. Any creature within 30 feet of the bard (including the bard) who is affected by a sonic or language-dependent magical attack may use the bard's Perform check result in place of his saving throw if, after rolling the saving throw, the Perform check result proves to be better. The bard may keep up the countersong for 10 rounds. Countersong is a supernatural ability.
-
-* Fascinate: A bard with 3 or more ranks in Perform can cause a single creature to become fascinated with him. The creature to be fascinated must be able to see and hear the bard and must be within 90 feet. The bard must also see the creature. The creature must be able to pay attention to the bard. The distraction of a nearby combat or other dangers prevents the ability from working. The bard makes a Perform check, and the target can negate the effect with a Will saving throw equal to or greater than the bard's check result. If the saving throw succeeds, the bard cannot attempt to fascinate that creature again for 24 hours. If the saving throw fails, the creature sits quietly and listens to the song for up to 1 round per level of the bard. While fascinated, the target's Spot and Listen checks suffer a -4 penalty. Any potential threat (such as an ally of the bard moving behind the fascinated creature) allows the fascinated creature a second saving throw against a new Perform check result. Any obvious threat, such as casting a spell, drawing a sword, or aiming, automatically breaks the effect.
-
-While fascinating (or attempting to fascinate) a creature, the bard must concentrate, as if casting or maintaining a spell. Fascinate is a spell-like, mind- affecting charm ability.
-
-* Inspire Competence: A bard with 6 or more ranks in Perform can help an ally succeed at a task. The ally must be able to see and hear the bard and must be within 30 feet. The bard must also see the creature. The ally gets a +2 competence bonus on his skill checks with a particular skill as long as he or she continues to hear the bard's music. The DM may rule that certain uses of this ability are infeasible. The bard can maintain the effect for 2 minutes (long enough for the ally to take 20). Inspire competence is a supernatural, mind-affecting ability.
-
-* Suggestion: A bard with 9 or more ranks in Perform can make a suggestion (as the spell) to a creature that he has already fascinated (see above). The suggestion doesn't count against the bard's daily limit on bardic music performances (one per day per level), but the fascination does. A Will saving throw (DC 13 + the bard's Charisma modifier) negates the effect. Suggestion is a spell-like, mind-affecting charm ability.
-
-* Inspire Greatness: A bard with 12 or more ranks in Perform can inspire greatness in another creature. For every three levels the bard attains beyond 9th, the bard can inspire greatness in one additional creature. To inspire greatness, the bard must sing and the creature must hear the bard sing for a full round, as with inspire courage. The creature must also be within 30 feet. A creature inspired with greatness gains temporary Hit Dice, attack bonuses, and saving throw bonuses as long as he or she hears the bard continue to sing and for 5 rounds thereafter. (All these bonuses are competence bonuses.)
-
-The target gains the following boosts:
-* +2 Hit Dice (d10s that grant temporary hit points).
-* +2 competence bonus on attacks.
-* +1 competence bonus on Fortitude saves.
-
-Apply the target's Constitution modifier, if any, to each bonus Hit Die. These extra Hit Dice count as regular Hit Dice for determining effects such as the sleep spell. Inspire greatness is a supernatural, mind-affecting enchantment ability.
-
-Bardic Knowledge: A bard may make a special bardic knowledge check with a bonus equal to his level + his Intelligence modifier to see whether he knows some relevant information about local notable people, legendary items, or noteworthy places. This check will not reveal the powers of a magic item but may give a hint as to its general function. The bard may not take 10 or take 20 on this check; this sort of knowledge is essentially random. The DM will determine the Difficulty Class of the check by referring to the table below. DC      Type of Knowledge
---      -----------------10      Common, known by at least a substantial minority of the local population.
-20      Uncommon but available, known by only a few people in the area.
-25      Obscure, known by few, hard to come by.
-30      Extremely obscure, known by very few, possibly forgotten by most who once knew it, possibly known only by those who don't understand the significance of the knowledge.
-
-Ex-Bards: A bard who becomes lawful in alignment cannot progress in levels as a bard, though he retains all his bard abilities.</features>
-</class>
-<class level="1" name="Blackguard" hd="d10" >
-<requirements>Base Attack Bonus: +6.
-Knowledge (religion): 2 ranks.
-Hide: 5 ranks.
-Feats: Cleave, Sunder.
-Special: The blackguard must have made peaceful contact with an evil outsider who was summoned by him or someone else to have contracted the taint of true evil.</requirements>
-<alignment>Any Evil</alignment>
-<wa_proficiency>Blackguards are proficient with all simple and martial weapons, with all types of armor, and with shields.</wa_proficiency>
-<features>Detect Good: At will, the blackguard can detect good as a spell-like ability. This ability duplicates the effects of the spell detect good.
-
-Poison Use: Blackguards are skilled in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
-
-Dark Blessing: A blackguard applies his Charisma modifier (if positive) as a bonus to all saving throws.
-
-Spells: Beginning at 1st level, a blackguard gains the ability to cast a small number of divine spells. To cast a spell, the 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 of a given level, such as 0 1st-level spells at 1st level, he gets only bonus spells. (A blackguard without a bonus spell for that level cannot yet cast a spell of that 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 like a cleric. A blackguard prepares and casts spells just as a cleric does (though the blackguard cannot spontaneously cast cure or inflict spells).
-
-Smite Good: 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 the blackguard accidentally smites a creature that is not good, the smite has no effect but it is still used up for that day. Smite good is a supernatural ability.
-
-Aura of Despair: Beginning at 3rd level, the blackguard radiates a malign aura that causes enemies within 10 feet of him to suffer a -2 morale penalty on all saving throws. Aura of despair is a supernatural ability.
-
-Command Undead: 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: If a blackguard can catch an opponent when she is unable to defend herself effectively from his attack, he can strike a vital spot for extra damage. Basically, any time the blackguard's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the blackguard's attack deals +1d6 points of damage at 4th level and an additional +1d6 points for every three levels thereafter (+2d6 at 7th level, +3d6 at 10th level, and so on). Should the blackguard score a critical hit with a sneak attack, this extra damage is not multiplied.
-
-Ranged attacks only count as sneak attacks if the target is 30 feet away or less. A blackguard cannot make a sneak attack to deal subdual damage. The blackguard must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. He cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
-
-A blackguard can only sneak attack living creatures with discernible anatomies. Undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is not subject to sneak attacks.
-
-If a blackguard gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
-
-Blackguards choose their spells from the following list:
-
-1st level-cause fear, cure light wounds, doom, inflict light wounds, magic weapon, summon monster I*.
-2nd level-bull's strength, cure moderate wounds, darkness, death knell, inflict moderate wounds, shatter, summon monster II*.
-3rd level-contagion, cure serious wounds, deeper darkness, inflict serious wounds, protection from elements, summon monster III*.
-4th level-cure critical wounds, freedom of movement, inflict critical wounds, poison, summon monster IV*.
-
-*Evil creatures only.
-
-Fallen Paladins
-
-Blackguards who possess levels of paladin (that is to say, are now ex-paladins) gain extra abilities the more levels of paladin they possess. Those who have tasted the light of goodness and justice and turned away make the foulest villains.</features>
-</class>
-<class level="1" name="Cleric" hd="d8" >
-<requirements>None</requirements>
-<alignment>Varies by deity. A cleric's alignment must be within one step of his deity's, and it may not be neutral unless the deity's alignment is neutral.</alignment>
-<wa_proficiency>Clerics are proficient with all simple weapons. Clerics are proficient with all types of armor (light, medium, and heavy) and with shields.</wa_proficiency>
-<features>Some deities have favored weapons, and clerics consider it a point of pride to wield them. A cleric whose deity's favored weapon is a martial weapon and who chooses War as one of his domains receives the Martial Weapon Proficiency feat related to that weapon for free, as well as the Weapon Focus feat related to that weapon.
-
-Spells: A cleric casts divine spells. A cleric may prepare and cast any spell on the cleric spell list, provided he can cast spells of that level. The Difficulty Class for a saving throw against a cleric's spell is 10 + the spell's level + the cleric's Wisdom modifier.
-
-Each cleric must choose a time at which he must spend an hour each day in quiet contemplation or supplication to regain his daily allotment of spells. Time spent resting has no effect on whether a cleric can prepare spells.
-
-In addition to his standard spells, a cleric gets one domain spell of each spell level, starting at 1st. When a cleric prepares a domain spell, it must come from one of his two domains.
-
-Deity, Domains, and Domain Spells: Choose a deity for your cleric. The cleric's deity influences his alignment, what magic he can perform, his values, and how others see him.
-
-Choose two from among the deity's domains for your cleric's domains. You can only select an alignment domain (such as Good) for your cleric if his alignment matches that domain.
-
-If your cleric is not devoted to a particular deity, you still select two domains to represent his spiritual inclinations and abilities (but the restriction on alignment domains still applies).
-
-Each domain gives your cleric access to a domain spell at each spell level, from 1st on up, as well as a granted power. Your cleric gets the granted powers of all the domains selected. With access to two domain spells at a given spell level, a cleric prepares one or the other each day. If a domain spell is not on the Cleric Spells list, a cleric can only prepare it in his domain slot.
-
-Spontaneous Casting: Good clerics (and neutral clerics of good deities) can channel stored spell energy into healing spells that they haven't prepared ahead of time. The cleric can "lose" a prepared spell in order to cast any cure spell of the same level or lower (a cure spell is any spell with "cure" in its name).
-
-An evil cleric (or a neutral cleric of an evil deity), on the other hand, can't convert prepared spells to cure spells but can convert them to inflict spells (an inflict spell is one with "inflict" in the title).
-
-A cleric who is neither good nor evil and whose deity is neither good nor evil can convert spells either to cure spells or to inflict spells (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric turns or commands undead (see below).
-
-A cleric can't use spontaneous casting to convert domain spells into cure or inflict spells. These spells arise from the particular powers of the cleric's deity, not divine energy in general.
-
-Chaotic, Evil, Good, and Lawful Spells: A cleric can't cast spells of an alignment opposed to his own or to his deity's.
-
-Turn or Rebuke Undead: A good cleric (or a neutral cleric who worships a good deity) has the supernatural ability to turn undead. Evil clerics (and neutral clerics who worship evil deities) can rebuke such creatures. Neutral clerics of neutral deities can do one or the other (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric can cast spontaneous cure or inflict spells (see above).
-
-A cleric may attempt to turn or rebuke undead a number of times per day equal to three plus his Charisma modifier.
-
-Extra Turning: As a feat, a cleric may take Extra Turning. This feat allows the cleric to turn undead four more times per day than normal. A cleric can take this feat multiple times, gaining four extra daily turning attempts each time.
-
-Bonus Languages: A cleric's list of bonus languages includes Celestial, Abyssal, and Infernal, in addition to the bonus languages available to the character because of his race.
-
-Ex-Clerics: A cleric who grossly violates the code of conduct expected by his god (generally acting in ways opposed to the god's alignment or purposes) loses all spells and class features and cannot gain levels as a cleric of that god until he atones.</features>
-</class>
-<class level="1" name="Druid" hd="d8" >
-<requirements>None</requirements>
-<alignment>Neutral good, lawful neutral, neutral, chaotic neutral, or neutral evil.</alignment>
-<wa_proficiency>Druids are proficient with the following weapons: club, dagger, dart, halfspear, longspear, quarterstaff, scimitar, sickle, shortspear, and sling. Their spiritual oaths prohibit them from using weapons other than these. They are proficient with light and medium armors but are prohibited from wearing metal armor (thus, they may wear only padded, leather, or hide armor). They are skilled with shields but must use only wooden ones. </wa_proficiency>
-<features>A druid who wears prohibited armor or wields a prohibited weapon is unable to use any of her magical powers while doing so and for 24 hours thereafter. (Note: A druid can use wooden items that have been altered by the ironwood spell so that they function as though they were steel.)
-
-Spells: A druid casts divine spells. A druid may prepare and cast any spell on the druid spell list provided she can cast spells of that level. She prepares and casts spells the way a cleric does (though she cannot lose a prepared spell to cast a cure spell in its place). To prepare or cast a spell, a druid must have a Wisdom score of at least 10 + the spell's level. The Difficulty Class for a saving throw against a druid's spell is 10 + the spell's level + the druid's Wisdom modifier. Bonus spells for druids are based on Wisdom.
-
-Chaotic, Evil, Good, and Lawful Spells: A druid can't cast spells of an alignment opposed to her own.
-
-Bonus Languages: A druid may substitute Sylvan for one of the bonus languages available to her. In addition, a druid knows the Druidic language. This secret language is known only to druids, and druids are forbidden from teaching it to nondruids. Druidic has its own alphabet.
-
-Nature Sense: A druid can identify plants and animals (their species and special traits) with perfect accuracy. The druid can determine whether water is safe to drink or dangerous.
-
-Animal Companion: A 1st-level druid may begin play with an animal companion. This animal is one that the druid has befriended with the spell animal friendship.
-
-Woodland Stride: Starting at 2nd level, a druid may move through natural thorns, briars, overgrown areas, and similar terrain at his or her normal speed and without suffering damage or other impairment. However, thorns, briars, and overgrown areas that are enchanted or magically manipulated to impede motion still affect the druid.
-
-Trackless Step: Starting at 3rd level, a druid leaves no trail in natural surroundings and cannot be tracked.
-
-Resist Nature's Lure: Starting at 4th level, a druid gains a +4 bonus to saving throws against the spell-like abilities of feys.
-
-Wild Shape: At 5th level, a druid gains the spell-like ability to polymorph self into a Small or Medium-size animal (but not a dire animal) and back again once per day. Unlike the standard use of the spell, however, the druid may only adopt one form. As stated in the spell description, the druid regains hit points as if he or she has rested for a day. The druid does not risk the standard penalty for being disoriented while in the wild shape.
-
-The druid can use this ability more times per day at 6th, 7th, 10th, 14th, and 18th level, as noted. In addition, the druid gains the ability to take the shape of a Large animal at 8th level, a Tiny animal at 11th level, and a Huge animal at 15th level. At 12th level or higher, she can take the form of a dire animal.
-
-At 16th level or higher, the druid may use wild shape to change into a Small, Medium-size, or Large air, earth, fire, or water elemental once per day. The druid gains all the elemental's special abilities. At 18th level, the druid can do this three times per day.
-
-Venom Immunity: At 9th level, a druid gains immunity to all organic poisons, including monster poisons but not mineral poisons or poison gas.
-
-A Thousand Faces: At 13th level, a druid gains the supernatural ability to change his or her appearance at will, as if using the spell alter self.
-
-Timeless Body: After achieving 15th level, a druid no longer suffers ability penalties for aging and cannot be magically aged. Any penalties she may have already suffered, however, remain in place. Bonuses still accrue, and the druid still dies of old age when her time is up.
-
-Ex-Druids: A druid who ceases to revere nature or who changes to a prohibited alignment loses all spells and druidic abilities and cannot gain levels as a druid until she atones.</features>
-</class>
-<class level="1" name="Dwarven Defender" hd="d12" >
-<requirements>Race: Dwarf.
-Base Attack Bonus: +7.
-Feats: Dodge, Endurance, Toughness.</requirements>
-<alignment>Any Lawful</alignment>
-<wa_proficiency>The dwarven defender is proficient with all simple and martial weapons, all types of armor, and shields.</wa_proficiency>
-<features>Defensive Stance: When he needs to, the 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 the following benefits:+2 Strength, +4 Constitution, +2 resistance bonus on all saves, +4 dodge bonus to AC.
-
-While defending, 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 3 rounds, plus the character's (newly improved) Constitution modifier. The defender may end the defense voluntarily prior to this limit. At the end of the defense, the defender is winded and suffers a -2 penalty to Strength for the duration of that encounter. The defender can only take his defensive stance a certain number of times per day as determined by his level. Taking the stance takes no time itself, but the defender can only do so during his action.
-
-Defensive Awareness: Starting at 2nd level, the 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.)
-
-At 5th level, the dwarven defender 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 dwarven defender. The exception to this defense is that a rogue at least 4 levels higher than the dwarven defender can flank him (and thus sneak attack him).
-
-At 10th level, the dwarven defender gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
-
-Defensive awareness is cumulative with uncanny dodge. If the dwarven defender has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant these two abilities and determine the character's defensive awareness ability on that basis.
-
-Damage Reduction: At 6th level, the dwarven defender gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 3 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.)</features>
-</class>
-<class level="1" name="Fighter" hd="d10" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The fighter is proficient in the use of all simple and martial weapons and all armor (heavy, medium, and light) and shields.</wa_proficiency>
-<features>Bonus Feats: At 1st level, the fighter gets a bonus feat in addition to the feat that any 1st-level character gets and the bonus feat granted to humans. The fighter gains an additional bonus feat at 2nd level and every two levels thereafter (4th, 6th, 8th, etc.). These bonus feats must be drawn from the following list: Ambidexterity, Blind-Fight, Combat Reflexes, Dodge (Mobility, Spring Attack), Exotic Weapon Proficiency*, Expertise (Improved Disarm, Improved Trip, Whirlwind Attack), Improved Critical*, Improved Initiative, Improved Unarmed Strike (Deflect Arrows, Stunning Fist), Mounted Combat (Mounted Archery, Trample, Ride-By Attack, Spirited Charge), Point Blank Shot (Far Shot, Precise Shot, Rapid Shot, Shot on the Run), Power Attack (Cleave, Improved Bull Rush, Sunder, Great Cleave), Quick Draw, Two- Weapon Fighting (Improved Two-Weapon Fighting), Weapon Finesse*, Weapon Focus*, Weapon Specialization*.
-
-Some of the bonus feats available to a fighter cannot be acquired until the fighter has gained one or more prerequisite feats; these feats are listed parenthetically after the prerequisite feat. A fighter can select feats marked with an asterisk (*) more than once, but it must be for a different weapon each time. A fighter must still meet all prerequisites for a feat, including ability score and base attack bonus minimums.
-
-Weapon Specialization: On achieving 4th level or higher, as a feat the fighter (and only the fighter) may take Weapon Specialization. Weapon Specialization adds a +2 damage bonus with a chosen weapon. The fighter must have Weapon Focus with that weapon to take Weapon Specialization. If the weapon is a ranged weapon, the damage bonus only applies if the target is within 30 feet, because only at that range can the fighter strike precisely enough to hit more effectively. The fighter may take this feat as a bonus feat or as a regular one.</features>
-</class>
-<class level="1" name="Loremasters" hd="d4" >
-<requirements>Spellcasting: Ability to cast seven different divinations, one of which must be 3rd level or higher.
-Two Knowledge Skills (Any Type): 10 ranks in each.
-Feats: Any three metamagic or item creation feats, plus Skill Focus (Knowledge [any individual Knowledge skill]).</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Loremasters gain no proficiency in any weapon or armor.</wa_proficiency>
-<features>Spells per Day: A loremaster continues training in magic as well as her field of research. Thus, when a new loremaster level is gained, the character gains new spells per day as if she had also gained a level in a 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 (improved chance of controlling or rebuking undead, metamagic or item creation feats, and so on). This essentially means that she adds the level of loremaster to the level of some other spellcasting class the character has, then determines spells per day and caster level accordingly.
-
-If a character had more than one spellcasting class before she became a loremaster, she must decide to which class she adds each level of loremaster for purposes of determining spells per day when she adds the new level.
-
-Secret: In their studies, loremasters stumble upon all sorts of applicable knowledge and secrets. At 1st level and every two levels afterward (3rd, 5th, 7th, and 9th levels), the loremaster chooses one secret from Table: Loremaster Secrets. Her level plus Intelligence modifier determines which secrets she can choose. She can't choose the same secret twice.
-
-Lore: Loremasters gather knowledge. At 2nd level, they gain the ability to know legends or information regarding various topics, just like a bard can with bardic knowledge. The loremaster adds her level and her Intelligence modifier to the Knowledge check. See page 29 in the Player's Handbook for more information on bardic knowledge.
-
-Bonus Languages: Loremasters, in their laborious studies, learn new languages in order to access more knowledge. The loremaster can choose any new language at 4th and 8th level.
-
-Greater Lore: At 6th level, a loremaster gains the ability to identify magic items, as the spell, as an extraordinary ability. She may do this once per item examined.
-
-True Lore: At 10th level, once per day a loremaster can use her knowledge to gain the effects of a legend lore spell or an analyze dweomer spell. True lore is an extraordinary ability.</features>
-</class>
-<class level="1" name="Monk" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any Lawful</alignment>
-<wa_proficiency>Monks are proficient with basic peasant weapons and special weapons whose use is part of monk training. The full list includes club, crossbow (light or heavy), dagger, handaxe, javelin, kama, nunchaku, quarterstaff, shuriken, siangham, and sling.
-
-A monk using a kama, nunchaku, or siangham can strike with his or her unarmed base attack, including her more favorable number of attacks per round (see below). His or her damage, however, is standard for the weapon (1d6, crit X2), not his or her unarmed damage. The weapon must be light, so a Small monk must use Tiny versions of these weapons in order to use the more favorable base attack.
-
-A monk adds her Wisdom bonus (if any) to AC, in addition to her normal Dexterity modifier, and her AC improves as she gains levels. (Only add this extra AC bonus if the total of the monk's Wisdom modifier and the number in the "AC Bonus" column is a positive number.) The Wisdom bonus and the AC bonus represent a preternatural awareness of danger, and a monk does not lose either even in situations when he or she loses her Dexterity modifier due to being unprepared, ambushed, stunned, and so on. (Monks do lose these AC bonuses when immobilized.)
-
-When wearing armor, a monk loses her AC bonus for Wisdom, AC bonus for class and level, favorable multiple unarmed attacks per round, and heightened movement. Furthermore, her special abilities all face the arcane spell failure chance that the armor type normally imposes.</wa_proficiency>
-<features>Unarmed Strike: A monk fighting unarmed gains the benefits of the Improved Unarmed Strike feat and thus does not provoke attacks of opportunity from armed opponents that she attacks.
-
-Making an off-hand attack makes no sense for a monk striking unarmed.
-
-A monk fighting with a one-handed weapon can make an unarmed strike as an off-hand attack, but she suffers the standard penalties for two-weapon fighting. Likewise, a monk with a weapon (other than a special monk weapon) in her off hand gets an extra attack with that weapon but suffers the usual penalties for two-weapon fighting and can't strike with a flurry of blows.
-
-Flurry of Blows: The monk may make one extra attack in a round at her highest base attack, but this attack and each other attack made that round suffer a -2 penalty apiece. This penalty applies for 1 round, so it affects attacks of opportunity the monk might make before her next action. The monk must use the full attack action to strike with a flurry of blows. A monk may also use the flurry of blows if armed with a special monk weapon (kama, nunchaku, or siangham). If armed with one such weapon, the monk makes the extra attack either with that weapon or unarmed. If armed with two such weapons, she uses one for the regular attack (or attacks) and the other for the extra attack. In any case, her damage bonus on the attack with her off hand is not reduced.
-
-Usually, a monk's unarmed strikes deal normal damage rather than subdual damage. However, she can choose to deal her damage as subdual damage when grappling.
-
-Stunning Attack: The monk can use this ability once per round, but no more than once per level per day. The monk must declare she is using a stun attack before making the attack roll (thus, a missed attack roll ruins the attempt). A foe struck by the monk is forced to make a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier). In addition to receiving normal damage, If the saving throw fails, the opponent is stunned for 1 round. The stunning attack is a supernatural ability.
-
-Evasion: If a monk makes a successful Reflex saving throw against an attack that normally deals half damage on a successful save, the monk instead takes no damage. Evasion can only be used if the monk is wearing light armor or no armor. It is an extraordinary ability.
-
-Deflect Arrows: At 2nd level, a monk gains the Deflect Arrows feat, even if she doesn't have the prerequisite Dexterity score.
-
-Fast Movement: At 3rd level and higher, a monk moves faster than normal. A monk in armor (even light armor) or carrying a medium or heavy load loses this extra speed. A dwarf or a Small monk moves more slowly than a Medium-size monk.
-
-From 9th level on, the monk's running ability is actually a supernatural ability.
-
-Still Mind: At 3rd level, a monk gains a +2 bonus to saving throws against spells and effects from the Enchantment school.
-
-Slow Fall: At 4th level, the monk takes damage as if a fall were 20 feet shorter than it actually is. At 18th level, the monk can use a nearby wall to slow her descent and fall any distance without harm.
-
-Purity of Body: At 5th level, a monk gains immunity to all diseases except for magical diseases.
-
-Improved Trip: At 6th level, a monk gains the Improved Trip feat. She need not have taken the Expertise feat, normally a prerequisite.
-
-Wholeness of Body: At 7th level, a monk can cure her own wounds. She can cure up to twice her current level in hit points each day, and she can spread this healing out among several uses. Wholeness of body is a supernatural ability.
-
-Leap of the Clouds: At 7th level or higher, a monk's jumping distance (vertical or horizontal) is not limited according to her height.
-
-Improved Evasion: At 9th level, a monk only takes half damage on a failed save.
-
-Ki Strike: At 10th level, a monk's unarmed attack is empowered with ki. The unarmed strike damage from such an attack can deal damage to a creature with damage reduction as if the blow were made with a weapon with a +1 enhancement bonus. Ki strike is a supernatural ability.
-
-Diamond Body: At 11th level, a monk gains immunity to poison of all kinds. Diamond body is a supernatural ability.
-
-Abundant Step: At 12th level, a monk can slip magically between spaces, as per the spell dimension door, once per day. This is a spell-like ability, and the monk's effective casting level is one-half her actual level (rounded down).
-
-Diamond Soul: At 13th level, a monk gains spell resistance. Her spell resistance equals her level + 10.
-
-Quivering Palm: Starting at 15th level, a monk can use the quivering palm.
-
-The monk can use the quivering palm attack once a week, and she must announce her intent before making her attack roll. Creatures immune to critical hits cannot be affected. The monk must be of higher level than the target (or have more levels than the target's number of Hit Dice). If the monk strikes successfully and the target takes damage from the blow, the quivering palm attack succeeds. Thereafter the monk can choose to try to slay the victim at any later time within 1 day per level of the monk. The monk merely wills the target to die (a free action), and unless the target makes a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier), it dies. If the saving throw is successful, the target is no longer in danger from that particular quivering palm attack (but may be affected by another one at a later time). Quivering palm is a supernatural ability.
-
-Timeless Body: After achieving 17th level, a monk no longer suffers ability penalties for aging and cannot be magically aged. (Any penalties she may have already suffered remain in place.) Bonuses still accrue, and the monk still dies of old age when her time is up.
-
-Tongue of the Sun and Moon: A monk of 17th level or above can speak with any living creature.
-
-Empty Body: At 19th level or higher, a monk can assume an ethereal state for 1 round per level per day, as per the spell etherealness. The monk may go ethereal on a number of different occasions during any single day as long as the total number of rounds spent ethereal does not exceed her level. Empty body is a supernatural ability.
-
-Perfect Self: At 20th level, a monk is forevermore treated as an outsider rather than as a humanoid. Additionally, the monk gains damage reduction 20/+1.
-
-Ex-Monks: A monk who becomes nonlawful cannot gain new levels as a monk but retain all monk abilities.</features>
-</class>
-<class level="1" name="Paladin" hd="d10" >
-<requirements>None</requirements>
-<alignment>Lawful</alignment>
-<wa_proficiency>Paladins are proficient with all simple and martial weapons, with all types of armor (heavy, medium, and light), and with shields.</wa_proficiency>
-<features>Detect Evil: At will, the paladin can detect evil as a spell-like ability. This ability duplicates the effects of the spell detect evil.
-
-Divine Grace: A paladin applies her Charisma modifier (if positive) as a bonus to all saving throws.
-
-Lay on Hands: Each day a paladin can cure a total number of hit points equal to the paladin's Charisma bonus (if any) times the paladin's level. The paladin can cure themselves. The paladin may choose to divide her curing among multiple recipients, and he or she doesn't have to use it all at once. Lay on hands is a spell-like ability whose use is a standard action.
-
-Alternatively, the paladin can use any or all of these points to deal damage to undead creatures. Treat this attack just like a touch spell. The paladin decides how many cure points to use as damage after successfully touching the undead creature.
-
-Divine Health: A paladin is immune to all diseases, including magical diseases.
-
-Aura of Courage: Beginning at 2nd level, a paladin is immune to fear (magical or otherwise). Allies within 10 feet of the paladin gain a +4 morale bonus on saving throws against fear effects. Granting the morale bonus to allies is a supernatural ability.
-
-Smite Evil: Once per day, a paladin of 2nd level or higher may attempt to smite evil with one normal melee attack. She adds her Charisma modifier (if positive) to the paladin's attack roll and deals 1 extra point of damage per level. If the paladin accidentally smites a creature that is not evil, the smite has no effect but it is still used up for that day. Smite evil is a supernatural ability.
-
-Remove Disease: Beginning at 3rd level, a paladin can remove disease, as per the spell remove disease, once per week. Remove disease is a spell-like ability for paladins.
-
-Turn Undead: The paladin may use this ability a number of times per day equal to three plus the paladin's Charisma modifier. The paladin turns undead as a cleric of two levels lower would.
-
-Extra Turning: As a feat, a paladin may take Extra Turning. This feat allows the paladin to turn undead four more times per day than normal. A paladin can take this feat multiple times, gaining four extra daily turning attempts each time.
-
-Spells: Beginning at 4th level, a paladin gains the ability to cast a small number of divine spells. To cast a spell, the paladin must have a Wisdom score of at least 10 + the spell's level. Paladin bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the paladin gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the paladin gets only bonus spells. A paladin has access to any spell on the paladin spell list and can freely choose which to prepare, just as a cleric can.
-
-A paladin prepares and casts spells just as a cleric does (though the paladin cannot use spontaneous casting to substitute a cure spell in place of a prepared spell).
-
-Through 3rd level, a paladin has no caster level. Starting at 4th level, a paladin's caster level is one-half his or her class level.
-
-Special Mount: Upon or after reaching 5th level, a paladin can call an unusually intelligent, strong, and loyal steed to serve him or her in her crusade against evil. This mount is usually a heavy warhorse (for a Medium-size paladin) or a warpony (for a Small paladin).
-
-Should the paladin's mount die, another cannot be called for a year and a day. The new mount has all the accumulated abilities due a mount of the paladin's level.
-
-The DM will provide information about the mount that responds to the paladin's call.
-
-Code of Conduct: A paladin must be of lawful good alignment and loses all special class abilities if she ever willingly commits an act of evil. Additionally, a paladin's code requires that she respect legitimate authority, act with honor (not lying, not cheating, not using poison, etc.), help those who need help (provided they do not use the help for evil or chaotic ends), and punish those that harm or threaten innocents.
-
-Associates: While she may adventure with characters of any good or neutral alignment, a paladin will never knowingly associate with evil characters. A paladin will not continue an association with someone who consistently offends her moral code. A paladin may only hire henchmen or accept followers who are lawful good.
-
-Ex-Paladins: A paladin who ceases to be lawful good, who willfully commits an evil act, or who grossly violates the code of conduct loses all special abilities and spells, including the service of the paladin's warhorse. She also may not progress in levels as a paladin. She regains her abilities if she atones for her violations, as appropriate.</features>
-</class>
-<class level="1" name="Ranger" hd="d10" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>A ranger is proficient with all simple and martial weapons, light armor, medium armor, and shields. </wa_proficiency>
-<features>When wearing light armor or no armor, a ranger can fight with two weapons as if he or she had the feats Ambidexterity and Two-Weapon Fighting. The ranger loses this special bonus when fighting in medium or heavy armor, or when using a double-headed weapon (such as a double sword).
-
-Spells: Beginning at 4th level, a ranger gains the ability to cast a small number of divine spells. To cast a spell, the ranger must have a Wisdom score of at least 10 + the spell's level. Ranger bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the ranger gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the ranger gets only bonus spells. A ranger without a bonus spell for that level cannot yet cast a spell of that level. A ranger has access to any spell on the ranger spell list and can freely choose which to prepare. A ranger prepares and casts spells just as a cleric does (though the ranger cannot use spontaneous casting to lose a spell and cast a cure or inflict spell in its place).
-
-Through 3rd level, a ranger has no caster level. Starting at 4th level, a ranger's caster level is one-half his class level.
-
-Track: A ranger gains Track as a bonus feat.
-
-Favored Enemy: At 1st level, a ranger may select a type of creature as a favored enemy. (A ranger can only select his own race as a favored enemy if he is evil.) Due to his extensive study of his foes and training in the proper techniques for combating them, the ranger gains a +1 bonus to Bluff, Listen, Sense Motive, Spot, and Wilderness Lore checks when using these skills against this type of creature. Likewise, he gets the same bonus to weapon damage rolls against creatures of this type. A ranger also gets the damage bonus with ranged weapons, but only against targets within 30 feet (the ranger cannot strike with deadly accuracy beyond that range). The bonus doesn't apply to damage against creatures that are immune to critical hits.
-
-At 5th level and at every five levels thereafter (10th, 15th, and 20th level), the ranger may select a new favored enemy, and the bonus associated with every previously selected favored enemy goes up by +1.
-
-* Rangers may not select "humanoid" or "outsider" as a favored enemy, but they may select a more narrowly defined type of humanoid or outsider. A ranger can only select his own race as a favored enemy if he is evil.
-
-Improved Two-Weapon Fighting: A ranger with a base attack bonus of at least +9 can choose to gain the Improved Two-Weapon Fighting feat even if he does not have the other prerequisites for the feat. The ranger must be wearing light armor or no armor in order to use this benefit. </features>
-</class>
-<class level="1" name="Rogue" hd="d6" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>A rogue's weapon training focuses on weapons suitable for stealth and sneak attacks. Thus, all rogues are proficient with the crossbow (hand or light), dagger (any type), dart, light mace, sap, shortbow (normal and composite), and short sword. Medium-size rogues are also proficient with certain weapons that are too big for Small rogues to use and conceal easily: club, heavy crossbow, heavy mace, morningstar, quarterstaff, and rapier. Rogues are proficient with light armor but not with shields. </wa_proficiency>
-<features>Sneak Attack: Any time the rogue's target would be denied a Dexterity bonus to AC (whether the target actually has a Dexterity bonus or not), or when the rogue flanks the target, the rogue's attack deals extra damage. The extra damage is +1d6 at 1st level and an additional 1d6 every two levels thereafter. Should the rogue score a critical hit with a sneak attack, this extra damage is not multiplied.
-
-Ranged attacks can only count as sneak attacks if the target is within 30 feet. The rogue can't strike with deadly accuracy from beyond that range.
-
-With a sap (blackjack) or an unarmed strike, the rogue can make a sneak attack that deals subdual damage instead of normal damage. The rogue cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty.
-
-A rogue can only sneak attack a living creature with a discernible anatomy. Any creature that is immune to critical hits is also not vulnerable to sneak attacks. The rogue must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The rogue cannot sneak attack while striking a creature with concealment or striking the limbs of a creature whose vitals are beyond reach.
-
-Traps: Rogues (and only rogues) can use the Search skill to locate traps when the task has a Difficulty Class higher than 20. Finding a nonmagical trap has a DC of at least 20, higher if it is well hidden. Finding a magic trap has a DC of 25 + the level of the spell used to create it.
-
-Rogues (and only rogues) can use the Disable Device skill to disarm magic traps. A magic trap generally has a DC of 25 + the level of the spell used to create it.
-
-A rogue who beats a trap's DC by 10 or more with a Disable Device check can generally study a trap, figure out how it works, and bypass it (with his party) without disarming it.
-
-Evasion: At 2nd level, a rogue gains evasion. If exposed to any effect that normally allows a character to attempt a Reflex saving throw for half damage, the rogue takes no damage with a successful saving throw. Evasion can only be used if the rogue is wearing light armor or no armor. It is an extraordinary ability.
-
-Uncanny Dodge: At 3rd level and above, she retains her Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
-
-At 6th level , the rogue can no longer be flanked. Another rogue at least four levels higher can still flank.
-
-At 11th level, the rogue gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 14th level, these bonuses rise to +2. At 17th, they rise to +3, and at 20th they rise to +4.
-
-Special Abilities: On achieving 10th level and every three levels thereafter (13th, 16th, and 19th), a rogue chooses a special ability from among the following:
-
-Crippling Strike: When the rogue damages an opponent with a sneak attack, the target also takes 1 point of Strength damage.
-
-Defensive Roll: Once per day, when a rogue would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the rogue can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. The rogue must be aware of the attack and able to react to it in order to execute the defensive roll - if the Dexterity bonus to AC is denied, the rogue can't roll. Since this effect would not normally allow a character to make a Reflex save for half damage, the rogue's evasion ability does not apply to the defensive roll.
-
-Improved Evasion: The rogue takes only half damage on a failed save.
-
-Opportunist: Once per round, the rogue can make an attack of opportunity against an opponent who has just been struck for damage in melee by another character. This attack counts as the rogue's attacks of opportunity for that round. Even a rogue with the Combat Reflexes feat can't use the opportunist ability more than once per round.
-
-Skill Mastery: The rogue selects a number of skills equal to 3 + Intelligence modifier. When making a skill check with one of these skills, the rogue may take 10 even if stress and distractions would normally prevent the rogue from doing so. The rogue may gain this special ability multiple times, selecting additional skills for it to apply to each time.
-
-Slippery Mind: If a rogue with a slippery mind is affected by an enchantment and fails the saving throw, 1 round later the rogue can attempt the saving throw again. The rogue only gets this one extra chance to succeed. This is an extraordinary ability.
-
-Feat: A rogue may gain a feat in place of a special ability. </features>
-</class>
-<class level="1" name="Shadowdancer" hd="d8" >
-<requirements>Move Silently: 8 ranks.
-Hide: 10 ranks.
-Perform: 5 ranks.
-Feats: Dodge, Mobility, Combat Reflexes</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Shadowdancers are proficient with the club, crossbow (hand, light, or heavy), dagger (any type), dart, mace, morningstar, quarterstaff, rapier, sap, shortbow (normal and composite), and short sword. Shadowdancers are proficient with light armor but not with shields.</wa_proficiency>
-<features>Hide in Plain Sight: Shadowdancers can use the Hide skill even while being observed. As long as they are within 10 feet of some sort of shadow, shadowdancers can hide themselves from view in the open without anything to actually hide behind. They cannot, however, hide in their own shadows. Hide in plain sight is a supernatural ability.
-
-Evasion: At 2nd level, a shadowdancer gains evasion. If exposed to any effect that normally allows her to attempt a Reflex saving throw for half damage (such as a fireball), she takes no damage with a successful saving throw. The evasion ability can only be used if the shadowdancer is wearing light armor or no armor.
-
-Darkvision: At 2nd level, a shadowdancer can see in the dark as though she were permanently under the affect of a darkvision spell. This is a supernatural ability.
-
-Uncanny Dodge: Starting at 2nd level, the shadowdancer gains the extraordinary ability to react to danger before her senses would normally allow her to even be aware of it. At 2nd level and above, she retains her Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (She still loses any Dexterity bonus to AC if immobilized.)
-
-At 5th level, the shadowdancer can no longer be flanked, since she can react to opponents on opposite sides of her as easily as she can react to a single attacker. This defense denies rogues the ability to use flank attacks to sneak attack the shadowdancer. The exception to this defense is that a rogue at least 4 levels higher than the shadowdancer can flank her (and thus sneak attack her).
-
-At 10th level, the shadowdancer gains an intuitive sense that alerts her to danger from traps, giving her a +1 bonus to Reflex saves made to avoid traps.
-
-If the shadowdancer has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
-
-Shadow Illusion: When a shadowdancer reaches 3rd level, she can create visual illusions from surrounding shadows. This spell-like ability is identical to the arcane spell silent image and may be employed once per day.
-
-Summon Shadow: At 3rd level, a shadowdancer can summon a shadow, an undead shade. Unlike a normal shadow, this shadow's alignment matches that of the shadowdancer. The summoned shadow cannot be turned, rebuked, or commanded by any third party. This shadow serves as a companion to the shadowdancer and can communicate intelligibly with the shadowdancer. Every third level gained by the shadowdancer allows her to summon an additional shadow and adds +2 HD (and the requisite base attack and base save bonus increases) to all her shadow companions.
-
-If a shadow companion is destroyed, or the shadowdancer chooses to dismiss it, the shadowdancer must attempt a Fortitude saving throw (DC 15). If the saving throw fails, the shadowdancer loses 200 experience points per shadowdancer level. A successful saving throw reduces the loss by half, to 100 XP per prestige class level. The shadowdancer's experience can never go below 0 as the result of a shadow's dismissal or destruction. A destroyed or dismissed shadow companion cannot be replaced for a year and a day.
-
-Shadow Jump: At 4th level, the shadowdancer gains the ability to travel between shadows as if by means of a dimension door spell. The limitation is that the magical transport must begin and end in an area with at least some shadow. The shadowdancer can jump up to a total of 20 feet each day in this way, although this may be a single jump of 20 feet or two jumps of 10 feet each. Every two levels thereafter, the distance a shadowdancer can jump each day doubles (40 feet at 6th level, 80 feet at 8th level, and 160 feet at 10th level). This amount can be split among many jumps, but each one, no matter how small, counts as a 10-foot increment. (A 6th-level shadowdancer who jumps 32 feet cannot jump again until the next day.)
-
-Defensive Roll: Starting at 5th level, the shadowdancer can roll with a potentially lethal blow to take less damage from it. Once per day, when a shadowdancer would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the shadowdancer can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. She must be aware of the attack and able to react to it in order to execute her defensive roll. If she is in a situation that would deny her any Dexterity bonus to AC, she can't attempt the defensive roll.
-
-Slippery Mind: This extraordinary ability, gained at 7th level, represents the shadowdancer's ability to wriggle free from magical effects that would otherwise control or compel her. If the shadowdancer is affected by an enchantment and fails her saving throw, 1 round later she can attempt her saving throw again. She only gets this one extra chance to succeed at her saving throw. If it fails as well, the spell's effects proceed normally.
-
-Improved Evasion: This extraordinary ability, gained at 10th level, works like evasion (see above). The shadowdancer takes no damage at all on successful saving throws against attacks that allow a Reflex saving throw for half damage (breath weapon, fireball, and so on). What's more, she takes only half damage even if she fails her saving throw, since the shadowdancer's reflexes allow her to get out of harm's way with incredible speed.</features>
-</class>
-<class level="1" name="Sorcerer" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Sorcerers are proficient with all simple weapons. They are not proficient with any type of armor, nor with shields. </wa_proficiency>
-<features>Spells: A sorcerer casts arcane spells. The number of spells a sorcerer knows is not affected by his Charisma bonus. The spells a sorcerer knows can be common spells chosen from the sorcerer and wizard spell list, or they can be unusual spells that the sorcerer has gained some understanding of by study.
-
-A sorcerer is limited to casting a certain number of spells of each level per day, but he need not prepare his spells in advance. The number of spells he can cast per day is improved by his bonus spells, if any.
-
-A sorcerer may use a higher-level slot to cast a lower-level spell if he so chooses. The spell is still treated as its actual level, not the level of the slot used to cast it.
-
-To learn or cast a spell, a sorcerer must have a Charisma score of at least 10 + the spell's level. The Difficulty Class for saving throws against sorcerer spells is 10 + the spell's level + the sorcerer's Charisma modifier.</features>
-</class>
-<class level="1" name="Wizard" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Wizards are skilled with the club, dagger, heavy crossbow, light crossbow, and quarterstaff. Wizards are not proficient with any type of armor nor with shields. </wa_proficiency>
-<features>Spells: A wizard casts arcane spells. She is limited to a certain number of spells of each spell level per day, according to her class level. A wizard must prepare spells ahead of time by getting a good night's sleep and spending 1 hour studying her spellbook. While studying, the wizard decides which spells to prepare. To learn, prepare, or cast a spell, a wizard must have an Intelligence score of at least 10 + the spell's level. A wizard's bonus spells are based on Intelligence. The Difficulty Class for saving throws against wizard spells is 10 + the spell's level + the wizard's Intelligence modifier.
-
-Bonus Languages: A wizard may substitute Draconic for one of the bonus languages available to the character.
-
-Familiar: A wizard can summon a familiar in exactly the same manner as a sorcerer. See the sorcerer description.
-
-Scribe Scroll: A wizard has the bonus item creation feat Scribe Scroll, enabling her to create magic scrolls.
-
-Bonus Feats: Every five levels, a wizard gains a bonus feat. This feat must be a metamagic feat, an item creation feat, or Spell Mastery.
-
-Spellbooks: Wizards must study their spellbooks each day to prepare their spells. A wizard cannot prepare any spell not recorded in her spellbook (except for read magic, which all wizards can prepare from memory).
-
-Spell Mastery: A wizard (and only a wizard) can take the special feat Spell Mastery. Each time the wizard takes this feat, choose a number of spells equal to the wizard's Intelligence modifier (they must be spells that the wizard already knows). From that point on, the wizard can prepare these spells without referring to a spellbook.
-
-School Specialization
-
-A school is one of eight groupings of spells, each defined by a common theme, such as illusion or necromancy. A wizard may specialize in one school of magic.
-
-Specialization allows a wizard to cast extra spells from the chosen school, but the wizard then never learns to cast spells from one or more other schools. Spells of the school or schools that the specialist gives up are not available to her, and she can't even cast such spells from scrolls or wands.
-
-The wizard must choose whether to specialize and how at 1st level. She may not change her specialization later.
-
-The specialist can prepare one additional spell (of the school selected as a specialty) per spell level each day.
-
-The specialist gains a +2 bonus to Spellcraft checks to learn the spells of her chosen school.
-
-The eight schools of arcane magic are Abjuration, Conjuration, Divination, Enchantment, Evocation, Illusion, Necromancy, and Transmutation. Spells that do not fall into any of these schools are called universal spells.
-
-Abjuration: To become an abjurer, a wizard must select a prohibited school or schools from the following choices: (1) either Conjuration, Enchantment, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
-
-Conjuration: To become a conjurer, a wizard must select a prohibited school or schools from one of the following choices: (1) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation, or (4) any three schools.
-
-Divination: To become a diviner, a wizard must select any other single school as a prohibited school.
-
-Enchantment: To become an enchanter, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
-
-Evocation: To become an evoker, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation; or (4) any three schools.
-
-Illusion: To become an illusionist, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Enchantment, Evocation, or Transmutation; or (2) both Divination and Necromancy.
-
-Necromancy: To become a necromancer, a wizard must select any other single school as a prohibited school.
-
-Transmutation: To become a transmuter, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; or (4) any three schools.
-
-Universal: Not a school, but a category for spells all wizards can learn. A wizard cannot select universal as a specialty school or as a school to which she does not have access.</features>
-</class>
-<class level="1" name="Adept" hd="d6" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Adepts are skilled with all simple weapons. Adepts are not proficient with any type of armor nor with shields</wa_proficiency>
-<features>Spells: An adept casts divine spells. She is limited to a certain number of spells of each spell level per day, according to her class level. Like a cleric, an adept may prepare and cast any spell on the adept list, provided she can cast spells of that level. Like a cleric, she prepares her spells ahead of time each day. The DC for a saving throw against an adept's spell is 10 + spell level + the adept's Wisdom modifier.
-
-Adepts, unlike wizards, do not acquire their spells from books or scrolls, nor prepare them through study. Instead, they meditate or pray for their spells, receiving them as divine inspiration or through their own strength of faith. Each adept must choose a time each day at which she must spend an hour in quiet contemplation or supplication to regain her daily allotment of spells. Time spent resting has no effect on whether an adept can prepare spells.
-
-When the adept gets 0 spells of a given level, she gets only bonus spells for that spell slot. An adept without a bonus spell for that level cannot yet cast a spell of that level. Bonus spells are based on Wisdom.
-
-Each adept has a particular holy symbol (as a divine focus) depending on the adept's magical tradition.
-
-Familiar: At 2nd level, an adept can call a familiar, just like a sorcerer or wizard can.
-
-Adept Spell List
-0 level-create water, cure minor wounds, detect magic, ghost sound, guidance, light, mending, purify food and drink, read magic.
-1st level-bless, burning hands, cause fear, command, comprehend languages, cure light wounds, detect chaos, detect evil, detect good, detect law, endure elements, obscuring mist, protection from chaos, protection from evil, protection from good, protection from law, sleep.
-2nd level-aid, animal trance, bull's strength, cat's grace, cure moderate wounds, darkness, delay poison, endurance, invisibility, mirror image, resist elements, see invisibility, web.
-3rd level-animate dead, bestow curse, contagion, continual flame, cure serious wounds, daylight, deeper darkness, lightning bolt, neutralize poison, remove curse, remove disease, tongues.
-4th level-cure critical wounds, minor creation, polymorph other, polymorph self, restoration, stoneskin, wall of fire.
-5th level-break enchantment, commune, heal, major creation, raise dead, true seeing, wall of stone.</features>
-</class>
-<class level="1" name="Aristocrat" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The aristocrat is proficient in the use of all simple and martial weapons and with all types of armor and shields.</wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Commoner" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The commoner is proficient with one simple weapon. He is not proficient with weapons, armor, or shields.</wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Expert" hd="d6" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The expert is proficient in the use of all simple weapons and with light armor but not shields. </wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Warrior" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The warrior is proficient in the use of all simple and martial weapons and all armor and shields.</wa_proficiency>
-<features>None</features>
-</class>
-</classes>
+<classes>
+<class level="1" name="Arcane Archer" hd="d8" >
+<requirements>Race: Elf or half-elf.
+Base Attack Bonus: +6.
+Feats: Weapon Focus (any bow other than a crossbow), Point Blank Shot, Precise Shot.
+Spellcasting: Ability to cast 1st-level arcane spells.</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>An arcane archer is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
+<features>Enchant Arrow: At 1st level, every nonmagical arrow an arcane archer nocks and lets fly becomes enchanted, gaining a +1 enhancement bonus. An archer's magic arrows only function for her. For every two levels of arcane archer the character advances past 1st level in the prestige class, the magic arrows she creates gain +1 greater potency.
+
+Imbue Arrow: At 2nd level, an arcane archer gains this spell-like ability, allowing her to place an area spell upon an arrow. When the arrow is fired, the spell's area is centered upon where the arrow lands, even if the spell could normally be centered only on the caster. This ability allows the archer to use the bow's range rather than the spell's range. It takes a standard action to cast the spell and fire the arrow. The arrow must be fired in the round the spell is cast, or the spell is wasted.
+
+Seeker Arrow: At 4th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target, even around corners. Only an unavoidable obstacle or the end of the arrow's range prevents the arrow's flight. This ability negates cover and concealment modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
+
+Phase Arrow: At 6th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target in a straight path, passing through any nonmagical barrier or wall in its way. (A wall of force, a wall of fire, or the like stops the arrow.) This ability negates cover, concealment, and even armor modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
+
+Hail of Arrows: In lieu of her regular attacks, once per day the 8th-level arcane archer can fire an arrow at each and every target within range, to a maximum of one target for every arcane archer level she has earned. Each attack uses the archer's primary attack bonus, and each enemy may only be targeted by a single arrow. This is a spell-like ability.
+
+Arrow of Death: At 10th level, the arcane archer can enchant an arrow of death that forces the target, if damaged by the arrow's attack, to make a Fortitude save (DC 20) or be slain immediately. It takes one day to create an arrow of death, and the arrow only functions for the arcane archer who created it. The enchantment lasts no longer than one year, and the archer can only have one such arrow in existence at a time.</features>
+</class>
+<class level="1" name="Assassin" hd="d6" >
+<requirements>Move Silently: 8 ranks.
+Hide: 8 ranks.
+Disguise: 4 ranks.
+Special: In addition, he must kill someone for no other reason than to join the assassins.</requirements>
+<alignment>Evil</alignment>
+<wa_proficiency>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.</wa_proficiency>
+<features>Sneak Attack: Any time the assassin's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the assassin's attack deals +1d6 points of damage. This extra damage increases by +1d6 points every other level (+2d6 at 3rd level, +3d6 at 5th level, and so on). Should the assassin score a critical hit with a sneak attack, this extra damage is not multiplied.
+
+It takes precision and penetration to hit a vital spot, so ranged attacks can only count as sneak attacks if the target is 30 feet away or less.
+
+With a sap or an unarmed strike, the assassin can make a sneak attack that deals subdual damage instead of normal damage. He cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty, because he must make optimal use of his weapon in order to execute the sneak attack.
+
+An assassin can only sneak attack living creatures with discernible anatomies-undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is similarly immune to sneak attacks. Also, the assassin must also be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The assassin cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
+
+If an assassin gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
+
+Death Attack: If the 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 her Fortitude saving throw (DC 10 + the assassin's class level + the assassin's Intelligence 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 completely 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.
+
+Poison Use: Assassins are trained in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
+
+Spells: Beginning at 1st level, an assassin gains the ability to cast a small number of arcane spells. To cast a spell, the assassin must have an Intelligence score of at least 10 + the spell's level, so an assassin with an Intelligence of 10 or lower cannot cast these spells. Assassin bonus spells are based on Intelligence, and saving throws against these spells have a DC of 10 + spell level + the assassin's Intelligence modifier (if any). When the assassin gets 0 spells of a given level, such as 0 1st-level spells at 1st level, the assassin gets only bonus spells. An assassin without a bonus spell for that level cannot yet cast a spell of that level. The assassin's spell list appears below. An assassin prepares and casts spells just as a wizard does.
+
+Saving Throw Bonus 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 levels the assassin gains (+1 at 2nd level, +2 at 4th level, +3 at 6th level, and so on).
+
+Uncanny Dodge: Starting at 2nd level, the assassin 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 his Dexterity bonus to AC if immobilized.)
+
+At 5th level, the 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).
+
+At 10th level, the assassin gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
+
+If the assassin has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
+
+Assassins choose their spells from the following list:
+
+1st level-change self, detect poison, ghost sound, obscuring mist, spider climb.
+2nd level-alter self, darkness, pass without trace, undetectable alignment.
+3rd level-deeper darkness, invisibility, misdirection, nondetection.
+4th level-dimension door, freedom of movement, improved invisibility, poison.</features>
+</class>
+<class level="1" name="Barbarian" hd="d12" >
+<requirements>None</requirements>
+<alignment>Nonlawful</alignment>
+<wa_proficiency>A barbarian is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
+<features>Barbarian Rage: Barbarian temporarily gains +4 to Strength, +4 to Constitution, and a +2 morale bonus on Will saves, but suffers a -2 penalty to AC.
+
+The increase in Constitution increases the barbarian's hit points by 2 points per level, but these hit points go away at the end of the rage when the Constitution score drops back to normal. While raging, a barbarian cannot use skills or abilities that require patience and concentration. (The only class skills he can't use while raging are Craft, Handle Animal, and Intuit Direction.) He can use any feat he might have except for Expertise, item creation feats, metamagic feats, and Skill Focus (if it's tied to a skill that requires patience or concentration).
+
+A fit of rage lasts for a number of rounds equal to 3 + the character's (newly improved) Constitution modifier. The barbarian may prematurely end the rage voluntarily. At the end of the rage, the barbarian is fatigued (-2 to Strength, -2 to Dexterity, can't charge or run) for the duration of that encounter (unless the barbarian is 20th level, when this limitation no longer applies). The barbarian can only fly into a rage once per encounter, and only a certain number of times per day (determined by level). Entering a rage takes no time itself, but the barbarian can only do it during his action.
+
+Starting at 15th level, the barbarian's rage bonuses become +6 to Strength, +6 to Constitution, and a +3 morale bonus to Will saves. (The AC penalty remains at -2.)
+
+Fast Movement: The barbarian has a speed faster than the norm for his race by +10 feet when wearing no armor, light armor, or medium armor (and not carrying a heavy load).
+
+Uncanny Dodge: At 2nd level and above, the barbarian retains his Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
+
+At 5th level, the barbarian can no longer be flanked. The exception to this defense is that a rogue at least four levels higher than the barbarian can still flank.
+
+At 10th level, the barbarian gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 13th level, these bonuses rise to +2. At 16th, they rise to +3, and at 19th they rise to +4.
+
+Damage Reduction: Starting at 11th level, the barbarian gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 1 from the damage the barbarian takes each time the barbarian is dealt damage. At 14th level, this damage reduction rises to 2. At 17th, it rises to 3. At 20th, it rises to 4. Damage reduction can reduce damage to 0 but not below 0.
+
+Illiteracy: Barbarians are the only characters that do not automatically know how to read and write. A barbarian must spend 2 skill points to gain the ability to read and write any language the barbarian is able to speak.
+
+Ex-Barbarians: A barbarian who becomes lawful loses the ability to rage and cannot gain more levels as a barbarian. The barbarian retains all the other benefits of the class.</features>
+</class>
+<class level="1" name="Bard" hd="d6" >
+<requirements>None</requirements>
+<alignment>Nonlawful</alignment>
+<wa_proficiency>A bard is proficient with all simple weapons. Additionally, the bard is proficient with one of the following weapons: longbow, composite longbow, longsword, rapier, sap, short composite bow, short sword, shortbow, or whip. Bards are proficient with light armor, medium armor, and shields.</wa_proficiency>
+<features>Spells: A bard casts arcane spells. The bard casts these spells without needing to memorize them beforehand or keep a spellbook. Bards receive bonus spells for high Charisma, and to cast a spell a bard must have a Charisma score at least equal to 10 + the level of the spell. The Difficulty Class for a saving throw against a bard's spell is 10 + the spell's level + the bard's Charisma modifier.
+
+Bardic Music: Once per day per level, a bard can use song or poetics to produce magical effects on those around him or her. While these abilities fall under the category of bardic music, they can include reciting poetry, chanting, singing lyrical songs, singing melodies, whistling, playing an instrument, or playing an instrument in combination with some spoken performance. As with casting a spell with a verbal component, a deaf bard suffers a 20% chance to fail with bardic music. If the bard fails, the attempt still counts against the daily limit.
+
+The Bardic Music effects are:
+
+* Inspire Courage: A bard with 3 or more ranks in Perform can to inspire courage in his or her allies. To be affected, an ally must hear the bard sing for a full round. The effect lasts as long as the bard sings and for 5 rounds after the bard stops singing (or 5 rounds after the ally can no longer hear the bard). While singing, the bard can fight but cannot cast spells, activate magic items by spell completion (such as scrolls), or activate magic items by magic word (such as wands). Affected allies receive a +2 morale bonus to saving throws against charm and fear effects and a +1 morale bonus to attack and weapon damage rolls. Inspire courage is a supernatural, mind-affecting ability.
+
+* Countersong: A bard with 3 or more ranks in Perform can counter magical effects that depend on sound (but not spells that simply have verbal components). As with inspire courage, a bard may sing, play, or recite a countersong while taking other mundane actions, but not magical actions. Each round of the countersong, the bard makes a Perform check. Any creature within 30 feet of the bard (including the bard) who is affected by a sonic or language-dependent magical attack may use the bard's Perform check result in place of his saving throw if, after rolling the saving throw, the Perform check result proves to be better. The bard may keep up the countersong for 10 rounds. Countersong is a supernatural ability.
+
+* Fascinate: A bard with 3 or more ranks in Perform can cause a single creature to become fascinated with him. The creature to be fascinated must be able to see and hear the bard and must be within 90 feet. The bard must also see the creature. The creature must be able to pay attention to the bard. The distraction of a nearby combat or other dangers prevents the ability from working. The bard makes a Perform check, and the target can negate the effect with a Will saving throw equal to or greater than the bard's check result. If the saving throw succeeds, the bard cannot attempt to fascinate that creature again for 24 hours. If the saving throw fails, the creature sits quietly and listens to the song for up to 1 round per level of the bard. While fascinated, the target's Spot and Listen checks suffer a -4 penalty. Any potential threat (such as an ally of the bard moving behind the fascinated creature) allows the fascinated creature a second saving throw against a new Perform check result. Any obvious threat, such as casting a spell, drawing a sword, or aiming, automatically breaks the effect.
+
+While fascinating (or attempting to fascinate) a creature, the bard must concentrate, as if casting or maintaining a spell. Fascinate is a spell-like, mind- affecting charm ability.
+
+* Inspire Competence: A bard with 6 or more ranks in Perform can help an ally succeed at a task. The ally must be able to see and hear the bard and must be within 30 feet. The bard must also see the creature. The ally gets a +2 competence bonus on his skill checks with a particular skill as long as he or she continues to hear the bard's music. The DM may rule that certain uses of this ability are infeasible. The bard can maintain the effect for 2 minutes (long enough for the ally to take 20). Inspire competence is a supernatural, mind-affecting ability.
+
+* Suggestion: A bard with 9 or more ranks in Perform can make a suggestion (as the spell) to a creature that he has already fascinated (see above). The suggestion doesn't count against the bard's daily limit on bardic music performances (one per day per level), but the fascination does. A Will saving throw (DC 13 + the bard's Charisma modifier) negates the effect. Suggestion is a spell-like, mind-affecting charm ability.
+
+* Inspire Greatness: A bard with 12 or more ranks in Perform can inspire greatness in another creature. For every three levels the bard attains beyond 9th, the bard can inspire greatness in one additional creature. To inspire greatness, the bard must sing and the creature must hear the bard sing for a full round, as with inspire courage. The creature must also be within 30 feet. A creature inspired with greatness gains temporary Hit Dice, attack bonuses, and saving throw bonuses as long as he or she hears the bard continue to sing and for 5 rounds thereafter. (All these bonuses are competence bonuses.)
+
+The target gains the following boosts:
+* +2 Hit Dice (d10s that grant temporary hit points).
+* +2 competence bonus on attacks.
+* +1 competence bonus on Fortitude saves.
+
+Apply the target's Constitution modifier, if any, to each bonus Hit Die. These extra Hit Dice count as regular Hit Dice for determining effects such as the sleep spell. Inspire greatness is a supernatural, mind-affecting enchantment ability.
+
+Bardic Knowledge: A bard may make a special bardic knowledge check with a bonus equal to his level + his Intelligence modifier to see whether he knows some relevant information about local notable people, legendary items, or noteworthy places. This check will not reveal the powers of a magic item but may give a hint as to its general function. The bard may not take 10 or take 20 on this check; this sort of knowledge is essentially random. The DM will determine the Difficulty Class of the check by referring to the table below. DC      Type of Knowledge
+--      -----------------10      Common, known by at least a substantial minority of the local population.
+20      Uncommon but available, known by only a few people in the area.
+25      Obscure, known by few, hard to come by.
+30      Extremely obscure, known by very few, possibly forgotten by most who once knew it, possibly known only by those who don't understand the significance of the knowledge.
+
+Ex-Bards: A bard who becomes lawful in alignment cannot progress in levels as a bard, though he retains all his bard abilities.</features>
+</class>
+<class level="1" name="Blackguard" hd="d10" >
+<requirements>Base Attack Bonus: +6.
+Knowledge (religion): 2 ranks.
+Hide: 5 ranks.
+Feats: Cleave, Sunder.
+Special: The blackguard must have made peaceful contact with an evil outsider who was summoned by him or someone else to have contracted the taint of true evil.</requirements>
+<alignment>Any Evil</alignment>
+<wa_proficiency>Blackguards are proficient with all simple and martial weapons, with all types of armor, and with shields.</wa_proficiency>
+<features>Detect Good: At will, the blackguard can detect good as a spell-like ability. This ability duplicates the effects of the spell detect good.
+
+Poison Use: Blackguards are skilled in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
+
+Dark Blessing: A blackguard applies his Charisma modifier (if positive) as a bonus to all saving throws.
+
+Spells: Beginning at 1st level, a blackguard gains the ability to cast a small number of divine spells. To cast a spell, the 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 of a given level, such as 0 1st-level spells at 1st level, he gets only bonus spells. (A blackguard without a bonus spell for that level cannot yet cast a spell of that 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 like a cleric. A blackguard prepares and casts spells just as a cleric does (though the blackguard cannot spontaneously cast cure or inflict spells).
+
+Smite Good: 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 the blackguard accidentally smites a creature that is not good, the smite has no effect but it is still used up for that day. Smite good is a supernatural ability.
+
+Aura of Despair: Beginning at 3rd level, the blackguard radiates a malign aura that causes enemies within 10 feet of him to suffer a -2 morale penalty on all saving throws. Aura of despair is a supernatural ability.
+
+Command Undead: 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: If a blackguard can catch an opponent when she is unable to defend herself effectively from his attack, he can strike a vital spot for extra damage. Basically, any time the blackguard's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the blackguard's attack deals +1d6 points of damage at 4th level and an additional +1d6 points for every three levels thereafter (+2d6 at 7th level, +3d6 at 10th level, and so on). Should the blackguard score a critical hit with a sneak attack, this extra damage is not multiplied.
+
+Ranged attacks only count as sneak attacks if the target is 30 feet away or less. A blackguard cannot make a sneak attack to deal subdual damage. The blackguard must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. He cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
+
+A blackguard can only sneak attack living creatures with discernible anatomies. Undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is not subject to sneak attacks.
+
+If a blackguard gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
+
+Blackguards choose their spells from the following list:
+
+1st level-cause fear, cure light wounds, doom, inflict light wounds, magic weapon, summon monster I*.
+2nd level-bull's strength, cure moderate wounds, darkness, death knell, inflict moderate wounds, shatter, summon monster II*.
+3rd level-contagion, cure serious wounds, deeper darkness, inflict serious wounds, protection from elements, summon monster III*.
+4th level-cure critical wounds, freedom of movement, inflict critical wounds, poison, summon monster IV*.
+
+*Evil creatures only.
+
+Fallen Paladins
+
+Blackguards who possess levels of paladin (that is to say, are now ex-paladins) gain extra abilities the more levels of paladin they possess. Those who have tasted the light of goodness and justice and turned away make the foulest villains.</features>
+</class>
+<class level="1" name="Cleric" hd="d8" >
+<requirements>None</requirements>
+<alignment>Varies by deity. A cleric's alignment must be within one step of his deity's, and it may not be neutral unless the deity's alignment is neutral.</alignment>
+<wa_proficiency>Clerics are proficient with all simple weapons. Clerics are proficient with all types of armor (light, medium, and heavy) and with shields.</wa_proficiency>
+<features>Some deities have favored weapons, and clerics consider it a point of pride to wield them. A cleric whose deity's favored weapon is a martial weapon and who chooses War as one of his domains receives the Martial Weapon Proficiency feat related to that weapon for free, as well as the Weapon Focus feat related to that weapon.
+
+Spells: A cleric casts divine spells. A cleric may prepare and cast any spell on the cleric spell list, provided he can cast spells of that level. The Difficulty Class for a saving throw against a cleric's spell is 10 + the spell's level + the cleric's Wisdom modifier.
+
+Each cleric must choose a time at which he must spend an hour each day in quiet contemplation or supplication to regain his daily allotment of spells. Time spent resting has no effect on whether a cleric can prepare spells.
+
+In addition to his standard spells, a cleric gets one domain spell of each spell level, starting at 1st. When a cleric prepares a domain spell, it must come from one of his two domains.
+
+Deity, Domains, and Domain Spells: Choose a deity for your cleric. The cleric's deity influences his alignment, what magic he can perform, his values, and how others see him.
+
+Choose two from among the deity's domains for your cleric's domains. You can only select an alignment domain (such as Good) for your cleric if his alignment matches that domain.
+
+If your cleric is not devoted to a particular deity, you still select two domains to represent his spiritual inclinations and abilities (but the restriction on alignment domains still applies).
+
+Each domain gives your cleric access to a domain spell at each spell level, from 1st on up, as well as a granted power. Your cleric gets the granted powers of all the domains selected. With access to two domain spells at a given spell level, a cleric prepares one or the other each day. If a domain spell is not on the Cleric Spells list, a cleric can only prepare it in his domain slot.
+
+Spontaneous Casting: Good clerics (and neutral clerics of good deities) can channel stored spell energy into healing spells that they haven't prepared ahead of time. The cleric can "lose" a prepared spell in order to cast any cure spell of the same level or lower (a cure spell is any spell with "cure" in its name).
+
+An evil cleric (or a neutral cleric of an evil deity), on the other hand, can't convert prepared spells to cure spells but can convert them to inflict spells (an inflict spell is one with "inflict" in the title).
+
+A cleric who is neither good nor evil and whose deity is neither good nor evil can convert spells either to cure spells or to inflict spells (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric turns or commands undead (see below).
+
+A cleric can't use spontaneous casting to convert domain spells into cure or inflict spells. These spells arise from the particular powers of the cleric's deity, not divine energy in general.
+
+Chaotic, Evil, Good, and Lawful Spells: A cleric can't cast spells of an alignment opposed to his own or to his deity's.
+
+Turn or Rebuke Undead: A good cleric (or a neutral cleric who worships a good deity) has the supernatural ability to turn undead. Evil clerics (and neutral clerics who worship evil deities) can rebuke such creatures. Neutral clerics of neutral deities can do one or the other (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric can cast spontaneous cure or inflict spells (see above).
+
+A cleric may attempt to turn or rebuke undead a number of times per day equal to three plus his Charisma modifier.
+
+Extra Turning: As a feat, a cleric may take Extra Turning. This feat allows the cleric to turn undead four more times per day than normal. A cleric can take this feat multiple times, gaining four extra daily turning attempts each time.
+
+Bonus Languages: A cleric's list of bonus languages includes Celestial, Abyssal, and Infernal, in addition to the bonus languages available to the character because of his race.
+
+Ex-Clerics: A cleric who grossly violates the code of conduct expected by his god (generally acting in ways opposed to the god's alignment or purposes) loses all spells and class features and cannot gain levels as a cleric of that god until he atones.</features>
+</class>
+<class level="1" name="Druid" hd="d8" >
+<requirements>None</requirements>
+<alignment>Neutral good, lawful neutral, neutral, chaotic neutral, or neutral evil.</alignment>
+<wa_proficiency>Druids are proficient with the following weapons: club, dagger, dart, halfspear, longspear, quarterstaff, scimitar, sickle, shortspear, and sling. Their spiritual oaths prohibit them from using weapons other than these. They are proficient with light and medium armors but are prohibited from wearing metal armor (thus, they may wear only padded, leather, or hide armor). They are skilled with shields but must use only wooden ones. </wa_proficiency>
+<features>A druid who wears prohibited armor or wields a prohibited weapon is unable to use any of her magical powers while doing so and for 24 hours thereafter. (Note: A druid can use wooden items that have been altered by the ironwood spell so that they function as though they were steel.)
+
+Spells: A druid casts divine spells. A druid may prepare and cast any spell on the druid spell list provided she can cast spells of that level. She prepares and casts spells the way a cleric does (though she cannot lose a prepared spell to cast a cure spell in its place). To prepare or cast a spell, a druid must have a Wisdom score of at least 10 + the spell's level. The Difficulty Class for a saving throw against a druid's spell is 10 + the spell's level + the druid's Wisdom modifier. Bonus spells for druids are based on Wisdom.
+
+Chaotic, Evil, Good, and Lawful Spells: A druid can't cast spells of an alignment opposed to her own.
+
+Bonus Languages: A druid may substitute Sylvan for one of the bonus languages available to her. In addition, a druid knows the Druidic language. This secret language is known only to druids, and druids are forbidden from teaching it to nondruids. Druidic has its own alphabet.
+
+Nature Sense: A druid can identify plants and animals (their species and special traits) with perfect accuracy. The druid can determine whether water is safe to drink or dangerous.
+
+Animal Companion: A 1st-level druid may begin play with an animal companion. This animal is one that the druid has befriended with the spell animal friendship.
+
+Woodland Stride: Starting at 2nd level, a druid may move through natural thorns, briars, overgrown areas, and similar terrain at his or her normal speed and without suffering damage or other impairment. However, thorns, briars, and overgrown areas that are enchanted or magically manipulated to impede motion still affect the druid.
+
+Trackless Step: Starting at 3rd level, a druid leaves no trail in natural surroundings and cannot be tracked.
+
+Resist Nature's Lure: Starting at 4th level, a druid gains a +4 bonus to saving throws against the spell-like abilities of feys.
+
+Wild Shape: At 5th level, a druid gains the spell-like ability to polymorph self into a Small or Medium-size animal (but not a dire animal) and back again once per day. Unlike the standard use of the spell, however, the druid may only adopt one form. As stated in the spell description, the druid regains hit points as if he or she has rested for a day. The druid does not risk the standard penalty for being disoriented while in the wild shape.
+
+The druid can use this ability more times per day at 6th, 7th, 10th, 14th, and 18th level, as noted. In addition, the druid gains the ability to take the shape of a Large animal at 8th level, a Tiny animal at 11th level, and a Huge animal at 15th level. At 12th level or higher, she can take the form of a dire animal.
+
+At 16th level or higher, the druid may use wild shape to change into a Small, Medium-size, or Large air, earth, fire, or water elemental once per day. The druid gains all the elemental's special abilities. At 18th level, the druid can do this three times per day.
+
+Venom Immunity: At 9th level, a druid gains immunity to all organic poisons, including monster poisons but not mineral poisons or poison gas.
+
+A Thousand Faces: At 13th level, a druid gains the supernatural ability to change his or her appearance at will, as if using the spell alter self.
+
+Timeless Body: After achieving 15th level, a druid no longer suffers ability penalties for aging and cannot be magically aged. Any penalties she may have already suffered, however, remain in place. Bonuses still accrue, and the druid still dies of old age when her time is up.
+
+Ex-Druids: A druid who ceases to revere nature or who changes to a prohibited alignment loses all spells and druidic abilities and cannot gain levels as a druid until she atones.</features>
+</class>
+<class level="1" name="Dwarven Defender" hd="d12" >
+<requirements>Race: Dwarf.
+Base Attack Bonus: +7.
+Feats: Dodge, Endurance, Toughness.</requirements>
+<alignment>Any Lawful</alignment>
+<wa_proficiency>The dwarven defender is proficient with all simple and martial weapons, all types of armor, and shields.</wa_proficiency>
+<features>Defensive Stance: When he needs to, the 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 the following benefits:+2 Strength, +4 Constitution, +2 resistance bonus on all saves, +4 dodge bonus to AC.
+
+While defending, 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 3 rounds, plus the character's (newly improved) Constitution modifier. The defender may end the defense voluntarily prior to this limit. At the end of the defense, the defender is winded and suffers a -2 penalty to Strength for the duration of that encounter. The defender can only take his defensive stance a certain number of times per day as determined by his level. Taking the stance takes no time itself, but the defender can only do so during his action.
+
+Defensive Awareness: Starting at 2nd level, the 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.)
+
+At 5th level, the dwarven defender 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 dwarven defender. The exception to this defense is that a rogue at least 4 levels higher than the dwarven defender can flank him (and thus sneak attack him).
+
+At 10th level, the dwarven defender gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
+
+Defensive awareness is cumulative with uncanny dodge. If the dwarven defender has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant these two abilities and determine the character's defensive awareness ability on that basis.
+
+Damage Reduction: At 6th level, the dwarven defender gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 3 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.)</features>
+</class>
+<class level="1" name="Fighter" hd="d10" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The fighter is proficient in the use of all simple and martial weapons and all armor (heavy, medium, and light) and shields.</wa_proficiency>
+<features>Bonus Feats: At 1st level, the fighter gets a bonus feat in addition to the feat that any 1st-level character gets and the bonus feat granted to humans. The fighter gains an additional bonus feat at 2nd level and every two levels thereafter (4th, 6th, 8th, etc.). These bonus feats must be drawn from the following list: Ambidexterity, Blind-Fight, Combat Reflexes, Dodge (Mobility, Spring Attack), Exotic Weapon Proficiency*, Expertise (Improved Disarm, Improved Trip, Whirlwind Attack), Improved Critical*, Improved Initiative, Improved Unarmed Strike (Deflect Arrows, Stunning Fist), Mounted Combat (Mounted Archery, Trample, Ride-By Attack, Spirited Charge), Point Blank Shot (Far Shot, Precise Shot, Rapid Shot, Shot on the Run), Power Attack (Cleave, Improved Bull Rush, Sunder, Great Cleave), Quick Draw, Two- Weapon Fighting (Improved Two-Weapon Fighting), Weapon Finesse*, Weapon Focus*, Weapon Specialization*.
+
+Some of the bonus feats available to a fighter cannot be acquired until the fighter has gained one or more prerequisite feats; these feats are listed parenthetically after the prerequisite feat. A fighter can select feats marked with an asterisk (*) more than once, but it must be for a different weapon each time. A fighter must still meet all prerequisites for a feat, including ability score and base attack bonus minimums.
+
+Weapon Specialization: On achieving 4th level or higher, as a feat the fighter (and only the fighter) may take Weapon Specialization. Weapon Specialization adds a +2 damage bonus with a chosen weapon. The fighter must have Weapon Focus with that weapon to take Weapon Specialization. If the weapon is a ranged weapon, the damage bonus only applies if the target is within 30 feet, because only at that range can the fighter strike precisely enough to hit more effectively. The fighter may take this feat as a bonus feat or as a regular one.</features>
+</class>
+<class level="1" name="Loremasters" hd="d4" >
+<requirements>Spellcasting: Ability to cast seven different divinations, one of which must be 3rd level or higher.
+Two Knowledge Skills (Any Type): 10 ranks in each.
+Feats: Any three metamagic or item creation feats, plus Skill Focus (Knowledge [any individual Knowledge skill]).</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Loremasters gain no proficiency in any weapon or armor.</wa_proficiency>
+<features>Spells per Day: A loremaster continues training in magic as well as her field of research. Thus, when a new loremaster level is gained, the character gains new spells per day as if she had also gained a level in a 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 (improved chance of controlling or rebuking undead, metamagic or item creation feats, and so on). This essentially means that she adds the level of loremaster to the level of some other spellcasting class the character has, then determines spells per day and caster level accordingly.
+
+If a character had more than one spellcasting class before she became a loremaster, she must decide to which class she adds each level of loremaster for purposes of determining spells per day when she adds the new level.
+
+Secret: In their studies, loremasters stumble upon all sorts of applicable knowledge and secrets. At 1st level and every two levels afterward (3rd, 5th, 7th, and 9th levels), the loremaster chooses one secret from Table: Loremaster Secrets. Her level plus Intelligence modifier determines which secrets she can choose. She can't choose the same secret twice.
+
+Lore: Loremasters gather knowledge. At 2nd level, they gain the ability to know legends or information regarding various topics, just like a bard can with bardic knowledge. The loremaster adds her level and her Intelligence modifier to the Knowledge check. See page 29 in the Player's Handbook for more information on bardic knowledge.
+
+Bonus Languages: Loremasters, in their laborious studies, learn new languages in order to access more knowledge. The loremaster can choose any new language at 4th and 8th level.
+
+Greater Lore: At 6th level, a loremaster gains the ability to identify magic items, as the spell, as an extraordinary ability. She may do this once per item examined.
+
+True Lore: At 10th level, once per day a loremaster can use her knowledge to gain the effects of a legend lore spell or an analyze dweomer spell. True lore is an extraordinary ability.</features>
+</class>
+<class level="1" name="Monk" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any Lawful</alignment>
+<wa_proficiency>Monks are proficient with basic peasant weapons and special weapons whose use is part of monk training. The full list includes club, crossbow (light or heavy), dagger, handaxe, javelin, kama, nunchaku, quarterstaff, shuriken, siangham, and sling.
+
+A monk using a kama, nunchaku, or siangham can strike with his or her unarmed base attack, including her more favorable number of attacks per round (see below). His or her damage, however, is standard for the weapon (1d6, crit X2), not his or her unarmed damage. The weapon must be light, so a Small monk must use Tiny versions of these weapons in order to use the more favorable base attack.
+
+A monk adds her Wisdom bonus (if any) to AC, in addition to her normal Dexterity modifier, and her AC improves as she gains levels. (Only add this extra AC bonus if the total of the monk's Wisdom modifier and the number in the "AC Bonus" column is a positive number.) The Wisdom bonus and the AC bonus represent a preternatural awareness of danger, and a monk does not lose either even in situations when he or she loses her Dexterity modifier due to being unprepared, ambushed, stunned, and so on. (Monks do lose these AC bonuses when immobilized.)
+
+When wearing armor, a monk loses her AC bonus for Wisdom, AC bonus for class and level, favorable multiple unarmed attacks per round, and heightened movement. Furthermore, her special abilities all face the arcane spell failure chance that the armor type normally imposes.</wa_proficiency>
+<features>Unarmed Strike: A monk fighting unarmed gains the benefits of the Improved Unarmed Strike feat and thus does not provoke attacks of opportunity from armed opponents that she attacks.
+
+Making an off-hand attack makes no sense for a monk striking unarmed.
+
+A monk fighting with a one-handed weapon can make an unarmed strike as an off-hand attack, but she suffers the standard penalties for two-weapon fighting. Likewise, a monk with a weapon (other than a special monk weapon) in her off hand gets an extra attack with that weapon but suffers the usual penalties for two-weapon fighting and can't strike with a flurry of blows.
+
+Flurry of Blows: The monk may make one extra attack in a round at her highest base attack, but this attack and each other attack made that round suffer a -2 penalty apiece. This penalty applies for 1 round, so it affects attacks of opportunity the monk might make before her next action. The monk must use the full attack action to strike with a flurry of blows. A monk may also use the flurry of blows if armed with a special monk weapon (kama, nunchaku, or siangham). If armed with one such weapon, the monk makes the extra attack either with that weapon or unarmed. If armed with two such weapons, she uses one for the regular attack (or attacks) and the other for the extra attack. In any case, her damage bonus on the attack with her off hand is not reduced.
+
+Usually, a monk's unarmed strikes deal normal damage rather than subdual damage. However, she can choose to deal her damage as subdual damage when grappling.
+
+Stunning Attack: The monk can use this ability once per round, but no more than once per level per day. The monk must declare she is using a stun attack before making the attack roll (thus, a missed attack roll ruins the attempt). A foe struck by the monk is forced to make a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier). In addition to receiving normal damage, If the saving throw fails, the opponent is stunned for 1 round. The stunning attack is a supernatural ability.
+
+Evasion: If a monk makes a successful Reflex saving throw against an attack that normally deals half damage on a successful save, the monk instead takes no damage. Evasion can only be used if the monk is wearing light armor or no armor. It is an extraordinary ability.
+
+Deflect Arrows: At 2nd level, a monk gains the Deflect Arrows feat, even if she doesn't have the prerequisite Dexterity score.
+
+Fast Movement: At 3rd level and higher, a monk moves faster than normal. A monk in armor (even light armor) or carrying a medium or heavy load loses this extra speed. A dwarf or a Small monk moves more slowly than a Medium-size monk.
+
+From 9th level on, the monk's running ability is actually a supernatural ability.
+
+Still Mind: At 3rd level, a monk gains a +2 bonus to saving throws against spells and effects from the Enchantment school.
+
+Slow Fall: At 4th level, the monk takes damage as if a fall were 20 feet shorter than it actually is. At 18th level, the monk can use a nearby wall to slow her descent and fall any distance without harm.
+
+Purity of Body: At 5th level, a monk gains immunity to all diseases except for magical diseases.
+
+Improved Trip: At 6th level, a monk gains the Improved Trip feat. She need not have taken the Expertise feat, normally a prerequisite.
+
+Wholeness of Body: At 7th level, a monk can cure her own wounds. She can cure up to twice her current level in hit points each day, and she can spread this healing out among several uses. Wholeness of body is a supernatural ability.
+
+Leap of the Clouds: At 7th level or higher, a monk's jumping distance (vertical or horizontal) is not limited according to her height.
+
+Improved Evasion: At 9th level, a monk only takes half damage on a failed save.
+
+Ki Strike: At 10th level, a monk's unarmed attack is empowered with ki. The unarmed strike damage from such an attack can deal damage to a creature with damage reduction as if the blow were made with a weapon with a +1 enhancement bonus. Ki strike is a supernatural ability.
+
+Diamond Body: At 11th level, a monk gains immunity to poison of all kinds. Diamond body is a supernatural ability.
+
+Abundant Step: At 12th level, a monk can slip magically between spaces, as per the spell dimension door, once per day. This is a spell-like ability, and the monk's effective casting level is one-half her actual level (rounded down).
+
+Diamond Soul: At 13th level, a monk gains spell resistance. Her spell resistance equals her level + 10.
+
+Quivering Palm: Starting at 15th level, a monk can use the quivering palm.
+
+The monk can use the quivering palm attack once a week, and she must announce her intent before making her attack roll. Creatures immune to critical hits cannot be affected. The monk must be of higher level than the target (or have more levels than the target's number of Hit Dice). If the monk strikes successfully and the target takes damage from the blow, the quivering palm attack succeeds. Thereafter the monk can choose to try to slay the victim at any later time within 1 day per level of the monk. The monk merely wills the target to die (a free action), and unless the target makes a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier), it dies. If the saving throw is successful, the target is no longer in danger from that particular quivering palm attack (but may be affected by another one at a later time). Quivering palm is a supernatural ability.
+
+Timeless Body: After achieving 17th level, a monk no longer suffers ability penalties for aging and cannot be magically aged. (Any penalties she may have already suffered remain in place.) Bonuses still accrue, and the monk still dies of old age when her time is up.
+
+Tongue of the Sun and Moon: A monk of 17th level or above can speak with any living creature.
+
+Empty Body: At 19th level or higher, a monk can assume an ethereal state for 1 round per level per day, as per the spell etherealness. The monk may go ethereal on a number of different occasions during any single day as long as the total number of rounds spent ethereal does not exceed her level. Empty body is a supernatural ability.
+
+Perfect Self: At 20th level, a monk is forevermore treated as an outsider rather than as a humanoid. Additionally, the monk gains damage reduction 20/+1.
+
+Ex-Monks: A monk who becomes nonlawful cannot gain new levels as a monk but retain all monk abilities.</features>
+</class>
+<class level="1" name="Paladin" hd="d10" >
+<requirements>None</requirements>
+<alignment>Lawful</alignment>
+<wa_proficiency>Paladins are proficient with all simple and martial weapons, with all types of armor (heavy, medium, and light), and with shields.</wa_proficiency>
+<features>Detect Evil: At will, the paladin can detect evil as a spell-like ability. This ability duplicates the effects of the spell detect evil.
+
+Divine Grace: A paladin applies her Charisma modifier (if positive) as a bonus to all saving throws.
+
+Lay on Hands: Each day a paladin can cure a total number of hit points equal to the paladin's Charisma bonus (if any) times the paladin's level. The paladin can cure themselves. The paladin may choose to divide her curing among multiple recipients, and he or she doesn't have to use it all at once. Lay on hands is a spell-like ability whose use is a standard action.
+
+Alternatively, the paladin can use any or all of these points to deal damage to undead creatures. Treat this attack just like a touch spell. The paladin decides how many cure points to use as damage after successfully touching the undead creature.
+
+Divine Health: A paladin is immune to all diseases, including magical diseases.
+
+Aura of Courage: Beginning at 2nd level, a paladin is immune to fear (magical or otherwise). Allies within 10 feet of the paladin gain a +4 morale bonus on saving throws against fear effects. Granting the morale bonus to allies is a supernatural ability.
+
+Smite Evil: Once per day, a paladin of 2nd level or higher may attempt to smite evil with one normal melee attack. She adds her Charisma modifier (if positive) to the paladin's attack roll and deals 1 extra point of damage per level. If the paladin accidentally smites a creature that is not evil, the smite has no effect but it is still used up for that day. Smite evil is a supernatural ability.
+
+Remove Disease: Beginning at 3rd level, a paladin can remove disease, as per the spell remove disease, once per week. Remove disease is a spell-like ability for paladins.
+
+Turn Undead: The paladin may use this ability a number of times per day equal to three plus the paladin's Charisma modifier. The paladin turns undead as a cleric of two levels lower would.
+
+Extra Turning: As a feat, a paladin may take Extra Turning. This feat allows the paladin to turn undead four more times per day than normal. A paladin can take this feat multiple times, gaining four extra daily turning attempts each time.
+
+Spells: Beginning at 4th level, a paladin gains the ability to cast a small number of divine spells. To cast a spell, the paladin must have a Wisdom score of at least 10 + the spell's level. Paladin bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the paladin gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the paladin gets only bonus spells. A paladin has access to any spell on the paladin spell list and can freely choose which to prepare, just as a cleric can.
+
+A paladin prepares and casts spells just as a cleric does (though the paladin cannot use spontaneous casting to substitute a cure spell in place of a prepared spell).
+
+Through 3rd level, a paladin has no caster level. Starting at 4th level, a paladin's caster level is one-half his or her class level.
+
+Special Mount: Upon or after reaching 5th level, a paladin can call an unusually intelligent, strong, and loyal steed to serve him or her in her crusade against evil. This mount is usually a heavy warhorse (for a Medium-size paladin) or a warpony (for a Small paladin).
+
+Should the paladin's mount die, another cannot be called for a year and a day. The new mount has all the accumulated abilities due a mount of the paladin's level.
+
+The DM will provide information about the mount that responds to the paladin's call.
+
+Code of Conduct: A paladin must be of lawful good alignment and loses all special class abilities if she ever willingly commits an act of evil. Additionally, a paladin's code requires that she respect legitimate authority, act with honor (not lying, not cheating, not using poison, etc.), help those who need help (provided they do not use the help for evil or chaotic ends), and punish those that harm or threaten innocents.
+
+Associates: While she may adventure with characters of any good or neutral alignment, a paladin will never knowingly associate with evil characters. A paladin will not continue an association with someone who consistently offends her moral code. A paladin may only hire henchmen or accept followers who are lawful good.
+
+Ex-Paladins: A paladin who ceases to be lawful good, who willfully commits an evil act, or who grossly violates the code of conduct loses all special abilities and spells, including the service of the paladin's warhorse. She also may not progress in levels as a paladin. She regains her abilities if she atones for her violations, as appropriate.</features>
+</class>
+<class level="1" name="Ranger" hd="d10" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>A ranger is proficient with all simple and martial weapons, light armor, medium armor, and shields. </wa_proficiency>
+<features>When wearing light armor or no armor, a ranger can fight with two weapons as if he or she had the feats Ambidexterity and Two-Weapon Fighting. The ranger loses this special bonus when fighting in medium or heavy armor, or when using a double-headed weapon (such as a double sword).
+
+Spells: Beginning at 4th level, a ranger gains the ability to cast a small number of divine spells. To cast a spell, the ranger must have a Wisdom score of at least 10 + the spell's level. Ranger bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the ranger gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the ranger gets only bonus spells. A ranger without a bonus spell for that level cannot yet cast a spell of that level. A ranger has access to any spell on the ranger spell list and can freely choose which to prepare. A ranger prepares and casts spells just as a cleric does (though the ranger cannot use spontaneous casting to lose a spell and cast a cure or inflict spell in its place).
+
+Through 3rd level, a ranger has no caster level. Starting at 4th level, a ranger's caster level is one-half his class level.
+
+Track: A ranger gains Track as a bonus feat.
+
+Favored Enemy: At 1st level, a ranger may select a type of creature as a favored enemy. (A ranger can only select his own race as a favored enemy if he is evil.) Due to his extensive study of his foes and training in the proper techniques for combating them, the ranger gains a +1 bonus to Bluff, Listen, Sense Motive, Spot, and Wilderness Lore checks when using these skills against this type of creature. Likewise, he gets the same bonus to weapon damage rolls against creatures of this type. A ranger also gets the damage bonus with ranged weapons, but only against targets within 30 feet (the ranger cannot strike with deadly accuracy beyond that range). The bonus doesn't apply to damage against creatures that are immune to critical hits.
+
+At 5th level and at every five levels thereafter (10th, 15th, and 20th level), the ranger may select a new favored enemy, and the bonus associated with every previously selected favored enemy goes up by +1.
+
+* Rangers may not select "humanoid" or "outsider" as a favored enemy, but they may select a more narrowly defined type of humanoid or outsider. A ranger can only select his own race as a favored enemy if he is evil.
+
+Improved Two-Weapon Fighting: A ranger with a base attack bonus of at least +9 can choose to gain the Improved Two-Weapon Fighting feat even if he does not have the other prerequisites for the feat. The ranger must be wearing light armor or no armor in order to use this benefit. </features>
+</class>
+<class level="1" name="Rogue" hd="d6" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>A rogue's weapon training focuses on weapons suitable for stealth and sneak attacks. Thus, all rogues are proficient with the crossbow (hand or light), dagger (any type), dart, light mace, sap, shortbow (normal and composite), and short sword. Medium-size rogues are also proficient with certain weapons that are too big for Small rogues to use and conceal easily: club, heavy crossbow, heavy mace, morningstar, quarterstaff, and rapier. Rogues are proficient with light armor but not with shields. </wa_proficiency>
+<features>Sneak Attack: Any time the rogue's target would be denied a Dexterity bonus to AC (whether the target actually has a Dexterity bonus or not), or when the rogue flanks the target, the rogue's attack deals extra damage. The extra damage is +1d6 at 1st level and an additional 1d6 every two levels thereafter. Should the rogue score a critical hit with a sneak attack, this extra damage is not multiplied.
+
+Ranged attacks can only count as sneak attacks if the target is within 30 feet. The rogue can't strike with deadly accuracy from beyond that range.
+
+With a sap (blackjack) or an unarmed strike, the rogue can make a sneak attack that deals subdual damage instead of normal damage. The rogue cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty.
+
+A rogue can only sneak attack a living creature with a discernible anatomy. Any creature that is immune to critical hits is also not vulnerable to sneak attacks. The rogue must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The rogue cannot sneak attack while striking a creature with concealment or striking the limbs of a creature whose vitals are beyond reach.
+
+Traps: Rogues (and only rogues) can use the Search skill to locate traps when the task has a Difficulty Class higher than 20. Finding a nonmagical trap has a DC of at least 20, higher if it is well hidden. Finding a magic trap has a DC of 25 + the level of the spell used to create it.
+
+Rogues (and only rogues) can use the Disable Device skill to disarm magic traps. A magic trap generally has a DC of 25 + the level of the spell used to create it.
+
+A rogue who beats a trap's DC by 10 or more with a Disable Device check can generally study a trap, figure out how it works, and bypass it (with his party) without disarming it.
+
+Evasion: At 2nd level, a rogue gains evasion. If exposed to any effect that normally allows a character to attempt a Reflex saving throw for half damage, the rogue takes no damage with a successful saving throw. Evasion can only be used if the rogue is wearing light armor or no armor. It is an extraordinary ability.
+
+Uncanny Dodge: At 3rd level and above, she retains her Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
+
+At 6th level , the rogue can no longer be flanked. Another rogue at least four levels higher can still flank.
+
+At 11th level, the rogue gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 14th level, these bonuses rise to +2. At 17th, they rise to +3, and at 20th they rise to +4.
+
+Special Abilities: On achieving 10th level and every three levels thereafter (13th, 16th, and 19th), a rogue chooses a special ability from among the following:
+
+Crippling Strike: When the rogue damages an opponent with a sneak attack, the target also takes 1 point of Strength damage.
+
+Defensive Roll: Once per day, when a rogue would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the rogue can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. The rogue must be aware of the attack and able to react to it in order to execute the defensive roll - if the Dexterity bonus to AC is denied, the rogue can't roll. Since this effect would not normally allow a character to make a Reflex save for half damage, the rogue's evasion ability does not apply to the defensive roll.
+
+Improved Evasion: The rogue takes only half damage on a failed save.
+
+Opportunist: Once per round, the rogue can make an attack of opportunity against an opponent who has just been struck for damage in melee by another character. This attack counts as the rogue's attacks of opportunity for that round. Even a rogue with the Combat Reflexes feat can't use the opportunist ability more than once per round.
+
+Skill Mastery: The rogue selects a number of skills equal to 3 + Intelligence modifier. When making a skill check with one of these skills, the rogue may take 10 even if stress and distractions would normally prevent the rogue from doing so. The rogue may gain this special ability multiple times, selecting additional skills for it to apply to each time.
+
+Slippery Mind: If a rogue with a slippery mind is affected by an enchantment and fails the saving throw, 1 round later the rogue can attempt the saving throw again. The rogue only gets this one extra chance to succeed. This is an extraordinary ability.
+
+Feat: A rogue may gain a feat in place of a special ability. </features>
+</class>
+<class level="1" name="Shadowdancer" hd="d8" >
+<requirements>Move Silently: 8 ranks.
+Hide: 10 ranks.
+Perform: 5 ranks.
+Feats: Dodge, Mobility, Combat Reflexes</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Shadowdancers are proficient with the club, crossbow (hand, light, or heavy), dagger (any type), dart, mace, morningstar, quarterstaff, rapier, sap, shortbow (normal and composite), and short sword. Shadowdancers are proficient with light armor but not with shields.</wa_proficiency>
+<features>Hide in Plain Sight: Shadowdancers can use the Hide skill even while being observed. As long as they are within 10 feet of some sort of shadow, shadowdancers can hide themselves from view in the open without anything to actually hide behind. They cannot, however, hide in their own shadows. Hide in plain sight is a supernatural ability.
+
+Evasion: At 2nd level, a shadowdancer gains evasion. If exposed to any effect that normally allows her to attempt a Reflex saving throw for half damage (such as a fireball), she takes no damage with a successful saving throw. The evasion ability can only be used if the shadowdancer is wearing light armor or no armor.
+
+Darkvision: At 2nd level, a shadowdancer can see in the dark as though she were permanently under the affect of a darkvision spell. This is a supernatural ability.
+
+Uncanny Dodge: Starting at 2nd level, the shadowdancer gains the extraordinary ability to react to danger before her senses would normally allow her to even be aware of it. At 2nd level and above, she retains her Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (She still loses any Dexterity bonus to AC if immobilized.)
+
+At 5th level, the shadowdancer can no longer be flanked, since she can react to opponents on opposite sides of her as easily as she can react to a single attacker. This defense denies rogues the ability to use flank attacks to sneak attack the shadowdancer. The exception to this defense is that a rogue at least 4 levels higher than the shadowdancer can flank her (and thus sneak attack her).
+
+At 10th level, the shadowdancer gains an intuitive sense that alerts her to danger from traps, giving her a +1 bonus to Reflex saves made to avoid traps.
+
+If the shadowdancer has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
+
+Shadow Illusion: When a shadowdancer reaches 3rd level, she can create visual illusions from surrounding shadows. This spell-like ability is identical to the arcane spell silent image and may be employed once per day.
+
+Summon Shadow: At 3rd level, a shadowdancer can summon a shadow, an undead shade. Unlike a normal shadow, this shadow's alignment matches that of the shadowdancer. The summoned shadow cannot be turned, rebuked, or commanded by any third party. This shadow serves as a companion to the shadowdancer and can communicate intelligibly with the shadowdancer. Every third level gained by the shadowdancer allows her to summon an additional shadow and adds +2 HD (and the requisite base attack and base save bonus increases) to all her shadow companions.
+
+If a shadow companion is destroyed, or the shadowdancer chooses to dismiss it, the shadowdancer must attempt a Fortitude saving throw (DC 15). If the saving throw fails, the shadowdancer loses 200 experience points per shadowdancer level. A successful saving throw reduces the loss by half, to 100 XP per prestige class level. The shadowdancer's experience can never go below 0 as the result of a shadow's dismissal or destruction. A destroyed or dismissed shadow companion cannot be replaced for a year and a day.
+
+Shadow Jump: At 4th level, the shadowdancer gains the ability to travel between shadows as if by means of a dimension door spell. The limitation is that the magical transport must begin and end in an area with at least some shadow. The shadowdancer can jump up to a total of 20 feet each day in this way, although this may be a single jump of 20 feet or two jumps of 10 feet each. Every two levels thereafter, the distance a shadowdancer can jump each day doubles (40 feet at 6th level, 80 feet at 8th level, and 160 feet at 10th level). This amount can be split among many jumps, but each one, no matter how small, counts as a 10-foot increment. (A 6th-level shadowdancer who jumps 32 feet cannot jump again until the next day.)
+
+Defensive Roll: Starting at 5th level, the shadowdancer can roll with a potentially lethal blow to take less damage from it. Once per day, when a shadowdancer would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the shadowdancer can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. She must be aware of the attack and able to react to it in order to execute her defensive roll. If she is in a situation that would deny her any Dexterity bonus to AC, she can't attempt the defensive roll.
+
+Slippery Mind: This extraordinary ability, gained at 7th level, represents the shadowdancer's ability to wriggle free from magical effects that would otherwise control or compel her. If the shadowdancer is affected by an enchantment and fails her saving throw, 1 round later she can attempt her saving throw again. She only gets this one extra chance to succeed at her saving throw. If it fails as well, the spell's effects proceed normally.
+
+Improved Evasion: This extraordinary ability, gained at 10th level, works like evasion (see above). The shadowdancer takes no damage at all on successful saving throws against attacks that allow a Reflex saving throw for half damage (breath weapon, fireball, and so on). What's more, she takes only half damage even if she fails her saving throw, since the shadowdancer's reflexes allow her to get out of harm's way with incredible speed.</features>
+</class>
+<class level="1" name="Sorcerer" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Sorcerers are proficient with all simple weapons. They are not proficient with any type of armor, nor with shields. </wa_proficiency>
+<features>Spells: A sorcerer casts arcane spells. The number of spells a sorcerer knows is not affected by his Charisma bonus. The spells a sorcerer knows can be common spells chosen from the sorcerer and wizard spell list, or they can be unusual spells that the sorcerer has gained some understanding of by study.
+
+A sorcerer is limited to casting a certain number of spells of each level per day, but he need not prepare his spells in advance. The number of spells he can cast per day is improved by his bonus spells, if any.
+
+A sorcerer may use a higher-level slot to cast a lower-level spell if he so chooses. The spell is still treated as its actual level, not the level of the slot used to cast it.
+
+To learn or cast a spell, a sorcerer must have a Charisma score of at least 10 + the spell's level. The Difficulty Class for saving throws against sorcerer spells is 10 + the spell's level + the sorcerer's Charisma modifier.</features>
+</class>
+<class level="1" name="Wizard" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Wizards are skilled with the club, dagger, heavy crossbow, light crossbow, and quarterstaff. Wizards are not proficient with any type of armor nor with shields. </wa_proficiency>
+<features>Spells: A wizard casts arcane spells. She is limited to a certain number of spells of each spell level per day, according to her class level. A wizard must prepare spells ahead of time by getting a good night's sleep and spending 1 hour studying her spellbook. While studying, the wizard decides which spells to prepare. To learn, prepare, or cast a spell, a wizard must have an Intelligence score of at least 10 + the spell's level. A wizard's bonus spells are based on Intelligence. The Difficulty Class for saving throws against wizard spells is 10 + the spell's level + the wizard's Intelligence modifier.
+
+Bonus Languages: A wizard may substitute Draconic for one of the bonus languages available to the character.
+
+Familiar: A wizard can summon a familiar in exactly the same manner as a sorcerer. See the sorcerer description.
+
+Scribe Scroll: A wizard has the bonus item creation feat Scribe Scroll, enabling her to create magic scrolls.
+
+Bonus Feats: Every five levels, a wizard gains a bonus feat. This feat must be a metamagic feat, an item creation feat, or Spell Mastery.
+
+Spellbooks: Wizards must study their spellbooks each day to prepare their spells. A wizard cannot prepare any spell not recorded in her spellbook (except for read magic, which all wizards can prepare from memory).
+
+Spell Mastery: A wizard (and only a wizard) can take the special feat Spell Mastery. Each time the wizard takes this feat, choose a number of spells equal to the wizard's Intelligence modifier (they must be spells that the wizard already knows). From that point on, the wizard can prepare these spells without referring to a spellbook.
+
+School Specialization
+
+A school is one of eight groupings of spells, each defined by a common theme, such as illusion or necromancy. A wizard may specialize in one school of magic.
+
+Specialization allows a wizard to cast extra spells from the chosen school, but the wizard then never learns to cast spells from one or more other schools. Spells of the school or schools that the specialist gives up are not available to her, and she can't even cast such spells from scrolls or wands.
+
+The wizard must choose whether to specialize and how at 1st level. She may not change her specialization later.
+
+The specialist can prepare one additional spell (of the school selected as a specialty) per spell level each day.
+
+The specialist gains a +2 bonus to Spellcraft checks to learn the spells of her chosen school.
+
+The eight schools of arcane magic are Abjuration, Conjuration, Divination, Enchantment, Evocation, Illusion, Necromancy, and Transmutation. Spells that do not fall into any of these schools are called universal spells.
+
+Abjuration: To become an abjurer, a wizard must select a prohibited school or schools from the following choices: (1) either Conjuration, Enchantment, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
+
+Conjuration: To become a conjurer, a wizard must select a prohibited school or schools from one of the following choices: (1) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation, or (4) any three schools.
+
+Divination: To become a diviner, a wizard must select any other single school as a prohibited school.
+
+Enchantment: To become an enchanter, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
+
+Evocation: To become an evoker, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation; or (4) any three schools.
+
+Illusion: To become an illusionist, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Enchantment, Evocation, or Transmutation; or (2) both Divination and Necromancy.
+
+Necromancy: To become a necromancer, a wizard must select any other single school as a prohibited school.
+
+Transmutation: To become a transmuter, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; or (4) any three schools.
+
+Universal: Not a school, but a category for spells all wizards can learn. A wizard cannot select universal as a specialty school or as a school to which she does not have access.</features>
+</class>
+<class level="1" name="Adept" hd="d6" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Adepts are skilled with all simple weapons. Adepts are not proficient with any type of armor nor with shields</wa_proficiency>
+<features>Spells: An adept casts divine spells. She is limited to a certain number of spells of each spell level per day, according to her class level. Like a cleric, an adept may prepare and cast any spell on the adept list, provided she can cast spells of that level. Like a cleric, she prepares her spells ahead of time each day. The DC for a saving throw against an adept's spell is 10 + spell level + the adept's Wisdom modifier.
+
+Adepts, unlike wizards, do not acquire their spells from books or scrolls, nor prepare them through study. Instead, they meditate or pray for their spells, receiving them as divine inspiration or through their own strength of faith. Each adept must choose a time each day at which she must spend an hour in quiet contemplation or supplication to regain her daily allotment of spells. Time spent resting has no effect on whether an adept can prepare spells.
+
+When the adept gets 0 spells of a given level, she gets only bonus spells for that spell slot. An adept without a bonus spell for that level cannot yet cast a spell of that level. Bonus spells are based on Wisdom.
+
+Each adept has a particular holy symbol (as a divine focus) depending on the adept's magical tradition.
+
+Familiar: At 2nd level, an adept can call a familiar, just like a sorcerer or wizard can.
+
+Adept Spell List
+0 level-create water, cure minor wounds, detect magic, ghost sound, guidance, light, mending, purify food and drink, read magic.
+1st level-bless, burning hands, cause fear, command, comprehend languages, cure light wounds, detect chaos, detect evil, detect good, detect law, endure elements, obscuring mist, protection from chaos, protection from evil, protection from good, protection from law, sleep.
+2nd level-aid, animal trance, bull's strength, cat's grace, cure moderate wounds, darkness, delay poison, endurance, invisibility, mirror image, resist elements, see invisibility, web.
+3rd level-animate dead, bestow curse, contagion, continual flame, cure serious wounds, daylight, deeper darkness, lightning bolt, neutralize poison, remove curse, remove disease, tongues.
+4th level-cure critical wounds, minor creation, polymorph other, polymorph self, restoration, stoneskin, wall of fire.
+5th level-break enchantment, commune, heal, major creation, raise dead, true seeing, wall of stone.</features>
+</class>
+<class level="1" name="Aristocrat" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The aristocrat is proficient in the use of all simple and martial weapons and with all types of armor and shields.</wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Commoner" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The commoner is proficient with one simple weapon. He is not proficient with weapons, armor, or shields.</wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Expert" hd="d6" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The expert is proficient in the use of all simple weapons and with light armor but not shields. </wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Warrior" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The warrior is proficient in the use of all simple and martial weapons and all armor and shields.</wa_proficiency>
+<features>None</features>
+</class>
+</classes>
--- a/data/d20/d20divine.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20divine.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,326 +1,326 @@
-<divine>
-<gift name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws.' />
-<gift name='Ray of Frost' memrz='0' level='0' desc='Ray deals 1d3 cold damage.' />
-<gift name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object.' />
-<gift name='Daze' memrz='0' level='0' desc='Creature loses next action.' />
-<gift name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack).' />
-<gift name='Light' memrz='0' level='0' desc='Object shines like a torch.' />
-<gift name='Dancing Lights' memrz='0' level='0' desc='Figment torches or other lights.' />
-<gift name='Ghost Sound' memrz='0' level='0' desc='Figment sounds.' />
-<gift name='Disrupt Undead' memrz='0' level='0' desc='Deals 1d6 damage to one undead.' />
-<gift name='Mage Hand' memrz='0' level='0' desc='5-pound telekinesis.' />
-<gift name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object.' />
-<gift name='Open/Close' memrz='0' level='0' desc='Opens or closes small or light things.' />
-<gift name='Arcane Mark' memrz='0' level='0' desc='Inscribes a personal rune (visible or invisible).' />
-<gift name='Detect Magic' memrz='0' level='0' desc='Detects gifts and magic items within 60 ft.' />
-<gift name='Prestidigitation' memrz='0' level='0' desc='Performs minor tricks.' />
-<gift name='Read Magic' memrz='0' level='0' desc='Read scrolls and giftbooks.' />
-<gift name='Alarm' memrz='0' level='1' desc='Wards an area for 2 hours/level.' />
-<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type.' />
-<gift name='Hold Portal' memrz='0' level='1' desc='Holds door shut.' />
-<gift name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders.' />
-<gift name='Shield' memrz='0' level='1' desc='Invisible disc gives cover and blocks magic missiles.' />
-<gift name='Grease' memrz='0' level='1' desc='Makes 10-ft. square or one object slippery.' />
-<gift name='Mage Armor' memrz='0' level='1' desc='Gives subject +4 armor bonus.' />
-<gift name='Mount' memrz='0' level='1' desc='Summons riding horse for 2 hr./level.' />
-<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you.' />
-<gift name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you.' />
-<gift name='Unseen Servant' memrz='0' level='1' desc='Creates invisible force that obeys your commands.' />
-<gift name='Comprehend Languages' memrz='0' level='1' desc='Understands all spoken and written languages.' />
-<gift name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft.' />
-<gift name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft.' />
-<gift name='Identify' memrz='0' level='1' desc='Determines single feature of magic item.' />
-<gift name='True Strike' memrz='0' level='1' desc='Adds +20 bonus to your next attack roll.' />
-<gift name='Charm Person' memrz='0' level='1' desc='Makes one person your friend.' />
-<gift name='Hypnotism' memrz='0' level='1' desc='Fascinates 2d4 HD of creatures.' />
-<gift name='Sleep' memrz='0' level='1' desc='Put 2d4 HD of creatures into comatose slumber.' />
-<gift name='Magic Missile' memrz='0' level='1' desc='1d4+1 damage; +1 missile/two levels above 1st (max +5).' />
-<gift name='Tensers Floating Disk' memrz='0' level='1' desc='3-ft.-diameter horizontal disk that holds 100 lb./level.' />
-<gift name='Change Self' memrz='0' level='1' desc='Changes your appearance.' />
-<gift name='Color Spray' memrz='0' level='1' desc='Knocks unconscious, blinds, or stuns 1d6 weak creatures.' />
-<gift name='Nystuls Magical Aura' memrz='0' level='1' desc='Grants object false magic aura.' />
-<gift name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura.' />
-<gift name='Silent Image' memrz='0' level='1' desc='Creates minor illusion of your design.' />
-<gift name='Ventriloquism' memrz='0' level='1' desc='Throws voice for 1 min./level.' />
-<gift name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds.' />
-<gift name='Chill Touch' memrz='0' level='1' desc='1 touch/level deals 1d6 damage and possibly 1 Str damage.' />
-<gift name='Ray of Enfeeblement' memrz='0' level='1' desc='Ray reduces Str by 1d6 points +1 point/two levels.' />
-<gift name='Animate Rope' memrz='0' level='1' desc='Makes a rope move at your command.' />
-<gift name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max: 5d4).' />
-<gift name='Enlarge' memrz='0' level='1' desc='Object or creature grows +10%/level (max +50%).' />
-<gift name='Erase' memrz='0' level='1' desc='Mundane or magical writing vanishes.' />
-<gift name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed.' />
-<gift name='Feather Fall' memrz='0' level='1' desc='Objects or creatures fall slowly.' />
-<gift name='Jump' memrz='0' level='1' desc='Subject gets +30 on Jump checks.' />
-<gift name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus.' />
-<gift name='Message' memrz='0' level='1' desc='Whispered conversation at distance.' />
-<gift name='Reduce' memrz='0' level='1' desc='Object or creature shrinks 10%/level (max 50%).' />
-<gift name='Shocking Grasp' memrz='0' level='1' desc='Touch delivers 1d8 +1/level electricity.' />
-<gift name='Spider Climb' memrz='0' level='1' desc='Grants ability to walk on walls and ceilings.' />
-<gift name='Arcane Lock' memrz='0' level='2' desc='Magically locks a portal or chest.' />
-<gift name='Obscure Object' memrz='0' level='2' desc='Masks object against divination.' />
-<gift name='Protection from Arrows' memrz='0' level='2' desc='Subject immune to most ranged attacks.' />
-<gift name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type.' />
-<gift name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision.' />
-<gift name='Glitterdust' memrz='0' level='2' desc='Blinds creatures, outlines invisible creatures.' />
-<gift name='Melfs Acid Arrow' memrz='0' level='2' desc='Ranged touch attack; 2d4 damage for 1 round + 1 round/three levels.' />
-<gift name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you.' />
-<gift name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures.' />
-<gift name='Web' memrz='0' level='2' desc='Fills 10-ft. cube/level with sticky spider webs.' />
-<gift name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts.' />
-<gift name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type).' />
-<gift name='See Invisibility' memrz='0' level='2' desc='Reveals invisible creatures or objects.' />
-<gift name='Tashas Hideous Laughter' memrz='0' level='2' desc='Subject loses actions for 1d3 rounds.' />
-<gift name='Darkness' memrz='0' level='2' desc='20-ft. radius of supernatural darkness.' />
-<gift name='Daylight' memrz='0' level='2' desc='60-ft. radius of bright light.' />
-<gift name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level.' />
-<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures.' />
-<gift name='Blur' memrz='0' level='2' desc='Attacks miss subject 20% of the time.' />
-<gift name='Continual Flame' memrz='0' level='2' desc='Makes a permanent, heatless torch.' />
-<gift name='Hypnotic Pattern' memrz='0' level='2' desc='Fascinates 2d4+1 HD/level of creatures.' />
-<gift name='Invisibility' memrz='0' level='2' desc='Subject is invisible for 10 min./level or until it attacks.' />
-<gift name='Leomunds Trap' memrz='0' level='2' desc='Makes item seem trapped.' />
-<gift name='Magic Mouth' memrz='0' level='2' desc='Speaks once when triggered.' />
-<gift name='Minor Image' memrz='0' level='2' desc='As silent image, plus some sound.' />
-<gift name='Mirror Image' memrz='0' level='2' desc='Creates decoy duplicates of you (1d4 +1/three levels, max 8).' />
-<gift name='Misdirection' memrz='0' level='2' desc='Misleads divinations for one creature or object.' />
-<gift name='Ghoul Touch' memrz='0' level='2' desc='Paralyzes one subject, who exudes stench (-2 penalty) nearby.' />
-<gift name='Scare' memrz='0' level='2' desc='Panics creatures up to 5 HD (15-ft. radius).' />
-<gift name='Spectral Hand' memrz='0' level='2' desc='Creates disembodied glowing hand to deliver touch attacks.' />
-<gift name='Alter Self' memrz='0' level='2' desc='As change self, plus more drastic changes.' />
-<gift name='Blindness/Deafness' memrz='0' level='2' desc='Makes subject blind or deaf.' />
-<gift name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level.' />
-<gift name='Cats Grace' memrz='0' level='2' desc='Subject gains 1d4+1 Dex for 1 hr./level.' />
-<gift name='Darkvision' memrz='0' level='2' desc='See 60 ft. in total darkness.' />
-<gift name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level.' />
-<gift name='Knock' memrz='0' level='2' desc='Opens locked or magically sealed door.' />
-<gift name='Levitate' memrz='0' level='2' desc='Subject moves up and down at your direction.' />
-<gift name='Pyrotechnics' memrz='0' level='2' desc='Turns fire into blinding light or choking smoke.' />
-<gift name='Rope Trick' memrz='0' level='2' desc='Up to eight creatures hide in extradimensional space.' />
-<gift name='Whispering Wind' memrz='0' level='2' desc='Sends a short message one mile/level.' />
-<gift name='Dispel Magic' memrz='0' level='3' desc='Cancels magical gifts and effects.' />
-<gift name='Explosive Runes' memrz='0' level='3' desc='Deals 6d6 damage when read.' />
-<gift name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection gifts, but 10-ft. radius and 10 min./level.' />
-<gift name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying.' />
-<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy.' />
-<gift name='Flame Arrow' memrz='0' level='3' desc='Shoots flaming projectiles (extra damage) or fiery bolts (4d6 damage).' />
-<gift name='Phantom Steed' memrz='0' level='3' desc='Magical horse appears for 1 hour/level.' />
-<gift name='Sepia Snake Sigil' memrz='0' level='3' desc='Creates text symbol that immobilizes reader.' />
-<gift name='Sleet Storm' memrz='0' level='3' desc='Hampers vision and movement.' />
-<gift name='Stinking Cloud' memrz='0' level='3' desc='Nauseating vapors, 1 round/level.' />
-<gift name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you.' />
-<gift name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level.' />
-<gift name='Tongues' memrz='0' level='3' desc='Speak any language.' />
-<gift name='Hold Person' memrz='0' level='3' desc='Holds one person helpless; 1 round/level.' />
-<gift name='Suggestion' memrz='0' level='3' desc='Compels subject to follow stated course of action.' />
-<gift name='Fireball' memrz='0' level='3' desc='1d6 damage per level, 20-ft. radius.' />
-<gift name='Gust of Wind' memrz='0' level='3' desc='Blows away or knocks down smaller creatures.' />
-<gift name='Leomunds Tiny Hut' memrz='0' level='3' desc='Creates shelter for 10 creatures.' />
-<gift name='Lightning Bolt' memrz='0' level='3' desc='Electricity deals 1d6 damage/level.' />
-<gift name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases.' />
-<gift name='Displacement' memrz='0' level='3' desc='Attacks miss subject 50%.' />
-<gift name='Illusory Script' memrz='0' level='3' desc='Only intended reader can decipher.' />
-<gift name='Invisibility Sphere' memrz='0' level='3' desc='Makes everyone within 10 ft. invisible.' />
-<gift name='Major Image' memrz='0' level='3' desc='As silent image, plus sound, smell and thermal effects.' />
-<gift name='Gentle Repose' memrz='0' level='3' desc='Preserves one corpse.' />
-<gift name='Halt Undead' memrz='0' level='3' desc='Immobilizes undead for 1 round/level.' />
-<gift name='Vampiric Touch' memrz='0' level='3' desc='Touch deals 1d6/two caster levels; caster gains damage as hp.' />
-<gift name='Blink' memrz='0' level='3' desc='You randomly vanish and reappear for 1 round/level.' />
-<gift name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90.' />
-<gift name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly.' />
-<gift name='Greater Magic Weapon' memrz='0' level='3' desc='+1/three levels (max +5).' />
-<gift name='Haste' memrz='0' level='3' desc='Extra partial action and +4 AC.' />
-<gift name='Keen Edge' memrz='0' level='3' desc='Doubles normal weapons threat range.' />
-<gift name='Secret Page' memrz='0' level='3' desc='Changes one page to hide its real content.' />
-<gift name='Shrink Item' memrz='0' level='3' desc='Object shrinks to one-twelfth size.' />
-<gift name='Slow' memrz='0' level='3' desc='One subject/level takes only partial actions, -2 AC, -2 melee rolls.' />
-<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater.' />
-<gift name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement.' />
-<gift name='Fire Trap' memrz='0' level='4' desc='Opened object deals 1d4 +1/level damage.' />
-<gift name='Minor Globe of Invulnerability' memrz='0' level='4' desc='Stops 1st- through 3rd-level gift effects.' />
-<gift name='Remove Curse' memrz='0' level='4' desc='Frees object or person from curse.' />
-<gift name='Stoneskin' memrz='0' level='4' desc='Stops blows, cuts, stabs, and slashes.' />
-<gift name='Evards Black Tentacles' memrz='0' level='4' desc='1d4 +1/level tentacles grapple randomly within 15 ft.' />
-<gift name='Leomunds Secure Shelter' memrz='0' level='4' desc='Creates sturdy cottage.' />
-<gift name='Minor Creation' memrz='0' level='4' desc='Creates one cloth or wood object.' />
-<gift name='Solid Fog' memrz='0' level='4' desc='Blocks vision and slows movement.' />
-<gift name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you.' />
-<gift name='Arcane Eye' memrz='0' level='4' desc='Invisible floating eye moves 30 ft./round.' />
-<gift name='Detect Scrying' memrz='0' level='4' desc='Alerts you of magical eavesdropping.' />
-<gift name='Locate Creature' memrz='0' level='4' desc='Indicates direction to familiar creature.' />
-<gift name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance.' />
-<gift name='Charm Monster' memrz='0' level='4' desc='Makes monster believe it is your ally.' />
-<gift name='Confusion' memrz='0' level='4' desc='Makes subject behave oddly for 1 round/level.' />
-<gift name='Emotion' memrz='0' level='4' desc='Arouses strong emotion in subject.' />
-<gift name='Lesser Geas' memrz='0' level='4' desc='Commands subject of 7 HD or less.' />
-<gift name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold.' />
-<gift name='Ice Storm' memrz='0' level='4' desc='Hail deals 5d6 damage in cylinder 40 ft. across.' />
-<gift name='Otilukes Resilient Sphere' memrz='0' level='4' desc='Force globe protects but traps one subject.' />
-<gift name='Shout' memrz='0' level='4' desc='Deafens all within cone and deals 2d6 damage.' />
-<gift name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft.' />
-<gift name='Wall of Ice' memrz='0' level='4' desc='Ice plane creates wall with 15 hp +1/level, or hemisphere can trap creatures inside.' />
-<gift name='Hallucinatory Terrain' memrz='0' level='4' desc='Makes one type of terrain appear like another (field into forest, etc).' />
-<gift name='Illusory Wall' memrz='0' level='4' desc='Wall, floor, or ceiling looks real, but anything can pass through.' />
-<gift name='Improved Invisibility' memrz='0' level='4' desc='As invisibility, but subject can attack and stay invisible.' />
-<gift name='Phantasmal Killer' memrz='0' level='4' desc='Fearsome illusion kills subject or deals 3d6 damage.' />
-<gift name='Rainbow Pattern' memrz='0' level='4' desc='Lights prevent 24 HD of creatures from attacking or moving away.' />
-<gift name='Shadow Conjuration' memrz='0' level='4' desc='Mimics conjuring below 4th level.' />
-<gift name='Contagion' memrz='0' level='4' desc='Infects subject with chosen disease.' />
-<gift name='Enervation' memrz='0' level='4' desc='Subject gains 1d4 negative levels.' />
-<gift name='Fear' memrz='0' level='4' desc='Subjects within cone flee for 1 round/level.' />
-<gift name='Bestow Curse' memrz='0' level='4' desc='-6 to an ability; -4 on attacks, saves, and checks; or 50% chance of losing each action.' />
-<gift name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb.' />
-<gift name='Polymorph Other' memrz='0' level='4' desc='Gives one subject a new form.' />
-<gift name='Polymorph Self' memrz='0' level='4' desc='You assume a new form.' />
-<gift name='Rarys Mnemonic Enhancer' memrz='0' level='4' desc='Prepares extra gifts or retains one just cast. Wizard only.' />
-<gift name='Dismissal' memrz='0' level='5' desc='Forces a creature to return to native plane.' />
-<gift name='Cloudkill' memrz='0' level='5' desc='Kills 3 HD or less; 4-6 HD save or die.' />
-<gift name='Leomunds Secret Chest' memrz='0' level='5' desc='Hides expensive chest on Ethereal Plane; you retrieve it at will.' />
-<gift name='Lesser Planar Binding' memrz='0' level='5' desc='Traps outsider until it performs a task.' />
-<gift name='Major Creation' memrz='0' level='5' desc='As minor creation, plus stone and metal.' />
-<gift name='Mordenkainens Faithful Hound' memrz='0' level='5' desc='Phantom dog can guard, attack.' />
-<gift name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you.' />
-<gift name='Wall of Iron' memrz='0' level='5' desc='30 hp/four levels; can topple onto foes.' />
-<gift name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped.' />
-<gift name='Contact Other Plane' memrz='0' level='5' desc='Ask question of extraplanar entity.' />
-<gift name='Prying Eyes' memrz='0' level='5' desc='1d4 floating eyes +1/level scout for you.' />
-<gift name='Rarys Telepathic Bond' memrz='0' level='5' desc='Link lets allies communicate.' />
-<gift name='Dominate Person' memrz='0' level='5' desc='Controls humanoid telepathically.' />
-<gift name='Feeblemind' memrz='0' level='5' desc='Subjects Int drops to 1.' />
-<gift name='Hold Monster' memrz='0' level='5' desc='As hold person, but any creature.' />
-<gift name='Mind Fog' memrz='0' level='5' desc='Subjects in fog get -10 Wis, Will checks.' />
-<gift name='Bigbys Interposing Hand' memrz='0' level='5' desc='Hand provides 90% cover against one opponent.' />
-<gift name='Cone of Cold' memrz='0' level='5' desc='1d6 cold damage/level.' />
-<gift name='Sending' memrz='0' level='5' desc='Delivers short message anywhere, instantly.' />
-<gift name='Wall of Force' memrz='0' level='5' desc='Wall is immune to damage.' />
-<gift name='Dream' memrz='0' level='5' desc='Sends message to anyone sleeping.' />
-<gift name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion.' />
-<gift name='Greater Shadow Conjuration' memrz='0' level='5' desc='As shadow conjuration, but up to 4th level and 40% real.' />
-<gift name='Mirage Arcana' memrz='0' level='5' desc='As hallucinatory terrain, plus structures.' />
-<gift name='Nightmare' memrz='0' level='5' desc='Sends vision dealing 1d10 damage, fatigue.' />
-<gift name='Persistent Image' memrz='0' level='5' desc='As major image, but no concentration required.' />
-<gift name='Seeming' memrz='0' level='5' desc='Changes appearance of one person/two levels.' />
-<gift name='Shadow Evocation' memrz='0' level='5' desc='Mimics evocation less than 5th level.' />
-<gift name='Animate Dead' memrz='0' level='5' desc='Creates undead skeletons and zombies.' />
-<gift name='Magic Jar' memrz='0' level='5' desc='Enables possession of another creature.' />
-<gift name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD.' />
-<gift name='Fabricate' memrz='0' level='5' desc='Transforms raw materials into finished items.' />
-<gift name='Passwall' memrz='0' level='5' desc='Breaches walls 1 ft. thick/level.' />
-<gift name='Stone Shape' memrz='0' level='5' desc='Sculpts stone into any form.' />
-<gift name='Telekinesis' memrz='0' level='5' desc='Lifts or moves 25 lb./level at long range.' />
-<gift name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere.' />
-<gift name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
-<gift name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
-<gift name='Permanency' memrz='0' level='5' desc='Makes certain gifts permanent; costs XP.' />
-<gift name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft.' />
-<gift name='Globe of Invulnerability' memrz='0' level='6' desc='As minor globe, plus 4th level.' />
-<gift name='Greater Digifting' memrz='0' level='6' desc='As dispel magic, but +20 on check.' />
-<gift name='Guards and Wards' memrz='0' level='6' desc='Array of magic effects protect area.' />
-<gift name='Repulsion' memrz='0' level='6' desc='Creatures cant approach you.' />
-<gift name='Acid Fog' memrz='0' level='6' desc='Fog deals acid damage.' />
-<gift name='Planar Binding' memrz='0' level='6' desc='As lesser planar binding, but up to 16 HD.' />
-<gift name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you.' />
-<gift name='Analyze Dweomer' memrz='0' level='6' desc='Reveals magical aspects of subject.' />
-<gift name='Legend Lore' memrz='0' level='6' desc='Learn tales about a person, place, or thing.' />
-<gift name='True Seeing' memrz='0' level='6' desc='See all things as they really are.' />
-<gift name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature.' />
-<gift name='Mass Suggestion' memrz='0' level='6' desc='As suggestion, plus one/level subjects.' />
-<gift name='Bigbys Forceful Hand' memrz='0' level='6' desc='Hand pushes creatures away.' />
-<gift name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts.' />
-<gift name='Contingency' memrz='0' level='6' desc='Sets trigger condition for another gift.' />
-<gift name='Otilukes Freezing Sphere' memrz='0' level='6' desc='Freezes water or deals cold damage.' />
-<gift name='Greater Shadow Evocation' memrz='0' level='6' desc='As shadow evocation, but up to 5th level.' />
-<gift name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double.' />
-<gift name='Permanent Image' memrz='0' level='6' desc='Includes sight, sound, and smell.' />
-<gift name='Programmed Image' memrz='0' level='6' desc='As major image, plus triggered by event.' />
-<gift name='Project Image' memrz='0' level='6' desc='Illusory double can talk and cast gifts.' />
-<gift name='Shades' memrz='0' level='6' desc='As shadow conjuration, but up to 5th level and 60% real.' />
-<gift name='Veil' memrz='0' level='6' desc='Changes appearance of group of creatures.' />
-<gift name='Circle of Death' memrz='0' level='6' desc='Kills 1d4 HD/level.' />
-<gift name='Control Water' memrz='0' level='6' desc='Raises, lowers, or parts bodies of water.' />
-<gift name='Control Weather' memrz='0' level='6' desc='Changes weather in local area.' />
-<gift name='Disintegrate' memrz='0' level='6' desc='Makes one creature or object vanish.' />
-<gift name='Eyebite' memrz='0' level='6' desc='Charm, fear, sicken or sleep one subject.' />
-<gift name='Flesh to Stone' memrz='0' level='6' desc='Turns subject creature into statue.' />
-<gift name='Mass Haste' memrz='0' level='6' desc='As haste, affects one/level subjects.' />
-<gift name='Mordenkainens Lucubration' memrz='0' level='6' desc='Recalls gift of 5th level or less. Wizard Only.' />
-<gift name='Move Earth' memrz='0' level='6' desc='Digs trenches and build hills.' />
-<gift name='Stone to Flesh' memrz='0' level='6' desc='Restores petrified creature.' />
-<gift name='Tensers Transformation' memrz='0' level='6' desc='You gain combat bonuses.' />
-<gift name='Banishment' memrz='0' level='7' desc='Banishes 2 HD/level extraplanar creatures.' />
-<gift name='Sequester' memrz='0' level='7' desc='Subject is invisible to sight and scrying.' />
-<gift name='gift Turning' memrz='0' level='7' desc='Reflect 1d4+6 gift levels back at caster.' />
-<gift name='Drawmijs Instant Summons' memrz='0' level='7' desc='Prepared object appears in your hand.' />
-<gift name='Mordenkainens Magnificent Mansion' memrz='0' level='7' desc='Door leads to extradimensional mansion.' />
-<gift name='Phase Door' memrz='0' level='7' desc='Invisible passage through wood or stone.' />
-<gift name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp.' />
-<gift name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you.' />
-<gift name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer.' />
-<gift name='Vision' memrz='0' level='7' desc='As legend lore, but quicker and strenuous.' />
-<gift name='Insanity' memrz='0' level='7' desc='Subject suffers continuous confusion.' />
-<gift name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples.' />
-<gift name='Delayed Blast Fireball' memrz='0' level='7' desc='1d8 fire damage/level; you can delay blast for 5 rounds.' />
-<gift name='Forcecage' memrz='0' level='7' desc='Cube of force imprisons all inside.' />
-<gift name='Mordenkainens Sword' memrz='0' level='7' desc='Floating magic blade strikes opponents.' />
-<gift name='Prismatic Spray' memrz='0' level='7' desc='Rays hit subjects with variety of effects.' />
-<gift name='Mass Invisibility' memrz='0' level='7' desc='As invisibility, but affects all in range.' />
-<gift name='Shadow Walk' memrz='0' level='7' desc='Step into shadow to travel rapidly.' />
-<gift name='Simulacrum' memrz='0' level='7' desc='Creates partially real double of a creature.' />
-<gift name='Control Undead' memrz='0' level='7' desc='Undead dont attack you while under your command.' />
-<gift name='Finger of Death' memrz='0' level='7' desc='Kills one subject.' />
-<gift name='Ethereal Jaunt' memrz='0' level='7' desc='You become ethereal for 1 round/level.' />
-<gift name='Plane Shift' memrz='0' level='7' desc='Up to eight subjects travel to another plane.' />
-<gift name='Reverse Gravity' memrz='0' level='7' desc='Objects and creatures fall upward.' />
-<gift name='Statue' memrz='0' level='7' desc='Subject can become a statue at will.' />
-<gift name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival.' />
-<gift name='Vanish' memrz='0' level='7' desc='As teleport, but affects a touched object.' />
-<gift name='Limited Wish' memrz='0' level='7' desc='Alters reality-within gift limits.' />
-<gift name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying.' />
-<gift name='Prismatic Wall' memrz='0' level='8' desc='Walls colors have array of effects.' />
-<gift name='Protection from gifts' memrz='0' level='8' desc='Confers +8 resistance bonus.' />
-<gift name='Greater Planar Binding' memrz='0' level='8' desc='As lesser planar binding, but up to 24 HD.' />
-<gift name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round.' />
-<gift name='Maze' memrz='0' level='8' desc='Traps subject in extradimensional maze.' />
-<gift name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures.' />
-<gift name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you.' />
-<gift name='Trap the Soul' memrz='0' level='8' desc='Imprisons subject within gem.' />
-<gift name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object.' />
-<gift name='Antipathy' memrz='0' level='8' desc='Object or location affected by gift repels certain creatures.' />
-<gift name='Binding' memrz='0' level='8' desc='Array of techniques to imprison a creature.' />
-<gift name='Demand' memrz='0' level='8' desc='As sending, plus you can send suggestion.' />
-<gift name='Mass Charm' memrz='0' level='8' desc='As charm monster, but all within 30 ft.' />
-<gift name='Ottos Irresistible Dance' memrz='0' level='8' desc='Forces subject to dance.' />
-<gift name='Sympathy' memrz='0' level='8' desc='Object or location attracts certain creatures.' />
-<gift name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes.' />
-<gift name='Otilukes Telekinetic Sphere' memrz='0' level='8' desc='As Otilukes resilient sphere, but you move sphere telekinetically.' />
-<gift name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage.' />
-<gift name='Screen' memrz='0' level='8' desc='Illusion hides area from vision, scrying.' />
-<gift name='Clone' memrz='0' level='8' desc='Duplicate awakens when original dies.' />
-<gift name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft.' />
-<gift name='Etherealness' memrz='0' level='8' desc='Travel to Ethereal Plane with companions.' />
-<gift name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron.' />
-<gift name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else.' />
-<gift name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects.' />
-<gift name='Freedom' memrz='0' level='9' desc='Releases creature suffering imprisonment.' />
-<gift name='Imprisonment' memrz='0' level='9' desc='Entombs subject beneath the earth.' />
-<gift name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items.' />
-<gift name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides.' />
-<gift name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning.' />
-<gift name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones.' />
-<gift name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you.' />
-<gift name='Foresight' memrz='0' level='9' desc='Sixth sense warns of impending danger.' />
-<gift name='Dominate Monster' memrz='0' level='9' desc='As dominate person, but any creature.' />
-<gift name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys interposing hand, but stronger.' />
-<gift name='Meteor Swarm' memrz='0' level='9' desc='Deals 24d6 fire damage, plus bursts.' />
-<gift name='Weird' memrz='0' level='9' desc='As phantasmal killer, but affects all within 30 ft.' />
-<gift name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane.' />
-<gift name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels.' />
-<gift name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection.' />
-<gift name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level.' />
-<gift name='Refuge' memrz='0' level='9' desc='Alters item to transport its possessor to you.' />
-<gift name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round.' />
-<gift name='Teleportation Circle' memrz='0' level='9' desc='Circle teleports any creature inside to designated spot.' />
-<gift name='Temporal Stasis' memrz='0' level='9' desc='Puts subject into suspended animation.' />
-<gift name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds.' />
-<gift name='Wish' memrz='0' level='9' desc='As limited wish, but with fewer limits.' />
-</divine>
+<divine>
+<gift name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws.' />
+<gift name='Ray of Frost' memrz='0' level='0' desc='Ray deals 1d3 cold damage.' />
+<gift name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object.' />
+<gift name='Daze' memrz='0' level='0' desc='Creature loses next action.' />
+<gift name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack).' />
+<gift name='Light' memrz='0' level='0' desc='Object shines like a torch.' />
+<gift name='Dancing Lights' memrz='0' level='0' desc='Figment torches or other lights.' />
+<gift name='Ghost Sound' memrz='0' level='0' desc='Figment sounds.' />
+<gift name='Disrupt Undead' memrz='0' level='0' desc='Deals 1d6 damage to one undead.' />
+<gift name='Mage Hand' memrz='0' level='0' desc='5-pound telekinesis.' />
+<gift name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object.' />
+<gift name='Open/Close' memrz='0' level='0' desc='Opens or closes small or light things.' />
+<gift name='Arcane Mark' memrz='0' level='0' desc='Inscribes a personal rune (visible or invisible).' />
+<gift name='Detect Magic' memrz='0' level='0' desc='Detects gifts and magic items within 60 ft.' />
+<gift name='Prestidigitation' memrz='0' level='0' desc='Performs minor tricks.' />
+<gift name='Read Magic' memrz='0' level='0' desc='Read scrolls and giftbooks.' />
+<gift name='Alarm' memrz='0' level='1' desc='Wards an area for 2 hours/level.' />
+<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type.' />
+<gift name='Hold Portal' memrz='0' level='1' desc='Holds door shut.' />
+<gift name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders.' />
+<gift name='Shield' memrz='0' level='1' desc='Invisible disc gives cover and blocks magic missiles.' />
+<gift name='Grease' memrz='0' level='1' desc='Makes 10-ft. square or one object slippery.' />
+<gift name='Mage Armor' memrz='0' level='1' desc='Gives subject +4 armor bonus.' />
+<gift name='Mount' memrz='0' level='1' desc='Summons riding horse for 2 hr./level.' />
+<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you.' />
+<gift name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you.' />
+<gift name='Unseen Servant' memrz='0' level='1' desc='Creates invisible force that obeys your commands.' />
+<gift name='Comprehend Languages' memrz='0' level='1' desc='Understands all spoken and written languages.' />
+<gift name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft.' />
+<gift name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft.' />
+<gift name='Identify' memrz='0' level='1' desc='Determines single feature of magic item.' />
+<gift name='True Strike' memrz='0' level='1' desc='Adds +20 bonus to your next attack roll.' />
+<gift name='Charm Person' memrz='0' level='1' desc='Makes one person your friend.' />
+<gift name='Hypnotism' memrz='0' level='1' desc='Fascinates 2d4 HD of creatures.' />
+<gift name='Sleep' memrz='0' level='1' desc='Put 2d4 HD of creatures into comatose slumber.' />
+<gift name='Magic Missile' memrz='0' level='1' desc='1d4+1 damage; +1 missile/two levels above 1st (max +5).' />
+<gift name='Tensers Floating Disk' memrz='0' level='1' desc='3-ft.-diameter horizontal disk that holds 100 lb./level.' />
+<gift name='Change Self' memrz='0' level='1' desc='Changes your appearance.' />
+<gift name='Color Spray' memrz='0' level='1' desc='Knocks unconscious, blinds, or stuns 1d6 weak creatures.' />
+<gift name='Nystuls Magical Aura' memrz='0' level='1' desc='Grants object false magic aura.' />
+<gift name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura.' />
+<gift name='Silent Image' memrz='0' level='1' desc='Creates minor illusion of your design.' />
+<gift name='Ventriloquism' memrz='0' level='1' desc='Throws voice for 1 min./level.' />
+<gift name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds.' />
+<gift name='Chill Touch' memrz='0' level='1' desc='1 touch/level deals 1d6 damage and possibly 1 Str damage.' />
+<gift name='Ray of Enfeeblement' memrz='0' level='1' desc='Ray reduces Str by 1d6 points +1 point/two levels.' />
+<gift name='Animate Rope' memrz='0' level='1' desc='Makes a rope move at your command.' />
+<gift name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max: 5d4).' />
+<gift name='Enlarge' memrz='0' level='1' desc='Object or creature grows +10%/level (max +50%).' />
+<gift name='Erase' memrz='0' level='1' desc='Mundane or magical writing vanishes.' />
+<gift name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed.' />
+<gift name='Feather Fall' memrz='0' level='1' desc='Objects or creatures fall slowly.' />
+<gift name='Jump' memrz='0' level='1' desc='Subject gets +30 on Jump checks.' />
+<gift name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus.' />
+<gift name='Message' memrz='0' level='1' desc='Whispered conversation at distance.' />
+<gift name='Reduce' memrz='0' level='1' desc='Object or creature shrinks 10%/level (max 50%).' />
+<gift name='Shocking Grasp' memrz='0' level='1' desc='Touch delivers 1d8 +1/level electricity.' />
+<gift name='Spider Climb' memrz='0' level='1' desc='Grants ability to walk on walls and ceilings.' />
+<gift name='Arcane Lock' memrz='0' level='2' desc='Magically locks a portal or chest.' />
+<gift name='Obscure Object' memrz='0' level='2' desc='Masks object against divination.' />
+<gift name='Protection from Arrows' memrz='0' level='2' desc='Subject immune to most ranged attacks.' />
+<gift name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type.' />
+<gift name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision.' />
+<gift name='Glitterdust' memrz='0' level='2' desc='Blinds creatures, outlines invisible creatures.' />
+<gift name='Melfs Acid Arrow' memrz='0' level='2' desc='Ranged touch attack; 2d4 damage for 1 round + 1 round/three levels.' />
+<gift name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you.' />
+<gift name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures.' />
+<gift name='Web' memrz='0' level='2' desc='Fills 10-ft. cube/level with sticky spider webs.' />
+<gift name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts.' />
+<gift name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type).' />
+<gift name='See Invisibility' memrz='0' level='2' desc='Reveals invisible creatures or objects.' />
+<gift name='Tashas Hideous Laughter' memrz='0' level='2' desc='Subject loses actions for 1d3 rounds.' />
+<gift name='Darkness' memrz='0' level='2' desc='20-ft. radius of supernatural darkness.' />
+<gift name='Daylight' memrz='0' level='2' desc='60-ft. radius of bright light.' />
+<gift name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level.' />
+<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures.' />
+<gift name='Blur' memrz='0' level='2' desc='Attacks miss subject 20% of the time.' />
+<gift name='Continual Flame' memrz='0' level='2' desc='Makes a permanent, heatless torch.' />
+<gift name='Hypnotic Pattern' memrz='0' level='2' desc='Fascinates 2d4+1 HD/level of creatures.' />
+<gift name='Invisibility' memrz='0' level='2' desc='Subject is invisible for 10 min./level or until it attacks.' />
+<gift name='Leomunds Trap' memrz='0' level='2' desc='Makes item seem trapped.' />
+<gift name='Magic Mouth' memrz='0' level='2' desc='Speaks once when triggered.' />
+<gift name='Minor Image' memrz='0' level='2' desc='As silent image, plus some sound.' />
+<gift name='Mirror Image' memrz='0' level='2' desc='Creates decoy duplicates of you (1d4 +1/three levels, max 8).' />
+<gift name='Misdirection' memrz='0' level='2' desc='Misleads divinations for one creature or object.' />
+<gift name='Ghoul Touch' memrz='0' level='2' desc='Paralyzes one subject, who exudes stench (-2 penalty) nearby.' />
+<gift name='Scare' memrz='0' level='2' desc='Panics creatures up to 5 HD (15-ft. radius).' />
+<gift name='Spectral Hand' memrz='0' level='2' desc='Creates disembodied glowing hand to deliver touch attacks.' />
+<gift name='Alter Self' memrz='0' level='2' desc='As change self, plus more drastic changes.' />
+<gift name='Blindness/Deafness' memrz='0' level='2' desc='Makes subject blind or deaf.' />
+<gift name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level.' />
+<gift name='Cats Grace' memrz='0' level='2' desc='Subject gains 1d4+1 Dex for 1 hr./level.' />
+<gift name='Darkvision' memrz='0' level='2' desc='See 60 ft. in total darkness.' />
+<gift name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level.' />
+<gift name='Knock' memrz='0' level='2' desc='Opens locked or magically sealed door.' />
+<gift name='Levitate' memrz='0' level='2' desc='Subject moves up and down at your direction.' />
+<gift name='Pyrotechnics' memrz='0' level='2' desc='Turns fire into blinding light or choking smoke.' />
+<gift name='Rope Trick' memrz='0' level='2' desc='Up to eight creatures hide in extradimensional space.' />
+<gift name='Whispering Wind' memrz='0' level='2' desc='Sends a short message one mile/level.' />
+<gift name='Dispel Magic' memrz='0' level='3' desc='Cancels magical gifts and effects.' />
+<gift name='Explosive Runes' memrz='0' level='3' desc='Deals 6d6 damage when read.' />
+<gift name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection gifts, but 10-ft. radius and 10 min./level.' />
+<gift name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying.' />
+<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy.' />
+<gift name='Flame Arrow' memrz='0' level='3' desc='Shoots flaming projectiles (extra damage) or fiery bolts (4d6 damage).' />
+<gift name='Phantom Steed' memrz='0' level='3' desc='Magical horse appears for 1 hour/level.' />
+<gift name='Sepia Snake Sigil' memrz='0' level='3' desc='Creates text symbol that immobilizes reader.' />
+<gift name='Sleet Storm' memrz='0' level='3' desc='Hampers vision and movement.' />
+<gift name='Stinking Cloud' memrz='0' level='3' desc='Nauseating vapors, 1 round/level.' />
+<gift name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you.' />
+<gift name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level.' />
+<gift name='Tongues' memrz='0' level='3' desc='Speak any language.' />
+<gift name='Hold Person' memrz='0' level='3' desc='Holds one person helpless; 1 round/level.' />
+<gift name='Suggestion' memrz='0' level='3' desc='Compels subject to follow stated course of action.' />
+<gift name='Fireball' memrz='0' level='3' desc='1d6 damage per level, 20-ft. radius.' />
+<gift name='Gust of Wind' memrz='0' level='3' desc='Blows away or knocks down smaller creatures.' />
+<gift name='Leomunds Tiny Hut' memrz='0' level='3' desc='Creates shelter for 10 creatures.' />
+<gift name='Lightning Bolt' memrz='0' level='3' desc='Electricity deals 1d6 damage/level.' />
+<gift name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases.' />
+<gift name='Displacement' memrz='0' level='3' desc='Attacks miss subject 50%.' />
+<gift name='Illusory Script' memrz='0' level='3' desc='Only intended reader can decipher.' />
+<gift name='Invisibility Sphere' memrz='0' level='3' desc='Makes everyone within 10 ft. invisible.' />
+<gift name='Major Image' memrz='0' level='3' desc='As silent image, plus sound, smell and thermal effects.' />
+<gift name='Gentle Repose' memrz='0' level='3' desc='Preserves one corpse.' />
+<gift name='Halt Undead' memrz='0' level='3' desc='Immobilizes undead for 1 round/level.' />
+<gift name='Vampiric Touch' memrz='0' level='3' desc='Touch deals 1d6/two caster levels; caster gains damage as hp.' />
+<gift name='Blink' memrz='0' level='3' desc='You randomly vanish and reappear for 1 round/level.' />
+<gift name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90.' />
+<gift name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly.' />
+<gift name='Greater Magic Weapon' memrz='0' level='3' desc='+1/three levels (max +5).' />
+<gift name='Haste' memrz='0' level='3' desc='Extra partial action and +4 AC.' />
+<gift name='Keen Edge' memrz='0' level='3' desc='Doubles normal weapons threat range.' />
+<gift name='Secret Page' memrz='0' level='3' desc='Changes one page to hide its real content.' />
+<gift name='Shrink Item' memrz='0' level='3' desc='Object shrinks to one-twelfth size.' />
+<gift name='Slow' memrz='0' level='3' desc='One subject/level takes only partial actions, -2 AC, -2 melee rolls.' />
+<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater.' />
+<gift name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement.' />
+<gift name='Fire Trap' memrz='0' level='4' desc='Opened object deals 1d4 +1/level damage.' />
+<gift name='Minor Globe of Invulnerability' memrz='0' level='4' desc='Stops 1st- through 3rd-level gift effects.' />
+<gift name='Remove Curse' memrz='0' level='4' desc='Frees object or person from curse.' />
+<gift name='Stoneskin' memrz='0' level='4' desc='Stops blows, cuts, stabs, and slashes.' />
+<gift name='Evards Black Tentacles' memrz='0' level='4' desc='1d4 +1/level tentacles grapple randomly within 15 ft.' />
+<gift name='Leomunds Secure Shelter' memrz='0' level='4' desc='Creates sturdy cottage.' />
+<gift name='Minor Creation' memrz='0' level='4' desc='Creates one cloth or wood object.' />
+<gift name='Solid Fog' memrz='0' level='4' desc='Blocks vision and slows movement.' />
+<gift name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you.' />
+<gift name='Arcane Eye' memrz='0' level='4' desc='Invisible floating eye moves 30 ft./round.' />
+<gift name='Detect Scrying' memrz='0' level='4' desc='Alerts you of magical eavesdropping.' />
+<gift name='Locate Creature' memrz='0' level='4' desc='Indicates direction to familiar creature.' />
+<gift name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance.' />
+<gift name='Charm Monster' memrz='0' level='4' desc='Makes monster believe it is your ally.' />
+<gift name='Confusion' memrz='0' level='4' desc='Makes subject behave oddly for 1 round/level.' />
+<gift name='Emotion' memrz='0' level='4' desc='Arouses strong emotion in subject.' />
+<gift name='Lesser Geas' memrz='0' level='4' desc='Commands subject of 7 HD or less.' />
+<gift name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold.' />
+<gift name='Ice Storm' memrz='0' level='4' desc='Hail deals 5d6 damage in cylinder 40 ft. across.' />
+<gift name='Otilukes Resilient Sphere' memrz='0' level='4' desc='Force globe protects but traps one subject.' />
+<gift name='Shout' memrz='0' level='4' desc='Deafens all within cone and deals 2d6 damage.' />
+<gift name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft.' />
+<gift name='Wall of Ice' memrz='0' level='4' desc='Ice plane creates wall with 15 hp +1/level, or hemisphere can trap creatures inside.' />
+<gift name='Hallucinatory Terrain' memrz='0' level='4' desc='Makes one type of terrain appear like another (field into forest, etc).' />
+<gift name='Illusory Wall' memrz='0' level='4' desc='Wall, floor, or ceiling looks real, but anything can pass through.' />
+<gift name='Improved Invisibility' memrz='0' level='4' desc='As invisibility, but subject can attack and stay invisible.' />
+<gift name='Phantasmal Killer' memrz='0' level='4' desc='Fearsome illusion kills subject or deals 3d6 damage.' />
+<gift name='Rainbow Pattern' memrz='0' level='4' desc='Lights prevent 24 HD of creatures from attacking or moving away.' />
+<gift name='Shadow Conjuration' memrz='0' level='4' desc='Mimics conjuring below 4th level.' />
+<gift name='Contagion' memrz='0' level='4' desc='Infects subject with chosen disease.' />
+<gift name='Enervation' memrz='0' level='4' desc='Subject gains 1d4 negative levels.' />
+<gift name='Fear' memrz='0' level='4' desc='Subjects within cone flee for 1 round/level.' />
+<gift name='Bestow Curse' memrz='0' level='4' desc='-6 to an ability; -4 on attacks, saves, and checks; or 50% chance of losing each action.' />
+<gift name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb.' />
+<gift name='Polymorph Other' memrz='0' level='4' desc='Gives one subject a new form.' />
+<gift name='Polymorph Self' memrz='0' level='4' desc='You assume a new form.' />
+<gift name='Rarys Mnemonic Enhancer' memrz='0' level='4' desc='Prepares extra gifts or retains one just cast. Wizard only.' />
+<gift name='Dismissal' memrz='0' level='5' desc='Forces a creature to return to native plane.' />
+<gift name='Cloudkill' memrz='0' level='5' desc='Kills 3 HD or less; 4-6 HD save or die.' />
+<gift name='Leomunds Secret Chest' memrz='0' level='5' desc='Hides expensive chest on Ethereal Plane; you retrieve it at will.' />
+<gift name='Lesser Planar Binding' memrz='0' level='5' desc='Traps outsider until it performs a task.' />
+<gift name='Major Creation' memrz='0' level='5' desc='As minor creation, plus stone and metal.' />
+<gift name='Mordenkainens Faithful Hound' memrz='0' level='5' desc='Phantom dog can guard, attack.' />
+<gift name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you.' />
+<gift name='Wall of Iron' memrz='0' level='5' desc='30 hp/four levels; can topple onto foes.' />
+<gift name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped.' />
+<gift name='Contact Other Plane' memrz='0' level='5' desc='Ask question of extraplanar entity.' />
+<gift name='Prying Eyes' memrz='0' level='5' desc='1d4 floating eyes +1/level scout for you.' />
+<gift name='Rarys Telepathic Bond' memrz='0' level='5' desc='Link lets allies communicate.' />
+<gift name='Dominate Person' memrz='0' level='5' desc='Controls humanoid telepathically.' />
+<gift name='Feeblemind' memrz='0' level='5' desc='Subjects Int drops to 1.' />
+<gift name='Hold Monster' memrz='0' level='5' desc='As hold person, but any creature.' />
+<gift name='Mind Fog' memrz='0' level='5' desc='Subjects in fog get -10 Wis, Will checks.' />
+<gift name='Bigbys Interposing Hand' memrz='0' level='5' desc='Hand provides 90% cover against one opponent.' />
+<gift name='Cone of Cold' memrz='0' level='5' desc='1d6 cold damage/level.' />
+<gift name='Sending' memrz='0' level='5' desc='Delivers short message anywhere, instantly.' />
+<gift name='Wall of Force' memrz='0' level='5' desc='Wall is immune to damage.' />
+<gift name='Dream' memrz='0' level='5' desc='Sends message to anyone sleeping.' />
+<gift name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion.' />
+<gift name='Greater Shadow Conjuration' memrz='0' level='5' desc='As shadow conjuration, but up to 4th level and 40% real.' />
+<gift name='Mirage Arcana' memrz='0' level='5' desc='As hallucinatory terrain, plus structures.' />
+<gift name='Nightmare' memrz='0' level='5' desc='Sends vision dealing 1d10 damage, fatigue.' />
+<gift name='Persistent Image' memrz='0' level='5' desc='As major image, but no concentration required.' />
+<gift name='Seeming' memrz='0' level='5' desc='Changes appearance of one person/two levels.' />
+<gift name='Shadow Evocation' memrz='0' level='5' desc='Mimics evocation less than 5th level.' />
+<gift name='Animate Dead' memrz='0' level='5' desc='Creates undead skeletons and zombies.' />
+<gift name='Magic Jar' memrz='0' level='5' desc='Enables possession of another creature.' />
+<gift name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD.' />
+<gift name='Fabricate' memrz='0' level='5' desc='Transforms raw materials into finished items.' />
+<gift name='Passwall' memrz='0' level='5' desc='Breaches walls 1 ft. thick/level.' />
+<gift name='Stone Shape' memrz='0' level='5' desc='Sculpts stone into any form.' />
+<gift name='Telekinesis' memrz='0' level='5' desc='Lifts or moves 25 lb./level at long range.' />
+<gift name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere.' />
+<gift name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
+<gift name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
+<gift name='Permanency' memrz='0' level='5' desc='Makes certain gifts permanent; costs XP.' />
+<gift name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft.' />
+<gift name='Globe of Invulnerability' memrz='0' level='6' desc='As minor globe, plus 4th level.' />
+<gift name='Greater Digifting' memrz='0' level='6' desc='As dispel magic, but +20 on check.' />
+<gift name='Guards and Wards' memrz='0' level='6' desc='Array of magic effects protect area.' />
+<gift name='Repulsion' memrz='0' level='6' desc='Creatures cant approach you.' />
+<gift name='Acid Fog' memrz='0' level='6' desc='Fog deals acid damage.' />
+<gift name='Planar Binding' memrz='0' level='6' desc='As lesser planar binding, but up to 16 HD.' />
+<gift name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you.' />
+<gift name='Analyze Dweomer' memrz='0' level='6' desc='Reveals magical aspects of subject.' />
+<gift name='Legend Lore' memrz='0' level='6' desc='Learn tales about a person, place, or thing.' />
+<gift name='True Seeing' memrz='0' level='6' desc='See all things as they really are.' />
+<gift name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature.' />
+<gift name='Mass Suggestion' memrz='0' level='6' desc='As suggestion, plus one/level subjects.' />
+<gift name='Bigbys Forceful Hand' memrz='0' level='6' desc='Hand pushes creatures away.' />
+<gift name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts.' />
+<gift name='Contingency' memrz='0' level='6' desc='Sets trigger condition for another gift.' />
+<gift name='Otilukes Freezing Sphere' memrz='0' level='6' desc='Freezes water or deals cold damage.' />
+<gift name='Greater Shadow Evocation' memrz='0' level='6' desc='As shadow evocation, but up to 5th level.' />
+<gift name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double.' />
+<gift name='Permanent Image' memrz='0' level='6' desc='Includes sight, sound, and smell.' />
+<gift name='Programmed Image' memrz='0' level='6' desc='As major image, plus triggered by event.' />
+<gift name='Project Image' memrz='0' level='6' desc='Illusory double can talk and cast gifts.' />
+<gift name='Shades' memrz='0' level='6' desc='As shadow conjuration, but up to 5th level and 60% real.' />
+<gift name='Veil' memrz='0' level='6' desc='Changes appearance of group of creatures.' />
+<gift name='Circle of Death' memrz='0' level='6' desc='Kills 1d4 HD/level.' />
+<gift name='Control Water' memrz='0' level='6' desc='Raises, lowers, or parts bodies of water.' />
+<gift name='Control Weather' memrz='0' level='6' desc='Changes weather in local area.' />
+<gift name='Disintegrate' memrz='0' level='6' desc='Makes one creature or object vanish.' />
+<gift name='Eyebite' memrz='0' level='6' desc='Charm, fear, sicken or sleep one subject.' />
+<gift name='Flesh to Stone' memrz='0' level='6' desc='Turns subject creature into statue.' />
+<gift name='Mass Haste' memrz='0' level='6' desc='As haste, affects one/level subjects.' />
+<gift name='Mordenkainens Lucubration' memrz='0' level='6' desc='Recalls gift of 5th level or less. Wizard Only.' />
+<gift name='Move Earth' memrz='0' level='6' desc='Digs trenches and build hills.' />
+<gift name='Stone to Flesh' memrz='0' level='6' desc='Restores petrified creature.' />
+<gift name='Tensers Transformation' memrz='0' level='6' desc='You gain combat bonuses.' />
+<gift name='Banishment' memrz='0' level='7' desc='Banishes 2 HD/level extraplanar creatures.' />
+<gift name='Sequester' memrz='0' level='7' desc='Subject is invisible to sight and scrying.' />
+<gift name='gift Turning' memrz='0' level='7' desc='Reflect 1d4+6 gift levels back at caster.' />
+<gift name='Drawmijs Instant Summons' memrz='0' level='7' desc='Prepared object appears in your hand.' />
+<gift name='Mordenkainens Magnificent Mansion' memrz='0' level='7' desc='Door leads to extradimensional mansion.' />
+<gift name='Phase Door' memrz='0' level='7' desc='Invisible passage through wood or stone.' />
+<gift name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp.' />
+<gift name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you.' />
+<gift name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer.' />
+<gift name='Vision' memrz='0' level='7' desc='As legend lore, but quicker and strenuous.' />
+<gift name='Insanity' memrz='0' level='7' desc='Subject suffers continuous confusion.' />
+<gift name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples.' />
+<gift name='Delayed Blast Fireball' memrz='0' level='7' desc='1d8 fire damage/level; you can delay blast for 5 rounds.' />
+<gift name='Forcecage' memrz='0' level='7' desc='Cube of force imprisons all inside.' />
+<gift name='Mordenkainens Sword' memrz='0' level='7' desc='Floating magic blade strikes opponents.' />
+<gift name='Prismatic Spray' memrz='0' level='7' desc='Rays hit subjects with variety of effects.' />
+<gift name='Mass Invisibility' memrz='0' level='7' desc='As invisibility, but affects all in range.' />
+<gift name='Shadow Walk' memrz='0' level='7' desc='Step into shadow to travel rapidly.' />
+<gift name='Simulacrum' memrz='0' level='7' desc='Creates partially real double of a creature.' />
+<gift name='Control Undead' memrz='0' level='7' desc='Undead dont attack you while under your command.' />
+<gift name='Finger of Death' memrz='0' level='7' desc='Kills one subject.' />
+<gift name='Ethereal Jaunt' memrz='0' level='7' desc='You become ethereal for 1 round/level.' />
+<gift name='Plane Shift' memrz='0' level='7' desc='Up to eight subjects travel to another plane.' />
+<gift name='Reverse Gravity' memrz='0' level='7' desc='Objects and creatures fall upward.' />
+<gift name='Statue' memrz='0' level='7' desc='Subject can become a statue at will.' />
+<gift name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival.' />
+<gift name='Vanish' memrz='0' level='7' desc='As teleport, but affects a touched object.' />
+<gift name='Limited Wish' memrz='0' level='7' desc='Alters reality-within gift limits.' />
+<gift name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying.' />
+<gift name='Prismatic Wall' memrz='0' level='8' desc='Walls colors have array of effects.' />
+<gift name='Protection from gifts' memrz='0' level='8' desc='Confers +8 resistance bonus.' />
+<gift name='Greater Planar Binding' memrz='0' level='8' desc='As lesser planar binding, but up to 24 HD.' />
+<gift name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round.' />
+<gift name='Maze' memrz='0' level='8' desc='Traps subject in extradimensional maze.' />
+<gift name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures.' />
+<gift name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you.' />
+<gift name='Trap the Soul' memrz='0' level='8' desc='Imprisons subject within gem.' />
+<gift name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object.' />
+<gift name='Antipathy' memrz='0' level='8' desc='Object or location affected by gift repels certain creatures.' />
+<gift name='Binding' memrz='0' level='8' desc='Array of techniques to imprison a creature.' />
+<gift name='Demand' memrz='0' level='8' desc='As sending, plus you can send suggestion.' />
+<gift name='Mass Charm' memrz='0' level='8' desc='As charm monster, but all within 30 ft.' />
+<gift name='Ottos Irresistible Dance' memrz='0' level='8' desc='Forces subject to dance.' />
+<gift name='Sympathy' memrz='0' level='8' desc='Object or location attracts certain creatures.' />
+<gift name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes.' />
+<gift name='Otilukes Telekinetic Sphere' memrz='0' level='8' desc='As Otilukes resilient sphere, but you move sphere telekinetically.' />
+<gift name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage.' />
+<gift name='Screen' memrz='0' level='8' desc='Illusion hides area from vision, scrying.' />
+<gift name='Clone' memrz='0' level='8' desc='Duplicate awakens when original dies.' />
+<gift name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft.' />
+<gift name='Etherealness' memrz='0' level='8' desc='Travel to Ethereal Plane with companions.' />
+<gift name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron.' />
+<gift name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else.' />
+<gift name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects.' />
+<gift name='Freedom' memrz='0' level='9' desc='Releases creature suffering imprisonment.' />
+<gift name='Imprisonment' memrz='0' level='9' desc='Entombs subject beneath the earth.' />
+<gift name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items.' />
+<gift name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides.' />
+<gift name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning.' />
+<gift name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones.' />
+<gift name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you.' />
+<gift name='Foresight' memrz='0' level='9' desc='Sixth sense warns of impending danger.' />
+<gift name='Dominate Monster' memrz='0' level='9' desc='As dominate person, but any creature.' />
+<gift name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys interposing hand, but stronger.' />
+<gift name='Meteor Swarm' memrz='0' level='9' desc='Deals 24d6 fire damage, plus bursts.' />
+<gift name='Weird' memrz='0' level='9' desc='As phantasmal killer, but affects all within 30 ft.' />
+<gift name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane.' />
+<gift name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels.' />
+<gift name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection.' />
+<gift name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level.' />
+<gift name='Refuge' memrz='0' level='9' desc='Alters item to transport its possessor to you.' />
+<gift name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round.' />
+<gift name='Teleportation Circle' memrz='0' level='9' desc='Circle teleports any creature inside to designated spot.' />
+<gift name='Temporal Stasis' memrz='0' level='9' desc='Puts subject into suspended animation.' />
+<gift name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds.' />
+<gift name='Wish' memrz='0' level='9' desc='As limited wish, but with fewer limits.' />
+</divine>
--- a/data/d20/d20feats.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20feats.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,76 +1,76 @@
-<feats>
-    <feat name='Blank' type='None' />
-    <feat name='Alertness' type='General' />
-    <feat name='Ambidexterity' type='General' />
-    <feat name='Armor Proficiency (heavy)' type='General' />
-    <feat name='Armor Proficiency (light)' type='General' />
-    <feat name='Armor Proficiency (medium)' type='General' />
-    <feat name='Blind-Fight' type='General' />
-    <feat name='Cleave' type='General' />
-    <feat name='Combat Reflexes' type='General' />
-    <feat name='Deflect Arrows' type='General' />
-    <feat name='Dodge' type='General' />
-    <feat name='Endurance' type='General' />
-    <feat name='Exotic Weapon Proficiency' type='General' />
-    <feat name='Expertise' type='General' />
-    <feat name='Point Blank Shot.' type='General' />
-    <feat name='Great Cleave' type='General' />
-    <feat name='Great Fortitude' type='General' />
-    <feat name='Improved Bull Rush' type='General' />
-    <feat name='Improved Critical' type='General' />
-    <feat name='Improved Disarm' type='General' />
-    <feat name='Improved Initiative' type='General' mod='4' />
-    <feat name='Improved Trip' type='General' />
-    <feat name='Improved Two-Weapon Fighting' type='General' />
-    <feat name='Improved Unarmed Strike' type='General' />
-    <feat name='Iron Will' type='General' />
-    <feat name='Leadership' type='General' />
-    <feat name='Lightning Reflexes' type='General' />
-    <feat name='Martial Weapon Proficiency' type='General' />
-    <feat name='Mobility' type='General' />
-    <feat name='Mounted Archery' type='General' />
-    <feat name='Mounted Combat' type='General' />
-    <feat name='Point Blank Shot' type='General' />
-    <feat name='Power Attack' type='General' />
-    <feat name='Precise Shot' type='General' />
-    <feat name='Quick Draw' type='General' />
-    <feat name='Rapid Shot' type='General' />
-    <feat name='Ride-By Attack' type='General' />
-    <feat name='Run' type='General' />
-    <feat name='Shield Proficiency' type='General' />
-    <feat name='Shot on the Run' type='General' />
-    <feat name='Simple Weapon Proficiency' type='General' />
-    <feat name='Skill Focus' type='General' />
-    <feat name='Spirited Charge' type='General' />
-    <feat name='Spring Attack' type='General' />
-    <feat name='Stunning Fist' type='General' />
-    <feat name='Sunder' type='General' />
-    <feat name='Toughness' type='General' />
-    <feat name='Track' type='General' />
-    <feat name='Trample' type='General' />
-    <feat name='Two-Weapon Fighting' type='General' />
-    <feat name='Weapon Finesse' type='General' />
-    <feat name='Weapon Focus' type='General' />
-    <feat name='Weapon Specialization' type='General' />
-    <feat name='Brew Potion' type='General' />
-    <feat name='Combat Casting' type='General' />
-    <feat name='Craft Magic Arms and Armor' type='General' />
-    <feat name='Craft Rod' type='General' />
-    <feat name='Craft Staff' type='General' />
-    <feat name='Craft Wand' type='General' />
-    <feat name='Craft Wondrous Item' type='General' />
-    <feat name='Empower Spell' type='General' />
-    <feat name='Enlarge Spell' type='General' />
-    <feat name='Extend Spell' type='General' />
-    <feat name='Extra Turning' type='General' />
-    <feat name='Forge Ring' type='General' />
-    <feat name='Heighten Spell' type='General' />
-    <feat name='Maximize Spell' type='General' />
-    <feat name='Quicken Spell' type='General' />
-    <feat name='Scribe Scroll' type='General' />
-    <feat name='Silent Spell' type='General' />
-    <feat name='Spell Focus' type='General' />
-    <feat name='Spell Mastery' type='General' />
-    <feat name='Spell Penetration' type='General' />
-    <feat name='Still Spell' type='General' />
-</feats>
+<feats>
+    <feat name='Blank' type='None' />
+    <feat name='Alertness' type='General' />
+    <feat name='Ambidexterity' type='General' />
+    <feat name='Armor Proficiency (heavy)' type='General' />
+    <feat name='Armor Proficiency (light)' type='General' />
+    <feat name='Armor Proficiency (medium)' type='General' />
+    <feat name='Blind-Fight' type='General' />
+    <feat name='Cleave' type='General' />
+    <feat name='Combat Reflexes' type='General' />
+    <feat name='Deflect Arrows' type='General' />
+    <feat name='Dodge' type='General' />
+    <feat name='Endurance' type='General' />
+    <feat name='Exotic Weapon Proficiency' type='General' />
+    <feat name='Expertise' type='General' />
+    <feat name='Point Blank Shot.' type='General' />
+    <feat name='Great Cleave' type='General' />
+    <feat name='Great Fortitude' type='General' />
+    <feat name='Improved Bull Rush' type='General' />
+    <feat name='Improved Critical' type='General' />
+    <feat name='Improved Disarm' type='General' />
+    <feat name='Improved Initiative' type='General' mod='4' />
+    <feat name='Improved Trip' type='General' />
+    <feat name='Improved Two-Weapon Fighting' type='General' />
+    <feat name='Improved Unarmed Strike' type='General' />
+    <feat name='Iron Will' type='General' />
+    <feat name='Leadership' type='General' />
+    <feat name='Lightning Reflexes' type='General' />
+    <feat name='Martial Weapon Proficiency' type='General' />
+    <feat name='Mobility' type='General' />
+    <feat name='Mounted Archery' type='General' />
+    <feat name='Mounted Combat' type='General' />
+    <feat name='Point Blank Shot' type='General' />
+    <feat name='Power Attack' type='General' />
+    <feat name='Precise Shot' type='General' />
+    <feat name='Quick Draw' type='General' />
+    <feat name='Rapid Shot' type='General' />
+    <feat name='Ride-By Attack' type='General' />
+    <feat name='Run' type='General' />
+    <feat name='Shield Proficiency' type='General' />
+    <feat name='Shot on the Run' type='General' />
+    <feat name='Simple Weapon Proficiency' type='General' />
+    <feat name='Skill Focus' type='General' />
+    <feat name='Spirited Charge' type='General' />
+    <feat name='Spring Attack' type='General' />
+    <feat name='Stunning Fist' type='General' />
+    <feat name='Sunder' type='General' />
+    <feat name='Toughness' type='General' />
+    <feat name='Track' type='General' />
+    <feat name='Trample' type='General' />
+    <feat name='Two-Weapon Fighting' type='General' />
+    <feat name='Weapon Finesse' type='General' />
+    <feat name='Weapon Focus' type='General' />
+    <feat name='Weapon Specialization' type='General' />
+    <feat name='Brew Potion' type='General' />
+    <feat name='Combat Casting' type='General' />
+    <feat name='Craft Magic Arms and Armor' type='General' />
+    <feat name='Craft Rod' type='General' />
+    <feat name='Craft Staff' type='General' />
+    <feat name='Craft Wand' type='General' />
+    <feat name='Craft Wondrous Item' type='General' />
+    <feat name='Empower Spell' type='General' />
+    <feat name='Enlarge Spell' type='General' />
+    <feat name='Extend Spell' type='General' />
+    <feat name='Extra Turning' type='General' />
+    <feat name='Forge Ring' type='General' />
+    <feat name='Heighten Spell' type='General' />
+    <feat name='Maximize Spell' type='General' />
+    <feat name='Quicken Spell' type='General' />
+    <feat name='Scribe Scroll' type='General' />
+    <feat name='Silent Spell' type='General' />
+    <feat name='Spell Focus' type='General' />
+    <feat name='Spell Mastery' type='General' />
+    <feat name='Spell Penetration' type='General' />
+    <feat name='Still Spell' type='General' />
+</feats>
--- a/data/d20/d20powers.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20powers.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,121 +1,121 @@
-<powers>
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
-</powers>
+<powers>
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 0 test' level='0' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='1' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='2' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='3' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='Level 1 test' level='4' desc='Testing this' point='1' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+<power test='metacreativity' name='test' level='9' desc='Testing this' point='3' />
+</powers>
--- a/data/d20/d20spells.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20spells.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,326 +1,326 @@
-<spells>
-<spell name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws.' />
-<spell name='Ray of Frost' memrz='0' level='0' desc='Ray deals 1d3 cold damage.' />
-<spell name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object.' />
-<spell name='Daze' memrz='0' level='0' desc='Creature loses next action.' />
-<spell name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack).' />
-<spell name='Light' memrz='0' level='0' desc='Object shines like a torch.' />
-<spell name='Dancing Lights' memrz='0' level='0' desc='Figment torches or other lights.' />
-<spell name='Ghost Sound' memrz='0' level='0' desc='Figment sounds.' />
-<spell name='Disrupt Undead' memrz='0' level='0' desc='Deals 1d6 damage to one undead.' />
-<spell name='Mage Hand' memrz='0' level='0' desc='5-pound telekinesis.' />
-<spell name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object.' />
-<spell name='Open/Close' memrz='0' level='0' desc='Opens or closes small or light things.' />
-<spell name='Arcane Mark' memrz='0' level='0' desc='Inscribes a personal rune (visible or invisible).' />
-<spell name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft.' />
-<spell name='Prestidigitation' memrz='0' level='0' desc='Performs minor tricks.' />
-<spell name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks.' />
-<spell name='Alarm' memrz='0' level='1' desc='Wards an area for 2 hours/level.' />
-<spell name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type.' />
-<spell name='Hold Portal' memrz='0' level='1' desc='Holds door shut.' />
-<spell name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders.' />
-<spell name='Shield' memrz='0' level='1' desc='Invisible disc gives cover and blocks magic missiles.' />
-<spell name='Grease' memrz='0' level='1' desc='Makes 10-ft. square or one object slippery.' />
-<spell name='Mage Armor' memrz='0' level='1' desc='Gives subject +4 armor bonus.' />
-<spell name='Mount' memrz='0' level='1' desc='Summons riding horse for 2 hr./level.' />
-<spell name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you.' />
-<spell name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you.' />
-<spell name='Unseen Servant' memrz='0' level='1' desc='Creates invisible force that obeys your commands.' />
-<spell name='Comprehend Languages' memrz='0' level='1' desc='Understands all spoken and written languages.' />
-<spell name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft.' />
-<spell name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft.' />
-<spell name='Identify' memrz='0' level='1' desc='Determines single feature of magic item.' />
-<spell name='True Strike' memrz='0' level='1' desc='Adds +20 bonus to your next attack roll.' />
-<spell name='Charm Person' memrz='0' level='1' desc='Makes one person your friend.' />
-<spell name='Hypnotism' memrz='0' level='1' desc='Fascinates 2d4 HD of creatures.' />
-<spell name='Sleep' memrz='0' level='1' desc='Put 2d4 HD of creatures into comatose slumber.' />
-<spell name='Magic Missile' memrz='0' level='1' desc='1d4+1 damage; +1 missile/two levels above 1st (max +5).' />
-<spell name='Tensers Floating Disk' memrz='0' level='1' desc='3-ft.-diameter horizontal disk that holds 100 lb./level.' />
-<spell name='Change Self' memrz='0' level='1' desc='Changes your appearance.' />
-<spell name='Color Spray' memrz='0' level='1' desc='Knocks unconscious, blinds, or stuns 1d6 weak creatures.' />
-<spell name='Nystuls Magical Aura' memrz='0' level='1' desc='Grants object false magic aura.' />
-<spell name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura.' />
-<spell name='Silent Image' memrz='0' level='1' desc='Creates minor illusion of your design.' />
-<spell name='Ventriloquism' memrz='0' level='1' desc='Throws voice for 1 min./level.' />
-<spell name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds.' />
-<spell name='Chill Touch' memrz='0' level='1' desc='1 touch/level deals 1d6 damage and possibly 1 Str damage.' />
-<spell name='Ray of Enfeeblement' memrz='0' level='1' desc='Ray reduces Str by 1d6 points +1 point/two levels.' />
-<spell name='Animate Rope' memrz='0' level='1' desc='Makes a rope move at your command.' />
-<spell name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max: 5d4).' />
-<spell name='Enlarge' memrz='0' level='1' desc='Object or creature grows +10%/level (max +50%).' />
-<spell name='Erase' memrz='0' level='1' desc='Mundane or magical writing vanishes.' />
-<spell name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed.' />
-<spell name='Feather Fall' memrz='0' level='1' desc='Objects or creatures fall slowly.' />
-<spell name='Jump' memrz='0' level='1' desc='Subject gets +30 on Jump checks.' />
-<spell name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus.' />
-<spell name='Message' memrz='0' level='1' desc='Whispered conversation at distance.' />
-<spell name='Reduce' memrz='0' level='1' desc='Object or creature shrinks 10%/level (max 50%).' />
-<spell name='Shocking Grasp' memrz='0' level='1' desc='Touch delivers 1d8 +1/level electricity.' />
-<spell name='Spider Climb' memrz='0' level='1' desc='Grants ability to walk on walls and ceilings.' />
-<spell name='Arcane Lock' memrz='0' level='2' desc='Magically locks a portal or chest.' />
-<spell name='Obscure Object' memrz='0' level='2' desc='Masks object against divination.' />
-<spell name='Protection from Arrows' memrz='0' level='2' desc='Subject immune to most ranged attacks.' />
-<spell name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type.' />
-<spell name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision.' />
-<spell name='Glitterdust' memrz='0' level='2' desc='Blinds creatures, outlines invisible creatures.' />
-<spell name='Melfs Acid Arrow' memrz='0' level='2' desc='Ranged touch attack; 2d4 damage for 1 round + 1 round/three levels.' />
-<spell name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you.' />
-<spell name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures.' />
-<spell name='Web' memrz='0' level='2' desc='Fills 10-ft. cube/level with sticky spider webs.' />
-<spell name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts.' />
-<spell name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type).' />
-<spell name='See Invisibility' memrz='0' level='2' desc='Reveals invisible creatures or objects.' />
-<spell name='Tashas Hideous Laughter' memrz='0' level='2' desc='Subject loses actions for 1d3 rounds.' />
-<spell name='Darkness' memrz='0' level='2' desc='20-ft. radius of supernatural darkness.' />
-<spell name='Daylight' memrz='0' level='2' desc='60-ft. radius of bright light.' />
-<spell name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level.' />
-<spell name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures.' />
-<spell name='Blur' memrz='0' level='2' desc='Attacks miss subject 20% of the time.' />
-<spell name='Continual Flame' memrz='0' level='2' desc='Makes a permanent, heatless torch.' />
-<spell name='Hypnotic Pattern' memrz='0' level='2' desc='Fascinates 2d4+1 HD/level of creatures.' />
-<spell name='Invisibility' memrz='0' level='2' desc='Subject is invisible for 10 min./level or until it attacks.' />
-<spell name='Leomunds Trap' memrz='0' level='2' desc='Makes item seem trapped.' />
-<spell name='Magic Mouth' memrz='0' level='2' desc='Speaks once when triggered.' />
-<spell name='Minor Image' memrz='0' level='2' desc='As silent image, plus some sound.' />
-<spell name='Mirror Image' memrz='0' level='2' desc='Creates decoy duplicates of you (1d4 +1/three levels, max 8).' />
-<spell name='Misdirection' memrz='0' level='2' desc='Misleads divinations for one creature or object.' />
-<spell name='Ghoul Touch' memrz='0' level='2' desc='Paralyzes one subject, who exudes stench (-2 penalty) nearby.' />
-<spell name='Scare' memrz='0' level='2' desc='Panics creatures up to 5 HD (15-ft. radius).' />
-<spell name='Spectral Hand' memrz='0' level='2' desc='Creates disembodied glowing hand to deliver touch attacks.' />
-<spell name='Alter Self' memrz='0' level='2' desc='As change self, plus more drastic changes.' />
-<spell name='Blindness/Deafness' memrz='0' level='2' desc='Makes subject blind or deaf.' />
-<spell name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level.' />
-<spell name='Cats Grace' memrz='0' level='2' desc='Subject gains 1d4+1 Dex for 1 hr./level.' />
-<spell name='Darkvision' memrz='0' level='2' desc='See 60 ft. in total darkness.' />
-<spell name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level.' />
-<spell name='Knock' memrz='0' level='2' desc='Opens locked or magically sealed door.' />
-<spell name='Levitate' memrz='0' level='2' desc='Subject moves up and down at your direction.' />
-<spell name='Pyrotechnics' memrz='0' level='2' desc='Turns fire into blinding light or choking smoke.' />
-<spell name='Rope Trick' memrz='0' level='2' desc='Up to eight creatures hide in extradimensional space.' />
-<spell name='Whispering Wind' memrz='0' level='2' desc='Sends a short message one mile/level.' />
-<spell name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects.' />
-<spell name='Explosive Runes' memrz='0' level='3' desc='Deals 6d6 damage when read.' />
-<spell name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level.' />
-<spell name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying.' />
-<spell name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy.' />
-<spell name='Flame Arrow' memrz='0' level='3' desc='Shoots flaming projectiles (extra damage) or fiery bolts (4d6 damage).' />
-<spell name='Phantom Steed' memrz='0' level='3' desc='Magical horse appears for 1 hour/level.' />
-<spell name='Sepia Snake Sigil' memrz='0' level='3' desc='Creates text symbol that immobilizes reader.' />
-<spell name='Sleet Storm' memrz='0' level='3' desc='Hampers vision and movement.' />
-<spell name='Stinking Cloud' memrz='0' level='3' desc='Nauseating vapors, 1 round/level.' />
-<spell name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you.' />
-<spell name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level.' />
-<spell name='Tongues' memrz='0' level='3' desc='Speak any language.' />
-<spell name='Hold Person' memrz='0' level='3' desc='Holds one person helpless; 1 round/level.' />
-<spell name='Suggestion' memrz='0' level='3' desc='Compels subject to follow stated course of action.' />
-<spell name='Fireball' memrz='0' level='3' desc='1d6 damage per level, 20-ft. radius.' />
-<spell name='Gust of Wind' memrz='0' level='3' desc='Blows away or knocks down smaller creatures.' />
-<spell name='Leomunds Tiny Hut' memrz='0' level='3' desc='Creates shelter for 10 creatures.' />
-<spell name='Lightning Bolt' memrz='0' level='3' desc='Electricity deals 1d6 damage/level.' />
-<spell name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases.' />
-<spell name='Displacement' memrz='0' level='3' desc='Attacks miss subject 50%.' />
-<spell name='Illusory Script' memrz='0' level='3' desc='Only intended reader can decipher.' />
-<spell name='Invisibility Sphere' memrz='0' level='3' desc='Makes everyone within 10 ft. invisible.' />
-<spell name='Major Image' memrz='0' level='3' desc='As silent image, plus sound, smell and thermal effects.' />
-<spell name='Gentle Repose' memrz='0' level='3' desc='Preserves one corpse.' />
-<spell name='Halt Undead' memrz='0' level='3' desc='Immobilizes undead for 1 round/level.' />
-<spell name='Vampiric Touch' memrz='0' level='3' desc='Touch deals 1d6/two caster levels; caster gains damage as hp.' />
-<spell name='Blink' memrz='0' level='3' desc='You randomly vanish and reappear for 1 round/level.' />
-<spell name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90.' />
-<spell name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly.' />
-<spell name='Greater Magic Weapon' memrz='0' level='3' desc='+1/three levels (max +5).' />
-<spell name='Haste' memrz='0' level='3' desc='Extra partial action and +4 AC.' />
-<spell name='Keen Edge' memrz='0' level='3' desc='Doubles normal weapons threat range.' />
-<spell name='Secret Page' memrz='0' level='3' desc='Changes one page to hide its real content.' />
-<spell name='Shrink Item' memrz='0' level='3' desc='Object shrinks to one-twelfth size.' />
-<spell name='Slow' memrz='0' level='3' desc='One subject/level takes only partial actions, -2 AC, -2 melee rolls.' />
-<spell name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater.' />
-<spell name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement.' />
-<spell name='Fire Trap' memrz='0' level='4' desc='Opened object deals 1d4 +1/level damage.' />
-<spell name='Minor Globe of Invulnerability' memrz='0' level='4' desc='Stops 1st- through 3rd-level spell effects.' />
-<spell name='Remove Curse' memrz='0' level='4' desc='Frees object or person from curse.' />
-<spell name='Stoneskin' memrz='0' level='4' desc='Stops blows, cuts, stabs, and slashes.' />
-<spell name='Evards Black Tentacles' memrz='0' level='4' desc='1d4 +1/level tentacles grapple randomly within 15 ft.' />
-<spell name='Leomunds Secure Shelter' memrz='0' level='4' desc='Creates sturdy cottage.' />
-<spell name='Minor Creation' memrz='0' level='4' desc='Creates one cloth or wood object.' />
-<spell name='Solid Fog' memrz='0' level='4' desc='Blocks vision and slows movement.' />
-<spell name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you.' />
-<spell name='Arcane Eye' memrz='0' level='4' desc='Invisible floating eye moves 30 ft./round.' />
-<spell name='Detect Scrying' memrz='0' level='4' desc='Alerts you of magical eavesdropping.' />
-<spell name='Locate Creature' memrz='0' level='4' desc='Indicates direction to familiar creature.' />
-<spell name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance.' />
-<spell name='Charm Monster' memrz='0' level='4' desc='Makes monster believe it is your ally.' />
-<spell name='Confusion' memrz='0' level='4' desc='Makes subject behave oddly for 1 round/level.' />
-<spell name='Emotion' memrz='0' level='4' desc='Arouses strong emotion in subject.' />
-<spell name='Lesser Geas' memrz='0' level='4' desc='Commands subject of 7 HD or less.' />
-<spell name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold.' />
-<spell name='Ice Storm' memrz='0' level='4' desc='Hail deals 5d6 damage in cylinder 40 ft. across.' />
-<spell name='Otilukes Resilient Sphere' memrz='0' level='4' desc='Force globe protects but traps one subject.' />
-<spell name='Shout' memrz='0' level='4' desc='Deafens all within cone and deals 2d6 damage.' />
-<spell name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft.' />
-<spell name='Wall of Ice' memrz='0' level='4' desc='Ice plane creates wall with 15 hp +1/level, or hemisphere can trap creatures inside.' />
-<spell name='Hallucinatory Terrain' memrz='0' level='4' desc='Makes one type of terrain appear like another (field into forest, etc).' />
-<spell name='Illusory Wall' memrz='0' level='4' desc='Wall, floor, or ceiling looks real, but anything can pass through.' />
-<spell name='Improved Invisibility' memrz='0' level='4' desc='As invisibility, but subject can attack and stay invisible.' />
-<spell name='Phantasmal Killer' memrz='0' level='4' desc='Fearsome illusion kills subject or deals 3d6 damage.' />
-<spell name='Rainbow Pattern' memrz='0' level='4' desc='Lights prevent 24 HD of creatures from attacking or moving away.' />
-<spell name='Shadow Conjuration' memrz='0' level='4' desc='Mimics conjuring below 4th level.' />
-<spell name='Contagion' memrz='0' level='4' desc='Infects subject with chosen disease.' />
-<spell name='Enervation' memrz='0' level='4' desc='Subject gains 1d4 negative levels.' />
-<spell name='Fear' memrz='0' level='4' desc='Subjects within cone flee for 1 round/level.' />
-<spell name='Bestow Curse' memrz='0' level='4' desc='-6 to an ability; -4 on attacks, saves, and checks; or 50% chance of losing each action.' />
-<spell name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb.' />
-<spell name='Polymorph Other' memrz='0' level='4' desc='Gives one subject a new form.' />
-<spell name='Polymorph Self' memrz='0' level='4' desc='You assume a new form.' />
-<spell name='Rarys Mnemonic Enhancer' memrz='0' level='4' desc='Prepares extra spells or retains one just cast. Wizard only.' />
-<spell name='Dismissal' memrz='0' level='5' desc='Forces a creature to return to native plane.' />
-<spell name='Cloudkill' memrz='0' level='5' desc='Kills 3 HD or less; 4-6 HD save or die.' />
-<spell name='Leomunds Secret Chest' memrz='0' level='5' desc='Hides expensive chest on Ethereal Plane; you retrieve it at will.' />
-<spell name='Lesser Planar Binding' memrz='0' level='5' desc='Traps outsider until it performs a task.' />
-<spell name='Major Creation' memrz='0' level='5' desc='As minor creation, plus stone and metal.' />
-<spell name='Mordenkainens Faithful Hound' memrz='0' level='5' desc='Phantom dog can guard, attack.' />
-<spell name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you.' />
-<spell name='Wall of Iron' memrz='0' level='5' desc='30 hp/four levels; can topple onto foes.' />
-<spell name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped.' />
-<spell name='Contact Other Plane' memrz='0' level='5' desc='Ask question of extraplanar entity.' />
-<spell name='Prying Eyes' memrz='0' level='5' desc='1d4 floating eyes +1/level scout for you.' />
-<spell name='Rarys Telepathic Bond' memrz='0' level='5' desc='Link lets allies communicate.' />
-<spell name='Dominate Person' memrz='0' level='5' desc='Controls humanoid telepathically.' />
-<spell name='Feeblemind' memrz='0' level='5' desc='Subjects Int drops to 1.' />
-<spell name='Hold Monster' memrz='0' level='5' desc='As hold person, but any creature.' />
-<spell name='Mind Fog' memrz='0' level='5' desc='Subjects in fog get -10 Wis, Will checks.' />
-<spell name='Bigbys Interposing Hand' memrz='0' level='5' desc='Hand provides 90% cover against one opponent.' />
-<spell name='Cone of Cold' memrz='0' level='5' desc='1d6 cold damage/level.' />
-<spell name='Sending' memrz='0' level='5' desc='Delivers short message anywhere, instantly.' />
-<spell name='Wall of Force' memrz='0' level='5' desc='Wall is immune to damage.' />
-<spell name='Dream' memrz='0' level='5' desc='Sends message to anyone sleeping.' />
-<spell name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion.' />
-<spell name='Greater Shadow Conjuration' memrz='0' level='5' desc='As shadow conjuration, but up to 4th level and 40% real.' />
-<spell name='Mirage Arcana' memrz='0' level='5' desc='As hallucinatory terrain, plus structures.' />
-<spell name='Nightmare' memrz='0' level='5' desc='Sends vision dealing 1d10 damage, fatigue.' />
-<spell name='Persistent Image' memrz='0' level='5' desc='As major image, but no concentration required.' />
-<spell name='Seeming' memrz='0' level='5' desc='Changes appearance of one person/two levels.' />
-<spell name='Shadow Evocation' memrz='0' level='5' desc='Mimics evocation less than 5th level.' />
-<spell name='Animate Dead' memrz='0' level='5' desc='Creates undead skeletons and zombies.' />
-<spell name='Magic Jar' memrz='0' level='5' desc='Enables possession of another creature.' />
-<spell name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD.' />
-<spell name='Fabricate' memrz='0' level='5' desc='Transforms raw materials into finished items.' />
-<spell name='Passwall' memrz='0' level='5' desc='Breaches walls 1 ft. thick/level.' />
-<spell name='Stone Shape' memrz='0' level='5' desc='Sculpts stone into any form.' />
-<spell name='Telekinesis' memrz='0' level='5' desc='Lifts or moves 25 lb./level at long range.' />
-<spell name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere.' />
-<spell name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
-<spell name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
-<spell name='Permanency' memrz='0' level='5' desc='Makes certain spells permanent; costs XP.' />
-<spell name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft.' />
-<spell name='Globe of Invulnerability' memrz='0' level='6' desc='As minor globe, plus 4th level.' />
-<spell name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but +20 on check.' />
-<spell name='Guards and Wards' memrz='0' level='6' desc='Array of magic effects protect area.' />
-<spell name='Repulsion' memrz='0' level='6' desc='Creatures cant approach you.' />
-<spell name='Acid Fog' memrz='0' level='6' desc='Fog deals acid damage.' />
-<spell name='Planar Binding' memrz='0' level='6' desc='As lesser planar binding, but up to 16 HD.' />
-<spell name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you.' />
-<spell name='Analyze Dweomer' memrz='0' level='6' desc='Reveals magical aspects of subject.' />
-<spell name='Legend Lore' memrz='0' level='6' desc='Learn tales about a person, place, or thing.' />
-<spell name='True Seeing' memrz='0' level='6' desc='See all things as they really are.' />
-<spell name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature.' />
-<spell name='Mass Suggestion' memrz='0' level='6' desc='As suggestion, plus one/level subjects.' />
-<spell name='Bigbys Forceful Hand' memrz='0' level='6' desc='Hand pushes creatures away.' />
-<spell name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts.' />
-<spell name='Contingency' memrz='0' level='6' desc='Sets trigger condition for another spell.' />
-<spell name='Otilukes Freezing Sphere' memrz='0' level='6' desc='Freezes water or deals cold damage.' />
-<spell name='Greater Shadow Evocation' memrz='0' level='6' desc='As shadow evocation, but up to 5th level.' />
-<spell name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double.' />
-<spell name='Permanent Image' memrz='0' level='6' desc='Includes sight, sound, and smell.' />
-<spell name='Programmed Image' memrz='0' level='6' desc='As major image, plus triggered by event.' />
-<spell name='Project Image' memrz='0' level='6' desc='Illusory double can talk and cast spells.' />
-<spell name='Shades' memrz='0' level='6' desc='As shadow conjuration, but up to 5th level and 60% real.' />
-<spell name='Veil' memrz='0' level='6' desc='Changes appearance of group of creatures.' />
-<spell name='Circle of Death' memrz='0' level='6' desc='Kills 1d4 HD/level.' />
-<spell name='Control Water' memrz='0' level='6' desc='Raises, lowers, or parts bodies of water.' />
-<spell name='Control Weather' memrz='0' level='6' desc='Changes weather in local area.' />
-<spell name='Disintegrate' memrz='0' level='6' desc='Makes one creature or object vanish.' />
-<spell name='Eyebite' memrz='0' level='6' desc='Charm, fear, sicken or sleep one subject.' />
-<spell name='Flesh to Stone' memrz='0' level='6' desc='Turns subject creature into statue.' />
-<spell name='Mass Haste' memrz='0' level='6' desc='As haste, affects one/level subjects.' />
-<spell name='Mordenkainens Lucubration' memrz='0' level='6' desc='Recalls spell of 5th level or less. Wizard Only.' />
-<spell name='Move Earth' memrz='0' level='6' desc='Digs trenches and build hills.' />
-<spell name='Stone to Flesh' memrz='0' level='6' desc='Restores petrified creature.' />
-<spell name='Tensers Transformation' memrz='0' level='6' desc='You gain combat bonuses.' />
-<spell name='Banishment' memrz='0' level='7' desc='Banishes 2 HD/level extraplanar creatures.' />
-<spell name='Sequester' memrz='0' level='7' desc='Subject is invisible to sight and scrying.' />
-<spell name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster.' />
-<spell name='Drawmijs Instant Summons' memrz='0' level='7' desc='Prepared object appears in your hand.' />
-<spell name='Mordenkainens Magnificent Mansion' memrz='0' level='7' desc='Door leads to extradimensional mansion.' />
-<spell name='Phase Door' memrz='0' level='7' desc='Invisible passage through wood or stone.' />
-<spell name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp.' />
-<spell name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you.' />
-<spell name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer.' />
-<spell name='Vision' memrz='0' level='7' desc='As legend lore, but quicker and strenuous.' />
-<spell name='Insanity' memrz='0' level='7' desc='Subject suffers continuous confusion.' />
-<spell name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples.' />
-<spell name='Delayed Blast Fireball' memrz='0' level='7' desc='1d8 fire damage/level; you can delay blast for 5 rounds.' />
-<spell name='Forcecage' memrz='0' level='7' desc='Cube of force imprisons all inside.' />
-<spell name='Mordenkainens Sword' memrz='0' level='7' desc='Floating magic blade strikes opponents.' />
-<spell name='Prismatic Spray' memrz='0' level='7' desc='Rays hit subjects with variety of effects.' />
-<spell name='Mass Invisibility' memrz='0' level='7' desc='As invisibility, but affects all in range.' />
-<spell name='Shadow Walk' memrz='0' level='7' desc='Step into shadow to travel rapidly.' />
-<spell name='Simulacrum' memrz='0' level='7' desc='Creates partially real double of a creature.' />
-<spell name='Control Undead' memrz='0' level='7' desc='Undead dont attack you while under your command.' />
-<spell name='Finger of Death' memrz='0' level='7' desc='Kills one subject.' />
-<spell name='Ethereal Jaunt' memrz='0' level='7' desc='You become ethereal for 1 round/level.' />
-<spell name='Plane Shift' memrz='0' level='7' desc='Up to eight subjects travel to another plane.' />
-<spell name='Reverse Gravity' memrz='0' level='7' desc='Objects and creatures fall upward.' />
-<spell name='Statue' memrz='0' level='7' desc='Subject can become a statue at will.' />
-<spell name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival.' />
-<spell name='Vanish' memrz='0' level='7' desc='As teleport, but affects a touched object.' />
-<spell name='Limited Wish' memrz='0' level='7' desc='Alters reality-within spell limits.' />
-<spell name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying.' />
-<spell name='Prismatic Wall' memrz='0' level='8' desc='Walls colors have array of effects.' />
-<spell name='Protection from Spells' memrz='0' level='8' desc='Confers +8 resistance bonus.' />
-<spell name='Greater Planar Binding' memrz='0' level='8' desc='As lesser planar binding, but up to 24 HD.' />
-<spell name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round.' />
-<spell name='Maze' memrz='0' level='8' desc='Traps subject in extradimensional maze.' />
-<spell name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures.' />
-<spell name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you.' />
-<spell name='Trap the Soul' memrz='0' level='8' desc='Imprisons subject within gem.' />
-<spell name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object.' />
-<spell name='Antipathy' memrz='0' level='8' desc='Object or location affected by spell repels certain creatures.' />
-<spell name='Binding' memrz='0' level='8' desc='Array of techniques to imprison a creature.' />
-<spell name='Demand' memrz='0' level='8' desc='As sending, plus you can send suggestion.' />
-<spell name='Mass Charm' memrz='0' level='8' desc='As charm monster, but all within 30 ft.' />
-<spell name='Ottos Irresistible Dance' memrz='0' level='8' desc='Forces subject to dance.' />
-<spell name='Sympathy' memrz='0' level='8' desc='Object or location attracts certain creatures.' />
-<spell name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes.' />
-<spell name='Otilukes Telekinetic Sphere' memrz='0' level='8' desc='As Otilukes resilient sphere, but you move sphere telekinetically.' />
-<spell name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage.' />
-<spell name='Screen' memrz='0' level='8' desc='Illusion hides area from vision, scrying.' />
-<spell name='Clone' memrz='0' level='8' desc='Duplicate awakens when original dies.' />
-<spell name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft.' />
-<spell name='Etherealness' memrz='0' level='8' desc='Travel to Ethereal Plane with companions.' />
-<spell name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron.' />
-<spell name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else.' />
-<spell name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects.' />
-<spell name='Freedom' memrz='0' level='9' desc='Releases creature suffering imprisonment.' />
-<spell name='Imprisonment' memrz='0' level='9' desc='Entombs subject beneath the earth.' />
-<spell name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items.' />
-<spell name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides.' />
-<spell name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning.' />
-<spell name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones.' />
-<spell name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you.' />
-<spell name='Foresight' memrz='0' level='9' desc='Sixth sense warns of impending danger.' />
-<spell name='Dominate Monster' memrz='0' level='9' desc='As dominate person, but any creature.' />
-<spell name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys interposing hand, but stronger.' />
-<spell name='Meteor Swarm' memrz='0' level='9' desc='Deals 24d6 fire damage, plus bursts.' />
-<spell name='Weird' memrz='0' level='9' desc='As phantasmal killer, but affects all within 30 ft.' />
-<spell name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane.' />
-<spell name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels.' />
-<spell name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection.' />
-<spell name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level.' />
-<spell name='Refuge' memrz='0' level='9' desc='Alters item to transport its possessor to you.' />
-<spell name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round.' />
-<spell name='Teleportation Circle' memrz='0' level='9' desc='Circle teleports any creature inside to designated spot.' />
-<spell name='Temporal Stasis' memrz='0' level='9' desc='Puts subject into suspended animation.' />
-<spell name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds.' />
-<spell name='Wish' memrz='0' level='9' desc='As limited wish, but with fewer limits.' />
-</spells>
+<spells>
+<spell name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws.' />
+<spell name='Ray of Frost' memrz='0' level='0' desc='Ray deals 1d3 cold damage.' />
+<spell name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object.' />
+<spell name='Daze' memrz='0' level='0' desc='Creature loses next action.' />
+<spell name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack).' />
+<spell name='Light' memrz='0' level='0' desc='Object shines like a torch.' />
+<spell name='Dancing Lights' memrz='0' level='0' desc='Figment torches or other lights.' />
+<spell name='Ghost Sound' memrz='0' level='0' desc='Figment sounds.' />
+<spell name='Disrupt Undead' memrz='0' level='0' desc='Deals 1d6 damage to one undead.' />
+<spell name='Mage Hand' memrz='0' level='0' desc='5-pound telekinesis.' />
+<spell name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object.' />
+<spell name='Open/Close' memrz='0' level='0' desc='Opens or closes small or light things.' />
+<spell name='Arcane Mark' memrz='0' level='0' desc='Inscribes a personal rune (visible or invisible).' />
+<spell name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft.' />
+<spell name='Prestidigitation' memrz='0' level='0' desc='Performs minor tricks.' />
+<spell name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks.' />
+<spell name='Alarm' memrz='0' level='1' desc='Wards an area for 2 hours/level.' />
+<spell name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type.' />
+<spell name='Hold Portal' memrz='0' level='1' desc='Holds door shut.' />
+<spell name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders.' />
+<spell name='Shield' memrz='0' level='1' desc='Invisible disc gives cover and blocks magic missiles.' />
+<spell name='Grease' memrz='0' level='1' desc='Makes 10-ft. square or one object slippery.' />
+<spell name='Mage Armor' memrz='0' level='1' desc='Gives subject +4 armor bonus.' />
+<spell name='Mount' memrz='0' level='1' desc='Summons riding horse for 2 hr./level.' />
+<spell name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you.' />
+<spell name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you.' />
+<spell name='Unseen Servant' memrz='0' level='1' desc='Creates invisible force that obeys your commands.' />
+<spell name='Comprehend Languages' memrz='0' level='1' desc='Understands all spoken and written languages.' />
+<spell name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft.' />
+<spell name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft.' />
+<spell name='Identify' memrz='0' level='1' desc='Determines single feature of magic item.' />
+<spell name='True Strike' memrz='0' level='1' desc='Adds +20 bonus to your next attack roll.' />
+<spell name='Charm Person' memrz='0' level='1' desc='Makes one person your friend.' />
+<spell name='Hypnotism' memrz='0' level='1' desc='Fascinates 2d4 HD of creatures.' />
+<spell name='Sleep' memrz='0' level='1' desc='Put 2d4 HD of creatures into comatose slumber.' />
+<spell name='Magic Missile' memrz='0' level='1' desc='1d4+1 damage; +1 missile/two levels above 1st (max +5).' />
+<spell name='Tensers Floating Disk' memrz='0' level='1' desc='3-ft.-diameter horizontal disk that holds 100 lb./level.' />
+<spell name='Change Self' memrz='0' level='1' desc='Changes your appearance.' />
+<spell name='Color Spray' memrz='0' level='1' desc='Knocks unconscious, blinds, or stuns 1d6 weak creatures.' />
+<spell name='Nystuls Magical Aura' memrz='0' level='1' desc='Grants object false magic aura.' />
+<spell name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura.' />
+<spell name='Silent Image' memrz='0' level='1' desc='Creates minor illusion of your design.' />
+<spell name='Ventriloquism' memrz='0' level='1' desc='Throws voice for 1 min./level.' />
+<spell name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds.' />
+<spell name='Chill Touch' memrz='0' level='1' desc='1 touch/level deals 1d6 damage and possibly 1 Str damage.' />
+<spell name='Ray of Enfeeblement' memrz='0' level='1' desc='Ray reduces Str by 1d6 points +1 point/two levels.' />
+<spell name='Animate Rope' memrz='0' level='1' desc='Makes a rope move at your command.' />
+<spell name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max: 5d4).' />
+<spell name='Enlarge' memrz='0' level='1' desc='Object or creature grows +10%/level (max +50%).' />
+<spell name='Erase' memrz='0' level='1' desc='Mundane or magical writing vanishes.' />
+<spell name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed.' />
+<spell name='Feather Fall' memrz='0' level='1' desc='Objects or creatures fall slowly.' />
+<spell name='Jump' memrz='0' level='1' desc='Subject gets +30 on Jump checks.' />
+<spell name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus.' />
+<spell name='Message' memrz='0' level='1' desc='Whispered conversation at distance.' />
+<spell name='Reduce' memrz='0' level='1' desc='Object or creature shrinks 10%/level (max 50%).' />
+<spell name='Shocking Grasp' memrz='0' level='1' desc='Touch delivers 1d8 +1/level electricity.' />
+<spell name='Spider Climb' memrz='0' level='1' desc='Grants ability to walk on walls and ceilings.' />
+<spell name='Arcane Lock' memrz='0' level='2' desc='Magically locks a portal or chest.' />
+<spell name='Obscure Object' memrz='0' level='2' desc='Masks object against divination.' />
+<spell name='Protection from Arrows' memrz='0' level='2' desc='Subject immune to most ranged attacks.' />
+<spell name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type.' />
+<spell name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision.' />
+<spell name='Glitterdust' memrz='0' level='2' desc='Blinds creatures, outlines invisible creatures.' />
+<spell name='Melfs Acid Arrow' memrz='0' level='2' desc='Ranged touch attack; 2d4 damage for 1 round + 1 round/three levels.' />
+<spell name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you.' />
+<spell name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures.' />
+<spell name='Web' memrz='0' level='2' desc='Fills 10-ft. cube/level with sticky spider webs.' />
+<spell name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts.' />
+<spell name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type).' />
+<spell name='See Invisibility' memrz='0' level='2' desc='Reveals invisible creatures or objects.' />
+<spell name='Tashas Hideous Laughter' memrz='0' level='2' desc='Subject loses actions for 1d3 rounds.' />
+<spell name='Darkness' memrz='0' level='2' desc='20-ft. radius of supernatural darkness.' />
+<spell name='Daylight' memrz='0' level='2' desc='60-ft. radius of bright light.' />
+<spell name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level.' />
+<spell name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures.' />
+<spell name='Blur' memrz='0' level='2' desc='Attacks miss subject 20% of the time.' />
+<spell name='Continual Flame' memrz='0' level='2' desc='Makes a permanent, heatless torch.' />
+<spell name='Hypnotic Pattern' memrz='0' level='2' desc='Fascinates 2d4+1 HD/level of creatures.' />
+<spell name='Invisibility' memrz='0' level='2' desc='Subject is invisible for 10 min./level or until it attacks.' />
+<spell name='Leomunds Trap' memrz='0' level='2' desc='Makes item seem trapped.' />
+<spell name='Magic Mouth' memrz='0' level='2' desc='Speaks once when triggered.' />
+<spell name='Minor Image' memrz='0' level='2' desc='As silent image, plus some sound.' />
+<spell name='Mirror Image' memrz='0' level='2' desc='Creates decoy duplicates of you (1d4 +1/three levels, max 8).' />
+<spell name='Misdirection' memrz='0' level='2' desc='Misleads divinations for one creature or object.' />
+<spell name='Ghoul Touch' memrz='0' level='2' desc='Paralyzes one subject, who exudes stench (-2 penalty) nearby.' />
+<spell name='Scare' memrz='0' level='2' desc='Panics creatures up to 5 HD (15-ft. radius).' />
+<spell name='Spectral Hand' memrz='0' level='2' desc='Creates disembodied glowing hand to deliver touch attacks.' />
+<spell name='Alter Self' memrz='0' level='2' desc='As change self, plus more drastic changes.' />
+<spell name='Blindness/Deafness' memrz='0' level='2' desc='Makes subject blind or deaf.' />
+<spell name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level.' />
+<spell name='Cats Grace' memrz='0' level='2' desc='Subject gains 1d4+1 Dex for 1 hr./level.' />
+<spell name='Darkvision' memrz='0' level='2' desc='See 60 ft. in total darkness.' />
+<spell name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level.' />
+<spell name='Knock' memrz='0' level='2' desc='Opens locked or magically sealed door.' />
+<spell name='Levitate' memrz='0' level='2' desc='Subject moves up and down at your direction.' />
+<spell name='Pyrotechnics' memrz='0' level='2' desc='Turns fire into blinding light or choking smoke.' />
+<spell name='Rope Trick' memrz='0' level='2' desc='Up to eight creatures hide in extradimensional space.' />
+<spell name='Whispering Wind' memrz='0' level='2' desc='Sends a short message one mile/level.' />
+<spell name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects.' />
+<spell name='Explosive Runes' memrz='0' level='3' desc='Deals 6d6 damage when read.' />
+<spell name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level.' />
+<spell name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying.' />
+<spell name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy.' />
+<spell name='Flame Arrow' memrz='0' level='3' desc='Shoots flaming projectiles (extra damage) or fiery bolts (4d6 damage).' />
+<spell name='Phantom Steed' memrz='0' level='3' desc='Magical horse appears for 1 hour/level.' />
+<spell name='Sepia Snake Sigil' memrz='0' level='3' desc='Creates text symbol that immobilizes reader.' />
+<spell name='Sleet Storm' memrz='0' level='3' desc='Hampers vision and movement.' />
+<spell name='Stinking Cloud' memrz='0' level='3' desc='Nauseating vapors, 1 round/level.' />
+<spell name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you.' />
+<spell name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level.' />
+<spell name='Tongues' memrz='0' level='3' desc='Speak any language.' />
+<spell name='Hold Person' memrz='0' level='3' desc='Holds one person helpless; 1 round/level.' />
+<spell name='Suggestion' memrz='0' level='3' desc='Compels subject to follow stated course of action.' />
+<spell name='Fireball' memrz='0' level='3' desc='1d6 damage per level, 20-ft. radius.' />
+<spell name='Gust of Wind' memrz='0' level='3' desc='Blows away or knocks down smaller creatures.' />
+<spell name='Leomunds Tiny Hut' memrz='0' level='3' desc='Creates shelter for 10 creatures.' />
+<spell name='Lightning Bolt' memrz='0' level='3' desc='Electricity deals 1d6 damage/level.' />
+<spell name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases.' />
+<spell name='Displacement' memrz='0' level='3' desc='Attacks miss subject 50%.' />
+<spell name='Illusory Script' memrz='0' level='3' desc='Only intended reader can decipher.' />
+<spell name='Invisibility Sphere' memrz='0' level='3' desc='Makes everyone within 10 ft. invisible.' />
+<spell name='Major Image' memrz='0' level='3' desc='As silent image, plus sound, smell and thermal effects.' />
+<spell name='Gentle Repose' memrz='0' level='3' desc='Preserves one corpse.' />
+<spell name='Halt Undead' memrz='0' level='3' desc='Immobilizes undead for 1 round/level.' />
+<spell name='Vampiric Touch' memrz='0' level='3' desc='Touch deals 1d6/two caster levels; caster gains damage as hp.' />
+<spell name='Blink' memrz='0' level='3' desc='You randomly vanish and reappear for 1 round/level.' />
+<spell name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90.' />
+<spell name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly.' />
+<spell name='Greater Magic Weapon' memrz='0' level='3' desc='+1/three levels (max +5).' />
+<spell name='Haste' memrz='0' level='3' desc='Extra partial action and +4 AC.' />
+<spell name='Keen Edge' memrz='0' level='3' desc='Doubles normal weapons threat range.' />
+<spell name='Secret Page' memrz='0' level='3' desc='Changes one page to hide its real content.' />
+<spell name='Shrink Item' memrz='0' level='3' desc='Object shrinks to one-twelfth size.' />
+<spell name='Slow' memrz='0' level='3' desc='One subject/level takes only partial actions, -2 AC, -2 melee rolls.' />
+<spell name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater.' />
+<spell name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement.' />
+<spell name='Fire Trap' memrz='0' level='4' desc='Opened object deals 1d4 +1/level damage.' />
+<spell name='Minor Globe of Invulnerability' memrz='0' level='4' desc='Stops 1st- through 3rd-level spell effects.' />
+<spell name='Remove Curse' memrz='0' level='4' desc='Frees object or person from curse.' />
+<spell name='Stoneskin' memrz='0' level='4' desc='Stops blows, cuts, stabs, and slashes.' />
+<spell name='Evards Black Tentacles' memrz='0' level='4' desc='1d4 +1/level tentacles grapple randomly within 15 ft.' />
+<spell name='Leomunds Secure Shelter' memrz='0' level='4' desc='Creates sturdy cottage.' />
+<spell name='Minor Creation' memrz='0' level='4' desc='Creates one cloth or wood object.' />
+<spell name='Solid Fog' memrz='0' level='4' desc='Blocks vision and slows movement.' />
+<spell name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you.' />
+<spell name='Arcane Eye' memrz='0' level='4' desc='Invisible floating eye moves 30 ft./round.' />
+<spell name='Detect Scrying' memrz='0' level='4' desc='Alerts you of magical eavesdropping.' />
+<spell name='Locate Creature' memrz='0' level='4' desc='Indicates direction to familiar creature.' />
+<spell name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance.' />
+<spell name='Charm Monster' memrz='0' level='4' desc='Makes monster believe it is your ally.' />
+<spell name='Confusion' memrz='0' level='4' desc='Makes subject behave oddly for 1 round/level.' />
+<spell name='Emotion' memrz='0' level='4' desc='Arouses strong emotion in subject.' />
+<spell name='Lesser Geas' memrz='0' level='4' desc='Commands subject of 7 HD or less.' />
+<spell name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold.' />
+<spell name='Ice Storm' memrz='0' level='4' desc='Hail deals 5d6 damage in cylinder 40 ft. across.' />
+<spell name='Otilukes Resilient Sphere' memrz='0' level='4' desc='Force globe protects but traps one subject.' />
+<spell name='Shout' memrz='0' level='4' desc='Deafens all within cone and deals 2d6 damage.' />
+<spell name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft.' />
+<spell name='Wall of Ice' memrz='0' level='4' desc='Ice plane creates wall with 15 hp +1/level, or hemisphere can trap creatures inside.' />
+<spell name='Hallucinatory Terrain' memrz='0' level='4' desc='Makes one type of terrain appear like another (field into forest, etc).' />
+<spell name='Illusory Wall' memrz='0' level='4' desc='Wall, floor, or ceiling looks real, but anything can pass through.' />
+<spell name='Improved Invisibility' memrz='0' level='4' desc='As invisibility, but subject can attack and stay invisible.' />
+<spell name='Phantasmal Killer' memrz='0' level='4' desc='Fearsome illusion kills subject or deals 3d6 damage.' />
+<spell name='Rainbow Pattern' memrz='0' level='4' desc='Lights prevent 24 HD of creatures from attacking or moving away.' />
+<spell name='Shadow Conjuration' memrz='0' level='4' desc='Mimics conjuring below 4th level.' />
+<spell name='Contagion' memrz='0' level='4' desc='Infects subject with chosen disease.' />
+<spell name='Enervation' memrz='0' level='4' desc='Subject gains 1d4 negative levels.' />
+<spell name='Fear' memrz='0' level='4' desc='Subjects within cone flee for 1 round/level.' />
+<spell name='Bestow Curse' memrz='0' level='4' desc='-6 to an ability; -4 on attacks, saves, and checks; or 50% chance of losing each action.' />
+<spell name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb.' />
+<spell name='Polymorph Other' memrz='0' level='4' desc='Gives one subject a new form.' />
+<spell name='Polymorph Self' memrz='0' level='4' desc='You assume a new form.' />
+<spell name='Rarys Mnemonic Enhancer' memrz='0' level='4' desc='Prepares extra spells or retains one just cast. Wizard only.' />
+<spell name='Dismissal' memrz='0' level='5' desc='Forces a creature to return to native plane.' />
+<spell name='Cloudkill' memrz='0' level='5' desc='Kills 3 HD or less; 4-6 HD save or die.' />
+<spell name='Leomunds Secret Chest' memrz='0' level='5' desc='Hides expensive chest on Ethereal Plane; you retrieve it at will.' />
+<spell name='Lesser Planar Binding' memrz='0' level='5' desc='Traps outsider until it performs a task.' />
+<spell name='Major Creation' memrz='0' level='5' desc='As minor creation, plus stone and metal.' />
+<spell name='Mordenkainens Faithful Hound' memrz='0' level='5' desc='Phantom dog can guard, attack.' />
+<spell name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you.' />
+<spell name='Wall of Iron' memrz='0' level='5' desc='30 hp/four levels; can topple onto foes.' />
+<spell name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped.' />
+<spell name='Contact Other Plane' memrz='0' level='5' desc='Ask question of extraplanar entity.' />
+<spell name='Prying Eyes' memrz='0' level='5' desc='1d4 floating eyes +1/level scout for you.' />
+<spell name='Rarys Telepathic Bond' memrz='0' level='5' desc='Link lets allies communicate.' />
+<spell name='Dominate Person' memrz='0' level='5' desc='Controls humanoid telepathically.' />
+<spell name='Feeblemind' memrz='0' level='5' desc='Subjects Int drops to 1.' />
+<spell name='Hold Monster' memrz='0' level='5' desc='As hold person, but any creature.' />
+<spell name='Mind Fog' memrz='0' level='5' desc='Subjects in fog get -10 Wis, Will checks.' />
+<spell name='Bigbys Interposing Hand' memrz='0' level='5' desc='Hand provides 90% cover against one opponent.' />
+<spell name='Cone of Cold' memrz='0' level='5' desc='1d6 cold damage/level.' />
+<spell name='Sending' memrz='0' level='5' desc='Delivers short message anywhere, instantly.' />
+<spell name='Wall of Force' memrz='0' level='5' desc='Wall is immune to damage.' />
+<spell name='Dream' memrz='0' level='5' desc='Sends message to anyone sleeping.' />
+<spell name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion.' />
+<spell name='Greater Shadow Conjuration' memrz='0' level='5' desc='As shadow conjuration, but up to 4th level and 40% real.' />
+<spell name='Mirage Arcana' memrz='0' level='5' desc='As hallucinatory terrain, plus structures.' />
+<spell name='Nightmare' memrz='0' level='5' desc='Sends vision dealing 1d10 damage, fatigue.' />
+<spell name='Persistent Image' memrz='0' level='5' desc='As major image, but no concentration required.' />
+<spell name='Seeming' memrz='0' level='5' desc='Changes appearance of one person/two levels.' />
+<spell name='Shadow Evocation' memrz='0' level='5' desc='Mimics evocation less than 5th level.' />
+<spell name='Animate Dead' memrz='0' level='5' desc='Creates undead skeletons and zombies.' />
+<spell name='Magic Jar' memrz='0' level='5' desc='Enables possession of another creature.' />
+<spell name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD.' />
+<spell name='Fabricate' memrz='0' level='5' desc='Transforms raw materials into finished items.' />
+<spell name='Passwall' memrz='0' level='5' desc='Breaches walls 1 ft. thick/level.' />
+<spell name='Stone Shape' memrz='0' level='5' desc='Sculpts stone into any form.' />
+<spell name='Telekinesis' memrz='0' level='5' desc='Lifts or moves 25 lb./level at long range.' />
+<spell name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere.' />
+<spell name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
+<spell name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
+<spell name='Permanency' memrz='0' level='5' desc='Makes certain spells permanent; costs XP.' />
+<spell name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft.' />
+<spell name='Globe of Invulnerability' memrz='0' level='6' desc='As minor globe, plus 4th level.' />
+<spell name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but +20 on check.' />
+<spell name='Guards and Wards' memrz='0' level='6' desc='Array of magic effects protect area.' />
+<spell name='Repulsion' memrz='0' level='6' desc='Creatures cant approach you.' />
+<spell name='Acid Fog' memrz='0' level='6' desc='Fog deals acid damage.' />
+<spell name='Planar Binding' memrz='0' level='6' desc='As lesser planar binding, but up to 16 HD.' />
+<spell name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you.' />
+<spell name='Analyze Dweomer' memrz='0' level='6' desc='Reveals magical aspects of subject.' />
+<spell name='Legend Lore' memrz='0' level='6' desc='Learn tales about a person, place, or thing.' />
+<spell name='True Seeing' memrz='0' level='6' desc='See all things as they really are.' />
+<spell name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature.' />
+<spell name='Mass Suggestion' memrz='0' level='6' desc='As suggestion, plus one/level subjects.' />
+<spell name='Bigbys Forceful Hand' memrz='0' level='6' desc='Hand pushes creatures away.' />
+<spell name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts.' />
+<spell name='Contingency' memrz='0' level='6' desc='Sets trigger condition for another spell.' />
+<spell name='Otilukes Freezing Sphere' memrz='0' level='6' desc='Freezes water or deals cold damage.' />
+<spell name='Greater Shadow Evocation' memrz='0' level='6' desc='As shadow evocation, but up to 5th level.' />
+<spell name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double.' />
+<spell name='Permanent Image' memrz='0' level='6' desc='Includes sight, sound, and smell.' />
+<spell name='Programmed Image' memrz='0' level='6' desc='As major image, plus triggered by event.' />
+<spell name='Project Image' memrz='0' level='6' desc='Illusory double can talk and cast spells.' />
+<spell name='Shades' memrz='0' level='6' desc='As shadow conjuration, but up to 5th level and 60% real.' />
+<spell name='Veil' memrz='0' level='6' desc='Changes appearance of group of creatures.' />
+<spell name='Circle of Death' memrz='0' level='6' desc='Kills 1d4 HD/level.' />
+<spell name='Control Water' memrz='0' level='6' desc='Raises, lowers, or parts bodies of water.' />
+<spell name='Control Weather' memrz='0' level='6' desc='Changes weather in local area.' />
+<spell name='Disintegrate' memrz='0' level='6' desc='Makes one creature or object vanish.' />
+<spell name='Eyebite' memrz='0' level='6' desc='Charm, fear, sicken or sleep one subject.' />
+<spell name='Flesh to Stone' memrz='0' level='6' desc='Turns subject creature into statue.' />
+<spell name='Mass Haste' memrz='0' level='6' desc='As haste, affects one/level subjects.' />
+<spell name='Mordenkainens Lucubration' memrz='0' level='6' desc='Recalls spell of 5th level or less. Wizard Only.' />
+<spell name='Move Earth' memrz='0' level='6' desc='Digs trenches and build hills.' />
+<spell name='Stone to Flesh' memrz='0' level='6' desc='Restores petrified creature.' />
+<spell name='Tensers Transformation' memrz='0' level='6' desc='You gain combat bonuses.' />
+<spell name='Banishment' memrz='0' level='7' desc='Banishes 2 HD/level extraplanar creatures.' />
+<spell name='Sequester' memrz='0' level='7' desc='Subject is invisible to sight and scrying.' />
+<spell name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster.' />
+<spell name='Drawmijs Instant Summons' memrz='0' level='7' desc='Prepared object appears in your hand.' />
+<spell name='Mordenkainens Magnificent Mansion' memrz='0' level='7' desc='Door leads to extradimensional mansion.' />
+<spell name='Phase Door' memrz='0' level='7' desc='Invisible passage through wood or stone.' />
+<spell name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp.' />
+<spell name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you.' />
+<spell name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer.' />
+<spell name='Vision' memrz='0' level='7' desc='As legend lore, but quicker and strenuous.' />
+<spell name='Insanity' memrz='0' level='7' desc='Subject suffers continuous confusion.' />
+<spell name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples.' />
+<spell name='Delayed Blast Fireball' memrz='0' level='7' desc='1d8 fire damage/level; you can delay blast for 5 rounds.' />
+<spell name='Forcecage' memrz='0' level='7' desc='Cube of force imprisons all inside.' />
+<spell name='Mordenkainens Sword' memrz='0' level='7' desc='Floating magic blade strikes opponents.' />
+<spell name='Prismatic Spray' memrz='0' level='7' desc='Rays hit subjects with variety of effects.' />
+<spell name='Mass Invisibility' memrz='0' level='7' desc='As invisibility, but affects all in range.' />
+<spell name='Shadow Walk' memrz='0' level='7' desc='Step into shadow to travel rapidly.' />
+<spell name='Simulacrum' memrz='0' level='7' desc='Creates partially real double of a creature.' />
+<spell name='Control Undead' memrz='0' level='7' desc='Undead dont attack you while under your command.' />
+<spell name='Finger of Death' memrz='0' level='7' desc='Kills one subject.' />
+<spell name='Ethereal Jaunt' memrz='0' level='7' desc='You become ethereal for 1 round/level.' />
+<spell name='Plane Shift' memrz='0' level='7' desc='Up to eight subjects travel to another plane.' />
+<spell name='Reverse Gravity' memrz='0' level='7' desc='Objects and creatures fall upward.' />
+<spell name='Statue' memrz='0' level='7' desc='Subject can become a statue at will.' />
+<spell name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival.' />
+<spell name='Vanish' memrz='0' level='7' desc='As teleport, but affects a touched object.' />
+<spell name='Limited Wish' memrz='0' level='7' desc='Alters reality-within spell limits.' />
+<spell name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying.' />
+<spell name='Prismatic Wall' memrz='0' level='8' desc='Walls colors have array of effects.' />
+<spell name='Protection from Spells' memrz='0' level='8' desc='Confers +8 resistance bonus.' />
+<spell name='Greater Planar Binding' memrz='0' level='8' desc='As lesser planar binding, but up to 24 HD.' />
+<spell name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round.' />
+<spell name='Maze' memrz='0' level='8' desc='Traps subject in extradimensional maze.' />
+<spell name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures.' />
+<spell name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you.' />
+<spell name='Trap the Soul' memrz='0' level='8' desc='Imprisons subject within gem.' />
+<spell name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object.' />
+<spell name='Antipathy' memrz='0' level='8' desc='Object or location affected by spell repels certain creatures.' />
+<spell name='Binding' memrz='0' level='8' desc='Array of techniques to imprison a creature.' />
+<spell name='Demand' memrz='0' level='8' desc='As sending, plus you can send suggestion.' />
+<spell name='Mass Charm' memrz='0' level='8' desc='As charm monster, but all within 30 ft.' />
+<spell name='Ottos Irresistible Dance' memrz='0' level='8' desc='Forces subject to dance.' />
+<spell name='Sympathy' memrz='0' level='8' desc='Object or location attracts certain creatures.' />
+<spell name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes.' />
+<spell name='Otilukes Telekinetic Sphere' memrz='0' level='8' desc='As Otilukes resilient sphere, but you move sphere telekinetically.' />
+<spell name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage.' />
+<spell name='Screen' memrz='0' level='8' desc='Illusion hides area from vision, scrying.' />
+<spell name='Clone' memrz='0' level='8' desc='Duplicate awakens when original dies.' />
+<spell name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft.' />
+<spell name='Etherealness' memrz='0' level='8' desc='Travel to Ethereal Plane with companions.' />
+<spell name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron.' />
+<spell name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else.' />
+<spell name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects.' />
+<spell name='Freedom' memrz='0' level='9' desc='Releases creature suffering imprisonment.' />
+<spell name='Imprisonment' memrz='0' level='9' desc='Entombs subject beneath the earth.' />
+<spell name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items.' />
+<spell name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides.' />
+<spell name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning.' />
+<spell name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones.' />
+<spell name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you.' />
+<spell name='Foresight' memrz='0' level='9' desc='Sixth sense warns of impending danger.' />
+<spell name='Dominate Monster' memrz='0' level='9' desc='As dominate person, but any creature.' />
+<spell name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys interposing hand, but stronger.' />
+<spell name='Meteor Swarm' memrz='0' level='9' desc='Deals 24d6 fire damage, plus bursts.' />
+<spell name='Weird' memrz='0' level='9' desc='As phantasmal killer, but affects all within 30 ft.' />
+<spell name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane.' />
+<spell name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels.' />
+<spell name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection.' />
+<spell name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level.' />
+<spell name='Refuge' memrz='0' level='9' desc='Alters item to transport its possessor to you.' />
+<spell name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round.' />
+<spell name='Teleportation Circle' memrz='0' level='9' desc='Circle teleports any creature inside to designated spot.' />
+<spell name='Temporal Stasis' memrz='0' level='9' desc='Puts subject into suspended animation.' />
+<spell name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds.' />
+<spell name='Wish' memrz='0' level='9' desc='As limited wish, but with fewer limits.' />
+</spells>
--- a/data/d20/d20weapons.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/d20/d20weapons.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,255 +1,255 @@
-<weapons>
-<weapon mod="0" name="Antimatter rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="6d10" critical="x2" range="10" weight="10" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Axe, orc double" cost="60" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x3" range="0" weight="25" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Axe, throwing" cost="8" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x2" range="10" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Battleaxe" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="7" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Blowgun" cost="1" category="Asian Weapons-Ranged" size="Small" damage="1" critical="x2" range="10" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Chain, spiked" cost="25" category="Exotic Weapons-Melee" size="Large" damage="2d4" critical="x2" range="0" weight="15" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Club" cost="0" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="10" weight="3" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Crossbow, hand" cost="100" category="Exotic Weapons-Ranged" size="Tiny" damage="1d4" critical="19-20/x2" range="30" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Crossbow, heavy" cost="50" category="Simple Weapons-Ranged" size="Medium" damage="1d10" critical="19-20/x2" range="120" weight="9" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Crossbow, light" cost="35" category="Simple Weapons-Ranged" size="Small" damage="1d8" critical="19-20/x2" range="80" weight="6" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Crossbow, repeating" cost="250" category="Exotic Weapons-Ranged" size="Medium" damage="1d8" critical="19-20/x2" range="80" weight="16" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Dagger" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="19-20/x2" range="10" weight="1" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Dagger, punching" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x3" range="0" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Dart" cost="0" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="20" weight="0" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Falchion" cost="75" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="18-29/x2" range="0" weight="16" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Flail, dire" cost="90" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x2" range="0" weight="20" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Flail, heavy" cost="15" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="20" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Flail, light" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="5" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Flamer" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d6*" critical="-" range="20" weight="8" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Gauntlet" cost="2 gp" category="Simple Weapons-Melee" size="Unarmed" damage="*" critical="*" range="0" weight="2" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Gauntlet, spiked" cost="5" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Glaive" cost="8" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Greataxe" cost="20" category="Martial Weapons-Melee" size="Large" damage="1d12" critical="x3" range="0" weight="20" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Greatclub" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x2" range="0" weight="10" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Greatsword" cost="50" category="Martial Weapons-Melee" size="Large" damage="2d6" critical="19-20/x2" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Grenade launcher" cost="-1" category="Modern Weapons-Ranged" size="Large" damage="*" critical="*" range="200" weight="12" type="*" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Guisarme" cost="9" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Halberd" cost="10" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="P&amp;S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Halfspear" cost="1" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x3" range="20" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Hammer, gnome hooked" cost="20" category="Exotic Weapons-Melee" size="Medium" damage="1d6/1d4" critical="x3/x4" range="0" weight="6" type="B&amp;P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Hammer, light" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x2" range="20" weight="2" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Handaxe" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Javelin" cost="1" category="Simple Weapons-Ranged" size="Medium" damage="1d6" critical="x2" range="30" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Kama" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Kama, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Katana" cost="400" category="Asian Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Kukri" cost="8" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="18-29/x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Kusari-gama" cost="10" category="Asian Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Lance, heavy" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Lance, light" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Laser pistol" cost="-1" category="Futuristic Weapons-Ranged" size="Small" damage="2d10" critical="x2" range="100" weight="2" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Laser rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d20" critical="x2" range="200" weight="7" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Longbow" cost="75" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="100" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Longbow, composite" cost="100" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="110" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Longspear" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d8" critical="x3" range="0" weight="9" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Longsword" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="19-20/x2" range="0" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Mace, heavy" cost="12" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="12" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Mace, light" cost="5" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="6" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Morningstar" cost="8" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="8" type="B&amp;P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Musket" cost="500" category="Renaissance Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="150" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Net" cost="20" category="Exotic Weapons-Ranged" size="Medium" damage="0" critical="0" range="10" weight="10" type="-" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Nunchaku" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
-<description >
-</description >
-</weapon>
-<weapon mod="0" name="Nunchaku, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Pick, heavy" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="x4" range="0" weight="6" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Pick, light" cost="4" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x4" range="0" weight="4" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Pistol" cost="250" category="Renaissance Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="50" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Pistol, automatic" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="150" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Pistol, revolver" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="100" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Quarterstaff" cost="0" category="Simple Weapons-Melee" size="Large" damage="1d6" critical="x2" range="0" weight="4" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Ranseur" cost="10" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Rapier" cost="20" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Rifle, automatic" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="250" weight="12" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Rifle, repeater" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="200" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Sap" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d6s" critical="x2" range="0" weight="3" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Scattergun" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="*" critical="*" range="10" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Scimitar" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Scythe" cost="18" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x4" range="0" weight="12" type="P&amp;S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Shortbow" cost="30" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="60" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Shortbow, composite" cost="75" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="70" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Shortspear" cost="2" category="Simple Weapons-Melee" size="Large" damage="1d8" critical="x3" range="20" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Shuriken" cost="1" category="Exotic Weapons-Ranged" size="Tiny" damage="1" critical="x2" range="100" weight="0" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Siangham" cost="3" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Siangham, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Sickle" cost="6" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Sling" cost="1d4" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="50" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Sword, bastard" cost="35" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Sword, short" cost="10" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Sword, two-bladed" cost="100" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="19-20/X2" range="0" weight="30" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Trident" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="10" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Urgrosh, dwarven" cost="50" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d6" critical="x3" range="0" weight="15" type="S&amp;P" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Wakizashi" cost="300" category="Asian Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Waraxe, dwarven" cost="30" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Warhammer" cost="12" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="8" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" name="Whip" cost="1" category="Exotic Weapons-Ranged" size="Small" damage="1d2s" critical="x2" range="15" weight="2" type="S" >
-<description ></description >
-</weapon>
-</weapons>
+<weapons>
+<weapon mod="0" name="Antimatter rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="6d10" critical="x2" range="10" weight="10" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Axe, orc double" cost="60" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x3" range="0" weight="25" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Axe, throwing" cost="8" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x2" range="10" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Battleaxe" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="7" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Blowgun" cost="1" category="Asian Weapons-Ranged" size="Small" damage="1" critical="x2" range="10" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Chain, spiked" cost="25" category="Exotic Weapons-Melee" size="Large" damage="2d4" critical="x2" range="0" weight="15" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Club" cost="0" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="10" weight="3" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Crossbow, hand" cost="100" category="Exotic Weapons-Ranged" size="Tiny" damage="1d4" critical="19-20/x2" range="30" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Crossbow, heavy" cost="50" category="Simple Weapons-Ranged" size="Medium" damage="1d10" critical="19-20/x2" range="120" weight="9" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Crossbow, light" cost="35" category="Simple Weapons-Ranged" size="Small" damage="1d8" critical="19-20/x2" range="80" weight="6" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Crossbow, repeating" cost="250" category="Exotic Weapons-Ranged" size="Medium" damage="1d8" critical="19-20/x2" range="80" weight="16" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Dagger" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="19-20/x2" range="10" weight="1" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Dagger, punching" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x3" range="0" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Dart" cost="0" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="20" weight="0" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Falchion" cost="75" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="18-29/x2" range="0" weight="16" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Flail, dire" cost="90" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x2" range="0" weight="20" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Flail, heavy" cost="15" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="20" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Flail, light" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="5" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Flamer" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d6*" critical="-" range="20" weight="8" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Gauntlet" cost="2 gp" category="Simple Weapons-Melee" size="Unarmed" damage="*" critical="*" range="0" weight="2" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Gauntlet, spiked" cost="5" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Glaive" cost="8" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Greataxe" cost="20" category="Martial Weapons-Melee" size="Large" damage="1d12" critical="x3" range="0" weight="20" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Greatclub" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x2" range="0" weight="10" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Greatsword" cost="50" category="Martial Weapons-Melee" size="Large" damage="2d6" critical="19-20/x2" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Grenade launcher" cost="-1" category="Modern Weapons-Ranged" size="Large" damage="*" critical="*" range="200" weight="12" type="*" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Guisarme" cost="9" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Halberd" cost="10" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="P&amp;S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Halfspear" cost="1" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x3" range="20" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Hammer, gnome hooked" cost="20" category="Exotic Weapons-Melee" size="Medium" damage="1d6/1d4" critical="x3/x4" range="0" weight="6" type="B&amp;P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Hammer, light" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x2" range="20" weight="2" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Handaxe" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Javelin" cost="1" category="Simple Weapons-Ranged" size="Medium" damage="1d6" critical="x2" range="30" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Kama" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Kama, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Katana" cost="400" category="Asian Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Kukri" cost="8" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="18-29/x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Kusari-gama" cost="10" category="Asian Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Lance, heavy" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Lance, light" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Laser pistol" cost="-1" category="Futuristic Weapons-Ranged" size="Small" damage="2d10" critical="x2" range="100" weight="2" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Laser rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d20" critical="x2" range="200" weight="7" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Longbow" cost="75" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="100" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Longbow, composite" cost="100" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="110" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Longspear" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d8" critical="x3" range="0" weight="9" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Longsword" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="19-20/x2" range="0" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Mace, heavy" cost="12" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="12" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Mace, light" cost="5" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="6" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Morningstar" cost="8" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="8" type="B&amp;P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Musket" cost="500" category="Renaissance Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="150" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Net" cost="20" category="Exotic Weapons-Ranged" size="Medium" damage="0" critical="0" range="10" weight="10" type="-" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Nunchaku" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
+<description >
+</description >
+</weapon>
+<weapon mod="0" name="Nunchaku, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Pick, heavy" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="x4" range="0" weight="6" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Pick, light" cost="4" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x4" range="0" weight="4" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Pistol" cost="250" category="Renaissance Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="50" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Pistol, automatic" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="150" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Pistol, revolver" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="100" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Quarterstaff" cost="0" category="Simple Weapons-Melee" size="Large" damage="1d6" critical="x2" range="0" weight="4" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Ranseur" cost="10" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Rapier" cost="20" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Rifle, automatic" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="250" weight="12" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Rifle, repeater" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="200" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Sap" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d6s" critical="x2" range="0" weight="3" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Scattergun" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="*" critical="*" range="10" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Scimitar" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Scythe" cost="18" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x4" range="0" weight="12" type="P&amp;S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Shortbow" cost="30" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="60" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Shortbow, composite" cost="75" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="70" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Shortspear" cost="2" category="Simple Weapons-Melee" size="Large" damage="1d8" critical="x3" range="20" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Shuriken" cost="1" category="Exotic Weapons-Ranged" size="Tiny" damage="1" critical="x2" range="100" weight="0" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Siangham" cost="3" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Siangham, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Sickle" cost="6" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Sling" cost="1d4" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="50" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Sword, bastard" cost="35" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Sword, short" cost="10" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Sword, two-bladed" cost="100" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="19-20/X2" range="0" weight="30" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Trident" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="10" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Urgrosh, dwarven" cost="50" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d6" critical="x3" range="0" weight="15" type="S&amp;P" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Wakizashi" cost="300" category="Asian Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Waraxe, dwarven" cost="30" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Warhammer" cost="12" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="8" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" name="Whip" cost="1" category="Exotic Weapons-Ranged" size="Small" damage="1d2s" critical="x2" range="15" weight="2" type="S" >
+<description ></description >
+</weapon>
+</weapons>
--- a/data/dnd35/books.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/books.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,110 +1,110 @@
-AE^Arms and Equipment Guide
-BB^Bastion of Broken Souls
-BC^Book of Challenges: Dungeon Rooms, Puzzles, and Traps
-BE^Book of Exalted Deeds
-BV^Book of Vile Darkness
-CR^Champions of Ruin
-CV^Champions of Valor
-CSW^City of Splendors: Waterdeep
-CSQ^City of the Spider Queen
-CAd^Complete Adventurer
-CAr^Complete Arcane
-CD^Complete Divine
-CM^Complete Mage
-CP^Complete Psionic
-CW^Complete Warrior
-DG^D&amp;D Gazetteer
-DH^Deep Horizon
-DF^Defenders of the Faith: A Guidebook to Clerics and Paladins
-DD^Deities and Demigods
-Dr^Draconomicon
-DM^Dragon Magic
-DrF^Dragons of Faerun
-DCS^Dragonlance Campaign Setting
-DMG^Dungeon Master's Guide v.3.5
-DMG2^Dungeon Master's Guide II
-ECS^Eberron Campaign Setting
-EA^Enemies and Allies
-EL^Epic Level Handbook
-XPH^Expanded Psionics Handbook
-Rav^Expedition to Castle Ravenloft
-EH^Explorer's Handbook
-FP^Faiths &amp; Pantheons
-FE^Faiths of Eberron
-FLFD^Fantastic Locations: Fane of the Drow
-FLFR^Fantastic Locations: Fields of Ruin
-FLHP^Fantastic Locations: Hellspike Prison
-FF^Fiend Folio
-FCI^Fiendish Codex I: Hordes of the Abyss
-Fo^Forge of Fury, The
-FRCS^Forgotten Realms Campaign Setting
-Fr^Frostburn
-Gh^Ghostwalk
-GC^Grasp of the Emerald Claw
-HN^Heart of Nightfang Spire
-HBG^Hero Builder's Guidebook
-HB^Heroes of Battle
-HH^Heroes of Horror
-LM^Libris Mortis: The Book of the Dead
-LG^Living Greyhawk Gazetteer
-LF^Lord of the Iron Fortress
-LD^Lords of Darkness
-LoM^Lords of Madness
-LE^Lost Empires of Faerun
-MoE^Magic of Eberron
-Mag^Magic of Faerun
-MoI^Magic of Incarnum
-MP^Manual of the Planes
-MW^Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers
-MH^Miniatures Handbook
-Mon^Monster Compendium: Monsters of Faerun
-MM4^Monster Manual IV
-MM3^Monster Manual III
-MM2^Monster Manual II
-MM^Monster Manual v.3.5
-Mys^Mysteries of the Moonsea
-OA^Oriental Adventures
-PlH^Planar Handbook
-PE^Player's Guide to Eberron
-PG^Player's Guide to Faerun
-PH^Player's Handbook v.3.5
-PH*^Player's Handbook v.3.5
-PH2^Player's Handbook II
-PF^Power of Faerun
-RD^Races of Destiny
-RE^Races of Eberron
-Rac^Races of Faerun
-RS^Races of Stone
-RDr^Races of the Dragon
-RW^Races of the Wild
-RH^Red Hand of Doom
-RT^Return to the Temple of Elemental Evil
-Sa^Sandstorm
-SS^Savage Species
-SX^Secrets of Xen'drik
-SK^Serpent Kingdoms
-SL^Shadows of the Last War
-Sh^Sharn: City of Towers
-ShS^Shining South
-SM^Silver Marches
-SaS^Song and Silence: A Guidebook to Bards and Rogues
-SG^Sons of Gruumsh
-SD^Speaker in Dreams, The
-StS^Standing Stone, The
-Sto^Stormwrack
-SB^Stronghold Builder's Guidebook
-SC^Sunless Citadel, The
-SF^Sword and Fist: A Guidebook to Monks and Fighters
-TB^Tome and Blood: A Guidebook to Wizards and Sorcerers
-ToB^Tome of Battle: The Book of Nine Swords
-TM^Tome of Magic
-Una^Unapproachable East
-Und^Underdark
-UA^Unearthed Arcana
-VGD^Voyage of the Golden Dragon
-WB^Whispers of the Vampire's Blade
-UE^UE
-WL^WL
-FN^FN
-CoV^CoV
+AE^Arms and Equipment Guide
+BB^Bastion of Broken Souls
+BC^Book of Challenges: Dungeon Rooms, Puzzles, and Traps
+BE^Book of Exalted Deeds
+BV^Book of Vile Darkness
+CR^Champions of Ruin
+CV^Champions of Valor
+CSW^City of Splendors: Waterdeep
+CSQ^City of the Spider Queen
+CAd^Complete Adventurer
+CAr^Complete Arcane
+CD^Complete Divine
+CM^Complete Mage
+CP^Complete Psionic
+CW^Complete Warrior
+DG^D&amp;D Gazetteer
+DH^Deep Horizon
+DF^Defenders of the Faith: A Guidebook to Clerics and Paladins
+DD^Deities and Demigods
+Dr^Draconomicon
+DM^Dragon Magic
+DrF^Dragons of Faerun
+DCS^Dragonlance Campaign Setting
+DMG^Dungeon Master's Guide v.3.5
+DMG2^Dungeon Master's Guide II
+ECS^Eberron Campaign Setting
+EA^Enemies and Allies
+EL^Epic Level Handbook
+XPH^Expanded Psionics Handbook
+Rav^Expedition to Castle Ravenloft
+EH^Explorer's Handbook
+FP^Faiths &amp; Pantheons
+FE^Faiths of Eberron
+FLFD^Fantastic Locations: Fane of the Drow
+FLFR^Fantastic Locations: Fields of Ruin
+FLHP^Fantastic Locations: Hellspike Prison
+FF^Fiend Folio
+FCI^Fiendish Codex I: Hordes of the Abyss
+Fo^Forge of Fury, The
+FRCS^Forgotten Realms Campaign Setting
+Fr^Frostburn
+Gh^Ghostwalk
+GC^Grasp of the Emerald Claw
+HN^Heart of Nightfang Spire
+HBG^Hero Builder's Guidebook
+HB^Heroes of Battle
+HH^Heroes of Horror
+LM^Libris Mortis: The Book of the Dead
+LG^Living Greyhawk Gazetteer
+LF^Lord of the Iron Fortress
+LD^Lords of Darkness
+LoM^Lords of Madness
+LE^Lost Empires of Faerun
+MoE^Magic of Eberron
+Mag^Magic of Faerun
+MoI^Magic of Incarnum
+MP^Manual of the Planes
+MW^Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers
+MH^Miniatures Handbook
+Mon^Monster Compendium: Monsters of Faerun
+MM4^Monster Manual IV
+MM3^Monster Manual III
+MM2^Monster Manual II
+MM^Monster Manual v.3.5
+Mys^Mysteries of the Moonsea
+OA^Oriental Adventures
+PlH^Planar Handbook
+PE^Player's Guide to Eberron
+PG^Player's Guide to Faerun
+PH^Player's Handbook v.3.5
+PH*^Player's Handbook v.3.5
+PH2^Player's Handbook II
+PF^Power of Faerun
+RD^Races of Destiny
+RE^Races of Eberron
+Rac^Races of Faerun
+RS^Races of Stone
+RDr^Races of the Dragon
+RW^Races of the Wild
+RH^Red Hand of Doom
+RT^Return to the Temple of Elemental Evil
+Sa^Sandstorm
+SS^Savage Species
+SX^Secrets of Xen'drik
+SK^Serpent Kingdoms
+SL^Shadows of the Last War
+Sh^Sharn: City of Towers
+ShS^Shining South
+SM^Silver Marches
+SaS^Song and Silence: A Guidebook to Bards and Rogues
+SG^Sons of Gruumsh
+SD^Speaker in Dreams, The
+StS^Standing Stone, The
+Sto^Stormwrack
+SB^Stronghold Builder's Guidebook
+SC^Sunless Citadel, The
+SF^Sword and Fist: A Guidebook to Monks and Fighters
+TB^Tome and Blood: A Guidebook to Wizards and Sorcerers
+ToB^Tome of Battle: The Book of Nine Swords
+TM^Tome of Magic
+Una^Unapproachable East
+Und^Underdark
+UA^Unearthed Arcana
+VGD^Voyage of the Golden Dragon
+WB^Whispers of the Vampire's Blade
+UE^UE
+WL^WL
+FN^FN
+CoV^CoV
 ^
\ No newline at end of file
--- a/data/dnd35/classes.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/classes.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,856 +1,856 @@
-adept^DMG^107^This NPC class possesses a combination of arcane and divine skills.
-aristocrat^DMG^108^This NPC class contains people who are usually educated, wealthy individual who were born into high position.
-artificer^ECS^29^Artificers are perhaps the ultimate magical dabblers.
-barbarian^PH^24^A ferocious warrior who uses fury and instinct to bring down foes.
-bard^PH^26^A performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades.
-bardic sage^UA^49^A variant bard who focues his efforts on learning, research, and the power of knowledge.
-battle sorcerer^UA^56^A variant sorcerer who is a capable physical combatant.
-cleric^PH^30^A master of divine magic and a capable warrior as well.
-cloistered cleric^UA^50^A variant cleric who spends more time than other clerics in study and prayer and less in martial training.
-commoner^DCS^46^This NPC class contains the laborers of the world, such as innkeepers, servants, blacksmiths, farmers, and fisherfolk.
-commoner^DMG^108^This NPC class contains the laborers of the world, such as innkeepers, servants, blacksmiths, farmers, and fisherfolk.
-divine bard^UA^50^A variant bard who derives his special power from a divine tradition.
-domain wizard^UA^57^A variant wizard who uses the arcane domain system and selects a specific domain of spells.
-druid^PH*^33^One who draws energy from the natural world to cast divine spells and gain strange magical powers.
-druidic avenger^UA^51^A variant druid who channels her inner fury to wreak vengeance upon those who injure the natural world.
-dwarf cleric^RS^146^Racial substitution levels.
-dwarf fighter^RS^146^Racial substitution levels.
-dwarf sorcerer^RS^147^Racial substitution levels.
-eidolon^Gh^16^This variant class for ghosts emphasizes fighting abilities.
-eidoloncer^Gh^17^This variant class for ghosts emphasizes spellcasting abilities.
-elf paladin^RW^155^Racial substitution levels.
-elf ranger^RW^155^Racial substitution levels.
-elf wizard^RW^157^Racial substitution levels.
-epic barbarian^EL^8^An epic ferocious warrior who uses fury and instinct to bring down foes.
-epic bard^EL^9^An epic performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades.
-epic cleric^EL^10^An epic master of divine magic and a capable warrior as well.
-epic druid^EL^10^An epic druid draws energy from the natural world to cast divine spells and gain strange magical powers.
-epic fighter^EL^11^An epic warrior with exceptional combat capability and unequaled skill with weapons.
-epic monk^EL^12^An epic martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers.
-epic paladin^EL^13^An epic champion of justice and destroyer of evil, protected and strengthened by an array of divine powers.
-epic psion^EL^22^An epic seeker after psionic secrets; a master of the mind and the thoughts of others.
-epic psychic warrior^EL^23^An epic warrior who combines combat skill with psionic powers.
-epic ranger^EL^14^An epic cunning, skilled warrior of the wilderness.
-epic rogue^EL^14^An epic tricky, skillful scout and spy who wins the battle by stealth rather than brute force.
-epic sorcerer^EL^15^An epic spellcaster with inborn magical ability.
-epic wizard^EL^16^An epic potent spellcaster schooled in the arcane arts.
-expert^DCS^46^This NPC class contains people such as skilled artisans, specialist laborers, and ingenious inventors.
-expert^DMG^109^This NPC class contains people such as skilled artisans, specialist laborers, and ingenious inventors.
-expert^UA^77^A generic class that can be a jack-of-all-trades or a master of a limited area of expertise.
-favored soul^CD^6^Favored souls cast divine spells by means of an innate connection rather than through laborious training and prayer, so their divine connection is natural rather than learned.
-favored soul^MH^5^The favored soul follows the path of the cleric but can channel divine power with surprising ease.
-fighter^PH*^37^A warrior with exceptional combat capability and unequaled skill with weapons.
-gnome bard^RS^147^Racial substitution levels.
-gnome illusionist^RS^148^Racial substitution levels.
-gnome ranger^RS^149^Racial substitution levels.
-goliath barbarian^RS^150^Racial substitution levels.
-goliath druid^RS^151^Racial substitution levels.
-goliath rogue^RS^152^Racial substitution levels.
-half-elf bard^RD^157^Racial substitution levels.
-half-elf fighter^RD^157^Racial substitution levels.
-half-elf ranger^RD^158^Racial substitution levels.
-half-elf barbarian^RD^158^Racial substitution levels.
-half-elf druid^RD^159^Racial substitution levels.
-half-elf paladin^RD^160^Racial substitution levels.
-halfling druid^RW^157^Racial substitution levels.
-halfling monk^RW^158^Racial substitution levels.
-halfling rogue^RW^159^Racial substitution levels.
-healer^MH^8^A healer is adept both at detecting the ailments of allies and understanding the coarse, unruly thoughts of beasts.
-hexblade^CW^5^Combining the dynamic powers of martial prowess and arcane might, the hexblade presents a deadly challenge to opponents unused to such a foe.
-marshal^MH^11^Trained in the basics of fighting, marshals possess a general knowledge of weapons and armor.
-monk^PH*^39^A martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers.
-mystic^DCS^47^Mystics are spellcasters who have learned to channel divine energy without worshiping (or even acknowledging) any deity.
-ninja^CAd^5^Highly skilled spies and assassins, ninjas can master a broad range of skills and combat techniques.
-noble^DCS^50^Nobles have the ability to use their background, education, natural charm, and skills in social maneuvering to their advantage in day-to-day lives.
-paladin^PH*^42^A champion of justice and destroyer of evil, protected and strengthened by an array of divine powers.
-paladin of freedom^UA^53^A variant paladin who is dedicated to liberty and free thought.
-paladin of slaughter^UA^53^A variant paladin who is a brutal champion of chaos and evil, and who leaves only destruction trailing in his wake.
-paladin of tyranny^UA^54^A variant paladin who is a lawful evil villain bent on dominating those weaker than she.
-paladin variant^CW^13^A variant paladin class.
-planar ranger^UA^55^A variant ranger who roams the multiverse instead of the wilderness.
-psion^XPH^19^A seeker after psionic secrets; a master of the mind and the thoughts of others.
-psychic warrior^XPH^24^A warrior who combines combat skill with psionic powers.
-ranger^PH*^46^A cunning, skilled warrior of the wilderness.
-ranger variant^CW^13^A variant ranger class.
-raptoran cleric^RW^160^Racial substitution levels.
-raptoran fighter^RW^161^Racial substitution levels.
-raptoran sorcerer^RW^157^Racial substitution levels.
-rogue^PH*^49^A tricky, skillful scout and spy who wins the battle by stealth rather than brute force.
-samurai^CW^8^Wielding their signature katana and wakizashi simultaneously, samurai are as potent in melee as a fighter, although they are less versatile.
-samurai^OA^20^Samurai are professional warriors.
-savage bard^UA^50^A variant bard who is a warrior at heart and whose arcane powers strike fear into the enemies of his tribe.
-scout^CAd^10^A scout has some training in weapons and a unique combat style that favors fast movement and devastating attacks.
-shaman^OA^22^Shamans are intermediaries between the mortal world and the realm of spirits.
-shugenja^CD^10^The shugenja is a divine spellcaster who casts spells by attuning himself to the primal energies around him and focusing such energy through his body to produce magical effects.
-shugenja^OA^24^Shugenjas are divine spellcasters who cast spells by attuning themselves to the elements around them.
-sohei^OA^27^Sohei are warrior monks.
-sorcerer^PH*^51^A spellcaster with inborn magical ability.
-soulknife^XPH^26^A warrior who fights with an idealized blade of personal mental energy.
-specialized wizard variants^UA^59^Each variant specialized class gives up one of the standard specialist's class abilities in exchange for a new ability unique to the variant specialist.
-spellcaster^UA^77^A generic class that has an array of magical effects at her beck and call.
-spellthief^CAd^13^Spellthieves use skill and arcane magic to drain the abilities of their opponents and turn their foes' own powers against them.
-spirit shaman^CD^14^By bargaining with living spirits, the spirit shaman gains power over the natural world and mighty divine magic.
-swashbuckler^CW^11^The swashbuckler embodies the concepts of daring and panache.
-thug^UA^51^A variant fighter who is a street fighter and a survivor who learns to mix brute force with a bit of craftiness.
-totem barbarian^UA^48^A variant barbarian who dedicates himself to a totem creature.
-urban adept^Sh^167^A variant adept for Sharn.
-urban ranger^UA^55^A variant ranger who stalks the treacherous streets of the city.
-warlock^CAr^5^A supernatural character whose sinister powers are inborn abilities, not spells.
-warmage^CAr^10^A militant spellcaster whose training focuses on battlefield magic.
-warmage^MH^14^Warmages access their magic peculiarly, at least compared to the way wizards, sorcerers, and cleric do.
-warrior^DCS^53^This NPC class contains people such as soldiers, guards, and militia.
-warrior^DMG^109^This NPC class contains combatants such as soldiers, guards, and militia.
-warrior^UA^78^A generic class that is a basic combatant.
-wilder^XPH^29^A passionate, reckless talent who wields uncontrolled psionic power.
-wilderness rogue^UA^56^A variant rogue who prefers to put her skills to use in the great outdoors.
-wizard^PH*^55^A potent spellcaster schooled in the arcane arts.
-wu jen^OA^30^Wu jen are spellcasters with mysterious powers.
-wu jen^CAr^14^A mysterious wizard of the eastern world, whose arcane lore revolves around mastery of the elements.
-archivist^HH^82^Archivists seek out esoteric sources of divine lore, wherever those sources might be, securing those secrets for themselves and their fellow scholars.
-dread necromancer^HH^84^A practitioner of vile and forbidden arts, the dread necromancer roots about in graveyards, searching out moldering components for her obscene spells.
-psionic artificer^MoE^42^Psionic artificers are similar to artificers, but they craft psionic items instead of magic items.
-incarnate^MoI^20^Incarnum is a tool you can use to manipulate the physical manifestations of moral and ethical forces and wield them in righteous pursuit of an ideal.
-soulborn^MoI^25^As a soulborn, you use incarnum to enhance your natural combat ability.
-totemist^MoI^29^You channel the soul energy of magical beasts to make your soulmelds and claim them as your totems to acquire a share in their power.
-binder^TM^9^By drawing their seals and speaking words of power, the binder summons strange entities, bargains with them, and binds them to his service.
-shadowcaster^TM^111^The shadowcaster understands the true, primal power of darkness, attunes herself to the Plane of Shadow, and learns great shadow mysteries the equal of any mundane spell.
-truenamer^TM^198^If you want to understand the secret language of the universe, the truenamer class is for you.
-ardent^CP^5^An ardent's pursuit of various cosmic philosophies gives her access to psionic power in a unique way: through psionic mantles.
-divine mind^CP^9^A divine mind is a psionic character who channels the power of the divine through pisonic talent instead of faith.
-lurk^CP^13^A lurk is a psionic character who has honed her mental talents to a deadly focus.
-duergar racial class^CP^144^The duergar, or gray dwarves, lead lives of neverending toil in great underground foundry-cities.
-githyanki racial class^CP^146^Githyanki are an ancient race of martial humanoids residing on the Astral Plane.
-githzerai racial class^CP^147^The githzerai are attuned to the mysteries of the inner self and are considered a race of ascetics who harness the power of the mind and the spirit.
-half-giant racial class^CP^148^Human-giant hybrids, half-giants were bred by cruel sorcerer-kings who used them as warriors and laborers in a dry land.
-thri-kreen racial class^CP^149^Fierce hunters and faultless trackers, the thri-kreen are a race of insectfolk sometimes known as mantis warriors.
-erudite (variant psion)^CP^153^As an alternative to the standard psion class, the erudite is a psionic character who follows a scholarly and self-reflective road to power, instead of a merely self-conscious path like the psion follows.
-beguiler^PH2^6^If you delight in manipulating others, either to their disadvantage or for their own good, then the beguiler is the class for you.
-dragon shaman^PH2^11^If you gaze at dragons with awe and aspire to share their power and majesty, then the dragon shaman is the class for you.
-duskblade^PH2^19^If you find you can't choose between being an arcane spellcaster who zaps your enemies with powerful spells and a nimble, powerful front-line melee character who lays them low with a sword, the duskblade is the perfect class for you.
-knight^PH2^24^The knight class is a great choice if you want to play a tough, durable melee combatant whose strong personality allows you to manipulate your foes.
-crusader^ToB^8^Devoted knight, divine agent, instrument of vengeance, peerless fighting machine -- the crusader is a warrior dedicated to good, evil, law, chaos, or some other cause.
-swordsage^ToB^15^A master of martial maneuvers, the sword sage is a physical adept -- a blade wizard whose knowledge of the Sublime Way lets him unlock potent abilities, many of which are overtly supernatural or magical in nature.
-warblade^ToB^20^The warblade was born for conflict. Swift, strong, enduring, and utterly confident in his martial skills, he seeks to test himself against worthy foes.
-dragonfire adept^DM^24^Whether they are bold champions defending the weak and downtrodden, or merciless raiders seeking might and riches, dragonfire adepts are imposing figures who command the magic of dragonkind.
-abolisher {Prestige Class}^LoM^182^The abolisher is a crusader against that which taints, usurps, and replaces the ordered nature of things with alien desires and monstrous needs.
-acolyte of the skin {Prestige Class}^CAr^19^Acolytes of the skin seek to gain power by replacing their skin with that of a demon's.
-acolyte of the skin {Prestige Class}^TB^43^Acolytes of the skin seek to gain power by replacing their skin with that of a demon's.
-agent retriever {Prestige Class}^EL^24^Finding items, especially long-lost ones, is an agent retriever's specialty.
-Aglarondan griffonrider {Prestige Class}^Una^18^Soaring above the Yuirwood and the coasts of Aglarond, the famed Aglarondan griffonriders are an elite force of aerial knights who serve the Simbul and defend their homeland against attack.
-Akodo champion {Prestige Class}^OA^220^Akodo champions are the leaders of the mighty army of the Lion clan.
-alienist {Prestige Class}^CAr^21^Alienists deal with powers and entities from terrifyingly remote reaches of space and time.
-alienist {Prestige Class}^TB^45^Alienists deal with powers and entities from terrifyingly remote reaches of space and time.
-ancient master {Prestige Class}^SK^159^Those yuan-ti who grow mightier of mind and gain additional psionic powers are called ancient masters.
-animal lord {Prestige Class}^CAd^22^Each animal lord forms a bond with one group of animals.
-animal lord {Prestige Class}^MW^43^Each animal lord forms a bond with one group of animals.
-anointed knight {Prestige Class}^BE^49^The anointed knight is a holy soldier who has taken great pains to learn the intricacies of alchemy in order to become a more capable combatant.
-apostle of peace {Prestige Class}^BE^51^The apostle of peace is an advocate for nonviolent resolution of conflict.
-arachne {Prestige Class}^FP^182^Arachnes are priestesses of Lolth who have risen to the pinnacle of drow society, worshiping Lolth only for the power she grants.
-Arboreal Guardian {Prestige Class}^Gh^19^Within the Spirit Wood are the Arboreal Guardians, men and women dedicated to protecting and ministering the living repositories of elf and half-elf spirits.
-arcachnomancer {Prestige Class}^Und^28^Many creatures of the Underdark are drawn to the power of the spider and that of the master of spiders -- the arachnomancer.
-arcane archer {Prestige Class}^DMG^176^The arcane archer is a warrior skilled in using magic to supplement her combat prowess.
-arcane devotee {Prestige Class}^FRCS^40^Arcane devotees complement the divine magic of a church's clerical leaders and are among the most important and respected members of a deity's following.
-arcane devotee {Prestige Class}^PG^48^Arcane devotees complement the divine magic of a church's clerical leaders and are among the most important and respected members of a deity's following.
-arcane hierophant  {Prestige Class}^RW^108^Arcane hierophants wield a blending of arcane magic and divine magic with a heavy emphasis on nature and the elements.
-arcane trickster {Prestige Class}^DMG^177^Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief.
-arcane trickster {Prestige Class}^TB^47^Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief.
-archmage {Prestige Class}^DMG^178^The most advanced practitioners of arcane magic are frequently archmages.
-archmage {Prestige Class}^FRCS^41^The archmage gains strange powers and the ability to alter spells in remarkable ways, but must sacrifice some of her spell capability to master these arcane secrets.
-ardent dilettante  {Prestige Class}^PlH^55^A diversity of interests and a moderate level of ability in one skill can lead one to become an ardent dilettante.
-argent savant {Prestige Class}^CAr^24^The argent savant regards spells that evoke or apply magical force as the noblest and most fascinating spells at her disposal.
-ashworm dragoon  {Prestige Class}^Sa^66^Ashworm dragoons have formed a bond with a single ashworm that is so strong that it is almost an extension of their wills.
-assassin {Prestige Class}^DMG^180^The assassin is the master of dealing quick, lethal blows.
-astral dancer {Prestige Class}^PlH^63^A few skilled combatants learn to take advantage of conditions on the Astral Plane.
-atavist  {Prestige Class}^RE^133^The discipline of an atavist strengthens his bond to the ancestral spirit and to all other kalashtar that have embraced their unique heritage.
-auspician {Prestige Class}^FP^184^Auspicians, who manipulate luck as if it were the strings of a worn mandolin, give credence to their claims.
-bane of infidels {Prestige Class}^MW^46^The bane of infidels is the leader of a xenophobic tribe.
-battle maiden {Prestige Class}^OA^34^Battle maidens are the stuff of wonder and legend, an order of mounted female samurai whose swift, fearless attacks are renowned throughout the world.
-battle scion {Prestige Class}^UA^164^This prestige class is for the wielders of legendary weapons made for the hands of fighters, barbarians, rangers, monks, and the occasional paladin.
-battlerager  {Prestige Class}^Rac^178^Dwarven battleragers, or kuldjargh ('axe idiots'), are legendary berserker warriors who can enter a battle frenzy through ritualist singing.
-battlesmith  {Prestige Class}^RS^97^A battlesmith is a skilled dwarf armorer and weaponsmith who uses her experience in battle, as well as her masterful weaponsmithing and armorsmithing abilities, to create deadly items for her kinsmen to wield in defense of their homes.
-Bayushi deceiver {Prestige Class}^OA^225^The Bayushi are charged with the dirtiest work in the empire.
-bear warrior {Prestige Class}^CW^16^Bear warriors, through a special relationship with bear spirits, literally adopt a bear's strength in the rage of battle, actually transforming into bears while they fight.
-bear warrior {Prestige Class}^OA^36^Bear warriors, through a special relationship with bear spirits, literally adopt a bear's strength in the rage of battle, actually transforming into bears while they fight.
-beastmaster {Prestige Class}^CAd^26^A beastmaster feels more at home among the animals of nature than fellow sentient beings.
-beholder mage {Prestige Class}^LoM^42^Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race.
-beholder mage  {Prestige Class}^Mon^21^Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race.
-beloved of Valarian {Prestige Class}^BE^53^The beloved of Valarian are women who have foresworn the love of mortals to dedicate themselves entirely to the unicorn deity Valarian.
-berserk {Prestige Class}^DD^201^Berserks are warriors who dress themselves in bearskins, taking advantage of the fear most people have for wild animals and inviting the wild rage of the animal into the warrior's body.
-Black Blood cultist {Prestige Class}^CR^44^Black Blood cultists are savage fighters whose natural attacks become more fearsome as they increase in level.
-black blood hunter {Prestige Class}^PG^177^Malar grants exceptional power to those who supplement their bestial level of evil with truly vile acts.
-black flame zealot {Prestige Class}^CD^21^Trained in unholy rites, the black flame zealots use stealth, divine magic, and the zeal of fanaticism to destroy those who have given offense to their god.
-Black Flame zealot {Prestige Class}^Una^21^Trained in the rites of Kossuth's temple, the Black Flame zealots use stealth, divine magic, and the zeal of fanaticism to destroy those who have given offense to the Lord of Flames.
-blackguard {Prestige Class}^DMG^181^The blackguard is the quintessential black knight.
-blade bravo {Prestige Class}^RS^99^Blade bravos are gnomes who learn the ways of the rapier.
-blade dancer {Prestige Class}^OA^37^To blade dancers, the sword is more than a weapon -- it is an ally, a friend, a spirit companion.
-bladesinger {Prestige Class}^CW^17^Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole.
-bladesinger {Prestige Class}^Rac^179^Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole.
-bladesinger {Prestige Class}^TB^49^Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole.
-blighter {Prestige Class}^CD^23^Blighters bring desolation wherever they tread.
-blighter {Prestige Class}^MW^48^Blighters bring desolation wherever they tread.
-blood magus {Prestige Class}^CAr^26^Blood magi are deceased spellcasters who gain an understanding of blood's importance when returned to life.
-blood magus {Prestige Class}^TB^50^Blood magi are deceased spellcasters who gain an understanding of blood's importance when returned to life.
-bloodhound {Prestige Class}^CAd^28^A bloodhound tracks down wrongdoers and brings them to whatever justice awaits them.
-bloodhound {Prestige Class}^MW^49^A bloodhound tracks down wrongdoers and brings them to whatever justice awaits them.
-bloodscaled fury {Prestige Class}^Dr^86^A bloodscaled fury is a dragon whose rage surpasses that of a human barbarian as the barbarian's rage surpasses a child's tantrum.
-bonded summoner  {Prestige Class}^MH^16^He who learns to leash the furies of the Elemental Planes is known as a bonded summoner.
-bone collector {Prestige Class}^Gh^21^A bone collector is a person who draws personal power from the destruction of undead.
-breachgnome {Prestige Class}^Rac^181^A breachgnome is a mighty gnome who is skilled in fighting in cramped conditions.
-cabinet trickster {Prestige Class}^RE^139^Cabinet tricksters are the changeling agents of the Cabinet of Faces.
-cancer mage  {Prestige Class}^BV^52^The cancer mage makes quick, poisonous attacks and then retreats.
-candle caster {Prestige Class}^TB^52^Also called 'spell chandlers,' these specialists fill their time fashioning candles, both for esthetics and for power.
-Cannith wand adept  {Prestige Class}^Sh^162^The Cannith wand adept is an artificer or other spellcaster who specializes in mastering wands.
-cavalier {Prestige Class}^CW^19^Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor.
-cavalier  {Prestige Class}^SF^12^Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor.
-cavelord {Prestige Class}^Und^30^A passion for the narrow, dim ways of the world burns in the breast of the cavelord.
-celebrant of Sharess {Prestige Class}^PG^178^Celebrants of Sharess are seducers and warriors, hedonists and pious champions of good.
-celestial mystic {Prestige Class}^BE^55^Celestial mystics seek to attain ultimate unity with the perfect good.
-cerebremancer  {Prestige Class}^XPH^141^Cerebremancers access both the arcane mysteries of spellcasting and the psionic powers of the mind.
-chameleon  {Prestige Class}^RD^111^Chameleons are dilettantes in every class and masters of none.
-champion of Corellon Larethian {Prestige Class}^RW^113^The champion of Corellon Larethian is a noble elf fighter, an elf knight or lord who can stand up to any orc or human warrior.
-champion of Gwynharwyf {Prestige Class}^BE^56^The champion of Gwynharwyf is a mortal barbarian who strives to emulate her sublime balance of fury and reserve while retaining a focus on good.
-chaotician {Prestige Class}^PlH^61^Chaoticians seek to enjoy the beauty of the unpredictable, and by seeking to emulate the philosophy of chaos in their actions, they create a fabulous journey through life in which nothing is a bore.
-church inquisitor {Prestige Class}^CD^26^The church inquisitor uncovers taint within the church and cuts it away.
-church inquisitor {Prestige Class}^DF^51^The church inquisitor uncovers taint within the church and cuts it away.
-cipher adept {Prestige Class}^PlH^58^Seamless integration brings the cipher adept bliss.
-Citadel elite {Prestige Class}^Sh^163^The elite agent of the Citadel is the best of the best, saved for the most dangerous, most important assignments or granted latitude to serve the King and Crown as he sees fit.
-cloud anchorite  {Prestige Class}^Fr^52^The cloud anchorite seeks a way to achieve immortality while maintaining life and awareness.
-cognition thief {Prestige Class}^PG^174^A cognition thief's subtle ability to worm her way into a target's very consciousness makes her the ultimate secret agent.
-coiled cabalist {Prestige Class}^SK^161^Standing apart from the priests of Sseth but careful never to draw their collective ire by openly opposing them, the members of the Coiled Cabal pursue the arcane arts largely in secrecy.
-combat medic {Prestige Class}^HB^99^The combat medic keeps her allies alive and tends to the fallen on the front lines of battle.
-consecrated harrier {Prestige Class}^CD^28^The consecrated harrier acts as a bounty hunter for her religion or organization.
-consecrated harrier {Prestige Class}^DF^52^The consecrated harrier acts as a bounty hunter for her religion or organization.
-contemplative {Prestige Class}^CD^30^Contemplatives devote their lives to cultivating a greater closeness with their deities.
-contemplative {Prestige Class}^DF^54^Contemplatives devote their lives to cultivating a greater closeness with their deities.
-cosmic descryer {Prestige Class}^EL^26^The cosmic descryer is interested in the infinite variety of the planes and fascinated by the different layers of the multiverse.
-cragtop archer {Prestige Class}^RS^101^Cragtop archers train their eyes and minds to find target at great distances, and to quickly compensate for wind, movement, and other factors that affect shots of such difficulty.
-Crinti shadow marauder  {Prestige Class}^ShS^23^Crinti shadow marauders combine the physical prowess of master rider with the stealth of the most cunning shadowdancers.
-cryokineticist {Prestige Class}^Fr^54^The cryokineticist is the master of cold psionic energy.
-cultist of the Shattered Peak  {Prestige Class}^LE^10^Cultists of the Shattered Peak possess skill at arms, stealth, and a smattering of ancient lore.
-daggerspell mage {Prestige Class}^CAd^31^Daggerspell mages work to perfect a unique fighting and spellcasting (arcane) style that relies on wielding a pair of daggers at all times.
-daggerspell shaper {Prestige Class}^CAd^36^Daggerspell shapers work to perfect a unique fighting and spellcasting (druid) style that relies on wielding a pair of daggers at all times.
-Daidoji bodyguard {Prestige Class}^OA^215^The Daidoji concentrate on defensive maneuvers and a style of fighting that induces their opponents to defeat themselves.
-dark hunter {Prestige Class}^CW^20^Dark hunters specialize in hunting down and eliminating creatures in the dark, twisting caves of the Underdark.
-Darkmask  {Prestige Class}^LD^33^Darkmasks strike a balance between their faith and their skills at stealth.
-darkrunner {Prestige Class}^LoM^186^Darkrunners devote their lives to traveling the haunted underground depths.
-darkwood stalker {Prestige Class}^CW^23^Some elves train as elite hunters of orcs; these hunters are called darkwood stalkers.
-dawncaller {Prestige Class}^RS^103^Dawncallers are goliath bards responsible for guarding their tribe throughout the night.
-death's chosen ^LM^41^If chosen by his would-be undead master, a death's chosen serves as the master's living minion.
-Deathwarden chanter {Prestige Class}^Gh^23^The Deathwarden chanters are the most prestigious, respected, and mysterious members of the dwarven Deathwarden clan.
-deep diviner {Prestige Class}^Und^32^Deep diviners are intimates of the earth and all that it hides.
-deepwarden {Prestige Class}^RS^105^Deepwardens are dwarves who serve as a living early warning system against threats from both the environment and other creatures.
-deepwood sniper {Prestige Class}^MW^52^A deepwood sniper is patient, careful, quiet , and deadly accurate.
-defender of Sealtiel {Prestige Class}^BE^58^Defenders of Sealtiel are sworn to uphold the ideals of Sealtiel, which includes fighting off forces of evil when they assault good.
-defiant {Prestige Class}^PlH^44^Defiants take the teaching of the Athar to heart in a way that grants them tremendous powers against those who claim to wield divine might.
-demonologist {Prestige Class}^BV^54^A demonologist is a mortal who has devoted his life to the study of demons.
-dervish {Prestige Class}^CW^25^The dervish epitomizes speeds, quickness, and abandon.
-devoted defender {Prestige Class}^SF^13^The devoted defender is a professional guardian.
-diabolist {Prestige Class}^BV^56^A diabolist does not serve devils -- she wants to be one.
-dirgesinger {Prestige Class}^LM^43^Dirgesingers voice melodies not of celebration and joy, but of sorrow and grief.
-disciple of Ashardalon {Prestige Class}^Dr^87^Disciples of Ashardalon bind fiendish spirits to their own hearts, eventually taking on the characteristics of demonic spawn themselves.
-disciple of Asmodeus {Prestige Class}^BV^57^A disciple of Asmodeus uses his power and influence to learn secrets, which in turn gains him more power.
-disciple of Baalzebul {Prestige Class}^BV^58^A disciple of Baalzebul uses deceit and trickery to get what she wants.
-disciple of Dispater {Prestige Class}^BV^60^A disciple of Dispater is a warlike general of evil.
-disciple of Mammon {Prestige Class}^BV^60^A disciple of Mammon takes what she wants any way she can.
-disciple of Mephistopheles {Prestige Class}^BV^62^A disciple of Mephistopheles wields hellfire as his weapon.
-disciple of Thrym {Prestige Class}^Fr^56^Aside from predictions of Ragnarok, disciples of Thrym spend a large portion of their time undermining those who serve Thor and Loki, the deities who conspired against Thrym.
-dispassionate watcher of Chronepsis {Prestige Class}^Dr^89^Taking the role of observers rather than active participants, dispassionate watchers of Chronepsis remain aloof from the events of the world.
-divine agent  {Prestige Class}^MP^24^The divine agent is a specially selected agent of her deity, and she acts in the service of that power or deity.
-divine champion {Prestige Class}^FRCS^42^Divine champions are mighty warriors who dedicate themselves to their deity's cause, defending holy ground, destroying enemies of the church, and slaying mythical beasts and clerics of opposing faiths.
-divine champion {Prestige Class}^PG^49^Divine champions are mighty warriors who dedicate themselves to their deity's cause, defending holy ground, destroying enemies of the church, and slaying mythical beasts and clerics of opposing faiths.
-divine crusader {Prestige Class}^CD^33^The divine crusader embodies devotion and dedication to a chosen deity.
-divine disciple {Prestige Class}^FRCS^43^Divine disciples interpret the divine will, act as teachers and guides to other members of the clergy, and arm lay followers of their deity with the power of their patron.
-divine disciple {Prestige Class}^PG^51^Divine disciples interpret the divine will, act as teachers and guides to other members of the clergy, and arm lay followers of their deity with the power of their patron.
-divine emissary {Prestige Class}^EL^27^Deities have need of powerful servants, many of whom are epic clerics, paladins, and other characters.
-divine oracle {Prestige Class}^CD^34^Some mortals hear the words of deities; these can be divine oracles.
-divine oracle {Prestige Class}^DF^56^Some mortals hear the words of deities; these can be divine oracles.
-divine prankster {Prestige Class}^RS^107^These gnomes embrace Garl's methods of teaching through harmless object lessons and dedicate their lives to acting as his agents in the world.
-divine seeker {Prestige Class}^FRCS^44^The divine seeker infiltrates dangerous places to rescue prisoners, reclaim stolen relics, or eliminate enemy leaders.
-divine seeker {Prestige Class}^PG^52^The divine seeker infiltrates dangerous places to rescue prisoners, reclaim stolen relics, or eliminate enemy leaders.
-doomdreamer  {Prestige Class}^RT^162^Doomdreamers are the elite among the ranks of the cult of Tharizdun.
-doomguide {Prestige Class}^FP^186^Doomguides belong to an elite order of spellcasting warriors in service to the Judge of the Damned.
-doomlord {Prestige Class}^PlH^47^The doomlord's life holds the greatest appeal for fighters and barbarians who enjoy smashing and destroying.
-dracolyte {Prestige Class}^Dr^122^The dracolyte takes up worship of the draconic gods.
-dragon ascendant {Prestige Class}^Dr^90^Dragon ascendants seek to transcend the limitations of material existence so as to become nothing less than deities.
-dragon disciple {Prestige Class}^DMG^183^Dragon disciples use their magic as a catalyst to ignite their dragon blood.
-dragon disciple {Prestige Class}^TB^55^Dragon disciples use their magic as a catalyst to ignite their dragon blood.
-dragon rider  {Prestige Class}^DCS^77^Dragon riders develop a strong bond with their mounts that allows the two to work together.
-dragon samurai {Prestige Class}^MH^18^Dragon samurai are dedicated warriors, members of a special, self-selected class who revered dragonkind and emulate dragons' ferocious martial abilities to the point of taking on some draconic traits.
-dragonkith {Prestige Class}^Dr^123^Dragonkith are creatures that serve and aid dragons.
-dragonmark heir  {Prestige Class}^ECS^73^Dragonmark heirs have the ability to improve the dragonmarks they have manifested, as well as to develop additional abilities related to their dragonmarks.
-dragonrider {Prestige Class}^Dr^124^Dragonriders soar through the clouds atop a draconic steed.
-dragonslayer {Prestige Class}^Dr^125^Dragonslayers combat dragons.
-dragonsong lyrist {Prestige Class}^Dr^127^The dragonsong lyrist taps into the power of dragonsong.
-dragonstalker {Prestige Class}^Dr^128^The dragonstalker uses stealth and guile to combat dragons.
-dread commando {Prestige Class}^HB^103^Dread commandos are the elite scouts and strike force of a well-trained mercenary band.
-dread pirate {Prestige Class}^CAd^39^A dread pirate has mastered every aspect of larceny on the high seas.
-dread pirate {Prestige Class}^SaS^5^A dread pirate has mastered every aspect of larceny on the high seas.
-dreadmaster {Prestige Class}^FP^188^Dreadmasters seek to rule absolutely, preferably through terror and domination.
-drow judicator {Prestige Class}^Und^33^A mortal imbued with fiendish cruelty, the drow judicator is a knight most foul.
-drunken master {Prestige Class}^CW^27^By weaving and staggering about as if inebriated, drunken boxers avoid many blows.
-drunken master {Prestige Class}^SF^14^By weaving and staggering about as if inebriated, drunken boxers avoid many blows.
-duelist {Prestige Class}^DMG^185^The duelist is a nimble, intelligent fighter trained in making precise attacks with light weapons.
-duelist {Prestige Class}^SF^17^The duelist is a nimble, intelligent fighter trained in making precise attacks with light weapons.
-dungeon delver {Prestige Class}^CAd^42^In many ways, the dungeon delver is the ultimate adventuring rogue.
-dungeon delver {Prestige Class}^SaS^7^In many ways, the dungeon delver is the ultimate adventuring rogue.
-durthan {Prestige Class}^Una^22^Durthans are an order of spellcasters who tap into the darker spirits of Rashemen.
-dwarven defender {Prestige Class}^DMG^186^The defender is a sponsored champion of a dwarven cause
-dweomerkeeper {Prestige Class}^FP^189^Dweomerkeepers are Mystra's shepherds, safeguarding the Weave against threats to its integrity.
-earth dreamer {Prestige Class}^RS^110^Earth dreamers move within the ancient dreams of the mountains, attuning themselves to their power and mastering strange abilities over the earth.
-effigy master {Prestige Class}^CAr^30^The effigy master is an expert in the imitation of true life.
-Eldeen ranger {Prestige Class}^ECS^74^An Eldeen ranger learns special techniques and abilities that help him to fulfill the goal of his sect.
-eldritch knight {Prestige Class}^DMG^187^Studying the martial and arcane arts to equal degree, the eldritch knight is a versatile combatant.
-elemental archon {Prestige Class}^FP^190^Elemental archons are servants of powerful, seemingly uncaring elemental forces who want to once and for all tip the balance in favor of their chosen element.
-elemental master {Prestige Class}^Dr^92^Elemental masters strive to attain the purity of perfect attunement with both the energy of their breath weapons and the elemental nature of their core.
-elemental savant {Prestige Class}^CAr^32^Elemental savants study the basic building blocks of existence -- air, earth, fire, and water -- learning to harness their powers.
-elemental savant {Prestige Class}^TB^57^Elemental savants study the basic building blocks of existence -- air, earth, fire, and water -- learning to harness their powers.
-elemental warrior {Prestige Class}^PlH^65^The elemental warrior sees that great strength comes from focusing on the most basic aspects of reality.
-elocater {Prestige Class}^XPH^142^Elocaters are renowned for their agile combat stratagems, using their knowledge of motion and space to set themselves up for quick attacks against slower opponents.
-elven high mage {Prestige Class}^Rac^182^Elven high mages are the masters of creating their own epic spells -- mythals that can grow to engulf entire cities.
-emancipated spawn  {Prestige Class}^SS^75^Those spawn of undead who find themselves free of their masters can begin to recall their former lives and a measure of redemption.
-emissary of Barachiel {Prestige Class}^BE^59^The emissaries of Barachiel are peacemakers, diplomats, and evangelists, as well as staunch opponents of evil and corruption.
-enlightened fist {Prestige Class}^CAr^34^Enlightened fists master the use of touch spells, creating new forms of combat with their fists.
-entropomancer {Prestige Class}^CD^36^Entropomancers gain attunement to the great nothingness they say lies at the center of the universe.
-ephemeral exemplar {Prestige Class}^LM^53^Ephemeral exemplars are paragons of incorporealness.
-epic arcane archer {Prestige Class}^EL^17^The epic arcane archer is a living extension of the bow, capable of achieving wonders of archery that cause lesser beings to gape in awe.
-epic assassin {Prestige Class}^EL^18^The epic assassin flits from shadow to shadow, lying in wait until his target is vulnerable, then striking like a cobra.
-epic blackguard {Prestige Class}^EL^19^The epic blackguard is a twisted reflection of the epic paladin, radiating evil power from every pore of his body.
-epic dwarven defender {Prestige Class}^EL^20^The epic dwarven defender becomes the very definition of immovable object.
-epic infiltrator {Prestige Class}^EL^28^The epic infiltrator is an agent of espionage, an undercover operative, and sometimes a saboteur.
-epic loremaster {Prestige Class}^EL^20^If the epic loremaster doesn't know something, it probably isn't worth knowing.
-epic psion {Prestige Class}^EL^22^The epic psion has evolved his inborn mental abilities, achieving mental mastery of lesser mentalities.
-epic psychic warrior {Prestige Class}^EL^23^The epic psychic warrior is a meld of mental and martial prowess.
-epic shadowdancer {Prestige Class}^EL^21^While the epic assassin udes the shadows, the epic shadowdancer becomes the shadows, indistinguishable from the darkness cloaking her.
-eunuch warlock {Prestige Class}^OA^38^Eunuch warlocks must be arcane spellcasters of significant ability, and they are often sorcerers rather than wu jen.
-evangelist {Prestige Class}^CD^39^Evangelists travel the world proclaiming their devotion to a particular deity, pantheon, or religious doctrine.
-Evereskan tomb guardian {Prestige Class}^PG^53^The Evereskan tomb guardians are on hand to ensure that the defenses of the tombs are very good indeed.
-exalted arcanist {Prestige Class}^BE^61^Exalted arcanists gain access to spells that channel celestial energy.
-exemplar {Prestige Class}^CAd^44^An exemplar focuses her energy on improving the skills she possesses until she can perform them with fluidity, grace, and art.
-exorcist of the Silver Flame {Prestige Class}^ECS^77^Exorcists of the Silver Flame lead the Church of the Silver Flame's efforts in combating extraplanar threats.
-exotic weapon master {Prestige Class}^CW^30^The only real requirement for exotic weapon master is commitment and perseverance.
-exotic weapon master {Prestige Class}^MW^53^The only real requirement for exotic weapon master is commitment and perseverance.
-extreme explorer {Prestige Class}^ECS^79^The extreme explorer is the iconic action hero of Eberron.
-eye of Gruumsh {Prestige Class}^CW^31^An orc or half-orc who heeds the call to serve Gruumsh in his image can become an eye of Gruumsh.
-eye of Gruumsh {Prestige Class}^MW^54^An orc or half-orc who heeds the call to serve Gruumsh in his image can become an eye of Gruumsh.
-eye of Horus-Re^PG^54^Eyes of Horus-Re are champions of good, sworn enemies of Set, and bane to undead.
-faith scion {Prestige Class}^UA^166^This prestige class is meant for characters who wield legendary weapons of divine power for claerics, druids, and paladins.
-fang of Lolth {Prestige Class}^SaS^8^Fangs of Lolth undergo a transformation that both provides them power and changes them in ways they may not necessarily want.
-Fang of Sseth {Prestige Class}^SK^162^The Fangs of Sseth constitute the strike force of the Vipers -- the stealthy killers who leave no trace.
-fatemaker {Prestige Class}^PlH^50^'There are two paths to take; one is easy, and that is its only reward.'
-fatespinner {Prestige Class}^CAr^37^A fatespinner has pulled back the curtain of chance, circumstance, and chaos to glimpse a deeper truth: probability.
-fatespinner {Prestige Class}^TB^58^A fatespinner has pulled back the curtain of chance, circumstance, and chaos to glimpse a deeper truth: probability.
-fiend of blasphemy  {Prestige Class}^FF^200^The fiend of blasphemy is a master of the infernal art of perverting the desire to worship and turning it toward the corrupt veneration of fiendish masters.
-fiend of corruption {Prestige Class}^FF^202^Fiends of corruption are preoccupied with corrupting mortals to ensure that their souls end up on the Lower Planes after death.
-fiend of possession {Prestige Class}^FF^204^A fiend of possession is an invasive presence that taints the very soul, corrupting from within.
-Fist of Hextor {Prestige Class}^SF^18^Fists of Hextor are templars sworn to the service of their unforgiving master.
-fist of Raziel {Prestige Class}^BE^62^The fists of Raziel represent a knightly order dedicated to the celestial patron of holy warfare against evil.
-Fist of Zuoken {Prestige Class}^XPH^144^The Fists of Zuoken ore members of an order of martial artists devoted to mastering their own physical and mental development while protecting psions and other psionic creatures.
-fleshwarper {Prestige Class}^LoM^189^The fleshwarper finds no greater canvas than flesh itself.
-Fochlucan lyrist {Prestige Class}^CAd^47^The Fochlucan lyrist is a legendary figure who serves as the herald and teacher to great kings, the champion of the common folk, and the keeper of lore long forgotten elsewhere.
-foe hunter {Prestige Class}^MW^56^The foe hunter has but one purpose in life: to kill creatures of the type she hates.
-forest master {Prestige Class}^FP^193^Guardians of the pristine wilderness and defenders of the ancient trees, forest masters are the living embodiments of sentient nature.
-forsaker {Prestige Class}^MW^57^The forsaker rebels against the magic of the fantastic world around him.
-frenzied berserker {Prestige Class}^CW^34^The frenzied berserker is constantly seeking out more conflict to feed her craving for battle.
-frenzied berserker {Prestige Class}^MW^59^The frenzied berserker is constantly seeking out more conflict to feed her craving for battle.
-frost mage {Prestige Class}^Fr^58^Frost mages usually hail from lands of cold, snow, and ice: tundra, glaciers even outer planes perpetually shrouded in winter.
-frostrager {Prestige Class}^Fr^60^The frostragers are powerful and dangerous warriors believed by some to be gifted from (and others cursed by) the frost giant deity Thrym with an unstable but powerful supernatural battle rage.
-gatecrasher {Prestige Class}^MP^26^Gatecrashers see themselves as cosmic free agents, independent forces who can influence the natives of the planes and even the dynamic forces of magic itself.
-geomancer {Prestige Class}^CD^41^To the geomancer, all magic is the same.
-geomancer {Prestige Class}^MW^60^To the geomancer, all magic is the same.
-geometer {Prestige Class}^CAr^39^The geometer is the master of written magic and spells inscribed within a perfectly rendered diagram.
-ghost slayer {Prestige Class}^Gh^26^The ghost slayer studies ghost so that they can be dispatched easily and no longer bother the living with their presence.
-ghost-faced killer^CAd^51^Ghost-faced killers act as assassins and spies for hire, a mercenary clan that hides behind a guise of open and honorable conduct.
-ghostwalker {Prestige Class}^SF^20^Ghostwalkers have abilities that point to some underlying, mysterious mysticism.
-giant-killer^SM^109^Giant-killers are great heroes so long as they are killing giants.
-gladiator {Prestige Class}^SF^21^Rich or poor, all gladiators face death whenever they step into the arena.
-glorious servitor {Prestige Class}^LE^13^Glorious servitors are exceptionally loyal and devout servants of the Mulhorandi gods.
-gnome artificer  {Prestige Class}^Mag^23^Gnome artificers dabble in technology to create fantastic devices, delving into shadow magic when their mundane equipment is insufficient for the task.
-gnome giant-slayer^CW^36^The gnome giant-slayer relies on a combination of agility, combat prowess, and pure craftiness to deal with foes.
-goldeye {Prestige Class}^FP^194^Goldeyes are agents and promulgators of commercial intercourse, seeking to increase the wealth of their communities and realms by promoting the exchange of coins in trade.
-goliath liberator {Prestige Class}^RS^112^Goliath liberators are experts at infiltrating giant dwellings, freeing the captives within, then exacting revenge on the giants while the freed goliaths escape.
-Gray Hand enforcer {Prestige Class}^CSW^77^Gray Hand enforcers are highly trained members of the Gray Hands, Waterdeep's elite, high-powered fighting force.
-Great Rift deep defender {Prestige Class}^ShS^24^The Great Rift deep defender has a keen understanding of the importance of making a stand.
-Great Rift skyguard {Prestige Class}^Rac^183^The hippogriff-mounted skyguards of the Great Rift patrol the skies, ever watchful for the enemies of the gold dwarves.
-Great Sea corsair {Prestige Class}^ShS^26^Adapt the dread pirate prestige class from Song and Silenceto create the Great Sea corsair prestige class.
-Green Star adept {Prestige Class}^CAr^41^A Green Star adept is the master of the strange and powerful magic derived from Alhazarde's glittering green starmetal.
-guardian paramount {Prestige Class}^EL^30^The guardian paramount is an extraordinary bodyguard, a protector of others who is skilled in preventing harm to his charge.
-guild thief {Prestige Class}^FRCS^45^Guild thieves are thieves who operate in urban areas as part of an organized thieves' guild.
-guild wizard of Waterdeep {Prestige Class}^Mag^26^The wizards of the order study and exchange information, create magic items to help support the guild's financial independence, and offer their services to others in the city as watch-wizards or fire guards.
-halfling outrider {Prestige Class}^CW^38^Halfling outriders are elite champions whose task is to warn their fellows of, and protect them from, danger.
-halfling outrider {Prestige Class}^SF^22^The halfling outrider is naturally skilled in the arts of riding and scouting.
-Halruaan elder {Prestige Class}^ShS^27^Halruaan elders are the epitomy of magic cast with panache, and their dazzling and unique displays of arcane force make them the most respected practitioners in the land.
-Halruaan magehound {Prestige Class}^ShS^29^Magehounds are Halruaa's inquisitors.
-hammer of Moradin {Prestige Class}^PG^56^An elite order of warrior-priests stands ready to defend the dwarven people against the onslaught of fell giants, dark elves, and goblinoids.
-hand of the Adama {Prestige Class}^ShS^31^The hand of the Adama is a benign leader, judge and jury, and protector of the common folk all rolled into one.
-Harper agent {Prestige Class}^PG^58^Harper agents are the 'field agents' of the Harper organization, acting directly to gather intelligence and eliminate threats to the greater good.
-Harper mage {Prestige Class}^Mag^28^The Harper mage has two principal responsibilities: They aid the Harpers with spells and arcane knowledge, and they study, record, and pass on ancient lore.
-Harper paragon {Prestige Class}^PG^181^A Harper paragon actively promotes the welfare of other creatures while preventing evil forces from preying on innocents.
-Harper priest {Prestige Class}^Mag^29^Some Harpers choose to pursue a closer relationship to the deities who inspired the creation of the Harpers.
-harper scout {Prestige Class}^FRCS^46^Harper scouts are members of the Harpers, a secret society dedicated to holding back evil, preserving knowledge, and maintaining the balance between civilization and the wild.
-hathran {Prestige Class}^FRCS^47^Hathrans comprise an elite sisterhood of spellcasters who lead Rashemen.
-hathran {Prestige Class}^PG^59^Hathrans comprise an elite sisterhood of spellcasters who lead Rashemen.
-havoc mage {Prestige Class}^MH^20^The havoc mage shares as much in common with a fighter as with a wizard.
-heartwarder {Prestige Class}^FP^196^Heartwarders are aesthetes and hedonists who actively seek out pleasure and beauty in all things and who nurture the creation of beautiful objects.
-heir of Siberys {Prestige Class}^ECS^80^The magic of a Siberys mark is undeniably powerful, and an heir of Siberys manifests one.
-henshin mystic {Prestige Class}^OA^39^Henshin mystics are members of a monastic order that teaches what they consider a great mystery of the universe: that humanity is capable of a transformation (henshin) into divinity.
-hexer {Prestige Class}^MW^63^The hexer uses the power of his gaze.
-Hida defender {Prestige Class}^OA^212^Hida defenders train in great armor, a unique characteristic that fits in well with the Crab philosophy of strength and endurance.
-hidecarved dragon {Prestige Class}^Dr^94^Hidecarved dragons are members of an enigmatic order of dragons and half-dragons.
-hierophant {Prestige Class}^DMG^188^A divine spellcaster who rises high in the service of his deity gains access to spells and abilities of which lesser faithful can only dream.
-hierophant {Prestige Class}^FRCS^48^A divine spellcaster who rises high in the service of his deity gains access to spells and abilities of which lesser faithful can only dream.
-high proselytizer {Prestige Class}^EL^31^The high proselytizer is the holy inspiration that begins religious movements.
-highland stalker {Prestige Class}^CAd^54^Highland stalkers are consummate trackers with an instinctive knowledge of their mountainous territories.
-hin fist {Prestige Class}^ShS^32^Adapt the sacred fist prestige class from Complete Divineto create a hin fist.
-Hoardstealer {Prestige Class}^Dr^130^The hoardstealer specializes in relieving wealthy individuals from large amounts of said wealth.
-holy liberator {Prestige Class}^CD^45^The holy liberator is a holy warrior, a distant cousin of the paladin.
-holy liberator {Prestige Class}^DF^57^The holy liberator is a holy warrior, a distant cousin of the paladin.
-hordebreaker {Prestige Class}^SM^110^The hordebreaker is a person who makes destroying the horde threat the perfect engine of orc destruction.
-horizon walker {Prestige Class}^DMG^189^The horizon walker is an unceasing traveler to the universe's most dangerous places.
-horned harbinger {Prestige Class}^FP^197^The horned harbingers are agents of the fallen Lord of Bones.
-hospitaler {Prestige Class}^CD^48^Hospitalers are a fighting force of necessity, sworn to poverty, obedience, and the defense of those in their care.
-hospitaler {Prestige Class}^DF^60^Hospitalers are a fighting force of necessity, sworn to poverty, obedience, and the defense of those in their care.
-hulking hurler {Prestige Class}^CW^40^Hulking hurlers belong to those races of generously proportioned creatures who enjoy nothing more than wrenching boulders, trees, and even buildings free of their earthly bonds and throwing them at their foes.
-hunter of the dead {Prestige Class}^CW^42^The hunter of the dead spends each restless night tracking undead to their lairs and cleansing the land of their foul presence.
-hunter of the dead {Prestige Class}^DF^62^The hunter of the dead spends each restless night tracking undead to their lairs and cleansing the land of their foul presence.
-iaijutsu master {Prestige Class}^OA^41^Iaijutsu masters harness their ki energy to strike with blinding speed and devastating power.
-iInitiate of the draconic mysteries {Prestige Class}^Dr^131^Some become students of draconic knowledge that leads to greater power.
-illithid body tamer {Prestige Class}^Und^35^Illithids who embrace the Tamer Creed believe that military might is the most important factor in their race's future mastery of the multiverse.
-illithid savant {Prestige Class}^SS^77^The illithid savant is an academic who deals in applied science, acquiring new knowledge from the brains he consumes.
-illithid slayer {Prestige Class}^XPH^146^Illithid slayers have dedicated their lives to the eradication of the mind flayer 'infection.'
-Imaskari vengeance taker {Prestige Class}^Und^37^A secret society dedicated to righting wrongs, the Imaskari vengeance takers are trained by hidden masters in the rites and rituals of revenge.
-incantatrix {Prestige Class}^Mag^31^The incantatrixes are the practitioners of metamagic in Faerun, studying spells that affect other spells and having a fondness for magic that thwarts extraplanar beings.
-incantatrix {Prestige Class}^PG^61^The incantatrixes are the definitive practitioners of metamagic in Faerun, devoting themselves to the study of spells and techniques that affect other spells.
-initiate of Pistis Sophia {Prestige Class}^BE^64^The path of these initiates requires great sacrifices (in the form of at least three sacred vows), but brings great rewards of spiritual power.
-Initiate of the Sevenfold Veil {Prestige Class}^CAr^44^A master of defensive magic, the Initiate of the Sevenfold Veil approaches the prismatic barrier by mastering one by one its constituent veils or layers.
-inquisitor {Prestige Class}^DCS^80^By definition, an inquisitor is one who inquires, someone who hunts for people, information, or answers.
-inquisitor of the Drowning Goddess {Prestige Class}^Und^39^Some kuo-toa monks go on to become inquisitors of the Drowning Goddess, who are tasked with protecting the community from inside threats.
-invisible blade {Prestige Class}^CW^44^Invisible blades are deadly fighters who prefer to use daggers and related weapons in combat.
-iron mind {Prestige Class}^RS^114^Elite warriors trained to resist mental compulsions of all kinds, members of the iron mind prestige class defend dwarf and gnome kingdoms against intrusions by mind flayers, dark elf enchanters, and the like.
-Jordain vizier {Prestige Class}^ShS^33^The Jordaini are a special servitor caste, though still upper class, in the magocracy of Halruaa.
-justice of weald and woe {Prestige Class}^CR^48^The justice of weald and woe is the go-to person when something unsavory -- usually involving the removal of humans -- needs doing.
-justiciar {Prestige Class}^CW^47^Justiciars make a living kicking the daylights out of criminals who desperately deserve it.
-justiciar of Taiia {Prestige Class}^DD^205^Justiciars of Taiia fulfill the role of carrying out Taiia's sentence against wrongdoers.
-justiciar of Tyr {Prestige Class}^PG^63^Justiciars are the very elite of Tyr's mortal servants, and they act as living embodiments of their god's portfolio.
-Keeper of the Cerulean Sign {Prestige Class}^LoM^194^The Cerulean Sign is an ancient rune of power, created untold eons ago by a race or deity long since vanished; now it has keepers.
-kensai {Prestige Class}^CW^49^The kensai masters body, mind, weapon, and will.
-king/queen of the wild^MW^65^Where nature's fury is at its height, there you'll find the kings and queens of the wild.
-kishi charger {Prestige Class}^OA^42^Kishi chargers are cavalry soldiers trained to make the greatest possible use of a horse's speed and a rider's agility.
-Knight of the Blue Moon {Prestige Class}^CSW^81^Knights of the Blue Moon are elite soldiers in the endless battle against the Mistress of the Night.
-knight of the Chalice {Prestige Class}^CW^53^The knight of the Chalice is a member of an elite knightly organization devoted to fighting demons and other evil outsiders.
-knight of the Chalice {Prestige Class}^DF^63^The knight of the Chalice is a member of an elite knightly organization devoted to fighting demons and other evil outsiders.
-Knight of the Crown {Prestige Class}^DCS^56^The Order of the Crown is the first tier of the Solamnic Knights.
-Knight of the Iron Glacier {Prestige Class}^Fr^62^The Knights of the Iron Glacier continue to honor the memory of General Aengrist in their deeds and actions.
-Knight of the Lily {Prestige Class}^DCS^63^The Knights of the Lily are the order of warriors within the Knights of Neraka.
-knight of the Middle Circle {Prestige Class}^DF^65^Knights of the Middle Circle provide security for Stargazer chapterhouses and may be called upon for similar service for allies of the Stargazers.
-Knight of the Rose {Prestige Class}^DCS^59^The Knights of the Rose are the highest tier of the Solamnic Knights.
-Knight of the Skull {Prestige Class}^DCS^65^Entering battle with strength and divine magic, Knights of the Skull are the spirit of the Dark Knights.
-Knight of the Sword {Prestige Class}^DCS^58^Knights of the Sword are warriors of the Solamnic Knights who fight with power and faith to defend justice and truth.
-Knight of the Thorn {Prestige Class}^DCS^66^The Knights of the Thorn are also known as the 'gray robes' for the ash-colored robes they wear to indicate that they do not serve the Orders of High Sorcery.
-knight protector {Prestige Class}^CW^55^Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever.
-Knight Protector of the Great Kingdom {Prestige Class}^SF^24^Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever.
-knight-errant of Silverymoon^SM^112^Charged with the safety of the city of Silverymoon and its citizens, the professional fighting force known as the Knights in Silver is often all that stands between Silverymoon and the dangers of the frontier.
-lasher {Prestige Class}^SF^25^The lasher prestige class uses the whip as an extension of herself.
-legendary dreadnought {Prestige Class}^EL^33^The legendary dreadnought is the ultimate foot soldier, an absolute force of destruction, a total warrior who excels at sheer combat prowess.
-legendary leader {Prestige Class}^HB^107^Legendary leaders are the stuff of bards' tales come to life.
-legendary tactician {Prestige Class}^DCS^81^Legendary tacticians are respected (or feared) for their ability to inspire their troops.
-lifedrinker {Prestige Class}^BV^63^Lifedrinkers are vampires who have been undead for a very long time.
-lion of Talisid {Prestige Class}^BE^65^The lions of Talisid protect nature and emulate their patron in more concrete ways.
-lord of tides {Prestige Class}^Sa^70^A lord of tides can sense the movement of magma, summon beings of elemental might, and open portals to the Elemental Planes.
-loredelver {Prestige Class}^RD^117^Loredelvers are illumian spellcasters who find and explore ruins, disable the magical protections that guard them, and sift through the ancient secrets found within.
-loremaster {Prestige Class}^DMG^191^Loremasters are spellcasters who concentrate on knowledge, valuing lore and secrets over gold.
-luckstealer {Prestige Class}^RW^118^As a luckstealer, you're part spellcaster, part professional gambler -- and 100% mischief-maker.
-Luiren marchwarden {Prestige Class}^ShS^35^The Luiren marchwarden is the defender of the frontier in the land of the halflings.
-lurking terror {Prestige Class}^LM^54^Lurking terrors are the quintessential hunting undead, displaying great prowess with their special abilities and amazing powers of stealth.
-maester {Prestige Class}^CAd^56^Maesters are the master crafters of the gnome world.
-mage of the Arcane Order {Prestige Class}^CAr^48^Also called a 'guildmage,' a member of this prestige class is a spellcaster who belongs to an academy and guild known as the Arcane Order.
-mage of the Arcane Order {Prestige Class}^TB^60^Also called a 'guildmage,' a member of this prestige class is a spellcaster who belongs to an academy and guild known as the Arcane Order.
-mage-killer^Mag^32^Mage-killers master magic designed for combat against other spellcasters.
-magelord {Prestige Class}^LE^17^Quick to anger, haughty, and proud of his Art, the magelord is an arcane spellcaster who studies an ancient magical tradition known for extremely fast and versatile spellcasting
-maho-bujin^OA^236^When Taint overcomes a character, she may find her way to the Festering Pit of Fu Leng and become a maho-bujin.
-maho-tsukai^OA^237^Maho (blood magic) wielders are called maho-tsukai.
-maiden of pain {Prestige Class}^PG^182^Loviatar's most dedicated servants, the maidens of pain, are depraved women who literally make pain their meat and drink.
-Mantis mercenary {Prestige Class}^OA^231^Mantis mercenaries make use of peasant weapons and a rolling motion.
-Maquar crusader {Prestige Class}^ShS^38^A Maquar crusader follows a strict code of conduct that not only limits what he can own or where he can live, but also limits the ways in which merchants can influence him.
-martyred champion of Ilmater {Prestige Class}^PG^184^Having already offered his life in sacrifice once, the martyred champion of Ilmater perseveres in Ilmater's faith.
-master alchemist {Prestige Class}^Mag^34^The master alchemist is a spellcaster who specializes in producing potions and elixirs that reproduce the effects of spells of 4th level or higher.
-master inquisitive {Prestige Class}^ECS^82^The master inquisitive takes the art of investigation and deduction to the ultimate level, rising to the top of the field.
-master of chains {Prestige Class}^SF^27^The master of chains is a combatant specializing in the use of chains -- specifically the spiked chain -- as a weapon.
-master of flies {Prestige Class}^SS^80^The master of flies is an intelligent swarm that can form a massive being at need, or a single creature that can dissolve into a cloud of vermin.
-master of many forms {Prestige Class}^CAd^58^A master of many forms has no shape that she calls her own.
-master of radiance {Prestige Class}^LM^44^Masters of radiance channel the pure, undiluted power of the sun.
-master of shrouds {Prestige Class}^DF^66^The master of shrouds is an evil spellcaster who magically seizes incorporeal undead and sets them to do her bidding.
-master of shrouds {Prestige Class}^LM^46^The master of shrouds is an evil spellcaster who magically seizes incorporeal undead and sets them to do her bidding.
-master of the unseen hand {Prestige Class}^CW^60^Masters of the unseen hand delight in crushing their foes with invisible force, flinging massive objects into the sky, and disarming enemies with a single thought.
-master of the Yuirwood {Prestige Class}^Una^24^The masters of the Yuirwood are an elite group of foresters who work to keep the ancient Yuirwood free of evil influence.
-master of vipers {Prestige Class}^SK^163^Outcast yuan-ti learn to hunt not only to feed themselves, but also to spread destruction far and wide for the pure pleasure of it.
-master samurai {Prestige Class}^SF^29^The master samurai is a military retainer of a feudal overlord; he practices a code of behavior that emphasizes the value of personal honor over life itself.
-master thrower {Prestige Class}^CW^58^Master throwers depend on quick reflexes, good planning, and deadly aim.
-master transmogrifist {Prestige Class}^CAr^51^The master transmogrifist is a sorcerer or wizard who has chosen to specialize in spells that change his form.
-master vampire {Prestige Class}^LM^55^Any vampire can create spawn, but it takes a very special vampire to rule over an entire gang of minions.
-menacing brute {Prestige Class}^RD^123^The menacing brute takes advantage of how must humans fear half-orcs, playing on that dread to make his living.
-metamind {Prestige Class}^XPH^147^Metaminds know that accumulating the most power in the shortest time is the key to psionic superiority.
-mindbender {Prestige Class}^CAr^54^Mindbenders seek to control the thoughts and dreams of others.
-mindbender {Prestige Class}^TB^63^Mindbenders seek to control the thoughts and dreams of others.
-mindspy {Prestige Class}^CW^62^By reading the minds of her enemies, a mindspy knows exactly what they're going to do a fraction of a second before they do it.
-Mirumoto niten master {Prestige Class}^OA^218^The Mirumoto school teaches a unique style of swordplay, rooted in this sense of duty.
-monk of the long death {Prestige Class}^PG^65^Monks of the long death are members of a macabre, secretive order of scholars seeking to understand the true nature of death.
-moonspeaker {Prestige Class}^RE^143^Bound to the magic of their lycanthrope ancestors, moonspeakers breathe the magic of the world, guided by the twelve moons of Eberron.
-Moonstar agent {Prestige Class}^CSW^84^Moonstar agents, also known as Teukiir, are members of the Tel Teukiira, a group founded by Khelben 'Blackstaff' Arunsun when he broke from the Harpers.
-morninglord of Lathander {Prestige Class}^PG^66^Morninglords are, in many ways, the epitome of the classical cleric archetype.
-mortal hunter {Prestige Class}^BV^64^Mortal hunters are fiends who specialize in killing mortals.
-Moto avenger {Prestige Class}^OA^228^The Moto avenger is dedicated to a war against the Shadowlands and its evils.
-mystic theurge {Prestige Class}^DMG^192^Blurring the line between divine and arcane, mystic theurges draw power from divine sources and musty tomes alike.
-mystic wanderer {Prestige Class}^Mag^35^Mystic wanderers are divine spellcasters who eschew normal church hierarchies and instead embrace freedom, wanderlust, and independence.
-naga overlord {Prestige Class}^SK^165^Naga overlords are evil masterminds who operate in secret, usually behind cults of devoted followers.
-Nar demonbinder {Prestige Class}^Una^25^Master of the black art of demon summoning, the Nar demonbinder keeps alive the sinister traditions of the old Empire of Narfell.
-nature's warrior^CW^63^Nature's warriors are defenders of the wild, protectors of the natural world . . . and often druids who have spent 'too much time' in wild shape form.
-Nentyar hunter {Prestige Class}^Una^28^Sworn to defend the great forests and serve the Nentyarch, druidic ruler of the Circle of Leth, the Nentyar hunters roam the wild lands of the East, uprooting foul and evil things.
-Night Mask deathbringer {Prestige Class}^CR^53^Night Mask deathbringers are highly trained members of the Westgate thieves' guild who have caught the favorable attention of the vampires in charge of the organization.
-nightcloak {Prestige Class}^FP^198^Nightcloaks are the apple of Shar's eye -- devoted to her vision, preserving her secrets, practicing her magic, as twisted and bitter as it is.
-nightsong enforcer {Prestige Class}^CAd^60^The enforcers of the Nightsong Guild focus on the stealth-centered combat training that rogues usually learn.
-nightsong infiltrator {Prestige Class}^CAd^62^The nightsong infiltrator is the perfect thief and the perfect spy.
-Ninja of the Crescent Moon {Prestige Class}^SF^30^The Ninja of the Crescent Moon is a mercenary clan whose members engage in sabotage and other covert missions for an outlandish fee.
-ninja spy {Prestige Class}^OA^43^True ninja spies are masters of exotic weapons, tools of stealth, and strange ki powers.
-occult slayer {Prestige Class}^CW^66^The occult slayer is driven to confront any arcane or divine spellcaster who crosses her path.
-ocular adept {Prestige Class}^FP^200^Ocular adepts have pledged their religious devotions to the alien entity known as the Great Mother, the deity matron of all beholders.
-Olin Gisir {Prestige Class}^LE^21^The Olin Gisiae are elite elf mages who have taken it upon themselves to guard dark secrets from the rest of the world
-ollam {Prestige Class}^CAd^66^In Dwarven, the world 'ollam' means teacher.
-oozemaster {Prestige Class}^MW^67^Oozemasters relate one-on-one with things that relate to nothing at all.
-orc scout {Prestige Class}^SM^114^Part wilderness warrior and part spy, the orc scout is a hero to his people.
-orc warlord {Prestige Class}^Rac^184^The orc warlord is a savage general of an unruly army, the leader of one of the deadly and all too common orc hordes that rampage down from the Spine of the World.
-Order of the Bow initiate {Prestige Class}^CW^68^By learning the meditative art of the Way of the Bow, the archer improves his discipline, precision, and spirituality.
-Order of the Bow Initiate {Prestige Class}^SF^32^By learning the meditative art of the Way of the Bow, the archer improves his discipline, precision, and spirituality.
-outcast champion {Prestige Class}^RD^126^Outcast champions bring hope to those who have no place in society.
-outlaw of the crimson road {Prestige Class}^SaS^10^An outlaw of the crimson road might be a revolutionary, a loyal supporter of some deposed ruler, or merely an ordinary individual who angered the wrong person at the wrong time.
-pale master {Prestige Class}^LM^47^Arcane casters can become pale masters, who draw on necromantic lore that provides a macabre power all its own.
-pale master {Prestige Class}^TB^64^Arcane casters can become pale masters, who draw on necromantic lore that provides a macabre power all its own.
-peerless archer {Prestige Class}^SM^115^The peerless archer devotes her life to perfecting her skill with the bow.
-peregrine runner {Prestige Class}^RS^116^When goliaths need to send a message to another tribe, they send an elite, fleet-of-foot warrior known as a peregrine runner.
-perfect wight {Prestige Class}^EL^34^The perfect wight is a master of skulking, the ultimate prowler and thief.
-pious templar {Prestige Class}^CD^50^Sworn to the defense of a temple site, the pious templar is a holy warrior blessed by her deity with combat prowess and great endurance.
-planar champion {Prestige Class}^MP^28^The planar champion moves between the planes, always driven to battle.
-planeshifter {Prestige Class}^MP^30^The planeshifter is a magical scholar and expert in planar travel, and through arcane research develops not only the ability to sense planar portals, but also the ability to create his own demiplane.
-platinum knight {Prestige Class}^Dr^133^The platinum knight protects good-aligned dragonkind from their natural enemies.
-prestige bard {Prestige Class}^UA^69^The prestige bard is a jack-of-all-trades, master of none.
-prestige paladin {Prestige Class}^UA^70^After training in the arts of combat and the mysteries of the divine, the prestige paladin is anointed as a holy warrior dedicated to the protection of law and goodness.
-prestige ranger {Prestige Class}^UA^71^The prestige ranger navigates the dark forests, craggy mountains, or desert wastes of her homeland with unparalleled skill.
-prime Underdark guide {Prestige Class}^Und^40^These skilled guides not only know how to overcome the physical challenges of the Underdark, but they also can help them over the social and cultural hurdles they are sure to face.
-primeval {Prestige Class}^Fr^65^The primeval is a warrior who has tapped into his racial memories to find and forge a bond with an ancient creature.
-prophet of Erathaoi {Prestige Class}^BE^66^The prophet of Erathaoi is a seer and visionary, a medium of the heavenly will, pronouncing judgment on corruption and evil in the world.
-psion uncarnate {Prestige Class}^XPH^148^Formless, fleshless, and unbound by the limits of corporeality -- this is the goal of every psion uncarnate.
-Purple Dragon knight {Prestige Class}^CW^70^Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers.
-Purple Dragon knight {Prestige Class}^FRCS^49^Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers.
-Purple Dragon knight {Prestige Class}^PG^68^Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers.
-pyrokineticist {Prestige Class}^XPH^151^Pyrokineticists know that a little psionic power goes a long way -- for those interested in fire.
-quori nightmare {Prestige Class}^RE^148^The quori nightmare taps into the primal horrors and urges of the subconscious.
-radiant servant of Pelor {Prestige Class}^CD^52^The radiant servants of Pelor put the dogma of demonstrating strength through charity and modesty into living practice.
-rage mage {Prestige Class}^CW^72^The rage mage's approach to magic is based on the primal passion of magic more than the studious quasi-scientific approach.
-rainbow servant {Prestige Class}^CD^54^Those who have learned what the couatl temples have to offer are known as rainbow servants.
-Raumathari battlemage {Prestige Class}^Una^29^Employing sword and spell with dauntless courage and deadly force, the handful of Raumathari battlemages remaining in the world comprise a lonely and little-known order of adventurers, explorers, and mercenaries in search of battle.
-ravager {Prestige Class}^CW^73^The infamous ravager has dedicated himself to the service of Erythnul, deity of slaughter.
-ravager {Prestige Class}^SF^33^The infamous ravager has dedicated himself to the service of Erythnul, deity of slaughter.
-reachrunner {Prestige Class}^RE^153^Known for their mastery of the untamed world, some shifters rise above others in woodslore, physical ability, and stamina to claim the revered mantle of the reachrunner -- the greatest of shifter trackers and scouts.
-reaping mauler {Prestige Class}^CW^75^Reaping maulers are the back-breakers, the limb-twisters, and the neck-snappers among pit fighters.
-recaster {Prestige Class}^RE^157^To the recaster, the change her own body is capable of is a simple reflection of the mutability of the world around her.
-Red Avenger {Prestige Class}^SF^34^The Red Avenger is the master of ki,an ancient and formidable discipline that allows the user to accomplish the extraordinary.
-Red Wizard {Prestige Class}^DMG^193^The Red Wizards are the masters of Thay, the would-be magical overlords of the land of Faerun.
-Red Wizard {Prestige Class}^FRCS^50^The Red Wizards are the masters of Thay, the would-be magical overlords of the land of Faerun.
-reforged {Prestige Class}^RE^161^The reforged represents the realized ideal of the warforged's living aspects.
-righteous zealot {Prestige Class}^DCS^83^The righteous zealot is a person with a cause that directs every aspect of life.
-rimefire witch {Prestige Class}^Fr^67^A rimefire witch is one who has followed a mysterious call to the core of a rimefire iceberg and becomes infused with great power by the rimefire eidolon.
-risen martyr {Prestige Class}^BE^68^A risen martyr is an exalted character who continues in his earthly existence after his martyrdom in order to finish some unfinished task.
-ronin {Prestige Class}^CW^77^A ronin is a masterless warrior cast adrift in the world, but still clinging to the remnants of his former life.
-royal explorer {Prestige Class}^SaS^13^Some monarchs sponser crack teams of explorers.
-ruathar {Prestige Class}^RW^122^Also known as 'elf-friend' or 'star-friend,' a ruathar is a person of some other race who has earned the special friendship of the elven folk.
-runecaster {Prestige Class}^FRCS^51^Those that choose to master the ability to create runes of power are runecasters.
-runecaster {Prestige Class}^PG^69^Those that choose to master the ability to create runes of power are runecasters.
-runescarred berserker {Prestige Class}^Una^31^Deadly barbarians who bear magical runes carved into their flesh, runescarred berserkers are among the most feared of Rashemen's defenders.
-runesmith {Prestige Class}^RS^118^A runesmith has learned to harness the power of runes and can fling fireballsand other staple arcane spells even while encased in full plate armor.
-sacred exorcist {Prestige Class}^CD^56^Sacred exorcists hope to drive away the spiritual forces of evil, prevening them from causing harm to the bodies and souls of humanity.
-sacred exorcist {Prestige Class}^DF^68^Sacred exorcists hope to drive away the spiritual forces of evil, prevening them from causing harm to the bodies and souls of humanity.
-sacred fist {Prestige Class}^CD^59^Sacred fists are independent organizations found within many temples.
-sacred fist {Prestige Class}^DF^70^Sacred fists are independent organizations found within many temples.
-sacred purifier {Prestige Class}^LM^49^Sacred purifiers are priestly characters who specialize in destroying undead.
-sacred warder of Bahamut {Prestige Class}^Dr^96^Sacred warders of Bahamut protect others from the power of Tiamat's brood.
-sanctified mind {Prestige Class}^LoM^198^A sanctified mind believes that all evil-aligned psionics-using creatures must be crushed.
-sand shaper {Prestige Class}^Sa^76^Sand shapers are part prophet, part priest, part magician, and part assassin.
-savant aboleth {Prestige Class}^LoM^21^Savant aboleths are the eldest, most intelligent, wisest and most forceful of personality.
-scaled horror {Prestige Class}^SS^83^Scaled horrors are elite amphibious soldiers.
-scar enforcer {Prestige Class}^RD^130^Scar enforcers are angry, embittered half-elves who have rejected both sides of their ancestry.
-scion of Tem-Et-Nu^Sa^82^Paladins of the temple of Tem-Et-Nu are sometimes selected to become the guardians of the rivers.
-scorpion heritor {Prestige Class}^Sa^86^Scorpion heritors, through a special relationship with the scorpion spirit, gain the mystical abilities of the scorpion, and can even take its shape.
-scourge maiden {Prestige Class}^ShS^40^Scourge maidens are warrior-priestesses of Loviatar dedicated to pain and anguish.
-Sea Mother whip {Prestige Class}^Und^42^Devout worshipers of Blibdoolpoolp who seek closer communion with the Sea Mother often gain additional abilities in the Sea Mother whip prestige class.
-seeker of the Misty Isle {Prestige Class}^CD^61^Seekers search for the lost elves of Misty Isle.
-seeker of the song {Prestige Class}^CAr^56^Seekers of the song wield the power of music in ways that amaze even the most skilled bards.
-sentinel of Bharrai {Prestige Class}^BE^69^Respect for the power of nature, the desire to further the ends of good, and the resolve to destroy evil are the core beliefs of a sentinel of Bharrai.
-serpent slayer {Prestige Class}^SK^166^Some individuals devote their entire lives to thwarting the yuan-ti.
-Shaaryan hunter {Prestige Class}^PG^71^On the backs of their swift horses, Shaaryan hunters can run down even the fastest prey and either spear it with a lance or pelt it with arrows from horseback.
-shade hunter {Prestige Class}^CR^58^The shade hunter is a breed of adventurer who lives for the thrill of finding lost treasure, defeating ancient traps, and surviving deadly curses laid by the priests of dead gods.
-shadow adept {Prestige Class}^FRCS^52^Shadow adepts hurl themselves into the abyss of the Shadow Weave, immediately acquiring all the gifts available to casual students and discovering secrets unavailable to all but the most dedicated.
-shadow adept {Prestige Class}^PG^72^Shadow adepts hurl themselves into the abyss of the Shadow Weave, immediately acquiring all the gifts available to casual students and discovering secrets unavailable to all but the most dedicated.
-shadow scout {Prestige Class}^OA^44^The camouflage of a tiger, the stamina of a horse, the eyes of an eagle: these are the ingredients of the shadow scouts.
-shadow sentinel {Prestige Class}^RD^137^Shadow sentinels are elite illumian warriors who protect their people from githyanki raiders, demonic invastions, and hordes of barely imaginable monsters from the Plane of Shadow.
-shadow thief of Amn {Prestige Class}^PG^74^A shadow thief of Amn knows only her own minions, her coworkers, and her superior.
-shadowbane inquisitor {Prestige Class}^CAd^68^Shadowbane inquisitors battle incessantly against evil in whatever form it takes.
-shadowbane stalker {Prestige Class}^CAd^70^Shadowbane stalkers find evil hidden in civilized areas so that the martial arm of the order (the inquisitors) can spearhead the attack.
-shadowcraft mage {Prestige Class}^RS^120^Some gnomes have an even greater affinity for illusions than the average representative of their race, resulting in the prestige class known as the shadowcraft mage.
-shadowcrafter {Prestige Class}^Und^43^Shadowcrafters long ago mastered illusions and glamers.
-shadowdancer {Prestige Class}^DMG^194^Operating in the border between light and darkness, shadowdancers are nimble artists of deception.
-shadowmind {Prestige Class}^CAd^74^A shadowmind blends psionic powers and uncanny stealth into an effective whole.
-shapeshifter {Prestige Class}^OA^45^Shapeshifters must already have some means of changing their form before learning to master that change.
-Sharn skymage {Prestige Class}^Sh^165^By studying the properties of the manifest zone in which Sharn is situated, learning its intricacies and methods for manipulating it, a spellcaster can improve her magical or natural ability to fly.
-Shiba protector {Prestige Class}^OA^222^The warriors of the Shiba family are sworn to protect the Isawa family.
-shifter {Prestige Class}^MW^68^The shifter has no form that she calls her own.
-shining blade of Heironeous {Prestige Class}^CD^63^The shining blade of Heironeous is a member of an order of knights dedicated to prowess in melee combat.
-Shintao monk {Prestige Class}^OA^46^Shintao monks are dedicated to following the teachings of Shinsei.
-Shou disciple {Prestige Class}^Una^32^Shou disciples are martial artists who have studied or observed the monks of Kara-Tur and seek to emulate their style.
-silverstar {Prestige Class}^FP^201^Silverstars are dedicated advocates of freedom and tolerance, wanderers on the path of truth, and absolute foes of Shar.
-singh rager {Prestige Class}^OA^48^Singh ragers draw their furious strength from the noble lion.
-siren {Prestige Class}^SS^84^A harpy siren is an artist who constantly seeks to expand and improve upon her innate sonic ability.
-skullclan hunter {Prestige Class}^MH^20^The skullclan hunter is the acclaimed foe of unlife.
-skylord {Prestige Class}^BE^71^An elf crusader, the skylord uses his kinship with creatures of the sky and the power of the winds to fight evil.
-skypledged {Prestige Class}^RW^126^The skypledged represent a mystical tradition among the raptorans that hearkens back to an ancient pact with powerful lords of the Elemental Plane of Air.
-slaad brooder {Prestige Class}^SS^87^The brooder's sole purpose is to implant as many eggs pellets as he can to produce the widest possible range of progeny.
-slayer of Domiel {Prestige Class}^BE^73^Sometimes the skillset of an assassin is required for more noble pursuits.
-slime lord {Prestige Class}^PG^186^Slime lords, the most favored of Ghaunadar's servants, are not clerics; they are spies and infiltrators who can change their shapes in order to move unnoticed among members of any race.
-Soldier of Light {Prestige Class}^DD^208^The Soldiers of Light are a military order dedicated to open warfare against the minions of their church's enemies.
-soul eater {Prestige Class}^BV^66^The soul eater is a monstrous being that feeds on the very essence of life force.
-spell scion {Prestige Class}^UA^167^This prestige class is for characters who wield legendary weapons designed for use by arcane spellcasters, such as wizards, sorcerers, and sometimes bards.
-spellcarved soldier {Prestige Class}^RE^166^Spellcarved soldiers are warforged warriors who engrave magic runes into the plating of their inherently magic bodies, gaining remarkable defensive abilities.
-spelldancer {Prestige Class}^Mag^37^Spelldancers are an energetic sort of spellcaster who draw on the quasi-primal energy of song and dancing to power their magic.
-spellfire channeler {Prestige Class}^Mag^38^Those who practice their spellfire can hone their talent into a tool with fantastic abilities that most dabblers can only dream of.
-Spellguard of Silverymoon {Prestige Class}^PG^75^The Spellguard, Silverymoon's elite cadre of battle-trained arcane spellcasters, protects the city against the threat of hostile magic and aids the Knights in Silver against more mundane threats.
-spellsinger {Prestige Class}^Rac^185^Spellsingers are rare practitioners of an ancient elven bardic tradition.
-spellsword {Prestige Class}^CW^79^The dream of melding magic and weaponplay is fulfilled in the person of the spellsword.
-spellsword {Prestige Class}^TB^67^The dream of melding magic and weaponplay is fulfilled in the person of the spellsword.
-Spur Lord {Prestige Class}^LD^11^The Spur Lords are elite zealots of the church, wielding the dark power of Cyric and commanding the attention of even the most fanatical clerics.
-spymaster {Prestige Class}^CAd^76^Spymasters do their work quietly and in private, and they often have a cover identity.
-spymaster {Prestige Class}^SaS^14^Spymasters do their work quietly and in private, and they often have a cover identity.
-stalker of Kharash {Prestige Class}^BE^75^The stalkers of Kharash are a loose-knit order of rangers, rogues, and other characters devoted to fighting evil under Kharash's patronage.
-steel legionnaire {Prestige Class}^DCS^68^Steel legionnaires are members of the Legion of Steel.
-stoneblessed {Prestige Class}^RS^122^A stoneblessed bonds to the stone of the mountains, blending into a dwarf, gnome, or goliath community and making it her home.
-stonedeath assassin {Prestige Class}^RS^124^Most stonedeath assassins are hobgoblin rogues or rangers, but bugbears and even exceptional goblins have been known to undertake stonedeath training and learn the ways of infiltrating dwarf strongholds by disarming traps, weakening gates, and assassinating dwarf leaders.
-stonelord {Prestige Class}^CW^81^The earth whispers to special dwarves known as stonelords.
-stonespeaker guardian {Prestige Class}^RS^127^The stonespeaker guardian taps into the divine power of the earth itself to defend her fellow stonespeakers, as well as other goliaths and friendly races, from their enemies.
-stormlord {Prestige Class}^CD^65^Stormlords often live as brigands, indulging their personal desires for wealth, food, luxury items, and wanton behavior as they crave random, spectacular acts of violence.
-stormlord {Prestige Class}^FP^203^Stormlords are the chief agents of the Destroyer's wrath, inflicting destructive rampages wherever they wander in order to spread word of his endless fury.
-stormsinger {Prestige Class}^Fr^70^The stormsingers have learned the secret methods of harnessing the magic powers of music to influence and control the weather.
-stormtalon {Prestige Class}^RW^131^The stormtalons are consummate aerial warriors, using both their weapons and their razor-sharp foot talons to dive on their hapless foes.
-streetfighter {Prestige Class}^CAd^79^Streetfighters seek the challenges of the back alleys as a way of testing themselves and their experience in the wilder world.
-strifeleader {Prestige Class}^FP^204^Strifeleaders are the chief instruments of the Dark Sun, charged with spreading the One True Way of Cyric through force and deception.
-sublime chord {Prestige Class}^CAr^60^In return for abandoning her continuing study of bardic music, a sublime chord instead masters a number of spells more powerful than most bards can ever use.
-Suel arcanamach {Prestige Class}^CAr^63^Arcanamach formerly served as elite guards and agents for powerful wizards.
-Sun Soul monk {Prestige Class}^CSW^88^Monks of the Sun Soul Order believe that they each harbor a small fragment of the sun's divine essence.
-sunmaster {Prestige Class}^LE^25^The sunmasters are members of a sect within the church of Lathander who believe that the Morninglord is the living reincarnation of Amaunator.
-survivor {Prestige Class}^SS^89^Those who survive a program of frequent assaults and other dangers emerge a few weeks later -- tougher, faster, and less vulnerable to attacks.
-swanmay {Prestige Class}^BE^76^Swanmays are members of a secretive order sworn to protect wilderness areas from evil.
-swift scion {Prestige Class}^UA^168^This prestige class is for those who wield legendary weapons that make use of or improve the wielder's stealth, speed, or dexterity (in the general sense).
-sword dancer {Prestige Class}^FP^205^Sword dancers are expected to lead the drow migration and work to promote harmony between drow and surface-dwelling races.
-sword of righteousness {Prestige Class}^BE^77^Pursuit of a commitment to righteousness and purity that exceeds the norm is a quality of a sword of righteousness.
-sybil {Prestige Class}^SS^90^Steeped in ancient lore, or maddened by divine inspiration, the sybil is a reclusive prophet.
-tactical soldier {Prestige Class}^MH^22^The tactical soldier is the master of teamwork in melee.
-tainted sorcerer {Prestige Class}^UA^191^Tainted sorcerers find an easy path to tremendous magical power.
-tainted warrior {Prestige Class}^UA^193^When a character's taint threatens to exceed the capacity of his body and soul to contain it, he may become possessed by its evil power and transformed into a creature of taint.
-talon of Tiamat {Prestige Class}^Dr^134^The talon of Tiamat furthers the goals of evil dragonkind.
-Talontar blightlord {Prestige Class}^Una^34^Corrupt priests who revel in decay, the blightlords of Talona are feared and reviled throughout the Unapproachable East.
-tamer of beasts {Prestige Class}^MW^70^Through magic and his overwhelming concern for his charges, the tamer of beasts can make them tougher and more intelligent.
-tattooed monk {Prestige Class}^CW^82^Certain monastic orders bestow supernatural or spell-like powers on their members by inscribing magic tattoos on their skin.
-tattooed monk {Prestige Class}^OA^49^Certain monastic orders bestow supernatural or spell-like powers on their members by inscribing magic tattoos on their skin.
-techsmith {Prestige Class}^FP^206^Techsmiths are devoted to the development of new inventions and the progression of achievement in the name of the Wonderbringer.
-Telflammar shadowlord {Prestige Class}^Una^36^Above all the criminals of the Shadowmasters of Telflamm stand the Telflammar shadowlords,the secret captains of iniquity who demand unquestioned obedience from their numerous minions.
-tempest {Prestige Class}^CAd^81^A tempest is the point of calm within a whirling barrier of deadly blades.
-tempest {Prestige Class}^MW^72^A tempest is the point of calm within a whirling barrier of deadly blades.
-templar {Prestige Class}^DF^72^Sworn to the defense of a temple site, the templar is a holy warrior blessed by her deity with combat prowess and great endurance.
-temple raider of Olidammara {Prestige Class}^CD^67^The temple raiders are an elite cadre of thiees who worship the Laughing Rogue and specialize in stealing valuables and secret lore from the temples of other deities.
-temple raider of Olidammara {Prestige Class}^SaS^16^The temple raiders are an elite cadre of thiees who worship the Laughing Rogue and specialize in stealing valuables and secret lore from the temples of other deities.
-thaumaturgist {Prestige Class}^DMG^196^The thaumaturgist reaches out with divine power to other planes of existence, calling creatures there to do his bidding.
-Thayan gladiator {Prestige Class}^CR^63^Popular and skillful gladiators fill the arenas of Faerun from Calimshan to the Dragon Coast, but the brutal Thayan gladiators are the best of the best.
-Thayan knight {Prestige Class}^CW^85^Thayan knights have mastered the art of swordplay, are familiar with magic, and are loyal to none but the tattooed mages.
-Thayan knight {Prestige Class}^LD^64^Thayan knights have mastered the art of swordplay, are familiar with magic, and are loyal to none but the tattooed mages.
-Thayan slaver {Prestige Class}^Una^37^Thayan slavers are cruel marauders who use their awful abilities to abduct creatures and then break their wills.
-thief-acrobat^CAd^83^A thief-acrobat excels in getting in and getting out.
-thief-acrobat^SaS^18^A thief-acrobat excels in getting in and getting out.
-thrall of Demogorgon {Prestige Class}^BV^67^A thrall of Demogorgon thrives on the chaotic nature of mutation and deformity.
-thrall of Graz'zt^BV^68^The thrall of Graz'zt is a sinister, conniving, and thoroughly evil master of arcane lore and dark secrets.
-thrall of Juiblex {Prestige Class}^BV^70^A thrall of Juiblex oozes a horrible slime and is surrounded by a nauseating stench.
-thrall of Orcus {Prestige Class}^BV^71^A thrall of Orcus has devoted herself to the demon prince of undeath.
-thrallherd {Prestige Class}^XPH^153^Thrallherds manipulate the minds of others as if they were clay in the hands of a sculptor.
-tomb warden {Prestige Class}^LM^57^Tomb wardens serve as selfless, undying protectors of the dead.
-topaz guardian {Prestige Class}^LoM^203^Resolute crusaders, the topaz guardians are the elite initiates of the Holy Order of the Supernal Topaz Defenders.
-tribal protector {Prestige Class}^SF^35^The tribal protector is the battlefield champion of a savage humanoid race.
-troubadour of stars {Prestige Class}^BE^78^Bards who channel their celestial music through their mortal voices and instruments are troubadours of stars.
-true necromancer {Prestige Class}^LM^51^Those who seek to raise an unyielding obedience from the dead willingly tread the path of necromancy.
-true necromancer {Prestige Class}^TB^69^Those who seek to raise an unyielding obedience from the dead willingly tread the path of necromancy.
-unholy ravager of Tiamat {Prestige Class}^Dr^97^Those who devote themselves to Tiamat's cause become unholy ravagers of Tiamat.
-Union Sentinel {Prestige Class}^EL^35^A Union Sentinel is a member of an elite police force that guards the demiplane city of Union.
-urban soul {Prestige Class}^RD^141^Urban souls are the chosen champions of the deity Urbanus, charged with protecting city denzens from external dangers and from subtler threats to the city.
-ur-priest^BV^72^A small number of ur-priests have learned to tap into divine power and use it without praying to or worshiping a god.
-ur-priest^CD^70^A small number of ur-priests have learned to tap into divine power and use it without praying to or worshiping a god.
-vassal of Bahamut {Prestige Class}^BE^80^A vassal of Bahamut is a devout, nondraconic champion in the service of the Dragon King.
-vengeance knight {Prestige Class}^CR^67^Vengeance knights roam the Lands of Intrigue in search of those who have committed acts of treachery against their employers, the Knights of the Shield.
-verdant lord {Prestige Class}^MW^73^The verdant lord is the final defender of the forest.
-vermin keeper {Prestige Class}^Und^44^To a vermin keeper, insects are perfect killers.
-vermin lord {Prestige Class}^BV^73^The vermin lord offers itself as a host for all manner of parasitic organisms.
-vigilante {Prestige Class}^CAd^85^The vigilante combines magical and mundane investigative techniques to assess a crime scene.
-vigilante {Prestige Class}^SaS^20^The vigilante combines magical and mundane investigative techniques to assess a crime scene.
-virtuoso {Prestige Class}^CAd^89^The typical virtuoso is outgoing, charismatic, and gregarious.
-virtuoso {Prestige Class}^SaS^22^The typical virtuoso is outgoing, charismatic, and gregarious.
-visionary seeker {Prestige Class}^PlH^53^A visionary seeker knows how to navigate the mental plain stretching out ahead, finding landfall and truly discovering what it means to know.
-void disciple {Prestige Class}^CD^72^Void disciples understand that everything in the world contains all the basic elements, held together by the least tangible essence.
-void disciple {Prestige Class}^OA^51^Void disciples understand that everything in the world contains all the basic elements, held together by the least tangible essence.
-walker in the waste {Prestige Class}^Sa^89^A walker in the waste embodies the harsh, unforgiving nature of the desert.
-war chanter {Prestige Class}^CW^87^A war chanter's music flows across the battlefield like a raging torrent, catching friends and foes alike in its wake.
-war hulk {Prestige Class}^MH^22^The war hulk is a creature of great size and talent who is specifically trained to shock and awe opposing massed troops.
-war mind {Prestige Class}^XPH^155^War minds are expert fighters who claim to possess unequaled knowledge in the art of war.
-war weaver {Prestige Class}^HB^112^By weaving together strands of pure arcane power, the war weaver becomes a force to be reckoned with on the battlefield.
-war wizard of Cormyr {Prestige Class}^Mag^40^The Cormyrean war wizards are some of the most respected battle-mages in Faerun.
-warchief {Prestige Class}^MH^24^A warchief leads a primitive, aggressive tribe of humanoids, especially when they turn to marauding.
-warforged juggernaut {Prestige Class}^ECS^83^As a machine of war, the juggernaut is among the best at dealing damage and sustaining punishment.
-warmaster {Prestige Class}^SF^37^Warmasters are trained at the College of War and can become a formidable presence on the battlefield.
-warpriest {Prestige Class}^CD^74^Warpriests are fierce, earthy clerics who pray for peace but prepare for war.
-warpriest {Prestige Class}^DF^74^Warpriests are fierce, earthy clerics who pray for peace but prepare for war.
-warrior of darkness {Prestige Class}^BV^75^The warrior of darkness, sometimes called the dark knight, is a practitioner of black magic.
-warrior skald {Prestige Class}^Rac^186^Accompanying heroes of great renown, warrior skalds fight at their sides while composing the epics that will be told for centuries to come.
-warshaper {Prestige Class}^CW^89^The warshaper grows and evolves her own weapons and armor to suit the threat at hand.
-warsling sniper {Prestige Class}^Rac^188^The warsling sniper is an expert in the use of the weapon commonly associated with the halfling race.
-watch detective {Prestige Class}^MW^75^The watch detective specializes in solving mysteries.
-waverider {Prestige Class}^SS^93^The waverider and her companion animal defend their city with a vigor that exceeds either's individual powers.
-waveservant {Prestige Class}^FP^209^Waveservants server the Bitch Queen as both tribute gatherers and enforcers.
-wayfarer guide {Prestige Class}^CAr^65^The wayfarer guide focues on honing her skill at instantaneous magical transportation.
-wayfarer guide {Prestige Class}^TB^70^The wayfarer guide focues on honing her skill at instantaneous magical transportation.
-weapon master {Prestige Class}^SF^38^For weapon masters, the perfection of kiis found in the mastery of a single melee weapon.
-weapon master (kensei)^OA^53^For weapon masters, the perfection of kiis found in the mastery of a single melee weapon.
-wearer of purple {Prestige Class}^FP^210^Wearers of purple are members of the Cult of the Dragon who embrace the creation and veneration of the Sacred Ones, the great dracoliches of Faerun.
-weretouched master {Prestige Class}^ECS^85^Weretouched masters are shifters who learn to enhance their shifting ability to accentuate the power of their lycanthrope heritage.
-whisperknife {Prestige Class}^RW^135^The halfling whisperknife seeks to repay murder, theft, or humiliation in the same coin.
-wild mage {Prestige Class}^CAr^68^Wild mages aspire to cast spells without structure.
-wild plains outrider {Prestige Class}^CAd^92^Wild plains outriders work tirelessly to keep the plains as safe as such remote places can be.
-wild scout {Prestige Class}^SM^117^Wild scouts are the spies of the wilderness, traversing the open and wild country in search of valuable information.
-wildrunner {Prestige Class}^RW^139^Wildrunners give themselves almost wholly to nature, seeking to return to their untamed roots and eventually become fey creatures.
-windrider {Prestige Class}^MW^77^The windrider is a specialist in mounted combat, but hers is no ordinary mount.
-windwalker {Prestige Class}^FP^212^Windwalkers learn to shape the winds with their hands and ride them to lands as yet unseen.
-winterhaunt of Iborighu {Prestige Class}^Fr^72^As minions of the Frozen King, the winterhaunts of Iborighu lust for nothing less than eternal winter.
-witch hunter {Prestige Class}^OA^54^Witch hunters combine magical training with combat expertise to battle the spiritual forces of evil in the world.
-Wizard of High Sorcery {Prestige Class}^DCS^71^Once a wizard successfully completes (and survives) the Test of High Sorcery, his choices dictate his robe color and which deity of magic grants him power.
-wonderworker {Prestige Class}^BE^82^Wonderworkers sacrifice some of their spellcasting ability to grow closer to the ideal of goodness they revere.
-yakuza {Prestige Class}^OA^55^Yakuza represent the shadowy underworld and provide protection for the helpless.
-Yathchol webrider {Prestige Class}^Und^46^With their intimate understanding of webspinning and their familiarity with the Overweb, Yathchol webriders can move about the Underdark as they choose.
-yathrinshee {Prestige Class}^PG^187^Yathrinshees, the elite ranks of Kiaransalee's priests, are powerful masters of necromantic magic, both arcane and divine.
-yuan-ti cultist^SS^97^The mysteries of the evil deities of the yuan-ti are mastered by yuan-ti cultist masters.
-Zhentarim skymage {Prestige Class}^LD^102^These powerful spellcasters ride strange flying beasts and serve the Zhentarim by performing acts of espionage and causing unrest on the frontiers of civilization.
-Zhentarim spy {Prestige Class}^PG^77^The Zhentarim spy is probably the one Faerunians encounter most often -- even if they never realize it.
-knight phantom {Prestige Class}^FN^41^The knight phantom prestige class takes capable wizards and gradually turns them into capable melee fighters, without slowing their spellcasting too much.
-Dark Lantern {Prestige Class}^FN^68^The Dark Lanterns serve the crown of Breland as spies and assassins.
-Cyran avenger {Prestige Class}^FN^86^These survivors of the Day of Mourning seek to uncover the cause of the cataclysm and avenge their people against the architects of the Mournland.
-bone knight {Prestige Class}^FN^117^Bone knights are Karrn patriots, living protectors who fight alongside the undead legions of their land.
-silver pyromancer {Prestige Class}^FN^150^The silver pyromancer is an arcane champion of the Church of the Silver Flame, taking his place alongside clerics, paladins, and exorcists in the Church's cause.
-legacy champion {Prestige Class}^WL^19^You are so devoted to the history and chronicle of a particular item of legacy that you enjoy enhanced access to your item's legacy abilities.
-cataclysm mage {Prestige Class}^EH^58^Cataclysm mages seek after Eberron's most powerful mysteries, long lost to the past.
-thunder guide {Prestige Class}^EH^64^Bodyguards to nobles on safari, shepherds to spelunking university professors, and the real-life heroes of chronicle serials across Khorvaire, thunder guides provide the strong blades, keen senses, and local knowledge necessary to survive a trip across the Thunder Sea.
-windwright captain {Prestige Class}^EH^70^The self-proclaimed masters of sky and sea, the windwright captains are the finest pilots of airships and wind galleons on Eberron.
-knight of the pearl {Prestige Class}^Sto^52^The knight of the pearl is a loyal defender of the aventi people, dedicated to the service of Aventernus and his appointed kings.
-legendary captain {Prestige Class}^Sto^56^A legendary captain might be the commander of a fleet's flagship or a bloodthirsty pirate, but whatever the role, her reputation is widespread and her crew fanatically loyal.
-leviathan hunter {Prestige Class}^Sto^61^The leviathan hunter is dedicated to hunting down creatures of the perilous depths.
-scarlet corsair {Prestige Class}^Sto^65^The scarlet corsair relies on the reputation of her quick blade and terrible fighting skills to drive her prey before her.
-sea witch {Prestige Class}^Sto^68^A sea witch is a terrible chaotic mage who wields the powers of water and calls on the living horrors of the deep.
-stormcaster {Prestige Class}^Sto^72^The stormcaster is one who seeks to tap into the power of a strange and terrifying phenomenon: the raging storm.
-wavekeeper {Prestige Class}^Sto^76^Some druids feel the call of the primal deeps.
-Knight of the Flying Hunt {Prestige Class}^CoV^106^Defenders of Nimbral, protectors of the island realm's quiet, simple folk, noble soldiers answering to the powerful but mysterious Nimbral Lords -- the Knights of the Flying Hunt epitomize valor and grace in word, deed, and bearing.
-Knight of the Weave {Prestige Class}^CoV^111^Members of this mystic order of sacred defenders cherish the Weave like a fine wine.
-Moonsea skysentinel {Prestige Class}^CoV^117^Moonsea skysentinels are the eyes in the sky for the Knights of the North, scouting the landscape, looking for evidence of Zhentarim activity.
-Triadic knight {Prestige Class}^CoV^123^Triadic knights are holy warriors who worship the Triad of Tyr, Torm, and Ilmater.
-corrupt avenger {Prestige Class}^HH^88^A corrupt avenger accepts any cost to have his vengeance, even to the forfeit of his very soul.
-death delver {Prestige Class}^HH^93^The death delver is that rare individual, who, rather than fearing and avoiding death, delves as deeply into its mysteries as he can, to better understand and eventually gain some small power over it.
-dread witch {Prestige Class}^HH^98^The dread witch is a spellcaster who manipulates fear as readily and effectively as other casters manipulate magic itself.
-fiend-blooded^HH^102^With careful exploration, a spellcaster who feels a call from within can slowly bring the power of their fiendish lineage to the surface.
-purifier of the Hallowed Doctrine {Prestige Class}^HH^108^Purifiers of the Hallowed Doctrine consider themselves servants not of gods but of the spiritual well-being of the world itself.
-tainted scholar {Prestige Class}^HH^113^No secret is barred from the tainted scholar's grasp, and if such forbidden knowledge comes at the cost of his soul, he's willing to pay that price.
-alchemist savant {Prestige Class}^MoE^53^The alchemist savant excels in the capacity to break down the normal barriers that lie between alchemy and magic, between potion and alchemical fluid, between science and art.
-deadgrim {Prestige Class}^MoE^57^The deadgrim are an elite faction with in the Red Watchers, a new organization of undead hunters within Karrnath.
-dragon prophet {Prestige Class}^MoE^63^The dragon prophet is a member of one of the 'lesser races' who shares the dragons' ambitious goal of understanding the complex and convoluted draconic Prophecy.
-elemental scion of Zilargo {Prestige Class}^MoE^68^The elemental scion of Zilargo attempts to understand the true nature of the elements through bizarre methods.
-impure prince {Prestige Class}^MoE^73^Of those who make it their special mission to rid the world of aberrations and their masters, only impure princes can claim the distinction of using daelkyr-inspired corruptions and symbionts as their most effective tool in aberration cleansing.
-quori mindhunter {Prestige Class}^MoE^77^The quori mindhunter has a single mission: to hunt down and destroy the quori spirits that corrupt humanity, and the possessed Inspired that further the aims of the Dreaming Dark.
-renegade mastermaker {Prestige Class}^MoE^81^A renegade mastermaker applies the secrets of warforged creation methods to his own body, slowly replacing parts of his body with mechanical augmentations.
-vigilant sentinel of Aerenal {Prestige Class}^MoE^85^Part spy, part assassin, and completely loyal to the Sibling Kings and Aerenal's undying rulers, the sentinels roam across Eberron.
-incandescent champion {Prestige Class}^MoI^115^The incandescent champion seeks to dispense with barriers and obstacles both tangible and intangible so that she can touch the cosmic soul with her unveiled body, mind, and spirit.
-incarnum blade {Prestige Class}^MoI^121^Using a secret passed down through the generations, the incarnum blade shapes soul energy drawn from the greatest warriors of the past into a special soulmeld that is incorporated into his melee weapon of choice.
-ironsoul forgemaster {Prestige Class}^MoI^126^Only the ironsoul forgemaster can craft a weapon that combines these arts with the shaping of soul essence.
-necrocarnate {Prestige Class}^MoI^132^Dealers in death and torturers of souls, necrocarnates number among the most evil creatures in any world.
-sapphire hierarch {Prestige Class}^MoI^136^The elite members of an order of priests of law defend the temple, contemplate the mysteries of the Sapphire Eidolon, and seek to fulfill its single command by perfecting themselves and bringing order out of chaos wherever they find it.
-soulcaster {Prestige Class}^MoI^142^Soulcasters excel at incorporating soul energy into their magic.
-spinemeld warrior {Prestige Class}^MoI^147^When a spinemeld warrior trains, he is participating in a tradition that has long been venerated in skarn society.
-totem rager {Prestige Class}^MoI^153^The totem rager embodies the wrath of nature in its most bestial form.
-umbral disciple {Prestige Class}^MoI^158^The umbral disciple is a student of shadow in both a literal and a metaphysical sense.
-witchborn binder {Prestige Class}^MoI^162^Elite agents within the Vigilant Servants, a society whose members make it their business to frustrate the plans of the witchborn, witchborn binders are incarnum-wielding mage-hunters who can use the power of soul energy to create shields, traps, and shackles.
-gatekeeper mystagogue {Prestige Class}^PE^88^Heirs to a tradition over sixteen millennia old, the gatekeeper mystagogues stand among the greated foes of the daelkyr and their aberration spawn.
-high elemental binder {Prestige Class}^PE^104^As a high elemental binder, you can reach into the planes and immediately draw elemental beings into objects -- coating your armor in stone or your blade in fire.
-revenant blade {Prestige Class}^PE^108^The revenant blade is a Valenar elf who can draw on the skills of ancient heroes, the giant-slayers of Xen'drik.
-court herald {Prestige Class}^PF^108^The court herald prestige class is a modified version of the loremaster prestige class, which is described in the Dungeon Master's Guide.
-disciple of the eye {Prestige Class}^RDr^75^As a disciple of the eye, you know the messages that the eyes alone can impart.
-dracolexi {Prestige Class}^RDr^79^As a dracolexi, you try to understand that primordial vocabulary by devoting yourself to the study of ancient dialects and languages, hoping to discover how certain Draconic words were once uttered.
-dragon devotee {Prestige Class}^RDr^84^Some individuals feel the call of dragons more strongly, which may lead them into an attempt to awaken their blood and bring those traits to the fore.
-dragonheart mage {Prestige Class}^RDr^88^The dragonheart mage is perfect for the dedicated spellcaster who wishes to embrace the power of dragon blood while still advancing in magical expertise.
-Singer of Concordance {Prestige Class}^RDr^91^The Singers of Concordance are a small order of wandering draconic spiritual guides who begin as servitors of Io, the Ninefold Dragon, creator of all dragonkind.
-anima mage {Prestige Class}^TM^50^Anima mages see vestiges as mere tools, no different from spell component pouches or a wand of fireball.
-knight of the sacred seal {Prestige Class}^TM^54^A knight of the sacred seal is never alone because she has formed a true partnership with a single vestige.
-scion of Dantalion {Prestige Class}^TM^59^The scions believe that their destiny is to one day take up the crown of a long-forgotten human empire, bear the scepter of rulership, and rebuild the empire that could rival the stars.
-Tenebrous apostate {Prestige Class}^TM^63^The remnant of divinity once possessed by Orcus, Tenebrous is perhaps the only vestige still worshiped in some places as a god. Some followers, however, believe that Tenebrous is a separate deity, so these Tenebrous apostates revere him as such.
-witch slayer {Prestige Class}^TM^67^Witch slayers devote themselves to capturing and destroying those who share their souls with other entities.
-child of night {Prestige Class}^TM^117^They prefer to call themselves 'black transmogrifists,' but most know them as children of night.
-master of shadow {Prestige Class}^TM^121^Some driven or domineering souls seek nothing less than mastery of darkness itself -- the ability to turn the very shadows into their agents and allies.
-noctumancer {Prestige Class}^TM^125^Noctumancers bridge the gap between shadow and arcane magic.
-shadowblade {Prestige Class}^TM^129^Shadowblades are martial combatants with an innate link to shadow.
-shadowsmith {Prestige Class}^TM^132^Shadowcasters draw power from darkness, and masters of shadow command it, but no one truly manipulates the darkness as does the shadowsmith.
-acolyte of the ego {Prestige Class}^TM^204^By learning to speak their own truenames, acolytes of the ego strive to unlock hidden powers lost to the cosmos.
-bereft {Prestige Class}^TM^208^The bereft are a group of truenamers who devote themselves to mastering the word of unmaking, a powerful component of Truespeech purportedly able to unravel creation.
-brimstone speaker {Prestige Class}^TM^212^Brimstone speakers regard the secret language of truenames as nothing less than a gift from the gods.
-disciple of the word {Prestige Class}^TM^216^Disciples of the word are intellectual warrior monks who, through a deeper understanding of their truenames, transcend the limits of their mortal form.
-fiendbinder {Prestige Class}^TM^220^A fiendbinder seeks to unlock the truenames of demons, devils, and other vile fiends, and use that knowledge to bind them to service.
-merchant prince {Prestige Class}^PF^71^A merchant prince (known as a merchant princess if female) is a member of the merchant nobility who has acquired his position and wealth either by being born into a wealthy family or by earning every last coin himself.
-anarchic initiate {Prestige Class}^CP^17^The anarchic initiate is more than a wilder; he is an initiate to the truth that underlies the wildness in the depth of his being.
-ebon saint {Prestige Class}^CP^22^The ebon saint lives in the darkness, but seeks to exposehis enemies to the light.
-ectopic adept {Prestige Class}^CP^26^Ectoplasm is the preferred medium of creation for the ectopic adept, and his mind serves as the mold, kiln, and wheel upon which his works are turned.
-flayerspawn psychic {Prestige Class}^CP^30^Willing to sacrifice her life, appearance, and even her sanity, the flayerspawn psychic walks a dangerous road, growing in psionic power as she slowly embraces her secret mind flayer heritage.
-illumine soul {Prestige Class}^CP^33^The illumine soul is a living conduit of positive energy.
-soulbow {Prestige Class}^CP^36^In the tradition of the soulknife, a soulbow realizes the direct capacity of her own mind to give shape to weapons of psionic perfection.
-storm disciple {Prestige Class}^CP^40^A storm disciple is a character who decides that the best, most glorious way to serve his ideals is through the natural power, fury, and splendor of the storm.
-zerth cenobite {Prestige Class}^CP^43^The core of a zerth cenobite's studies involve strict meditation on the nature of time and the body's movements through it, culminating in a martial art known as zerthin.
-landforged walker {Prestige Class}^SX^123^Even as they speak for nature, landforged walkers coax the living bounty of the earth to grow on their metal hides, drawing power from the environment around them.
-primal scholar {Prestige Class}^SX^127^Primal scholars are spellcasters bent on uncovering and mastering the ancient magic that lies buried in the jungles, deserts, and mountains of Xen'drik.
-scorpion wraith {Prestige Class}^SX^130^Scorpion wraiths are the elite warriors of the drow.
-wearer of purple {Prestige Class}^DrF^67^Updated from Faiths and Pantheons.
-bloodclaw master {Prestige Class}^ToB^96^A bloodclaw master embraces the animal within to a degree that it becomes external, partially transforming him into the beast from which the discipline was inspired.
-bloodstorm blade {Prestige Class}^ToB^100^Other martial adepts rightfully look with wonder upon those who learn the bloodstorm style.
-deepstone sentinel {Prestige Class}^ToB^105^The Stone Dragon discipline traces its roots back to an ancient order of dwarves that used the power of the earth to enhance their combat style.
-eternal blade {Prestige Class}^ToB^109^An eternal blade is an elf who learns a variety of exotic fighting maneuvers with the aid and advice of the spirit of a mighty, ancient elf warrior.
-jade phoenix mage {Prestige Class}^ToB^113^Long ago, a fellowship of swordsages known as the Masters of the Jade Phoenix took up the study of arcane magic in search of a new martial discipline.
-master of nine {Prestige Class}^ToB^119^Some savants of the Nine Disciplines believe that none of the paths are complete, true disciplines in and of themselves.
-Ruby Knight vindicator {Prestige Class}^ToB^122^The Ruby Knights are a crusader order in the service of Wee Jas, goddess of death and magic.
-Shadow Sun ninja {Prestige Class}^ToB^126^A Shadow Sun ninja is a martial artist who studies the balance between good and evil, light and dark.
-diamond dragon {Prestige Class}^DM^30^The boldest of the sages study the link between gem dragons and psionics, learning to tap into what they refer to as the draconic psionic collective.
-dragon descendant {Prestige Class}^DM^34^A secret monastic order, dragon descendants tap into the power of their draconic heritage to call on their ancestors in times of need.
-dragon lord {Prestige Class}^DM^38^A dragon lord is the general at the head of an army, the emperor at the helm of an empire, or the warleader who dominates a battlefield.
-hand of the winged masters {Prestige Class}^DM^43^Dragons often need expert servants to be their eyes, ears, and hands in humanoid society.
-pact-bound adept^DM^46^Pact-bound adepts are sorcerers who have learned to transcend their beliefs about spells and magic and embrace arcane power as dragons do.
-swift wing {Prestige Class}^DM^50^Swift wings are church servants who see themselves as the fast-moving, hard-hitting crusaders of their god's cadre of worshipers.
-wyrm wizard {Prestige Class}^DM^55^Wyrm wizards are spellcasters who learn new spells not through research and experimentation but rather by tapping into the vast wealth of arcane knowledge possessed by dragons.
-sovereign speaker {Prestige Class}^FE^32^Although devotion to a single god enables some individuals to gain additional power, overriding
-escalation mage {Prestige Class}^FE^52^By giving themselves over to the Shadow and focusing on the dark side of magic, these arcane spellcasters learn how to bargain with their god to make their spells more effective -- for a price.
-argent fist {Prestige Class}^FE^70^Only a precious few possess the focus, the dedication, and the physical prowess to master the abilities of the argent fist, but few enemies can stand against those who do.
-thief of life {Prestige Class}^FE^84^When the prize is immortality, there is precious little a thief of life will not do to grasp it.
-planar shepherd {Prestige Class}^FE^105^Some druids, especially among the Greensingers or those who have dealt extensively with that sect, reject narrow interpretations of what constitutes the natural world.
-knight of the raven {Prestige Class}^Rav^200^Before evil descended on the land of Barovia, it was home to an order of virtuous champions, the Knights of the Raven.
-Lightbringer {Prestige Class}^Rav^204^The Lightbringers are an expansive guild of undead hunters that readily hands out charter memberships to anyone who wants to stamp out undead.
-aburant champion {Prestige Class}^CM^50^A warrior who dabbles in abjuration magic.
-eldritch disciple {Prestige Class}^CM^53^A multiclass warlock and divine spellcaster.
-eldritch theurge {Prestige Class}^CM^57^A multiclass warlock and arcane spellcaster.
-enlightened spirit {Prestige Class}^CM^60^A warlock who takes on celestial characteristics.
-holy scourge {Prestige Class}^CM^64^An arcane spellcaster that specializes in blasting evil.
-lyric thaumaturge {Prestige Class}^CM^67^A bard with enhanced spellcasting prowess.
-master specialist {Prestige Class}^CM^70^A wizard with greater mastery over a school of specialization.
-nightmare spinner {Prestige Class}^CM^74^An arcane spellcaster who weaves fear into illusions.
-ultimate magus {Prestige Class}^CM^77^A multiclass arcane preparation spellcaster and arcane spontaneous spellcaster.
-unseen seer {Prestige Class}^CM^81^A stealthy character who dabbles in divination magic.
-wild soul {Prestige Class}^CM^84^An arcanist who wields power from the realm of the fey.
+adept^DMG^107^This NPC class possesses a combination of arcane and divine skills.
+aristocrat^DMG^108^This NPC class contains people who are usually educated, wealthy individual who were born into high position.
+artificer^ECS^29^Artificers are perhaps the ultimate magical dabblers.
+barbarian^PH^24^A ferocious warrior who uses fury and instinct to bring down foes.
+bard^PH^26^A performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades.
+bardic sage^UA^49^A variant bard who focues his efforts on learning, research, and the power of knowledge.
+battle sorcerer^UA^56^A variant sorcerer who is a capable physical combatant.
+cleric^PH^30^A master of divine magic and a capable warrior as well.
+cloistered cleric^UA^50^A variant cleric who spends more time than other clerics in study and prayer and less in martial training.
+commoner^DCS^46^This NPC class contains the laborers of the world, such as innkeepers, servants, blacksmiths, farmers, and fisherfolk.
+commoner^DMG^108^This NPC class contains the laborers of the world, such as innkeepers, servants, blacksmiths, farmers, and fisherfolk.
+divine bard^UA^50^A variant bard who derives his special power from a divine tradition.
+domain wizard^UA^57^A variant wizard who uses the arcane domain system and selects a specific domain of spells.
+druid^PH*^33^One who draws energy from the natural world to cast divine spells and gain strange magical powers.
+druidic avenger^UA^51^A variant druid who channels her inner fury to wreak vengeance upon those who injure the natural world.
+dwarf cleric^RS^146^Racial substitution levels.
+dwarf fighter^RS^146^Racial substitution levels.
+dwarf sorcerer^RS^147^Racial substitution levels.
+eidolon^Gh^16^This variant class for ghosts emphasizes fighting abilities.
+eidoloncer^Gh^17^This variant class for ghosts emphasizes spellcasting abilities.
+elf paladin^RW^155^Racial substitution levels.
+elf ranger^RW^155^Racial substitution levels.
+elf wizard^RW^157^Racial substitution levels.
+epic barbarian^EL^8^An epic ferocious warrior who uses fury and instinct to bring down foes.
+epic bard^EL^9^An epic performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades.
+epic cleric^EL^10^An epic master of divine magic and a capable warrior as well.
+epic druid^EL^10^An epic druid draws energy from the natural world to cast divine spells and gain strange magical powers.
+epic fighter^EL^11^An epic warrior with exceptional combat capability and unequaled skill with weapons.
+epic monk^EL^12^An epic martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers.
+epic paladin^EL^13^An epic champion of justice and destroyer of evil, protected and strengthened by an array of divine powers.
+epic psion^EL^22^An epic seeker after psionic secrets; a master of the mind and the thoughts of others.
+epic psychic warrior^EL^23^An epic warrior who combines combat skill with psionic powers.
+epic ranger^EL^14^An epic cunning, skilled warrior of the wilderness.
+epic rogue^EL^14^An epic tricky, skillful scout and spy who wins the battle by stealth rather than brute force.
+epic sorcerer^EL^15^An epic spellcaster with inborn magical ability.
+epic wizard^EL^16^An epic potent spellcaster schooled in the arcane arts.
+expert^DCS^46^This NPC class contains people such as skilled artisans, specialist laborers, and ingenious inventors.
+expert^DMG^109^This NPC class contains people such as skilled artisans, specialist laborers, and ingenious inventors.
+expert^UA^77^A generic class that can be a jack-of-all-trades or a master of a limited area of expertise.
+favored soul^CD^6^Favored souls cast divine spells by means of an innate connection rather than through laborious training and prayer, so their divine connection is natural rather than learned.
+favored soul^MH^5^The favored soul follows the path of the cleric but can channel divine power with surprising ease.
+fighter^PH*^37^A warrior with exceptional combat capability and unequaled skill with weapons.
+gnome bard^RS^147^Racial substitution levels.
+gnome illusionist^RS^148^Racial substitution levels.
+gnome ranger^RS^149^Racial substitution levels.
+goliath barbarian^RS^150^Racial substitution levels.
+goliath druid^RS^151^Racial substitution levels.
+goliath rogue^RS^152^Racial substitution levels.
+half-elf bard^RD^157^Racial substitution levels.
+half-elf fighter^RD^157^Racial substitution levels.
+half-elf ranger^RD^158^Racial substitution levels.
+half-elf barbarian^RD^158^Racial substitution levels.
+half-elf druid^RD^159^Racial substitution levels.
+half-elf paladin^RD^160^Racial substitution levels.
+halfling druid^RW^157^Racial substitution levels.
+halfling monk^RW^158^Racial substitution levels.
+halfling rogue^RW^159^Racial substitution levels.
+healer^MH^8^A healer is adept both at detecting the ailments of allies and understanding the coarse, unruly thoughts of beasts.
+hexblade^CW^5^Combining the dynamic powers of martial prowess and arcane might, the hexblade presents a deadly challenge to opponents unused to such a foe.
+marshal^MH^11^Trained in the basics of fighting, marshals possess a general knowledge of weapons and armor.
+monk^PH*^39^A martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers.
+mystic^DCS^47^Mystics are spellcasters who have learned to channel divine energy without worshiping (or even acknowledging) any deity.
+ninja^CAd^5^Highly skilled spies and assassins, ninjas can master a broad range of skills and combat techniques.
+noble^DCS^50^Nobles have the ability to use their background, education, natural charm, and skills in social maneuvering to their advantage in day-to-day lives.
+paladin^PH*^42^A champion of justice and destroyer of evil, protected and strengthened by an array of divine powers.
+paladin of freedom^UA^53^A variant paladin who is dedicated to liberty and free thought.
+paladin of slaughter^UA^53^A variant paladin who is a brutal champion of chaos and evil, and who leaves only destruction trailing in his wake.
+paladin of tyranny^UA^54^A variant paladin who is a lawful evil villain bent on dominating those weaker than she.
+paladin variant^CW^13^A variant paladin class.
+planar ranger^UA^55^A variant ranger who roams the multiverse instead of the wilderness.
+psion^XPH^19^A seeker after psionic secrets; a master of the mind and the thoughts of others.
+psychic warrior^XPH^24^A warrior who combines combat skill with psionic powers.
+ranger^PH*^46^A cunning, skilled warrior of the wilderness.
+ranger variant^CW^13^A variant ranger class.
+raptoran cleric^RW^160^Racial substitution levels.
+raptoran fighter^RW^161^Racial substitution levels.
+raptoran sorcerer^RW^157^Racial substitution levels.
+rogue^PH*^49^A tricky, skillful scout and spy who wins the battle by stealth rather than brute force.
+samurai^CW^8^Wielding their signature katana and wakizashi simultaneously, samurai are as potent in melee as a fighter, although they are less versatile.
+samurai^OA^20^Samurai are professional warriors.
+savage bard^UA^50^A variant bard who is a warrior at heart and whose arcane powers strike fear into the enemies of his tribe.
+scout^CAd^10^A scout has some training in weapons and a unique combat style that favors fast movement and devastating attacks.
+shaman^OA^22^Shamans are intermediaries between the mortal world and the realm of spirits.
+shugenja^CD^10^The shugenja is a divine spellcaster who casts spells by attuning himself to the primal energies around him and focusing such energy through his body to produce magical effects.
+shugenja^OA^24^Shugenjas are divine spellcasters who cast spells by attuning themselves to the elements around them.
+sohei^OA^27^Sohei are warrior monks.
+sorcerer^PH*^51^A spellcaster with inborn magical ability.
+soulknife^XPH^26^A warrior who fights with an idealized blade of personal mental energy.
+specialized wizard variants^UA^59^Each variant specialized class gives up one of the standard specialist's class abilities in exchange for a new ability unique to the variant specialist.
+spellcaster^UA^77^A generic class that has an array of magical effects at her beck and call.
+spellthief^CAd^13^Spellthieves use skill and arcane magic to drain the abilities of their opponents and turn their foes' own powers against them.
+spirit shaman^CD^14^By bargaining with living spirits, the spirit shaman gains power over the natural world and mighty divine magic.
+swashbuckler^CW^11^The swashbuckler embodies the concepts of daring and panache.
+thug^UA^51^A variant fighter who is a street fighter and a survivor who learns to mix brute force with a bit of craftiness.
+totem barbarian^UA^48^A variant barbarian who dedicates himself to a totem creature.
+urban adept^Sh^167^A variant adept for Sharn.
+urban ranger^UA^55^A variant ranger who stalks the treacherous streets of the city.
+warlock^CAr^5^A supernatural character whose sinister powers are inborn abilities, not spells.
+warmage^CAr^10^A militant spellcaster whose training focuses on battlefield magic.
+warmage^MH^14^Warmages access their magic peculiarly, at least compared to the way wizards, sorcerers, and cleric do.
+warrior^DCS^53^This NPC class contains people such as soldiers, guards, and militia.
+warrior^DMG^109^This NPC class contains combatants such as soldiers, guards, and militia.
+warrior^UA^78^A generic class that is a basic combatant.
+wilder^XPH^29^A passionate, reckless talent who wields uncontrolled psionic power.
+wilderness rogue^UA^56^A variant rogue who prefers to put her skills to use in the great outdoors.
+wizard^PH*^55^A potent spellcaster schooled in the arcane arts.
+wu jen^OA^30^Wu jen are spellcasters with mysterious powers.
+wu jen^CAr^14^A mysterious wizard of the eastern world, whose arcane lore revolves around mastery of the elements.
+archivist^HH^82^Archivists seek out esoteric sources of divine lore, wherever those sources might be, securing those secrets for themselves and their fellow scholars.
+dread necromancer^HH^84^A practitioner of vile and forbidden arts, the dread necromancer roots about in graveyards, searching out moldering components for her obscene spells.
+psionic artificer^MoE^42^Psionic artificers are similar to artificers, but they craft psionic items instead of magic items.
+incarnate^MoI^20^Incarnum is a tool you can use to manipulate the physical manifestations of moral and ethical forces and wield them in righteous pursuit of an ideal.
+soulborn^MoI^25^As a soulborn, you use incarnum to enhance your natural combat ability.
+totemist^MoI^29^You channel the soul energy of magical beasts to make your soulmelds and claim them as your totems to acquire a share in their power.
+binder^TM^9^By drawing their seals and speaking words of power, the binder summons strange entities, bargains with them, and binds them to his service.
+shadowcaster^TM^111^The shadowcaster understands the true, primal power of darkness, attunes herself to the Plane of Shadow, and learns great shadow mysteries the equal of any mundane spell.
+truenamer^TM^198^If you want to understand the secret language of the universe, the truenamer class is for you.
+ardent^CP^5^An ardent's pursuit of various cosmic philosophies gives her access to psionic power in a unique way: through psionic mantles.
+divine mind^CP^9^A divine mind is a psionic character who channels the power of the divine through pisonic talent instead of faith.
+lurk^CP^13^A lurk is a psionic character who has honed her mental talents to a deadly focus.
+duergar racial class^CP^144^The duergar, or gray dwarves, lead lives of neverending toil in great underground foundry-cities.
+githyanki racial class^CP^146^Githyanki are an ancient race of martial humanoids residing on the Astral Plane.
+githzerai racial class^CP^147^The githzerai are attuned to the mysteries of the inner self and are considered a race of ascetics who harness the power of the mind and the spirit.
+half-giant racial class^CP^148^Human-giant hybrids, half-giants were bred by cruel sorcerer-kings who used them as warriors and laborers in a dry land.
+thri-kreen racial class^CP^149^Fierce hunters and faultless trackers, the thri-kreen are a race of insectfolk sometimes known as mantis warriors.
+erudite (variant psion)^CP^153^As an alternative to the standard psion class, the erudite is a psionic character who follows a scholarly and self-reflective road to power, instead of a merely self-conscious path like the psion follows.
+beguiler^PH2^6^If you delight in manipulating others, either to their disadvantage or for their own good, then the beguiler is the class for you.
+dragon shaman^PH2^11^If you gaze at dragons with awe and aspire to share their power and majesty, then the dragon shaman is the class for you.
+duskblade^PH2^19^If you find you can't choose between being an arcane spellcaster who zaps your enemies with powerful spells and a nimble, powerful front-line melee character who lays them low with a sword, the duskblade is the perfect class for you.
+knight^PH2^24^The knight class is a great choice if you want to play a tough, durable melee combatant whose strong personality allows you to manipulate your foes.
+crusader^ToB^8^Devoted knight, divine agent, instrument of vengeance, peerless fighting machine -- the crusader is a warrior dedicated to good, evil, law, chaos, or some other cause.
+swordsage^ToB^15^A master of martial maneuvers, the sword sage is a physical adept -- a blade wizard whose knowledge of the Sublime Way lets him unlock potent abilities, many of which are overtly supernatural or magical in nature.
+warblade^ToB^20^The warblade was born for conflict. Swift, strong, enduring, and utterly confident in his martial skills, he seeks to test himself against worthy foes.
+dragonfire adept^DM^24^Whether they are bold champions defending the weak and downtrodden, or merciless raiders seeking might and riches, dragonfire adepts are imposing figures who command the magic of dragonkind.
+abolisher {Prestige Class}^LoM^182^The abolisher is a crusader against that which taints, usurps, and replaces the ordered nature of things with alien desires and monstrous needs.
+acolyte of the skin {Prestige Class}^CAr^19^Acolytes of the skin seek to gain power by replacing their skin with that of a demon's.
+acolyte of the skin {Prestige Class}^TB^43^Acolytes of the skin seek to gain power by replacing their skin with that of a demon's.
+agent retriever {Prestige Class}^EL^24^Finding items, especially long-lost ones, is an agent retriever's specialty.
+Aglarondan griffonrider {Prestige Class}^Una^18^Soaring above the Yuirwood and the coasts of Aglarond, the famed Aglarondan griffonriders are an elite force of aerial knights who serve the Simbul and defend their homeland against attack.
+Akodo champion {Prestige Class}^OA^220^Akodo champions are the leaders of the mighty army of the Lion clan.
+alienist {Prestige Class}^CAr^21^Alienists deal with powers and entities from terrifyingly remote reaches of space and time.
+alienist {Prestige Class}^TB^45^Alienists deal with powers and entities from terrifyingly remote reaches of space and time.
+ancient master {Prestige Class}^SK^159^Those yuan-ti who grow mightier of mind and gain additional psionic powers are called ancient masters.
+animal lord {Prestige Class}^CAd^22^Each animal lord forms a bond with one group of animals.
+animal lord {Prestige Class}^MW^43^Each animal lord forms a bond with one group of animals.
+anointed knight {Prestige Class}^BE^49^The anointed knight is a holy soldier who has taken great pains to learn the intricacies of alchemy in order to become a more capable combatant.
+apostle of peace {Prestige Class}^BE^51^The apostle of peace is an advocate for nonviolent resolution of conflict.
+arachne {Prestige Class}^FP^182^Arachnes are priestesses of Lolth who have risen to the pinnacle of drow society, worshiping Lolth only for the power she grants.
+Arboreal Guardian {Prestige Class}^Gh^19^Within the Spirit Wood are the Arboreal Guardians, men and women dedicated to protecting and ministering the living repositories of elf and half-elf spirits.
+arcachnomancer {Prestige Class}^Und^28^Many creatures of the Underdark are drawn to the power of the spider and that of the master of spiders -- the arachnomancer.
+arcane archer {Prestige Class}^DMG^176^The arcane archer is a warrior skilled in using magic to supplement her combat prowess.
+arcane devotee {Prestige Class}^FRCS^40^Arcane devotees complement the divine magic of a church's clerical leaders and are among the most important and respected members of a deity's following.
+arcane devotee {Prestige Class}^PG^48^Arcane devotees complement the divine magic of a church's clerical leaders and are among the most important and respected members of a deity's following.
+arcane hierophant  {Prestige Class}^RW^108^Arcane hierophants wield a blending of arcane magic and divine magic with a heavy emphasis on nature and the elements.
+arcane trickster {Prestige Class}^DMG^177^Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief.
+arcane trickster {Prestige Class}^TB^47^Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief.
+archmage {Prestige Class}^DMG^178^The most advanced practitioners of arcane magic are frequently archmages.
+archmage {Prestige Class}^FRCS^41^The archmage gains strange powers and the ability to alter spells in remarkable ways, but must sacrifice some of her spell capability to master these arcane secrets.
+ardent dilettante  {Prestige Class}^PlH^55^A diversity of interests and a moderate level of ability in one skill can lead one to become an ardent dilettante.
+argent savant {Prestige Class}^CAr^24^The argent savant regards spells that evoke or apply magical force as the noblest and most fascinating spells at her disposal.
+ashworm dragoon  {Prestige Class}^Sa^66^Ashworm dragoons have formed a bond with a single ashworm that is so strong that it is almost an extension of their wills.
+assassin {Prestige Class}^DMG^180^The assassin is the master of dealing quick, lethal blows.
+astral dancer {Prestige Class}^PlH^63^A few skilled combatants learn to take advantage of conditions on the Astral Plane.
+atavist  {Prestige Class}^RE^133^The discipline of an atavist strengthens his bond to the ancestral spirit and to all other kalashtar that have embraced their unique heritage.
+auspician {Prestige Class}^FP^184^Auspicians, who manipulate luck as if it were the strings of a worn mandolin, give credence to their claims.
+bane of infidels {Prestige Class}^MW^46^The bane of infidels is the leader of a xenophobic tribe.
+battle maiden {Prestige Class}^OA^34^Battle maidens are the stuff of wonder and legend, an order of mounted female samurai whose swift, fearless attacks are renowned throughout the world.
+battle scion {Prestige Class}^UA^164^This prestige class is for the wielders of legendary weapons made for the hands of fighters, barbarians, rangers, monks, and the occasional paladin.
+battlerager  {Prestige Class}^Rac^178^Dwarven battleragers, or kuldjargh ('axe idiots'), are legendary berserker warriors who can enter a battle frenzy through ritualist singing.
+battlesmith  {Prestige Class}^RS^97^A battlesmith is a skilled dwarf armorer and weaponsmith who uses her experience in battle, as well as her masterful weaponsmithing and armorsmithing abilities, to create deadly items for her kinsmen to wield in defense of their homes.
+Bayushi deceiver {Prestige Class}^OA^225^The Bayushi are charged with the dirtiest work in the empire.
+bear warrior {Prestige Class}^CW^16^Bear warriors, through a special relationship with bear spirits, literally adopt a bear's strength in the rage of battle, actually transforming into bears while they fight.
+bear warrior {Prestige Class}^OA^36^Bear warriors, through a special relationship with bear spirits, literally adopt a bear's strength in the rage of battle, actually transforming into bears while they fight.
+beastmaster {Prestige Class}^CAd^26^A beastmaster feels more at home among the animals of nature than fellow sentient beings.
+beholder mage {Prestige Class}^LoM^42^Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race.
+beholder mage  {Prestige Class}^Mon^21^Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race.
+beloved of Valarian {Prestige Class}^BE^53^The beloved of Valarian are women who have foresworn the love of mortals to dedicate themselves entirely to the unicorn deity Valarian.
+berserk {Prestige Class}^DD^201^Berserks are warriors who dress themselves in bearskins, taking advantage of the fear most people have for wild animals and inviting the wild rage of the animal into the warrior's body.
+Black Blood cultist {Prestige Class}^CR^44^Black Blood cultists are savage fighters whose natural attacks become more fearsome as they increase in level.
+black blood hunter {Prestige Class}^PG^177^Malar grants exceptional power to those who supplement their bestial level of evil with truly vile acts.
+black flame zealot {Prestige Class}^CD^21^Trained in unholy rites, the black flame zealots use stealth, divine magic, and the zeal of fanaticism to destroy those who have given offense to their god.
+Black Flame zealot {Prestige Class}^Una^21^Trained in the rites of Kossuth's temple, the Black Flame zealots use stealth, divine magic, and the zeal of fanaticism to destroy those who have given offense to the Lord of Flames.
+blackguard {Prestige Class}^DMG^181^The blackguard is the quintessential black knight.
+blade bravo {Prestige Class}^RS^99^Blade bravos are gnomes who learn the ways of the rapier.
+blade dancer {Prestige Class}^OA^37^To blade dancers, the sword is more than a weapon -- it is an ally, a friend, a spirit companion.
+bladesinger {Prestige Class}^CW^17^Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole.
+bladesinger {Prestige Class}^Rac^179^Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole.
+bladesinger {Prestige Class}^TB^49^Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole.
+blighter {Prestige Class}^CD^23^Blighters bring desolation wherever they tread.
+blighter {Prestige Class}^MW^48^Blighters bring desolation wherever they tread.
+blood magus {Prestige Class}^CAr^26^Blood magi are deceased spellcasters who gain an understanding of blood's importance when returned to life.
+blood magus {Prestige Class}^TB^50^Blood magi are deceased spellcasters who gain an understanding of blood's importance when returned to life.
+bloodhound {Prestige Class}^CAd^28^A bloodhound tracks down wrongdoers and brings them to whatever justice awaits them.
+bloodhound {Prestige Class}^MW^49^A bloodhound tracks down wrongdoers and brings them to whatever justice awaits them.
+bloodscaled fury {Prestige Class}^Dr^86^A bloodscaled fury is a dragon whose rage surpasses that of a human barbarian as the barbarian's rage surpasses a child's tantrum.
+bonded summoner  {Prestige Class}^MH^16^He who learns to leash the furies of the Elemental Planes is known as a bonded summoner.
+bone collector {Prestige Class}^Gh^21^A bone collector is a person who draws personal power from the destruction of undead.
+breachgnome {Prestige Class}^Rac^181^A breachgnome is a mighty gnome who is skilled in fighting in cramped conditions.
+cabinet trickster {Prestige Class}^RE^139^Cabinet tricksters are the changeling agents of the Cabinet of Faces.
+cancer mage  {Prestige Class}^BV^52^The cancer mage makes quick, poisonous attacks and then retreats.
+candle caster {Prestige Class}^TB^52^Also called 'spell chandlers,' these specialists fill their time fashioning candles, both for esthetics and for power.
+Cannith wand adept  {Prestige Class}^Sh^162^The Cannith wand adept is an artificer or other spellcaster who specializes in mastering wands.
+cavalier {Prestige Class}^CW^19^Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor.
+cavalier  {Prestige Class}^SF^12^Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor.
+cavelord {Prestige Class}^Und^30^A passion for the narrow, dim ways of the world burns in the breast of the cavelord.
+celebrant of Sharess {Prestige Class}^PG^178^Celebrants of Sharess are seducers and warriors, hedonists and pious champions of good.
+celestial mystic {Prestige Class}^BE^55^Celestial mystics seek to attain ultimate unity with the perfect good.
+cerebremancer  {Prestige Class}^XPH^141^Cerebremancers access both the arcane mysteries of spellcasting and the psionic powers of the mind.
+chameleon  {Prestige Class}^RD^111^Chameleons are dilettantes in every class and masters of none.
+champion of Corellon Larethian {Prestige Class}^RW^113^The champion of Corellon Larethian is a noble elf fighter, an elf knight or lord who can stand up to any orc or human warrior.
+champion of Gwynharwyf {Prestige Class}^BE^56^The champion of Gwynharwyf is a mortal barbarian who strives to emulate her sublime balance of fury and reserve while retaining a focus on good.
+chaotician {Prestige Class}^PlH^61^Chaoticians seek to enjoy the beauty of the unpredictable, and by seeking to emulate the philosophy of chaos in their actions, they create a fabulous journey through life in which nothing is a bore.
+church inquisitor {Prestige Class}^CD^26^The church inquisitor uncovers taint within the church and cuts it away.
+church inquisitor {Prestige Class}^DF^51^The church inquisitor uncovers taint within the church and cuts it away.
+cipher adept {Prestige Class}^PlH^58^Seamless integration brings the cipher adept bliss.
+Citadel elite {Prestige Class}^Sh^163^The elite agent of the Citadel is the best of the best, saved for the most dangerous, most important assignments or granted latitude to serve the King and Crown as he sees fit.
+cloud anchorite  {Prestige Class}^Fr^52^The cloud anchorite seeks a way to achieve immortality while maintaining life and awareness.
+cognition thief {Prestige Class}^PG^174^A cognition thief's subtle ability to worm her way into a target's very consciousness makes her the ultimate secret agent.
+coiled cabalist {Prestige Class}^SK^161^Standing apart from the priests of Sseth but careful never to draw their collective ire by openly opposing them, the members of the Coiled Cabal pursue the arcane arts largely in secrecy.
+combat medic {Prestige Class}^HB^99^The combat medic keeps her allies alive and tends to the fallen on the front lines of battle.
+consecrated harrier {Prestige Class}^CD^28^The consecrated harrier acts as a bounty hunter for her religion or organization.
+consecrated harrier {Prestige Class}^DF^52^The consecrated harrier acts as a bounty hunter for her religion or organization.
+contemplative {Prestige Class}^CD^30^Contemplatives devote their lives to cultivating a greater closeness with their deities.
+contemplative {Prestige Class}^DF^54^Contemplatives devote their lives to cultivating a greater closeness with their deities.
+cosmic descryer {Prestige Class}^EL^26^The cosmic descryer is interested in the infinite variety of the planes and fascinated by the different layers of the multiverse.
+cragtop archer {Prestige Class}^RS^101^Cragtop archers train their eyes and minds to find target at great distances, and to quickly compensate for wind, movement, and other factors that affect shots of such difficulty.
+Crinti shadow marauder  {Prestige Class}^ShS^23^Crinti shadow marauders combine the physical prowess of master rider with the stealth of the most cunning shadowdancers.
+cryokineticist {Prestige Class}^Fr^54^The cryokineticist is the master of cold psionic energy.
+cultist of the Shattered Peak  {Prestige Class}^LE^10^Cultists of the Shattered Peak possess skill at arms, stealth, and a smattering of ancient lore.
+daggerspell mage {Prestige Class}^CAd^31^Daggerspell mages work to perfect a unique fighting and spellcasting (arcane) style that relies on wielding a pair of daggers at all times.
+daggerspell shaper {Prestige Class}^CAd^36^Daggerspell shapers work to perfect a unique fighting and spellcasting (druid) style that relies on wielding a pair of daggers at all times.
+Daidoji bodyguard {Prestige Class}^OA^215^The Daidoji concentrate on defensive maneuvers and a style of fighting that induces their opponents to defeat themselves.
+dark hunter {Prestige Class}^CW^20^Dark hunters specialize in hunting down and eliminating creatures in the dark, twisting caves of the Underdark.
+Darkmask  {Prestige Class}^LD^33^Darkmasks strike a balance between their faith and their skills at stealth.
+darkrunner {Prestige Class}^LoM^186^Darkrunners devote their lives to traveling the haunted underground depths.
+darkwood stalker {Prestige Class}^CW^23^Some elves train as elite hunters of orcs; these hunters are called darkwood stalkers.
+dawncaller {Prestige Class}^RS^103^Dawncallers are goliath bards responsible for guarding their tribe throughout the night.
+death's chosen ^LM^41^If chosen by his would-be undead master, a death's chosen serves as the master's living minion.
+Deathwarden chanter {Prestige Class}^Gh^23^The Deathwarden chanters are the most prestigious, respected, and mysterious members of the dwarven Deathwarden clan.
+deep diviner {Prestige Class}^Und^32^Deep diviners are intimates of the earth and all that it hides.
+deepwarden {Prestige Class}^RS^105^Deepwardens are dwarves who serve as a living early warning system against threats from both the environment and other creatures.
+deepwood sniper {Prestige Class}^MW^52^A deepwood sniper is patient, careful, quiet , and deadly accurate.
+defender of Sealtiel {Prestige Class}^BE^58^Defenders of Sealtiel are sworn to uphold the ideals of Sealtiel, which includes fighting off forces of evil when they assault good.
+defiant {Prestige Class}^PlH^44^Defiants take the teaching of the Athar to heart in a way that grants them tremendous powers against those who claim to wield divine might.
+demonologist {Prestige Class}^BV^54^A demonologist is a mortal who has devoted his life to the study of demons.
+dervish {Prestige Class}^CW^25^The dervish epitomizes speeds, quickness, and abandon.
+devoted defender {Prestige Class}^SF^13^The devoted defender is a professional guardian.
+diabolist {Prestige Class}^BV^56^A diabolist does not serve devils -- she wants to be one.
+dirgesinger {Prestige Class}^LM^43^Dirgesingers voice melodies not of celebration and joy, but of sorrow and grief.
+disciple of Ashardalon {Prestige Class}^Dr^87^Disciples of Ashardalon bind fiendish spirits to their own hearts, eventually taking on the characteristics of demonic spawn themselves.
+disciple of Asmodeus {Prestige Class}^BV^57^A disciple of Asmodeus uses his power and influence to learn secrets, which in turn gains him more power.
+disciple of Baalzebul {Prestige Class}^BV^58^A disciple of Baalzebul uses deceit and trickery to get what she wants.
+disciple of Dispater {Prestige Class}^BV^60^A disciple of Dispater is a warlike general of evil.
+disciple of Mammon {Prestige Class}^BV^60^A disciple of Mammon takes what she wants any way she can.
+disciple of Mephistopheles {Prestige Class}^BV^62^A disciple of Mephistopheles wields hellfire as his weapon.
+disciple of Thrym {Prestige Class}^Fr^56^Aside from predictions of Ragnarok, disciples of Thrym spend a large portion of their time undermining those who serve Thor and Loki, the deities who conspired against Thrym.
+dispassionate watcher of Chronepsis {Prestige Class}^Dr^89^Taking the role of observers rather than active participants, dispassionate watchers of Chronepsis remain aloof from the events of the world.
+divine agent  {Prestige Class}^MP^24^The divine agent is a specially selected agent of her deity, and she acts in the service of that power or deity.
+divine champion {Prestige Class}^FRCS^42^Divine champions are mighty warriors who dedicate themselves to their deity's cause, defending holy ground, destroying enemies of the church, and slaying mythical beasts and clerics of opposing faiths.
+divine champion {Prestige Class}^PG^49^Divine champions are mighty warriors who dedicate themselves to their deity's cause, defending holy ground, destroying enemies of the church, and slaying mythical beasts and clerics of opposing faiths.
+divine crusader {Prestige Class}^CD^33^The divine crusader embodies devotion and dedication to a chosen deity.
+divine disciple {Prestige Class}^FRCS^43^Divine disciples interpret the divine will, act as teachers and guides to other members of the clergy, and arm lay followers of their deity with the power of their patron.
+divine disciple {Prestige Class}^PG^51^Divine disciples interpret the divine will, act as teachers and guides to other members of the clergy, and arm lay followers of their deity with the power of their patron.
+divine emissary {Prestige Class}^EL^27^Deities have need of powerful servants, many of whom are epic clerics, paladins, and other characters.
+divine oracle {Prestige Class}^CD^34^Some mortals hear the words of deities; these can be divine oracles.
+divine oracle {Prestige Class}^DF^56^Some mortals hear the words of deities; these can be divine oracles.
+divine prankster {Prestige Class}^RS^107^These gnomes embrace Garl's methods of teaching through harmless object lessons and dedicate their lives to acting as his agents in the world.
+divine seeker {Prestige Class}^FRCS^44^The divine seeker infiltrates dangerous places to rescue prisoners, reclaim stolen relics, or eliminate enemy leaders.
+divine seeker {Prestige Class}^PG^52^The divine seeker infiltrates dangerous places to rescue prisoners, reclaim stolen relics, or eliminate enemy leaders.
+doomdreamer  {Prestige Class}^RT^162^Doomdreamers are the elite among the ranks of the cult of Tharizdun.
+doomguide {Prestige Class}^FP^186^Doomguides belong to an elite order of spellcasting warriors in service to the Judge of the Damned.
+doomlord {Prestige Class}^PlH^47^The doomlord's life holds the greatest appeal for fighters and barbarians who enjoy smashing and destroying.
+dracolyte {Prestige Class}^Dr^122^The dracolyte takes up worship of the draconic gods.
+dragon ascendant {Prestige Class}^Dr^90^Dragon ascendants seek to transcend the limitations of material existence so as to become nothing less than deities.
+dragon disciple {Prestige Class}^DMG^183^Dragon disciples use their magic as a catalyst to ignite their dragon blood.
+dragon disciple {Prestige Class}^TB^55^Dragon disciples use their magic as a catalyst to ignite their dragon blood.
+dragon rider  {Prestige Class}^DCS^77^Dragon riders develop a strong bond with their mounts that allows the two to work together.
+dragon samurai {Prestige Class}^MH^18^Dragon samurai are dedicated warriors, members of a special, self-selected class who revered dragonkind and emulate dragons' ferocious martial abilities to the point of taking on some draconic traits.
+dragonkith {Prestige Class}^Dr^123^Dragonkith are creatures that serve and aid dragons.
+dragonmark heir  {Prestige Class}^ECS^73^Dragonmark heirs have the ability to improve the dragonmarks they have manifested, as well as to develop additional abilities related to their dragonmarks.
+dragonrider {Prestige Class}^Dr^124^Dragonriders soar through the clouds atop a draconic steed.
+dragonslayer {Prestige Class}^Dr^125^Dragonslayers combat dragons.
+dragonsong lyrist {Prestige Class}^Dr^127^The dragonsong lyrist taps into the power of dragonsong.
+dragonstalker {Prestige Class}^Dr^128^The dragonstalker uses stealth and guile to combat dragons.
+dread commando {Prestige Class}^HB^103^Dread commandos are the elite scouts and strike force of a well-trained mercenary band.
+dread pirate {Prestige Class}^CAd^39^A dread pirate has mastered every aspect of larceny on the high seas.
+dread pirate {Prestige Class}^SaS^5^A dread pirate has mastered every aspect of larceny on the high seas.
+dreadmaster {Prestige Class}^FP^188^Dreadmasters seek to rule absolutely, preferably through terror and domination.
+drow judicator {Prestige Class}^Und^33^A mortal imbued with fiendish cruelty, the drow judicator is a knight most foul.
+drunken master {Prestige Class}^CW^27^By weaving and staggering about as if inebriated, drunken boxers avoid many blows.
+drunken master {Prestige Class}^SF^14^By weaving and staggering about as if inebriated, drunken boxers avoid many blows.
+duelist {Prestige Class}^DMG^185^The duelist is a nimble, intelligent fighter trained in making precise attacks with light weapons.
+duelist {Prestige Class}^SF^17^The duelist is a nimble, intelligent fighter trained in making precise attacks with light weapons.
+dungeon delver {Prestige Class}^CAd^42^In many ways, the dungeon delver is the ultimate adventuring rogue.
+dungeon delver {Prestige Class}^SaS^7^In many ways, the dungeon delver is the ultimate adventuring rogue.
+durthan {Prestige Class}^Una^22^Durthans are an order of spellcasters who tap into the darker spirits of Rashemen.
+dwarven defender {Prestige Class}^DMG^186^The defender is a sponsored champion of a dwarven cause
+dweomerkeeper {Prestige Class}^FP^189^Dweomerkeepers are Mystra's shepherds, safeguarding the Weave against threats to its integrity.
+earth dreamer {Prestige Class}^RS^110^Earth dreamers move within the ancient dreams of the mountains, attuning themselves to their power and mastering strange abilities over the earth.
+effigy master {Prestige Class}^CAr^30^The effigy master is an expert in the imitation of true life.
+Eldeen ranger {Prestige Class}^ECS^74^An Eldeen ranger learns special techniques and abilities that help him to fulfill the goal of his sect.
+eldritch knight {Prestige Class}^DMG^187^Studying the martial and arcane arts to equal degree, the eldritch knight is a versatile combatant.
+elemental archon {Prestige Class}^FP^190^Elemental archons are servants of powerful, seemingly uncaring elemental forces who want to once and for all tip the balance in favor of their chosen element.
+elemental master {Prestige Class}^Dr^92^Elemental masters strive to attain the purity of perfect attunement with both the energy of their breath weapons and the elemental nature of their core.
+elemental savant {Prestige Class}^CAr^32^Elemental savants study the basic building blocks of existence -- air, earth, fire, and water -- learning to harness their powers.
+elemental savant {Prestige Class}^TB^57^Elemental savants study the basic building blocks of existence -- air, earth, fire, and water -- learning to harness their powers.
+elemental warrior {Prestige Class}^PlH^65^The elemental warrior sees that great strength comes from focusing on the most basic aspects of reality.
+elocater {Prestige Class}^XPH^142^Elocaters are renowned for their agile combat stratagems, using their knowledge of motion and space to set themselves up for quick attacks against slower opponents.
+elven high mage {Prestige Class}^Rac^182^Elven high mages are the masters of creating their own epic spells -- mythals that can grow to engulf entire cities.
+emancipated spawn  {Prestige Class}^SS^75^Those spawn of undead who find themselves free of their masters can begin to recall their former lives and a measure of redemption.
+emissary of Barachiel {Prestige Class}^BE^59^The emissaries of Barachiel are peacemakers, diplomats, and evangelists, as well as staunch opponents of evil and corruption.
+enlightened fist {Prestige Class}^CAr^34^Enlightened fists master the use of touch spells, creating new forms of combat with their fists.
+entropomancer {Prestige Class}^CD^36^Entropomancers gain attunement to the great nothingness they say lies at the center of the universe.
+ephemeral exemplar {Prestige Class}^LM^53^Ephemeral exemplars are paragons of incorporealness.
+epic arcane archer {Prestige Class}^EL^17^The epic arcane archer is a living extension of the bow, capable of achieving wonders of archery that cause lesser beings to gape in awe.
+epic assassin {Prestige Class}^EL^18^The epic assassin flits from shadow to shadow, lying in wait until his target is vulnerable, then striking like a cobra.
+epic blackguard {Prestige Class}^EL^19^The epic blackguard is a twisted reflection of the epic paladin, radiating evil power from every pore of his body.
+epic dwarven defender {Prestige Class}^EL^20^The epic dwarven defender becomes the very definition of immovable object.
+epic infiltrator {Prestige Class}^EL^28^The epic infiltrator is an agent of espionage, an undercover operative, and sometimes a saboteur.
+epic loremaster {Prestige Class}^EL^20^If the epic loremaster doesn't know something, it probably isn't worth knowing.
+epic psion {Prestige Class}^EL^22^The epic psion has evolved his inborn mental abilities, achieving mental mastery of lesser mentalities.
+epic psychic warrior {Prestige Class}^EL^23^The epic psychic warrior is a meld of mental and martial prowess.
+epic shadowdancer {Prestige Class}^EL^21^While the epic assassin udes the shadows, the epic shadowdancer becomes the shadows, indistinguishable from the darkness cloaking her.
+eunuch warlock {Prestige Class}^OA^38^Eunuch warlocks must be arcane spellcasters of significant ability, and they are often sorcerers rather than wu jen.
+evangelist {Prestige Class}^CD^39^Evangelists travel the world proclaiming their devotion to a particular deity, pantheon, or religious doctrine.
+Evereskan tomb guardian {Prestige Class}^PG^53^The Evereskan tomb guardians are on hand to ensure that the defenses of the tombs are very good indeed.
+exalted arcanist {Prestige Class}^BE^61^Exalted arcanists gain access to spells that channel celestial energy.
+exemplar {Prestige Class}^CAd^44^An exemplar focuses her energy on improving the skills she possesses until she can perform them with fluidity, grace, and art.
+exorcist of the Silver Flame {Prestige Class}^ECS^77^Exorcists of the Silver Flame lead the Church of the Silver Flame's efforts in combating extraplanar threats.
+exotic weapon master {Prestige Class}^CW^30^The only real requirement for exotic weapon master is commitment and perseverance.
+exotic weapon master {Prestige Class}^MW^53^The only real requirement for exotic weapon master is commitment and perseverance.
+extreme explorer {Prestige Class}^ECS^79^The extreme explorer is the iconic action hero of Eberron.
+eye of Gruumsh {Prestige Class}^CW^31^An orc or half-orc who heeds the call to serve Gruumsh in his image can become an eye of Gruumsh.
+eye of Gruumsh {Prestige Class}^MW^54^An orc or half-orc who heeds the call to serve Gruumsh in his image can become an eye of Gruumsh.
+eye of Horus-Re^PG^54^Eyes of Horus-Re are champions of good, sworn enemies of Set, and bane to undead.
+faith scion {Prestige Class}^UA^166^This prestige class is meant for characters who wield legendary weapons of divine power for claerics, druids, and paladins.
+fang of Lolth {Prestige Class}^SaS^8^Fangs of Lolth undergo a transformation that both provides them power and changes them in ways they may not necessarily want.
+Fang of Sseth {Prestige Class}^SK^162^The Fangs of Sseth constitute the strike force of the Vipers -- the stealthy killers who leave no trace.
+fatemaker {Prestige Class}^PlH^50^'There are two paths to take; one is easy, and that is its only reward.'
+fatespinner {Prestige Class}^CAr^37^A fatespinner has pulled back the curtain of chance, circumstance, and chaos to glimpse a deeper truth: probability.
+fatespinner {Prestige Class}^TB^58^A fatespinner has pulled back the curtain of chance, circumstance, and chaos to glimpse a deeper truth: probability.
+fiend of blasphemy  {Prestige Class}^FF^200^The fiend of blasphemy is a master of the infernal art of perverting the desire to worship and turning it toward the corrupt veneration of fiendish masters.
+fiend of corruption {Prestige Class}^FF^202^Fiends of corruption are preoccupied with corrupting mortals to ensure that their souls end up on the Lower Planes after death.
+fiend of possession {Prestige Class}^FF^204^A fiend of possession is an invasive presence that taints the very soul, corrupting from within.
+Fist of Hextor {Prestige Class}^SF^18^Fists of Hextor are templars sworn to the service of their unforgiving master.
+fist of Raziel {Prestige Class}^BE^62^The fists of Raziel represent a knightly order dedicated to the celestial patron of holy warfare against evil.
+Fist of Zuoken {Prestige Class}^XPH^144^The Fists of Zuoken ore members of an order of martial artists devoted to mastering their own physical and mental development while protecting psions and other psionic creatures.
+fleshwarper {Prestige Class}^LoM^189^The fleshwarper finds no greater canvas than flesh itself.
+Fochlucan lyrist {Prestige Class}^CAd^47^The Fochlucan lyrist is a legendary figure who serves as the herald and teacher to great kings, the champion of the common folk, and the keeper of lore long forgotten elsewhere.
+foe hunter {Prestige Class}^MW^56^The foe hunter has but one purpose in life: to kill creatures of the type she hates.
+forest master {Prestige Class}^FP^193^Guardians of the pristine wilderness and defenders of the ancient trees, forest masters are the living embodiments of sentient nature.
+forsaker {Prestige Class}^MW^57^The forsaker rebels against the magic of the fantastic world around him.
+frenzied berserker {Prestige Class}^CW^34^The frenzied berserker is constantly seeking out more conflict to feed her craving for battle.
+frenzied berserker {Prestige Class}^MW^59^The frenzied berserker is constantly seeking out more conflict to feed her craving for battle.
+frost mage {Prestige Class}^Fr^58^Frost mages usually hail from lands of cold, snow, and ice: tundra, glaciers even outer planes perpetually shrouded in winter.
+frostrager {Prestige Class}^Fr^60^The frostragers are powerful and dangerous warriors believed by some to be gifted from (and others cursed by) the frost giant deity Thrym with an unstable but powerful supernatural battle rage.
+gatecrasher {Prestige Class}^MP^26^Gatecrashers see themselves as cosmic free agents, independent forces who can influence the natives of the planes and even the dynamic forces of magic itself.
+geomancer {Prestige Class}^CD^41^To the geomancer, all magic is the same.
+geomancer {Prestige Class}^MW^60^To the geomancer, all magic is the same.
+geometer {Prestige Class}^CAr^39^The geometer is the master of written magic and spells inscribed within a perfectly rendered diagram.
+ghost slayer {Prestige Class}^Gh^26^The ghost slayer studies ghost so that they can be dispatched easily and no longer bother the living with their presence.
+ghost-faced killer^CAd^51^Ghost-faced killers act as assassins and spies for hire, a mercenary clan that hides behind a guise of open and honorable conduct.
+ghostwalker {Prestige Class}^SF^20^Ghostwalkers have abilities that point to some underlying, mysterious mysticism.
+giant-killer^SM^109^Giant-killers are great heroes so long as they are killing giants.
+gladiator {Prestige Class}^SF^21^Rich or poor, all gladiators face death whenever they step into the arena.
+glorious servitor {Prestige Class}^LE^13^Glorious servitors are exceptionally loyal and devout servants of the Mulhorandi gods.
+gnome artificer  {Prestige Class}^Mag^23^Gnome artificers dabble in technology to create fantastic devices, delving into shadow magic when their mundane equipment is insufficient for the task.
+gnome giant-slayer^CW^36^The gnome giant-slayer relies on a combination of agility, combat prowess, and pure craftiness to deal with foes.
+goldeye {Prestige Class}^FP^194^Goldeyes are agents and promulgators of commercial intercourse, seeking to increase the wealth of their communities and realms by promoting the exchange of coins in trade.
+goliath liberator {Prestige Class}^RS^112^Goliath liberators are experts at infiltrating giant dwellings, freeing the captives within, then exacting revenge on the giants while the freed goliaths escape.
+Gray Hand enforcer {Prestige Class}^CSW^77^Gray Hand enforcers are highly trained members of the Gray Hands, Waterdeep's elite, high-powered fighting force.
+Great Rift deep defender {Prestige Class}^ShS^24^The Great Rift deep defender has a keen understanding of the importance of making a stand.
+Great Rift skyguard {Prestige Class}^Rac^183^The hippogriff-mounted skyguards of the Great Rift patrol the skies, ever watchful for the enemies of the gold dwarves.
+Great Sea corsair {Prestige Class}^ShS^26^Adapt the dread pirate prestige class from Song and Silenceto create the Great Sea corsair prestige class.
+Green Star adept {Prestige Class}^CAr^41^A Green Star adept is the master of the strange and powerful magic derived from Alhazarde's glittering green starmetal.
+guardian paramount {Prestige Class}^EL^30^The guardian paramount is an extraordinary bodyguard, a protector of others who is skilled in preventing harm to his charge.
+guild thief {Prestige Class}^FRCS^45^Guild thieves are thieves who operate in urban areas as part of an organized thieves' guild.
+guild wizard of Waterdeep {Prestige Class}^Mag^26^The wizards of the order study and exchange information, create magic items to help support the guild's financial independence, and offer their services to others in the city as watch-wizards or fire guards.
+halfling outrider {Prestige Class}^CW^38^Halfling outriders are elite champions whose task is to warn their fellows of, and protect them from, danger.
+halfling outrider {Prestige Class}^SF^22^The halfling outrider is naturally skilled in the arts of riding and scouting.
+Halruaan elder {Prestige Class}^ShS^27^Halruaan elders are the epitomy of magic cast with panache, and their dazzling and unique displays of arcane force make them the most respected practitioners in the land.
+Halruaan magehound {Prestige Class}^ShS^29^Magehounds are Halruaa's inquisitors.
+hammer of Moradin {Prestige Class}^PG^56^An elite order of warrior-priests stands ready to defend the dwarven people against the onslaught of fell giants, dark elves, and goblinoids.
+hand of the Adama {Prestige Class}^ShS^31^The hand of the Adama is a benign leader, judge and jury, and protector of the common folk all rolled into one.
+Harper agent {Prestige Class}^PG^58^Harper agents are the 'field agents' of the Harper organization, acting directly to gather intelligence and eliminate threats to the greater good.
+Harper mage {Prestige Class}^Mag^28^The Harper mage has two principal responsibilities: They aid the Harpers with spells and arcane knowledge, and they study, record, and pass on ancient lore.
+Harper paragon {Prestige Class}^PG^181^A Harper paragon actively promotes the welfare of other creatures while preventing evil forces from preying on innocents.
+Harper priest {Prestige Class}^Mag^29^Some Harpers choose to pursue a closer relationship to the deities who inspired the creation of the Harpers.
+harper scout {Prestige Class}^FRCS^46^Harper scouts are members of the Harpers, a secret society dedicated to holding back evil, preserving knowledge, and maintaining the balance between civilization and the wild.
+hathran {Prestige Class}^FRCS^47^Hathrans comprise an elite sisterhood of spellcasters who lead Rashemen.
+hathran {Prestige Class}^PG^59^Hathrans comprise an elite sisterhood of spellcasters who lead Rashemen.
+havoc mage {Prestige Class}^MH^20^The havoc mage shares as much in common with a fighter as with a wizard.
+heartwarder {Prestige Class}^FP^196^Heartwarders are aesthetes and hedonists who actively seek out pleasure and beauty in all things and who nurture the creation of beautiful objects.
+heir of Siberys {Prestige Class}^ECS^80^The magic of a Siberys mark is undeniably powerful, and an heir of Siberys manifests one.
+henshin mystic {Prestige Class}^OA^39^Henshin mystics are members of a monastic order that teaches what they consider a great mystery of the universe: that humanity is capable of a transformation (henshin) into divinity.
+hexer {Prestige Class}^MW^63^The hexer uses the power of his gaze.
+Hida defender {Prestige Class}^OA^212^Hida defenders train in great armor, a unique characteristic that fits in well with the Crab philosophy of strength and endurance.
+hidecarved dragon {Prestige Class}^Dr^94^Hidecarved dragons are members of an enigmatic order of dragons and half-dragons.
+hierophant {Prestige Class}^DMG^188^A divine spellcaster who rises high in the service of his deity gains access to spells and abilities of which lesser faithful can only dream.
+hierophant {Prestige Class}^FRCS^48^A divine spellcaster who rises high in the service of his deity gains access to spells and abilities of which lesser faithful can only dream.
+high proselytizer {Prestige Class}^EL^31^The high proselytizer is the holy inspiration that begins religious movements.
+highland stalker {Prestige Class}^CAd^54^Highland stalkers are consummate trackers with an instinctive knowledge of their mountainous territories.
+hin fist {Prestige Class}^ShS^32^Adapt the sacred fist prestige class from Complete Divineto create a hin fist.
+Hoardstealer {Prestige Class}^Dr^130^The hoardstealer specializes in relieving wealthy individuals from large amounts of said wealth.
+holy liberator {Prestige Class}^CD^45^The holy liberator is a holy warrior, a distant cousin of the paladin.
+holy liberator {Prestige Class}^DF^57^The holy liberator is a holy warrior, a distant cousin of the paladin.
+hordebreaker {Prestige Class}^SM^110^The hordebreaker is a person who makes destroying the horde threat the perfect engine of orc destruction.
+horizon walker {Prestige Class}^DMG^189^The horizon walker is an unceasing traveler to the universe's most dangerous places.
+horned harbinger {Prestige Class}^FP^197^The horned harbingers are agents of the fallen Lord of Bones.
+hospitaler {Prestige Class}^CD^48^Hospitalers are a fighting force of necessity, sworn to poverty, obedience, and the defense of those in their care.
+hospitaler {Prestige Class}^DF^60^Hospitalers are a fighting force of necessity, sworn to poverty, obedience, and the defense of those in their care.
+hulking hurler {Prestige Class}^CW^40^Hulking hurlers belong to those races of generously proportioned creatures who enjoy nothing more than wrenching boulders, trees, and even buildings free of their earthly bonds and throwing them at their foes.
+hunter of the dead {Prestige Class}^CW^42^The hunter of the dead spends each restless night tracking undead to their lairs and cleansing the land of their foul presence.
+hunter of the dead {Prestige Class}^DF^62^The hunter of the dead spends each restless night tracking undead to their lairs and cleansing the land of their foul presence.
+iaijutsu master {Prestige Class}^OA^41^Iaijutsu masters harness their ki energy to strike with blinding speed and devastating power.
+iInitiate of the draconic mysteries {Prestige Class}^Dr^131^Some become students of draconic knowledge that leads to greater power.
+illithid body tamer {Prestige Class}^Und^35^Illithids who embrace the Tamer Creed believe that military might is the most important factor in their race's future mastery of the multiverse.
+illithid savant {Prestige Class}^SS^77^The illithid savant is an academic who deals in applied science, acquiring new knowledge from the brains he consumes.
+illithid slayer {Prestige Class}^XPH^146^Illithid slayers have dedicated their lives to the eradication of the mind flayer 'infection.'
+Imaskari vengeance taker {Prestige Class}^Und^37^A secret society dedicated to righting wrongs, the Imaskari vengeance takers are trained by hidden masters in the rites and rituals of revenge.
+incantatrix {Prestige Class}^Mag^31^The incantatrixes are the practitioners of metamagic in Faerun, studying spells that affect other spells and having a fondness for magic that thwarts extraplanar beings.
+incantatrix {Prestige Class}^PG^61^The incantatrixes are the definitive practitioners of metamagic in Faerun, devoting themselves to the study of spells and techniques that affect other spells.
+initiate of Pistis Sophia {Prestige Class}^BE^64^The path of these initiates requires great sacrifices (in the form of at least three sacred vows), but brings great rewards of spiritual power.
+Initiate of the Sevenfold Veil {Prestige Class}^CAr^44^A master of defensive magic, the Initiate of the Sevenfold Veil approaches the prismatic barrier by mastering one by one its constituent veils or layers.
+inquisitor {Prestige Class}^DCS^80^By definition, an inquisitor is one who inquires, someone who hunts for people, information, or answers.
+inquisitor of the Drowning Goddess {Prestige Class}^Und^39^Some kuo-toa monks go on to become inquisitors of the Drowning Goddess, who are tasked with protecting the community from inside threats.
+invisible blade {Prestige Class}^CW^44^Invisible blades are deadly fighters who prefer to use daggers and related weapons in combat.
+iron mind {Prestige Class}^RS^114^Elite warriors trained to resist mental compulsions of all kinds, members of the iron mind prestige class defend dwarf and gnome kingdoms against intrusions by mind flayers, dark elf enchanters, and the like.
+Jordain vizier {Prestige Class}^ShS^33^The Jordaini are a special servitor caste, though still upper class, in the magocracy of Halruaa.
+justice of weald and woe {Prestige Class}^CR^48^The justice of weald and woe is the go-to person when something unsavory -- usually involving the removal of humans -- needs doing.
+justiciar {Prestige Class}^CW^47^Justiciars make a living kicking the daylights out of criminals who desperately deserve it.
+justiciar of Taiia {Prestige Class}^DD^205^Justiciars of Taiia fulfill the role of carrying out Taiia's sentence against wrongdoers.
+justiciar of Tyr {Prestige Class}^PG^63^Justiciars are the very elite of Tyr's mortal servants, and they act as living embodiments of their god's portfolio.
+Keeper of the Cerulean Sign {Prestige Class}^LoM^194^The Cerulean Sign is an ancient rune of power, created untold eons ago by a race or deity long since vanished; now it has keepers.
+kensai {Prestige Class}^CW^49^The kensai masters body, mind, weapon, and will.
+king/queen of the wild^MW^65^Where nature's fury is at its height, there you'll find the kings and queens of the wild.
+kishi charger {Prestige Class}^OA^42^Kishi chargers are cavalry soldiers trained to make the greatest possible use of a horse's speed and a rider's agility.
+Knight of the Blue Moon {Prestige Class}^CSW^81^Knights of the Blue Moon are elite soldiers in the endless battle against the Mistress of the Night.
+knight of the Chalice {Prestige Class}^CW^53^The knight of the Chalice is a member of an elite knightly organization devoted to fighting demons and other evil outsiders.
+knight of the Chalice {Prestige Class}^DF^63^The knight of the Chalice is a member of an elite knightly organization devoted to fighting demons and other evil outsiders.
+Knight of the Crown {Prestige Class}^DCS^56^The Order of the Crown is the first tier of the Solamnic Knights.
+Knight of the Iron Glacier {Prestige Class}^Fr^62^The Knights of the Iron Glacier continue to honor the memory of General Aengrist in their deeds and actions.
+Knight of the Lily {Prestige Class}^DCS^63^The Knights of the Lily are the order of warriors within the Knights of Neraka.
+knight of the Middle Circle {Prestige Class}^DF^65^Knights of the Middle Circle provide security for Stargazer chapterhouses and may be called upon for similar service for allies of the Stargazers.
+Knight of the Rose {Prestige Class}^DCS^59^The Knights of the Rose are the highest tier of the Solamnic Knights.
+Knight of the Skull {Prestige Class}^DCS^65^Entering battle with strength and divine magic, Knights of the Skull are the spirit of the Dark Knights.
+Knight of the Sword {Prestige Class}^DCS^58^Knights of the Sword are warriors of the Solamnic Knights who fight with power and faith to defend justice and truth.
+Knight of the Thorn {Prestige Class}^DCS^66^The Knights of the Thorn are also known as the 'gray robes' for the ash-colored robes they wear to indicate that they do not serve the Orders of High Sorcery.
+knight protector {Prestige Class}^CW^55^Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever.
+Knight Protector of the Great Kingdom {Prestige Class}^SF^24^Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever.
+knight-errant of Silverymoon^SM^112^Charged with the safety of the city of Silverymoon and its citizens, the professional fighting force known as the Knights in Silver is often all that stands between Silverymoon and the dangers of the frontier.
+lasher {Prestige Class}^SF^25^The lasher prestige class uses the whip as an extension of herself.
+legendary dreadnought {Prestige Class}^EL^33^The legendary dreadnought is the ultimate foot soldier, an absolute force of destruction, a total warrior who excels at sheer combat prowess.
+legendary leader {Prestige Class}^HB^107^Legendary leaders are the stuff of bards' tales come to life.
+legendary tactician {Prestige Class}^DCS^81^Legendary tacticians are respected (or feared) for their ability to inspire their troops.
+lifedrinker {Prestige Class}^BV^63^Lifedrinkers are vampires who have been undead for a very long time.
+lion of Talisid {Prestige Class}^BE^65^The lions of Talisid protect nature and emulate their patron in more concrete ways.
+lord of tides {Prestige Class}^Sa^70^A lord of tides can sense the movement of magma, summon beings of elemental might, and open portals to the Elemental Planes.
+loredelver {Prestige Class}^RD^117^Loredelvers are illumian spellcasters who find and explore ruins, disable the magical protections that guard them, and sift through the ancient secrets found within.
+loremaster {Prestige Class}^DMG^191^Loremasters are spellcasters who concentrate on knowledge, valuing lore and secrets over gold.
+luckstealer {Prestige Class}^RW^118^As a luckstealer, you're part spellcaster, part professional gambler -- and 100% mischief-maker.
+Luiren marchwarden {Prestige Class}^ShS^35^The Luiren marchwarden is the defender of the frontier in the land of the halflings.
+lurking terror {Prestige Class}^LM^54^Lurking terrors are the quintessential hunting undead, displaying great prowess with their special abilities and amazing powers of stealth.
+maester {Prestige Class}^CAd^56^Maesters are the master crafters of the gnome world.
+mage of the Arcane Order {Prestige Class}^CAr^48^Also called a 'guildmage,' a member of this prestige class is a spellcaster who belongs to an academy and guild known as the Arcane Order.
+mage of the Arcane Order {Prestige Class}^TB^60^Also called a 'guildmage,' a member of this prestige class is a spellcaster who belongs to an academy and guild known as the Arcane Order.
+mage-killer^Mag^32^Mage-killers master magic designed for combat against other spellcasters.
+magelord {Prestige Class}^LE^17^Quick to anger, haughty, and proud of his Art, the magelord is an arcane spellcaster who studies an ancient magical tradition known for extremely fast and versatile spellcasting
+maho-bujin^OA^236^When Taint overcomes a character, she may find her way to the Festering Pit of Fu Leng and become a maho-bujin.
+maho-tsukai^OA^237^Maho (blood magic) wielders are called maho-tsukai.
+maiden of pain {Prestige Class}^PG^182^Loviatar's most dedicated servants, the maidens of pain, are depraved women who literally make pain their meat and drink.
+Mantis mercenary {Prestige Class}^OA^231^Mantis mercenaries make use of peasant weapons and a rolling motion.
+Maquar crusader {Prestige Class}^ShS^38^A Maquar crusader follows a strict code of conduct that not only limits what he can own or where he can live, but also limits the ways in which merchants can influence him.
+martyred champion of Ilmater {Prestige Class}^PG^184^Having already offered his life in sacrifice once, the martyred champion of Ilmater perseveres in Ilmater's faith.
+master alchemist {Prestige Class}^Mag^34^The master alchemist is a spellcaster who specializes in producing potions and elixirs that reproduce the effects of spells of 4th level or higher.
+master inquisitive {Prestige Class}^ECS^82^The master inquisitive takes the art of investigation and deduction to the ultimate level, rising to the top of the field.
+master of chains {Prestige Class}^SF^27^The master of chains is a combatant specializing in the use of chains -- specifically the spiked chain -- as a weapon.
+master of flies {Prestige Class}^SS^80^The master of flies is an intelligent swarm that can form a massive being at need, or a single creature that can dissolve into a cloud of vermin.
+master of many forms {Prestige Class}^CAd^58^A master of many forms has no shape that she calls her own.
+master of radiance {Prestige Class}^LM^44^Masters of radiance channel the pure, undiluted power of the sun.
+master of shrouds {Prestige Class}^DF^66^The master of shrouds is an evil spellcaster who magically seizes incorporeal undead and sets them to do her bidding.
+master of shrouds {Prestige Class}^LM^46^The master of shrouds is an evil spellcaster who magically seizes incorporeal undead and sets them to do her bidding.
+master of the unseen hand {Prestige Class}^CW^60^Masters of the unseen hand delight in crushing their foes with invisible force, flinging massive objects into the sky, and disarming enemies with a single thought.
+master of the Yuirwood {Prestige Class}^Una^24^The masters of the Yuirwood are an elite group of foresters who work to keep the ancient Yuirwood free of evil influence.
+master of vipers {Prestige Class}^SK^163^Outcast yuan-ti learn to hunt not only to feed themselves, but also to spread destruction far and wide for the pure pleasure of it.
+master samurai {Prestige Class}^SF^29^The master samurai is a military retainer of a feudal overlord; he practices a code of behavior that emphasizes the value of personal honor over life itself.
+master thrower {Prestige Class}^CW^58^Master throwers depend on quick reflexes, good planning, and deadly aim.
+master transmogrifist {Prestige Class}^CAr^51^The master transmogrifist is a sorcerer or wizard who has chosen to specialize in spells that change his form.
+master vampire {Prestige Class}^LM^55^Any vampire can create spawn, but it takes a very special vampire to rule over an entire gang of minions.
+menacing brute {Prestige Class}^RD^123^The menacing brute takes advantage of how must humans fear half-orcs, playing on that dread to make his living.
+metamind {Prestige Class}^XPH^147^Metaminds know that accumulating the most power in the shortest time is the key to psionic superiority.
+mindbender {Prestige Class}^CAr^54^Mindbenders seek to control the thoughts and dreams of others.
+mindbender {Prestige Class}^TB^63^Mindbenders seek to control the thoughts and dreams of others.
+mindspy {Prestige Class}^CW^62^By reading the minds of her enemies, a mindspy knows exactly what they're going to do a fraction of a second before they do it.
+Mirumoto niten master {Prestige Class}^OA^218^The Mirumoto school teaches a unique style of swordplay, rooted in this sense of duty.
+monk of the long death {Prestige Class}^PG^65^Monks of the long death are members of a macabre, secretive order of scholars seeking to understand the true nature of death.
+moonspeaker {Prestige Class}^RE^143^Bound to the magic of their lycanthrope ancestors, moonspeakers breathe the magic of the world, guided by the twelve moons of Eberron.
+Moonstar agent {Prestige Class}^CSW^84^Moonstar agents, also known as Teukiir, are members of the Tel Teukiira, a group founded by Khelben 'Blackstaff' Arunsun when he broke from the Harpers.
+morninglord of Lathander {Prestige Class}^PG^66^Morninglords are, in many ways, the epitome of the classical cleric archetype.
+mortal hunter {Prestige Class}^BV^64^Mortal hunters are fiends who specialize in killing mortals.
+Moto avenger {Prestige Class}^OA^228^The Moto avenger is dedicated to a war against the Shadowlands and its evils.
+mystic theurge {Prestige Class}^DMG^192^Blurring the line between divine and arcane, mystic theurges draw power from divine sources and musty tomes alike.
+mystic wanderer {Prestige Class}^Mag^35^Mystic wanderers are divine spellcasters who eschew normal church hierarchies and instead embrace freedom, wanderlust, and independence.
+naga overlord {Prestige Class}^SK^165^Naga overlords are evil masterminds who operate in secret, usually behind cults of devoted followers.
+Nar demonbinder {Prestige Class}^Una^25^Master of the black art of demon summoning, the Nar demonbinder keeps alive the sinister traditions of the old Empire of Narfell.
+nature's warrior^CW^63^Nature's warriors are defenders of the wild, protectors of the natural world . . . and often druids who have spent 'too much time' in wild shape form.
+Nentyar hunter {Prestige Class}^Una^28^Sworn to defend the great forests and serve the Nentyarch, druidic ruler of the Circle of Leth, the Nentyar hunters roam the wild lands of the East, uprooting foul and evil things.
+Night Mask deathbringer {Prestige Class}^CR^53^Night Mask deathbringers are highly trained members of the Westgate thieves' guild who have caught the favorable attention of the vampires in charge of the organization.
+nightcloak {Prestige Class}^FP^198^Nightcloaks are the apple of Shar's eye -- devoted to her vision, preserving her secrets, practicing her magic, as twisted and bitter as it is.
+nightsong enforcer {Prestige Class}^CAd^60^The enforcers of the Nightsong Guild focus on the stealth-centered combat training that rogues usually learn.
+nightsong infiltrator {Prestige Class}^CAd^62^The nightsong infiltrator is the perfect thief and the perfect spy.
+Ninja of the Crescent Moon {Prestige Class}^SF^30^The Ninja of the Crescent Moon is a mercenary clan whose members engage in sabotage and other covert missions for an outlandish fee.
+ninja spy {Prestige Class}^OA^43^True ninja spies are masters of exotic weapons, tools of stealth, and strange ki powers.
+occult slayer {Prestige Class}^CW^66^The occult slayer is driven to confront any arcane or divine spellcaster who crosses her path.
+ocular adept {Prestige Class}^FP^200^Ocular adepts have pledged their religious devotions to the alien entity known as the Great Mother, the deity matron of all beholders.
+Olin Gisir {Prestige Class}^LE^21^The Olin Gisiae are elite elf mages who have taken it upon themselves to guard dark secrets from the rest of the world
+ollam {Prestige Class}^CAd^66^In Dwarven, the world 'ollam' means teacher.
+oozemaster {Prestige Class}^MW^67^Oozemasters relate one-on-one with things that relate to nothing at all.
+orc scout {Prestige Class}^SM^114^Part wilderness warrior and part spy, the orc scout is a hero to his people.
+orc warlord {Prestige Class}^Rac^184^The orc warlord is a savage general of an unruly army, the leader of one of the deadly and all too common orc hordes that rampage down from the Spine of the World.
+Order of the Bow initiate {Prestige Class}^CW^68^By learning the meditative art of the Way of the Bow, the archer improves his discipline, precision, and spirituality.
+Order of the Bow Initiate {Prestige Class}^SF^32^By learning the meditative art of the Way of the Bow, the archer improves his discipline, precision, and spirituality.
+outcast champion {Prestige Class}^RD^126^Outcast champions bring hope to those who have no place in society.
+outlaw of the crimson road {Prestige Class}^SaS^10^An outlaw of the crimson road might be a revolutionary, a loyal supporter of some deposed ruler, or merely an ordinary individual who angered the wrong person at the wrong time.
+pale master {Prestige Class}^LM^47^Arcane casters can become pale masters, who draw on necromantic lore that provides a macabre power all its own.
+pale master {Prestige Class}^TB^64^Arcane casters can become pale masters, who draw on necromantic lore that provides a macabre power all its own.
+peerless archer {Prestige Class}^SM^115^The peerless archer devotes her life to perfecting her skill with the bow.
+peregrine runner {Prestige Class}^RS^116^When goliaths need to send a message to another tribe, they send an elite, fleet-of-foot warrior known as a peregrine runner.
+perfect wight {Prestige Class}^EL^34^The perfect wight is a master of skulking, the ultimate prowler and thief.
+pious templar {Prestige Class}^CD^50^Sworn to the defense of a temple site, the pious templar is a holy warrior blessed by her deity with combat prowess and great endurance.
+planar champion {Prestige Class}^MP^28^The planar champion moves between the planes, always driven to battle.
+planeshifter {Prestige Class}^MP^30^The planeshifter is a magical scholar and expert in planar travel, and through arcane research develops not only the ability to sense planar portals, but also the ability to create his own demiplane.
+platinum knight {Prestige Class}^Dr^133^The platinum knight protects good-aligned dragonkind from their natural enemies.
+prestige bard {Prestige Class}^UA^69^The prestige bard is a jack-of-all-trades, master of none.
+prestige paladin {Prestige Class}^UA^70^After training in the arts of combat and the mysteries of the divine, the prestige paladin is anointed as a holy warrior dedicated to the protection of law and goodness.
+prestige ranger {Prestige Class}^UA^71^The prestige ranger navigates the dark forests, craggy mountains, or desert wastes of her homeland with unparalleled skill.
+prime Underdark guide {Prestige Class}^Und^40^These skilled guides not only know how to overcome the physical challenges of the Underdark, but they also can help them over the social and cultural hurdles they are sure to face.
+primeval {Prestige Class}^Fr^65^The primeval is a warrior who has tapped into his racial memories to find and forge a bond with an ancient creature.
+prophet of Erathaoi {Prestige Class}^BE^66^The prophet of Erathaoi is a seer and visionary, a medium of the heavenly will, pronouncing judgment on corruption and evil in the world.
+psion uncarnate {Prestige Class}^XPH^148^Formless, fleshless, and unbound by the limits of corporeality -- this is the goal of every psion uncarnate.
+Purple Dragon knight {Prestige Class}^CW^70^Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers.
+Purple Dragon knight {Prestige Class}^FRCS^49^Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers.
+Purple Dragon knight {Prestige Class}^PG^68^Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers.
+pyrokineticist {Prestige Class}^XPH^151^Pyrokineticists know that a little psionic power goes a long way -- for those interested in fire.
+quori nightmare {Prestige Class}^RE^148^The quori nightmare taps into the primal horrors and urges of the subconscious.
+radiant servant of Pelor {Prestige Class}^CD^52^The radiant servants of Pelor put the dogma of demonstrating strength through charity and modesty into living practice.
+rage mage {Prestige Class}^CW^72^The rage mage's approach to magic is based on the primal passion of magic more than the studious quasi-scientific approach.
+rainbow servant {Prestige Class}^CD^54^Those who have learned what the couatl temples have to offer are known as rainbow servants.
+Raumathari battlemage {Prestige Class}^Una^29^Employing sword and spell with dauntless courage and deadly force, the handful of Raumathari battlemages remaining in the world comprise a lonely and little-known order of adventurers, explorers, and mercenaries in search of battle.
+ravager {Prestige Class}^CW^73^The infamous ravager has dedicated himself to the service of Erythnul, deity of slaughter.
+ravager {Prestige Class}^SF^33^The infamous ravager has dedicated himself to the service of Erythnul, deity of slaughter.
+reachrunner {Prestige Class}^RE^153^Known for their mastery of the untamed world, some shifters rise above others in woodslore, physical ability, and stamina to claim the revered mantle of the reachrunner -- the greatest of shifter trackers and scouts.
+reaping mauler {Prestige Class}^CW^75^Reaping maulers are the back-breakers, the limb-twisters, and the neck-snappers among pit fighters.
+recaster {Prestige Class}^RE^157^To the recaster, the change her own body is capable of is a simple reflection of the mutability of the world around her.
+Red Avenger {Prestige Class}^SF^34^The Red Avenger is the master of ki,an ancient and formidable discipline that allows the user to accomplish the extraordinary.
+Red Wizard {Prestige Class}^DMG^193^The Red Wizards are the masters of Thay, the would-be magical overlords of the land of Faerun.
+Red Wizard {Prestige Class}^FRCS^50^The Red Wizards are the masters of Thay, the would-be magical overlords of the land of Faerun.
+reforged {Prestige Class}^RE^161^The reforged represents the realized ideal of the warforged's living aspects.
+righteous zealot {Prestige Class}^DCS^83^The righteous zealot is a person with a cause that directs every aspect of life.
+rimefire witch {Prestige Class}^Fr^67^A rimefire witch is one who has followed a mysterious call to the core of a rimefire iceberg and becomes infused with great power by the rimefire eidolon.
+risen martyr {Prestige Class}^BE^68^A risen martyr is an exalted character who continues in his earthly existence after his martyrdom in order to finish some unfinished task.
+ronin {Prestige Class}^CW^77^A ronin is a masterless warrior cast adrift in the world, but still clinging to the remnants of his former life.
+royal explorer {Prestige Class}^SaS^13^Some monarchs sponser crack teams of explorers.
+ruathar {Prestige Class}^RW^122^Also known as 'elf-friend' or 'star-friend,' a ruathar is a person of some other race who has earned the special friendship of the elven folk.
+runecaster {Prestige Class}^FRCS^51^Those that choose to master the ability to create runes of power are runecasters.
+runecaster {Prestige Class}^PG^69^Those that choose to master the ability to create runes of power are runecasters.
+runescarred berserker {Prestige Class}^Una^31^Deadly barbarians who bear magical runes carved into their flesh, runescarred berserkers are among the most feared of Rashemen's defenders.
+runesmith {Prestige Class}^RS^118^A runesmith has learned to harness the power of runes and can fling fireballsand other staple arcane spells even while encased in full plate armor.
+sacred exorcist {Prestige Class}^CD^56^Sacred exorcists hope to drive away the spiritual forces of evil, prevening them from causing harm to the bodies and souls of humanity.
+sacred exorcist {Prestige Class}^DF^68^Sacred exorcists hope to drive away the spiritual forces of evil, prevening them from causing harm to the bodies and souls of humanity.
+sacred fist {Prestige Class}^CD^59^Sacred fists are independent organizations found within many temples.
+sacred fist {Prestige Class}^DF^70^Sacred fists are independent organizations found within many temples.
+sacred purifier {Prestige Class}^LM^49^Sacred purifiers are priestly characters who specialize in destroying undead.
+sacred warder of Bahamut {Prestige Class}^Dr^96^Sacred warders of Bahamut protect others from the power of Tiamat's brood.
+sanctified mind {Prestige Class}^LoM^198^A sanctified mind believes that all evil-aligned psionics-using creatures must be crushed.
+sand shaper {Prestige Class}^Sa^76^Sand shapers are part prophet, part priest, part magician, and part assassin.
+savant aboleth {Prestige Class}^LoM^21^Savant aboleths are the eldest, most intelligent, wisest and most forceful of personality.
+scaled horror {Prestige Class}^SS^83^Scaled horrors are elite amphibious soldiers.
+scar enforcer {Prestige Class}^RD^130^Scar enforcers are angry, embittered half-elves who have rejected both sides of their ancestry.
+scion of Tem-Et-Nu^Sa^82^Paladins of the temple of Tem-Et-Nu are sometimes selected to become the guardians of the rivers.
+scorpion heritor {Prestige Class}^Sa^86^Scorpion heritors, through a special relationship with the scorpion spirit, gain the mystical abilities of the scorpion, and can even take its shape.
+scourge maiden {Prestige Class}^ShS^40^Scourge maidens are warrior-priestesses of Loviatar dedicated to pain and anguish.
+Sea Mother whip {Prestige Class}^Und^42^Devout worshipers of Blibdoolpoolp who seek closer communion with the Sea Mother often gain additional abilities in the Sea Mother whip prestige class.
+seeker of the Misty Isle {Prestige Class}^CD^61^Seekers search for the lost elves of Misty Isle.
+seeker of the song {Prestige Class}^CAr^56^Seekers of the song wield the power of music in ways that amaze even the most skilled bards.
+sentinel of Bharrai {Prestige Class}^BE^69^Respect for the power of nature, the desire to further the ends of good, and the resolve to destroy evil are the core beliefs of a sentinel of Bharrai.
+serpent slayer {Prestige Class}^SK^166^Some individuals devote their entire lives to thwarting the yuan-ti.
+Shaaryan hunter {Prestige Class}^PG^71^On the backs of their swift horses, Shaaryan hunters can run down even the fastest prey and either spear it with a lance or pelt it with arrows from horseback.
+shade hunter {Prestige Class}^CR^58^The shade hunter is a breed of adventurer who lives for the thrill of finding lost treasure, defeating ancient traps, and surviving deadly curses laid by the priests of dead gods.
+shadow adept {Prestige Class}^FRCS^52^Shadow adepts hurl themselves into the abyss of the Shadow Weave, immediately acquiring all the gifts available to casual students and discovering secrets unavailable to all but the most dedicated.
+shadow adept {Prestige Class}^PG^72^Shadow adepts hurl themselves into the abyss of the Shadow Weave, immediately acquiring all the gifts available to casual students and discovering secrets unavailable to all but the most dedicated.
+shadow scout {Prestige Class}^OA^44^The camouflage of a tiger, the stamina of a horse, the eyes of an eagle: these are the ingredients of the shadow scouts.
+shadow sentinel {Prestige Class}^RD^137^Shadow sentinels are elite illumian warriors who protect their people from githyanki raiders, demonic invastions, and hordes of barely imaginable monsters from the Plane of Shadow.
+shadow thief of Amn {Prestige Class}^PG^74^A shadow thief of Amn knows only her own minions, her coworkers, and her superior.
+shadowbane inquisitor {Prestige Class}^CAd^68^Shadowbane inquisitors battle incessantly against evil in whatever form it takes.
+shadowbane stalker {Prestige Class}^CAd^70^Shadowbane stalkers find evil hidden in civilized areas so that the martial arm of the order (the inquisitors) can spearhead the attack.
+shadowcraft mage {Prestige Class}^RS^120^Some gnomes have an even greater affinity for illusions than the average representative of their race, resulting in the prestige class known as the shadowcraft mage.
+shadowcrafter {Prestige Class}^Und^43^Shadowcrafters long ago mastered illusions and glamers.
+shadowdancer {Prestige Class}^DMG^194^Operating in the border between light and darkness, shadowdancers are nimble artists of deception.
+shadowmind {Prestige Class}^CAd^74^A shadowmind blends psionic powers and uncanny stealth into an effective whole.
+shapeshifter {Prestige Class}^OA^45^Shapeshifters must already have some means of changing their form before learning to master that change.
+Sharn skymage {Prestige Class}^Sh^165^By studying the properties of the manifest zone in which Sharn is situated, learning its intricacies and methods for manipulating it, a spellcaster can improve her magical or natural ability to fly.
+Shiba protector {Prestige Class}^OA^222^The warriors of the Shiba family are sworn to protect the Isawa family.
+shifter {Prestige Class}^MW^68^The shifter has no form that she calls her own.
+shining blade of Heironeous {Prestige Class}^CD^63^The shining blade of Heironeous is a member of an order of knights dedicated to prowess in melee combat.
+Shintao monk {Prestige Class}^OA^46^Shintao monks are dedicated to following the teachings of Shinsei.
+Shou disciple {Prestige Class}^Una^32^Shou disciples are martial artists who have studied or observed the monks of Kara-Tur and seek to emulate their style.
+silverstar {Prestige Class}^FP^201^Silverstars are dedicated advocates of freedom and tolerance, wanderers on the path of truth, and absolute foes of Shar.
+singh rager {Prestige Class}^OA^48^Singh ragers draw their furious strength from the noble lion.
+siren {Prestige Class}^SS^84^A harpy siren is an artist who constantly seeks to expand and improve upon her innate sonic ability.
+skullclan hunter {Prestige Class}^MH^20^The skullclan hunter is the acclaimed foe of unlife.
+skylord {Prestige Class}^BE^71^An elf crusader, the skylord uses his kinship with creatures of the sky and the power of the winds to fight evil.
+skypledged {Prestige Class}^RW^126^The skypledged represent a mystical tradition among the raptorans that hearkens back to an ancient pact with powerful lords of the Elemental Plane of Air.
+slaad brooder {Prestige Class}^SS^87^The brooder's sole purpose is to implant as many eggs pellets as he can to produce the widest possible range of progeny.
+slayer of Domiel {Prestige Class}^BE^73^Sometimes the skillset of an assassin is required for more noble pursuits.
+slime lord {Prestige Class}^PG^186^Slime lords, the most favored of Ghaunadar's servants, are not clerics; they are spies and infiltrators who can change their shapes in order to move unnoticed among members of any race.
+Soldier of Light {Prestige Class}^DD^208^The Soldiers of Light are a military order dedicated to open warfare against the minions of their church's enemies.
+soul eater {Prestige Class}^BV^66^The soul eater is a monstrous being that feeds on the very essence of life force.
+spell scion {Prestige Class}^UA^167^This prestige class is for characters who wield legendary weapons designed for use by arcane spellcasters, such as wizards, sorcerers, and sometimes bards.
+spellcarved soldier {Prestige Class}^RE^166^Spellcarved soldiers are warforged warriors who engrave magic runes into the plating of their inherently magic bodies, gaining remarkable defensive abilities.
+spelldancer {Prestige Class}^Mag^37^Spelldancers are an energetic sort of spellcaster who draw on the quasi-primal energy of song and dancing to power their magic.
+spellfire channeler {Prestige Class}^Mag^38^Those who practice their spellfire can hone their talent into a tool with fantastic abilities that most dabblers can only dream of.
+Spellguard of Silverymoon {Prestige Class}^PG^75^The Spellguard, Silverymoon's elite cadre of battle-trained arcane spellcasters, protects the city against the threat of hostile magic and aids the Knights in Silver against more mundane threats.
+spellsinger {Prestige Class}^Rac^185^Spellsingers are rare practitioners of an ancient elven bardic tradition.
+spellsword {Prestige Class}^CW^79^The dream of melding magic and weaponplay is fulfilled in the person of the spellsword.
+spellsword {Prestige Class}^TB^67^The dream of melding magic and weaponplay is fulfilled in the person of the spellsword.
+Spur Lord {Prestige Class}^LD^11^The Spur Lords are elite zealots of the church, wielding the dark power of Cyric and commanding the attention of even the most fanatical clerics.
+spymaster {Prestige Class}^CAd^76^Spymasters do their work quietly and in private, and they often have a cover identity.
+spymaster {Prestige Class}^SaS^14^Spymasters do their work quietly and in private, and they often have a cover identity.
+stalker of Kharash {Prestige Class}^BE^75^The stalkers of Kharash are a loose-knit order of rangers, rogues, and other characters devoted to fighting evil under Kharash's patronage.
+steel legionnaire {Prestige Class}^DCS^68^Steel legionnaires are members of the Legion of Steel.
+stoneblessed {Prestige Class}^RS^122^A stoneblessed bonds to the stone of the mountains, blending into a dwarf, gnome, or goliath community and making it her home.
+stonedeath assassin {Prestige Class}^RS^124^Most stonedeath assassins are hobgoblin rogues or rangers, but bugbears and even exceptional goblins have been known to undertake stonedeath training and learn the ways of infiltrating dwarf strongholds by disarming traps, weakening gates, and assassinating dwarf leaders.
+stonelord {Prestige Class}^CW^81^The earth whispers to special dwarves known as stonelords.
+stonespeaker guardian {Prestige Class}^RS^127^The stonespeaker guardian taps into the divine power of the earth itself to defend her fellow stonespeakers, as well as other goliaths and friendly races, from their enemies.
+stormlord {Prestige Class}^CD^65^Stormlords often live as brigands, indulging their personal desires for wealth, food, luxury items, and wanton behavior as they crave random, spectacular acts of violence.
+stormlord {Prestige Class}^FP^203^Stormlords are the chief agents of the Destroyer's wrath, inflicting destructive rampages wherever they wander in order to spread word of his endless fury.
+stormsinger {Prestige Class}^Fr^70^The stormsingers have learned the secret methods of harnessing the magic powers of music to influence and control the weather.
+stormtalon {Prestige Class}^RW^131^The stormtalons are consummate aerial warriors, using both their weapons and their razor-sharp foot talons to dive on their hapless foes.
+streetfighter {Prestige Class}^CAd^79^Streetfighters seek the challenges of the back alleys as a way of testing themselves and their experience in the wilder world.
+strifeleader {Prestige Class}^FP^204^Strifeleaders are the chief instruments of the Dark Sun, charged with spreading the One True Way of Cyric through force and deception.
+sublime chord {Prestige Class}^CAr^60^In return for abandoning her continuing study of bardic music, a sublime chord instead masters a number of spells more powerful than most bards can ever use.
+Suel arcanamach {Prestige Class}^CAr^63^Arcanamach formerly served as elite guards and agents for powerful wizards.
+Sun Soul monk {Prestige Class}^CSW^88^Monks of the Sun Soul Order believe that they each harbor a small fragment of the sun's divine essence.
+sunmaster {Prestige Class}^LE^25^The sunmasters are members of a sect within the church of Lathander who believe that the Morninglord is the living reincarnation of Amaunator.
+survivor {Prestige Class}^SS^89^Those who survive a program of frequent assaults and other dangers emerge a few weeks later -- tougher, faster, and less vulnerable to attacks.
+swanmay {Prestige Class}^BE^76^Swanmays are members of a secretive order sworn to protect wilderness areas from evil.
+swift scion {Prestige Class}^UA^168^This prestige class is for those who wield legendary weapons that make use of or improve the wielder's stealth, speed, or dexterity (in the general sense).
+sword dancer {Prestige Class}^FP^205^Sword dancers are expected to lead the drow migration and work to promote harmony between drow and surface-dwelling races.
+sword of righteousness {Prestige Class}^BE^77^Pursuit of a commitment to righteousness and purity that exceeds the norm is a quality of a sword of righteousness.
+sybil {Prestige Class}^SS^90^Steeped in ancient lore, or maddened by divine inspiration, the sybil is a reclusive prophet.
+tactical soldier {Prestige Class}^MH^22^The tactical soldier is the master of teamwork in melee.
+tainted sorcerer {Prestige Class}^UA^191^Tainted sorcerers find an easy path to tremendous magical power.
+tainted warrior {Prestige Class}^UA^193^When a character's taint threatens to exceed the capacity of his body and soul to contain it, he may become possessed by its evil power and transformed into a creature of taint.
+talon of Tiamat {Prestige Class}^Dr^134^The talon of Tiamat furthers the goals of evil dragonkind.
+Talontar blightlord {Prestige Class}^Una^34^Corrupt priests who revel in decay, the blightlords of Talona are feared and reviled throughout the Unapproachable East.
+tamer of beasts {Prestige Class}^MW^70^Through magic and his overwhelming concern for his charges, the tamer of beasts can make them tougher and more intelligent.
+tattooed monk {Prestige Class}^CW^82^Certain monastic orders bestow supernatural or spell-like powers on their members by inscribing magic tattoos on their skin.
+tattooed monk {Prestige Class}^OA^49^Certain monastic orders bestow supernatural or spell-like powers on their members by inscribing magic tattoos on their skin.
+techsmith {Prestige Class}^FP^206^Techsmiths are devoted to the development of new inventions and the progression of achievement in the name of the Wonderbringer.
+Telflammar shadowlord {Prestige Class}^Una^36^Above all the criminals of the Shadowmasters of Telflamm stand the Telflammar shadowlords,the secret captains of iniquity who demand unquestioned obedience from their numerous minions.
+tempest {Prestige Class}^CAd^81^A tempest is the point of calm within a whirling barrier of deadly blades.
+tempest {Prestige Class}^MW^72^A tempest is the point of calm within a whirling barrier of deadly blades.
+templar {Prestige Class}^DF^72^Sworn to the defense of a temple site, the templar is a holy warrior blessed by her deity with combat prowess and great endurance.
+temple raider of Olidammara {Prestige Class}^CD^67^The temple raiders are an elite cadre of thiees who worship the Laughing Rogue and specialize in stealing valuables and secret lore from the temples of other deities.
+temple raider of Olidammara {Prestige Class}^SaS^16^The temple raiders are an elite cadre of thiees who worship the Laughing Rogue and specialize in stealing valuables and secret lore from the temples of other deities.
+thaumaturgist {Prestige Class}^DMG^196^The thaumaturgist reaches out with divine power to other planes of existence, calling creatures there to do his bidding.
+Thayan gladiator {Prestige Class}^CR^63^Popular and skillful gladiators fill the arenas of Faerun from Calimshan to the Dragon Coast, but the brutal Thayan gladiators are the best of the best.
+Thayan knight {Prestige Class}^CW^85^Thayan knights have mastered the art of swordplay, are familiar with magic, and are loyal to none but the tattooed mages.
+Thayan knight {Prestige Class}^LD^64^Thayan knights have mastered the art of swordplay, are familiar with magic, and are loyal to none but the tattooed mages.
+Thayan slaver {Prestige Class}^Una^37^Thayan slavers are cruel marauders who use their awful abilities to abduct creatures and then break their wills.
+thief-acrobat^CAd^83^A thief-acrobat excels in getting in and getting out.
+thief-acrobat^SaS^18^A thief-acrobat excels in getting in and getting out.
+thrall of Demogorgon {Prestige Class}^BV^67^A thrall of Demogorgon thrives on the chaotic nature of mutation and deformity.
+thrall of Graz'zt^BV^68^The thrall of Graz'zt is a sinister, conniving, and thoroughly evil master of arcane lore and dark secrets.
+thrall of Juiblex {Prestige Class}^BV^70^A thrall of Juiblex oozes a horrible slime and is surrounded by a nauseating stench.
+thrall of Orcus {Prestige Class}^BV^71^A thrall of Orcus has devoted herself to the demon prince of undeath.
+thrallherd {Prestige Class}^XPH^153^Thrallherds manipulate the minds of others as if they were clay in the hands of a sculptor.
+tomb warden {Prestige Class}^LM^57^Tomb wardens serve as selfless, undying protectors of the dead.
+topaz guardian {Prestige Class}^LoM^203^Resolute crusaders, the topaz guardians are the elite initiates of the Holy Order of the Supernal Topaz Defenders.
+tribal protector {Prestige Class}^SF^35^The tribal protector is the battlefield champion of a savage humanoid race.
+troubadour of stars {Prestige Class}^BE^78^Bards who channel their celestial music through their mortal voices and instruments are troubadours of stars.
+true necromancer {Prestige Class}^LM^51^Those who seek to raise an unyielding obedience from the dead willingly tread the path of necromancy.
+true necromancer {Prestige Class}^TB^69^Those who seek to raise an unyielding obedience from the dead willingly tread the path of necromancy.
+unholy ravager of Tiamat {Prestige Class}^Dr^97^Those who devote themselves to Tiamat's cause become unholy ravagers of Tiamat.
+Union Sentinel {Prestige Class}^EL^35^A Union Sentinel is a member of an elite police force that guards the demiplane city of Union.
+urban soul {Prestige Class}^RD^141^Urban souls are the chosen champions of the deity Urbanus, charged with protecting city denzens from external dangers and from subtler threats to the city.
+ur-priest^BV^72^A small number of ur-priests have learned to tap into divine power and use it without praying to or worshiping a god.
+ur-priest^CD^70^A small number of ur-priests have learned to tap into divine power and use it without praying to or worshiping a god.
+vassal of Bahamut {Prestige Class}^BE^80^A vassal of Bahamut is a devout, nondraconic champion in the service of the Dragon King.
+vengeance knight {Prestige Class}^CR^67^Vengeance knights roam the Lands of Intrigue in search of those who have committed acts of treachery against their employers, the Knights of the Shield.
+verdant lord {Prestige Class}^MW^73^The verdant lord is the final defender of the forest.
+vermin keeper {Prestige Class}^Und^44^To a vermin keeper, insects are perfect killers.
+vermin lord {Prestige Class}^BV^73^The vermin lord offers itself as a host for all manner of parasitic organisms.
+vigilante {Prestige Class}^CAd^85^The vigilante combines magical and mundane investigative techniques to assess a crime scene.
+vigilante {Prestige Class}^SaS^20^The vigilante combines magical and mundane investigative techniques to assess a crime scene.
+virtuoso {Prestige Class}^CAd^89^The typical virtuoso is outgoing, charismatic, and gregarious.
+virtuoso {Prestige Class}^SaS^22^The typical virtuoso is outgoing, charismatic, and gregarious.
+visionary seeker {Prestige Class}^PlH^53^A visionary seeker knows how to navigate the mental plain stretching out ahead, finding landfall and truly discovering what it means to know.
+void disciple {Prestige Class}^CD^72^Void disciples understand that everything in the world contains all the basic elements, held together by the least tangible essence.
+void disciple {Prestige Class}^OA^51^Void disciples understand that everything in the world contains all the basic elements, held together by the least tangible essence.
+walker in the waste {Prestige Class}^Sa^89^A walker in the waste embodies the harsh, unforgiving nature of the desert.
+war chanter {Prestige Class}^CW^87^A war chanter's music flows across the battlefield like a raging torrent, catching friends and foes alike in its wake.
+war hulk {Prestige Class}^MH^22^The war hulk is a creature of great size and talent who is specifically trained to shock and awe opposing massed troops.
+war mind {Prestige Class}^XPH^155^War minds are expert fighters who claim to possess unequaled knowledge in the art of war.
+war weaver {Prestige Class}^HB^112^By weaving together strands of pure arcane power, the war weaver becomes a force to be reckoned with on the battlefield.
+war wizard of Cormyr {Prestige Class}^Mag^40^The Cormyrean war wizards are some of the most respected battle-mages in Faerun.
+warchief {Prestige Class}^MH^24^A warchief leads a primitive, aggressive tribe of humanoids, especially when they turn to marauding.
+warforged juggernaut {Prestige Class}^ECS^83^As a machine of war, the juggernaut is among the best at dealing damage and sustaining punishment.
+warmaster {Prestige Class}^SF^37^Warmasters are trained at the College of War and can become a formidable presence on the battlefield.
+warpriest {Prestige Class}^CD^74^Warpriests are fierce, earthy clerics who pray for peace but prepare for war.
+warpriest {Prestige Class}^DF^74^Warpriests are fierce, earthy clerics who pray for peace but prepare for war.
+warrior of darkness {Prestige Class}^BV^75^The warrior of darkness, sometimes called the dark knight, is a practitioner of black magic.
+warrior skald {Prestige Class}^Rac^186^Accompanying heroes of great renown, warrior skalds fight at their sides while composing the epics that will be told for centuries to come.
+warshaper {Prestige Class}^CW^89^The warshaper grows and evolves her own weapons and armor to suit the threat at hand.
+warsling sniper {Prestige Class}^Rac^188^The warsling sniper is an expert in the use of the weapon commonly associated with the halfling race.
+watch detective {Prestige Class}^MW^75^The watch detective specializes in solving mysteries.
+waverider {Prestige Class}^SS^93^The waverider and her companion animal defend their city with a vigor that exceeds either's individual powers.
+waveservant {Prestige Class}^FP^209^Waveservants server the Bitch Queen as both tribute gatherers and enforcers.
+wayfarer guide {Prestige Class}^CAr^65^The wayfarer guide focues on honing her skill at instantaneous magical transportation.
+wayfarer guide {Prestige Class}^TB^70^The wayfarer guide focues on honing her skill at instantaneous magical transportation.
+weapon master {Prestige Class}^SF^38^For weapon masters, the perfection of kiis found in the mastery of a single melee weapon.
+weapon master (kensei)^OA^53^For weapon masters, the perfection of kiis found in the mastery of a single melee weapon.
+wearer of purple {Prestige Class}^FP^210^Wearers of purple are members of the Cult of the Dragon who embrace the creation and veneration of the Sacred Ones, the great dracoliches of Faerun.
+weretouched master {Prestige Class}^ECS^85^Weretouched masters are shifters who learn to enhance their shifting ability to accentuate the power of their lycanthrope heritage.
+whisperknife {Prestige Class}^RW^135^The halfling whisperknife seeks to repay murder, theft, or humiliation in the same coin.
+wild mage {Prestige Class}^CAr^68^Wild mages aspire to cast spells without structure.
+wild plains outrider {Prestige Class}^CAd^92^Wild plains outriders work tirelessly to keep the plains as safe as such remote places can be.
+wild scout {Prestige Class}^SM^117^Wild scouts are the spies of the wilderness, traversing the open and wild country in search of valuable information.
+wildrunner {Prestige Class}^RW^139^Wildrunners give themselves almost wholly to nature, seeking to return to their untamed roots and eventually become fey creatures.
+windrider {Prestige Class}^MW^77^The windrider is a specialist in mounted combat, but hers is no ordinary mount.
+windwalker {Prestige Class}^FP^212^Windwalkers learn to shape the winds with their hands and ride them to lands as yet unseen.
+winterhaunt of Iborighu {Prestige Class}^Fr^72^As minions of the Frozen King, the winterhaunts of Iborighu lust for nothing less than eternal winter.
+witch hunter {Prestige Class}^OA^54^Witch hunters combine magical training with combat expertise to battle the spiritual forces of evil in the world.
+Wizard of High Sorcery {Prestige Class}^DCS^71^Once a wizard successfully completes (and survives) the Test of High Sorcery, his choices dictate his robe color and which deity of magic grants him power.
+wonderworker {Prestige Class}^BE^82^Wonderworkers sacrifice some of their spellcasting ability to grow closer to the ideal of goodness they revere.
+yakuza {Prestige Class}^OA^55^Yakuza represent the shadowy underworld and provide protection for the helpless.
+Yathchol webrider {Prestige Class}^Und^46^With their intimate understanding of webspinning and their familiarity with the Overweb, Yathchol webriders can move about the Underdark as they choose.
+yathrinshee {Prestige Class}^PG^187^Yathrinshees, the elite ranks of Kiaransalee's priests, are powerful masters of necromantic magic, both arcane and divine.
+yuan-ti cultist^SS^97^The mysteries of the evil deities of the yuan-ti are mastered by yuan-ti cultist masters.
+Zhentarim skymage {Prestige Class}^LD^102^These powerful spellcasters ride strange flying beasts and serve the Zhentarim by performing acts of espionage and causing unrest on the frontiers of civilization.
+Zhentarim spy {Prestige Class}^PG^77^The Zhentarim spy is probably the one Faerunians encounter most often -- even if they never realize it.
+knight phantom {Prestige Class}^FN^41^The knight phantom prestige class takes capable wizards and gradually turns them into capable melee fighters, without slowing their spellcasting too much.
+Dark Lantern {Prestige Class}^FN^68^The Dark Lanterns serve the crown of Breland as spies and assassins.
+Cyran avenger {Prestige Class}^FN^86^These survivors of the Day of Mourning seek to uncover the cause of the cataclysm and avenge their people against the architects of the Mournland.
+bone knight {Prestige Class}^FN^117^Bone knights are Karrn patriots, living protectors who fight alongside the undead legions of their land.
+silver pyromancer {Prestige Class}^FN^150^The silver pyromancer is an arcane champion of the Church of the Silver Flame, taking his place alongside clerics, paladins, and exorcists in the Church's cause.
+legacy champion {Prestige Class}^WL^19^You are so devoted to the history and chronicle of a particular item of legacy that you enjoy enhanced access to your item's legacy abilities.
+cataclysm mage {Prestige Class}^EH^58^Cataclysm mages seek after Eberron's most powerful mysteries, long lost to the past.
+thunder guide {Prestige Class}^EH^64^Bodyguards to nobles on safari, shepherds to spelunking university professors, and the real-life heroes of chronicle serials across Khorvaire, thunder guides provide the strong blades, keen senses, and local knowledge necessary to survive a trip across the Thunder Sea.
+windwright captain {Prestige Class}^EH^70^The self-proclaimed masters of sky and sea, the windwright captains are the finest pilots of airships and wind galleons on Eberron.
+knight of the pearl {Prestige Class}^Sto^52^The knight of the pearl is a loyal defender of the aventi people, dedicated to the service of Aventernus and his appointed kings.
+legendary captain {Prestige Class}^Sto^56^A legendary captain might be the commander of a fleet's flagship or a bloodthirsty pirate, but whatever the role, her reputation is widespread and her crew fanatically loyal.
+leviathan hunter {Prestige Class}^Sto^61^The leviathan hunter is dedicated to hunting down creatures of the perilous depths.
+scarlet corsair {Prestige Class}^Sto^65^The scarlet corsair relies on the reputation of her quick blade and terrible fighting skills to drive her prey before her.
+sea witch {Prestige Class}^Sto^68^A sea witch is a terrible chaotic mage who wields the powers of water and calls on the living horrors of the deep.
+stormcaster {Prestige Class}^Sto^72^The stormcaster is one who seeks to tap into the power of a strange and terrifying phenomenon: the raging storm.
+wavekeeper {Prestige Class}^Sto^76^Some druids feel the call of the primal deeps.
+Knight of the Flying Hunt {Prestige Class}^CoV^106^Defenders of Nimbral, protectors of the island realm's quiet, simple folk, noble soldiers answering to the powerful but mysterious Nimbral Lords -- the Knights of the Flying Hunt epitomize valor and grace in word, deed, and bearing.
+Knight of the Weave {Prestige Class}^CoV^111^Members of this mystic order of sacred defenders cherish the Weave like a fine wine.
+Moonsea skysentinel {Prestige Class}^CoV^117^Moonsea skysentinels are the eyes in the sky for the Knights of the North, scouting the landscape, looking for evidence of Zhentarim activity.
+Triadic knight {Prestige Class}^CoV^123^Triadic knights are holy warriors who worship the Triad of Tyr, Torm, and Ilmater.
+corrupt avenger {Prestige Class}^HH^88^A corrupt avenger accepts any cost to have his vengeance, even to the forfeit of his very soul.
+death delver {Prestige Class}^HH^93^The death delver is that rare individual, who, rather than fearing and avoiding death, delves as deeply into its mysteries as he can, to better understand and eventually gain some small power over it.
+dread witch {Prestige Class}^HH^98^The dread witch is a spellcaster who manipulates fear as readily and effectively as other casters manipulate magic itself.
+fiend-blooded^HH^102^With careful exploration, a spellcaster who feels a call from within can slowly bring the power of their fiendish lineage to the surface.
+purifier of the Hallowed Doctrine {Prestige Class}^HH^108^Purifiers of the Hallowed Doctrine consider themselves servants not of gods but of the spiritual well-being of the world itself.
+tainted scholar {Prestige Class}^HH^113^No secret is barred from the tainted scholar's grasp, and if such forbidden knowledge comes at the cost of his soul, he's willing to pay that price.
+alchemist savant {Prestige Class}^MoE^53^The alchemist savant excels in the capacity to break down the normal barriers that lie between alchemy and magic, between potion and alchemical fluid, between science and art.
+deadgrim {Prestige Class}^MoE^57^The deadgrim are an elite faction with in the Red Watchers, a new organization of undead hunters within Karrnath.
+dragon prophet {Prestige Class}^MoE^63^The dragon prophet is a member of one of the 'lesser races' who shares the dragons' ambitious goal of understanding the complex and convoluted draconic Prophecy.
+elemental scion of Zilargo {Prestige Class}^MoE^68^The elemental scion of Zilargo attempts to understand the true nature of the elements through bizarre methods.
+impure prince {Prestige Class}^MoE^73^Of those who make it their special mission to rid the world of aberrations and their masters, only impure princes can claim the distinction of using daelkyr-inspired corruptions and symbionts as their most effective tool in aberration cleansing.
+quori mindhunter {Prestige Class}^MoE^77^The quori mindhunter has a single mission: to hunt down and destroy the quori spirits that corrupt humanity, and the possessed Inspired that further the aims of the Dreaming Dark.
+renegade mastermaker {Prestige Class}^MoE^81^A renegade mastermaker applies the secrets of warforged creation methods to his own body, slowly replacing parts of his body with mechanical augmentations.
+vigilant sentinel of Aerenal {Prestige Class}^MoE^85^Part spy, part assassin, and completely loyal to the Sibling Kings and Aerenal's undying rulers, the sentinels roam across Eberron.
+incandescent champion {Prestige Class}^MoI^115^The incandescent champion seeks to dispense with barriers and obstacles both tangible and intangible so that she can touch the cosmic soul with her unveiled body, mind, and spirit.
+incarnum blade {Prestige Class}^MoI^121^Using a secret passed down through the generations, the incarnum blade shapes soul energy drawn from the greatest warriors of the past into a special soulmeld that is incorporated into his melee weapon of choice.
+ironsoul forgemaster {Prestige Class}^MoI^126^Only the ironsoul forgemaster can craft a weapon that combines these arts with the shaping of soul essence.
+necrocarnate {Prestige Class}^MoI^132^Dealers in death and torturers of souls, necrocarnates number among the most evil creatures in any world.
+sapphire hierarch {Prestige Class}^MoI^136^The elite members of an order of priests of law defend the temple, contemplate the mysteries of the Sapphire Eidolon, and seek to fulfill its single command by perfecting themselves and bringing order out of chaos wherever they find it.
+soulcaster {Prestige Class}^MoI^142^Soulcasters excel at incorporating soul energy into their magic.
+spinemeld warrior {Prestige Class}^MoI^147^When a spinemeld warrior trains, he is participating in a tradition that has long been venerated in skarn society.
+totem rager {Prestige Class}^MoI^153^The totem rager embodies the wrath of nature in its most bestial form.
+umbral disciple {Prestige Class}^MoI^158^The umbral disciple is a student of shadow in both a literal and a metaphysical sense.
+witchborn binder {Prestige Class}^MoI^162^Elite agents within the Vigilant Servants, a society whose members make it their business to frustrate the plans of the witchborn, witchborn binders are incarnum-wielding mage-hunters who can use the power of soul energy to create shields, traps, and shackles.
+gatekeeper mystagogue {Prestige Class}^PE^88^Heirs to a tradition over sixteen millennia old, the gatekeeper mystagogues stand among the greated foes of the daelkyr and their aberration spawn.
+high elemental binder {Prestige Class}^PE^104^As a high elemental binder, you can reach into the planes and immediately draw elemental beings into objects -- coating your armor in stone or your blade in fire.
+revenant blade {Prestige Class}^PE^108^The revenant blade is a Valenar elf who can draw on the skills of ancient heroes, the giant-slayers of Xen'drik.
+court herald {Prestige Class}^PF^108^The court herald prestige class is a modified version of the loremaster prestige class, which is described in the Dungeon Master's Guide.
+disciple of the eye {Prestige Class}^RDr^75^As a disciple of the eye, you know the messages that the eyes alone can impart.
+dracolexi {Prestige Class}^RDr^79^As a dracolexi, you try to understand that primordial vocabulary by devoting yourself to the study of ancient dialects and languages, hoping to discover how certain Draconic words were once uttered.
+dragon devotee {Prestige Class}^RDr^84^Some individuals feel the call of dragons more strongly, which may lead them into an attempt to awaken their blood and bring those traits to the fore.
+dragonheart mage {Prestige Class}^RDr^88^The dragonheart mage is perfect for the dedicated spellcaster who wishes to embrace the power of dragon blood while still advancing in magical expertise.
+Singer of Concordance {Prestige Class}^RDr^91^The Singers of Concordance are a small order of wandering draconic spiritual guides who begin as servitors of Io, the Ninefold Dragon, creator of all dragonkind.
+anima mage {Prestige Class}^TM^50^Anima mages see vestiges as mere tools, no different from spell component pouches or a wand of fireball.
+knight of the sacred seal {Prestige Class}^TM^54^A knight of the sacred seal is never alone because she has formed a true partnership with a single vestige.
+scion of Dantalion {Prestige Class}^TM^59^The scions believe that their destiny is to one day take up the crown of a long-forgotten human empire, bear the scepter of rulership, and rebuild the empire that could rival the stars.
+Tenebrous apostate {Prestige Class}^TM^63^The remnant of divinity once possessed by Orcus, Tenebrous is perhaps the only vestige still worshiped in some places as a god. Some followers, however, believe that Tenebrous is a separate deity, so these Tenebrous apostates revere him as such.
+witch slayer {Prestige Class}^TM^67^Witch slayers devote themselves to capturing and destroying those who share their souls with other entities.
+child of night {Prestige Class}^TM^117^They prefer to call themselves 'black transmogrifists,' but most know them as children of night.
+master of shadow {Prestige Class}^TM^121^Some driven or domineering souls seek nothing less than mastery of darkness itself -- the ability to turn the very shadows into their agents and allies.
+noctumancer {Prestige Class}^TM^125^Noctumancers bridge the gap between shadow and arcane magic.
+shadowblade {Prestige Class}^TM^129^Shadowblades are martial combatants with an innate link to shadow.
+shadowsmith {Prestige Class}^TM^132^Shadowcasters draw power from darkness, and masters of shadow command it, but no one truly manipulates the darkness as does the shadowsmith.
+acolyte of the ego {Prestige Class}^TM^204^By learning to speak their own truenames, acolytes of the ego strive to unlock hidden powers lost to the cosmos.
+bereft {Prestige Class}^TM^208^The bereft are a group of truenamers who devote themselves to mastering the word of unmaking, a powerful component of Truespeech purportedly able to unravel creation.
+brimstone speaker {Prestige Class}^TM^212^Brimstone speakers regard the secret language of truenames as nothing less than a gift from the gods.
+disciple of the word {Prestige Class}^TM^216^Disciples of the word are intellectual warrior monks who, through a deeper understanding of their truenames, transcend the limits of their mortal form.
+fiendbinder {Prestige Class}^TM^220^A fiendbinder seeks to unlock the truenames of demons, devils, and other vile fiends, and use that knowledge to bind them to service.
+merchant prince {Prestige Class}^PF^71^A merchant prince (known as a merchant princess if female) is a member of the merchant nobility who has acquired his position and wealth either by being born into a wealthy family or by earning every last coin himself.
+anarchic initiate {Prestige Class}^CP^17^The anarchic initiate is more than a wilder; he is an initiate to the truth that underlies the wildness in the depth of his being.
+ebon saint {Prestige Class}^CP^22^The ebon saint lives in the darkness, but seeks to exposehis enemies to the light.
+ectopic adept {Prestige Class}^CP^26^Ectoplasm is the preferred medium of creation for the ectopic adept, and his mind serves as the mold, kiln, and wheel upon which his works are turned.
+flayerspawn psychic {Prestige Class}^CP^30^Willing to sacrifice her life, appearance, and even her sanity, the flayerspawn psychic walks a dangerous road, growing in psionic power as she slowly embraces her secret mind flayer heritage.
+illumine soul {Prestige Class}^CP^33^The illumine soul is a living conduit of positive energy.
+soulbow {Prestige Class}^CP^36^In the tradition of the soulknife, a soulbow realizes the direct capacity of her own mind to give shape to weapons of psionic perfection.
+storm disciple {Prestige Class}^CP^40^A storm disciple is a character who decides that the best, most glorious way to serve his ideals is through the natural power, fury, and splendor of the storm.
+zerth cenobite {Prestige Class}^CP^43^The core of a zerth cenobite's studies involve strict meditation on the nature of time and the body's movements through it, culminating in a martial art known as zerthin.
+landforged walker {Prestige Class}^SX^123^Even as they speak for nature, landforged walkers coax the living bounty of the earth to grow on their metal hides, drawing power from the environment around them.
+primal scholar {Prestige Class}^SX^127^Primal scholars are spellcasters bent on uncovering and mastering the ancient magic that lies buried in the jungles, deserts, and mountains of Xen'drik.
+scorpion wraith {Prestige Class}^SX^130^Scorpion wraiths are the elite warriors of the drow.
+wearer of purple {Prestige Class}^DrF^67^Updated from Faiths and Pantheons.
+bloodclaw master {Prestige Class}^ToB^96^A bloodclaw master embraces the animal within to a degree that it becomes external, partially transforming him into the beast from which the discipline was inspired.
+bloodstorm blade {Prestige Class}^ToB^100^Other martial adepts rightfully look with wonder upon those who learn the bloodstorm style.
+deepstone sentinel {Prestige Class}^ToB^105^The Stone Dragon discipline traces its roots back to an ancient order of dwarves that used the power of the earth to enhance their combat style.
+eternal blade {Prestige Class}^ToB^109^An eternal blade is an elf who learns a variety of exotic fighting maneuvers with the aid and advice of the spirit of a mighty, ancient elf warrior.
+jade phoenix mage {Prestige Class}^ToB^113^Long ago, a fellowship of swordsages known as the Masters of the Jade Phoenix took up the study of arcane magic in search of a new martial discipline.
+master of nine {Prestige Class}^ToB^119^Some savants of the Nine Disciplines believe that none of the paths are complete, true disciplines in and of themselves.
+Ruby Knight vindicator {Prestige Class}^ToB^122^The Ruby Knights are a crusader order in the service of Wee Jas, goddess of death and magic.
+Shadow Sun ninja {Prestige Class}^ToB^126^A Shadow Sun ninja is a martial artist who studies the balance between good and evil, light and dark.
+diamond dragon {Prestige Class}^DM^30^The boldest of the sages study the link between gem dragons and psionics, learning to tap into what they refer to as the draconic psionic collective.
+dragon descendant {Prestige Class}^DM^34^A secret monastic order, dragon descendants tap into the power of their draconic heritage to call on their ancestors in times of need.
+dragon lord {Prestige Class}^DM^38^A dragon lord is the general at the head of an army, the emperor at the helm of an empire, or the warleader who dominates a battlefield.
+hand of the winged masters {Prestige Class}^DM^43^Dragons often need expert servants to be their eyes, ears, and hands in humanoid society.
+pact-bound adept^DM^46^Pact-bound adepts are sorcerers who have learned to transcend their beliefs about spells and magic and embrace arcane power as dragons do.
+swift wing {Prestige Class}^DM^50^Swift wings are church servants who see themselves as the fast-moving, hard-hitting crusaders of their god's cadre of worshipers.
+wyrm wizard {Prestige Class}^DM^55^Wyrm wizards are spellcasters who learn new spells not through research and experimentation but rather by tapping into the vast wealth of arcane knowledge possessed by dragons.
+sovereign speaker {Prestige Class}^FE^32^Although devotion to a single god enables some individuals to gain additional power, overriding
+escalation mage {Prestige Class}^FE^52^By giving themselves over to the Shadow and focusing on the dark side of magic, these arcane spellcasters learn how to bargain with their god to make their spells more effective -- for a price.
+argent fist {Prestige Class}^FE^70^Only a precious few possess the focus, the dedication, and the physical prowess to master the abilities of the argent fist, but few enemies can stand against those who do.
+thief of life {Prestige Class}^FE^84^When the prize is immortality, there is precious little a thief of life will not do to grasp it.
+planar shepherd {Prestige Class}^FE^105^Some druids, especially among the Greensingers or those who have dealt extensively with that sect, reject narrow interpretations of what constitutes the natural world.
+knight of the raven {Prestige Class}^Rav^200^Before evil descended on the land of Barovia, it was home to an order of virtuous champions, the Knights of the Raven.
+Lightbringer {Prestige Class}^Rav^204^The Lightbringers are an expansive guild of undead hunters that readily hands out charter memberships to anyone who wants to stamp out undead.
+aburant champion {Prestige Class}^CM^50^A warrior who dabbles in abjuration magic.
+eldritch disciple {Prestige Class}^CM^53^A multiclass warlock and divine spellcaster.
+eldritch theurge {Prestige Class}^CM^57^A multiclass warlock and arcane spellcaster.
+enlightened spirit {Prestige Class}^CM^60^A warlock who takes on celestial characteristics.
+holy scourge {Prestige Class}^CM^64^An arcane spellcaster that specializes in blasting evil.
+lyric thaumaturge {Prestige Class}^CM^67^A bard with enhanced spellcasting prowess.
+master specialist {Prestige Class}^CM^70^A wizard with greater mastery over a school of specialization.
+nightmare spinner {Prestige Class}^CM^74^An arcane spellcaster who weaves fear into illusions.
+ultimate magus {Prestige Class}^CM^77^A multiclass arcane preparation spellcaster and arcane spontaneous spellcaster.
+unseen seer {Prestige Class}^CM^81^A stealthy character who dabbles in divination magic.
+wild soul {Prestige Class}^CM^84^An arcanist who wields power from the realm of the fey.
--- a/data/dnd35/dnd35armor.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/dnd35armor.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,87 +1,87 @@
-<ac>
-<armor  name="Banded mail" cost="250" type="Heavy" maxdex="1" bonus="6" spellfailure="35" checkpenalty="-6" weight="35" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of overlapping strips of metal sewn to a backing of leather and chainmail. The strips cover vulnerable areas, while the chain and leather protect the joints and provide freedom of movement. Straps and buckles distribute the weight evenly. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Breastplate" cost="200" type="Medium" maxdex="3" bonus="5" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
-<description >A breastplate covers the front and back. It comes with a helmet and matching greaves (plates to cover the lower legs). A light suit or skirt of studded leather beneath the breastplate protects limbs without restricting
-movement much.
-</description >
-</armor>
-<armor  name="Buckler" cost="15" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
-<description >This small metal shield is strapped to the forearm, allowing it to be worn and still use the hand. A bow or crossbow can be used without penalty. An off-hand weapon can be used, but a -1 penalty on attack rolls is imposed because of the extra weight on your arm. This penalty stacks with those for fighting with the off hand and, if appropriate, for fighting with two weapons. In any case, if a weapon is used in the off-hand, the character doesn't get the buckler's AC bonus for the rest of the round.
-</description >
-</armor>
-<armor  name="Chainmail" cost="150" type="Medium" maxdex="2" bonus="5" spellfailure="30" checkpenalty="-5" weight="40" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of interlocking metal rings. It includes a layer of quilted fabric underneath it to prevent chafing and to cushion the impact of blows. Several layers of mail are hung over vital areas. Most of the armor's weight hangs from the shoulders, making chainmail uncomfortable to wear for long periods of time. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Chainshirt" cost="100" type="Light" maxdex="4" bonus="4" spellfailure="20" checkpenalty="-2" weight="25" speed="30" speed20="20" speed30="30" >
-<description >A shirt of chainmail protects the torso while leaving the limbs free and mobile. A layer of quilted fabric underneath it prevents chafing and cushions the impact of blows. It comes with a steel cap.
-</description >
-</armor>
-<armor  name="Full Plate" cost="1500" type="Heavy" maxdex="1" bonus="8" spellfailure="35" checkpenalty="-6" weight="50" speed="20" speed20="15" speed30="20" >
-<description >This armor consists of shaped and fitted metal plates riveted and interlocked to cover the entire body. It includes gauntlets, heavy leather boots, and a visored helmet.
-</description >
-</armor>
-<armor  name="Half-Plate" cost="600" type="Heavy" maxdex="0" bonus="7" spellfailure="40" checkpenalty="-7" weight="50" speed="20" speed20="15" speed30="20" >
-<description >This armor is a combination of chainmail with metal plates (breastplate, epaulettes, elbow guards, gauntlets, tasses, and greaves) covering vital areas. Buckles and straps hold the whole suit together and distribute the weight, but the armor still hangs more loosely than full plate. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Hide" cost="15" type="Medium" maxdex="4" bonus="3" spellfailure="20" checkpenalty="-3" weight="25" speed="20" speed20="15" speed30="20" >
-<description >This armor is prepared from multiple layers of leather and animal hides. It is stiff and hard to move in.
-</description >
-</armor>
-<armor  name="Large SteelShield" cost="20" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="15" speed="30" speed20="20" speed30="30" >
-<description >A large shield is too heavy to use the shield hand for anything else.
-</description >
-</armor>
-<armor  name="Large Wooden Shield" cost="7" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="10" speed="30" speed20="20" speed30="30" >
-<description >A large shield is too heavy to use the shield hand for anything else.
-</description >
-</armor>
-<armor  name="Leather" cost="10" type="Light" maxdex="6" bonus="2" spellfailure="10" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
-<description >The breastplate and shoulder protectors of this armor are made of leather that has been stiffened by boiling in oil. The rest of the armor is softer and more flexible leather.
-</description >
-</armor>
-<armor  name="Padded" cost="5" type="Light" maxdex="8" bonus="1" spellfailure="5" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
-<description >Padded armor features quilted layers of cloth and batting.
-</description >
-</armor>
-<armor  name="Samll Steel Shield" cost="9" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="6" speed="30" speed20="20" speed30="30" >
-<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
-</description >
-</armor>
-<armor  name="Scale Mail" cost="50" type="Medium" maxdex="3" bonus="4" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
-<description >This is a coat and leggings (and perhaps a separate skirt) of leather covered with overlapping pieces of metal, much like the scales of a fish. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Small Wooden Shield" cost="300" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
-<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
-</description >
-</armor>
-<armor  name="Splint mail" cost="200" type="Heavy" maxdex="0" bonus="6" spellfailure="40" checkpenalty="-7" weight="45" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of narrow vertical strips of metal riveted to a backing of leather that is worn over cloth padding. Flexible chainmail protects the joints. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Studded Leather" cost="25" type="Light" maxdex="5" bonus="3" spellfailure="15" checkpenalty="-1" weight="20" speed="30" speed20="20" speed30="30" >
-<description >This armor is made from tough but flexible leather (not hardened leather as with normal leather armor) reinforced with close-set metal rivets.
-</description >
-</armor>
-<armor  name="Tower Shield" cost="30" type="Shield" maxdex="100" bonus="0" spellfailure="50" checkpenalty="-10" weight="45" speed="30" speed20="20" speed30="30" >
-<description >This massive wooden shield is nearly as tall as the wielder. Basically, it is a portable wall meant to provide cover. It can provide up to total cover, depending on how far a character comes out from behind it. A tower shield, however, does not provide cover against targeted spells; a spellcaster can cast a spell on a character by targeting the shield. A tower shield cannot be used for the shield bash action.
-</description >
-</armor>
-<armor  name="Ring of Protection +1" cost="xx" type="Ring" maxdex="100" bonus="1" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
-<description >A ring that gives Plus 1 AC
-</description >
-</armor>
-<armor  name="Monk Wisdom Bonus" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
-<description >Bonus is Based on wisdom Bonus, and can not be removed unless I am uncontius
-</description >
-</armor>
-<armor  name="Inertial Armor Feat" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
-<description >Armor Bonus based on the feat
-</description >
-</armor>
-</ac>
+<ac>
+<armor  name="Banded mail" cost="250" type="Heavy" maxdex="1" bonus="6" spellfailure="35" checkpenalty="-6" weight="35" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of overlapping strips of metal sewn to a backing of leather and chainmail. The strips cover vulnerable areas, while the chain and leather protect the joints and provide freedom of movement. Straps and buckles distribute the weight evenly. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Breastplate" cost="200" type="Medium" maxdex="3" bonus="5" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
+<description >A breastplate covers the front and back. It comes with a helmet and matching greaves (plates to cover the lower legs). A light suit or skirt of studded leather beneath the breastplate protects limbs without restricting
+movement much.
+</description >
+</armor>
+<armor  name="Buckler" cost="15" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
+<description >This small metal shield is strapped to the forearm, allowing it to be worn and still use the hand. A bow or crossbow can be used without penalty. An off-hand weapon can be used, but a -1 penalty on attack rolls is imposed because of the extra weight on your arm. This penalty stacks with those for fighting with the off hand and, if appropriate, for fighting with two weapons. In any case, if a weapon is used in the off-hand, the character doesn't get the buckler's AC bonus for the rest of the round.
+</description >
+</armor>
+<armor  name="Chainmail" cost="150" type="Medium" maxdex="2" bonus="5" spellfailure="30" checkpenalty="-5" weight="40" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of interlocking metal rings. It includes a layer of quilted fabric underneath it to prevent chafing and to cushion the impact of blows. Several layers of mail are hung over vital areas. Most of the armor's weight hangs from the shoulders, making chainmail uncomfortable to wear for long periods of time. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Chainshirt" cost="100" type="Light" maxdex="4" bonus="4" spellfailure="20" checkpenalty="-2" weight="25" speed="30" speed20="20" speed30="30" >
+<description >A shirt of chainmail protects the torso while leaving the limbs free and mobile. A layer of quilted fabric underneath it prevents chafing and cushions the impact of blows. It comes with a steel cap.
+</description >
+</armor>
+<armor  name="Full Plate" cost="1500" type="Heavy" maxdex="1" bonus="8" spellfailure="35" checkpenalty="-6" weight="50" speed="20" speed20="15" speed30="20" >
+<description >This armor consists of shaped and fitted metal plates riveted and interlocked to cover the entire body. It includes gauntlets, heavy leather boots, and a visored helmet.
+</description >
+</armor>
+<armor  name="Half-Plate" cost="600" type="Heavy" maxdex="0" bonus="7" spellfailure="40" checkpenalty="-7" weight="50" speed="20" speed20="15" speed30="20" >
+<description >This armor is a combination of chainmail with metal plates (breastplate, epaulettes, elbow guards, gauntlets, tasses, and greaves) covering vital areas. Buckles and straps hold the whole suit together and distribute the weight, but the armor still hangs more loosely than full plate. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Hide" cost="15" type="Medium" maxdex="4" bonus="3" spellfailure="20" checkpenalty="-3" weight="25" speed="20" speed20="15" speed30="20" >
+<description >This armor is prepared from multiple layers of leather and animal hides. It is stiff and hard to move in.
+</description >
+</armor>
+<armor  name="Large SteelShield" cost="20" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="15" speed="30" speed20="20" speed30="30" >
+<description >A large shield is too heavy to use the shield hand for anything else.
+</description >
+</armor>
+<armor  name="Large Wooden Shield" cost="7" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="10" speed="30" speed20="20" speed30="30" >
+<description >A large shield is too heavy to use the shield hand for anything else.
+</description >
+</armor>
+<armor  name="Leather" cost="10" type="Light" maxdex="6" bonus="2" spellfailure="10" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
+<description >The breastplate and shoulder protectors of this armor are made of leather that has been stiffened by boiling in oil. The rest of the armor is softer and more flexible leather.
+</description >
+</armor>
+<armor  name="Padded" cost="5" type="Light" maxdex="8" bonus="1" spellfailure="5" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
+<description >Padded armor features quilted layers of cloth and batting.
+</description >
+</armor>
+<armor  name="Samll Steel Shield" cost="9" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="6" speed="30" speed20="20" speed30="30" >
+<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
+</description >
+</armor>
+<armor  name="Scale Mail" cost="50" type="Medium" maxdex="3" bonus="4" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
+<description >This is a coat and leggings (and perhaps a separate skirt) of leather covered with overlapping pieces of metal, much like the scales of a fish. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Small Wooden Shield" cost="300" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
+<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
+</description >
+</armor>
+<armor  name="Splint mail" cost="200" type="Heavy" maxdex="0" bonus="6" spellfailure="40" checkpenalty="-7" weight="45" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of narrow vertical strips of metal riveted to a backing of leather that is worn over cloth padding. Flexible chainmail protects the joints. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Studded Leather" cost="25" type="Light" maxdex="5" bonus="3" spellfailure="15" checkpenalty="-1" weight="20" speed="30" speed20="20" speed30="30" >
+<description >This armor is made from tough but flexible leather (not hardened leather as with normal leather armor) reinforced with close-set metal rivets.
+</description >
+</armor>
+<armor  name="Tower Shield" cost="30" type="Shield" maxdex="100" bonus="0" spellfailure="50" checkpenalty="-10" weight="45" speed="30" speed20="20" speed30="30" >
+<description >This massive wooden shield is nearly as tall as the wielder. Basically, it is a portable wall meant to provide cover. It can provide up to total cover, depending on how far a character comes out from behind it. A tower shield, however, does not provide cover against targeted spells; a spellcaster can cast a spell on a character by targeting the shield. A tower shield cannot be used for the shield bash action.
+</description >
+</armor>
+<armor  name="Ring of Protection +1" cost="xx" type="Ring" maxdex="100" bonus="1" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
+<description >A ring that gives Plus 1 AC
+</description >
+</armor>
+<armor  name="Monk Wisdom Bonus" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
+<description >Bonus is Based on wisdom Bonus, and can not be removed unless I am uncontius
+</description >
+</armor>
+<armor  name="Inertial Armor Feat" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
+<description >Armor Bonus based on the feat
+</description >
+</armor>
+</ac>
--- a/data/dnd35/dnd35character.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/dnd35character.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,113 +1,113 @@
-
-<nodehandler class="d20char_handler" icon="knight" module="d20" name="D20 Character Tool">
-<howtouse>
-<howto>
-To use this you do:
-
-To use this you just need to add all the stuff you wish, set your stats ect, then click on the
-+(plus) next too the gears, and right click.
-
-This will cause it to roll what is needed to roll, except dmg on spells, you will still need to
-roll that normaly, I will work on a way to add it, but for now it isnt required.
-</howto>
-</howtouse>
-  <general>
-    <name>Player Name</name>
-    <player>Your Name</player>
-    <race>none</race>
-    <alignment abbr="LG">none</alignment>
-    <deity>none</deity>
-    <size acmodifier="0">none</size>
-    <height>none</height>
-    <weight>none</weight>
-    <age>none</age>
-    <gender>none</gender>
-    <eyes>none</eyes>
-    <hair>none</hair>
-    <speed>30</speed>
-  </general>
-  <classes level="0"/>
-  <abilities>
-    <stat abbr="Str" base="0" name="Strength"/>
-    <stat abbr="Dex" base="0" name="Dexterity"/>
-    <stat abbr="Con" base="0" name="Constitution"/>
-    <stat abbr="Int" base="0" name="Intelligence"/>
-    <stat abbr="Wis" base="0" name="Wisdom"/>
-    <stat abbr="Cha" base="0" name="Charisma"/>
-  </abilities>
-<inventory>
-<plat>0</plat>
-<gold>0</gold>
-<silver>0</silver>
-<copper>0</copper>
-<generalgear>None</generalgear>
-<magicalgear>None</magicalgear>
-</inventory>
-  <saves>
-    <save base="0" magmod="0" miscmod="0" name="Fortitude" stat="Con"/>
-    <save base="0" magmod="0" miscmod="0" name="Reflex" stat="Dex"/>
-    <save base="0" magmod="0" miscmod="0" name="Will" stat="Wis"/>
-  </saves>
-  <hp current="0" max="0"/>
-  <pp current1="0" free="0" max1="0" maxfree="0"/>
-  <skills>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Alchemy" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Animal Empathy" rank="0" stat="Cha" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Appraise" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Balance" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Bluff" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="1" crossclass="1" misc="0" name="Climb" rank="0" stat="Str" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Concetration" rank="0" stat="Con" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Craft" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Decipher Script" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Diplomacy" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Disable Device" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Disguise" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Escape Artist" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Forgery" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Gather Information" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Handle Animal" rank="0" stat="Cha" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Heal" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Hide" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Innuendo" rank="0" stat="Wis" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Intimidate" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Intuit Direction" rank="0" stat="Wis" untrained="0"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Jump" rank="0" stat="Str" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Arcana" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Architecture and Engineering" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Geography" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: History" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Local" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nature" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nobility and Royalty" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: The Planes" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Religion" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Listen" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Move Silently" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Open Lock" rank="0" stat="Dex" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Perform" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Pick Pocket" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Profession" rank="0" stat="Wis" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Read Lips" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Ride" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Scry" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Search" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Sense Motive" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Spellcraft" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Spot" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Swim" rank="0" stat="Str" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Tumble" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Use Magic Device" rank="0" stat="Cha" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Use Rope" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Wilderness Lore" rank="0" stat="Wis" untrained="1"/>
-  </skills>
-  <feats/>
-  <spells/>
-  <powers/>
-<divine/>
-  <attacks>
-    <melee base="0" misc="0"/>
-    <ranged base="0" misc="0"/>
-  </attacks>
-  <ac misc="" natural=""/>
-</nodehandler>
+
+<nodehandler class="d20char_handler" icon="knight" module="d20" name="D20 Character Tool">
+<howtouse>
+<howto>
+To use this you do:
+
+To use this you just need to add all the stuff you wish, set your stats ect, then click on the
++(plus) next too the gears, and right click.
+
+This will cause it to roll what is needed to roll, except dmg on spells, you will still need to
+roll that normaly, I will work on a way to add it, but for now it isnt required.
+</howto>
+</howtouse>
+  <general>
+    <name>Player Name</name>
+    <player>Your Name</player>
+    <race>none</race>
+    <alignment abbr="LG">none</alignment>
+    <deity>none</deity>
+    <size acmodifier="0">none</size>
+    <height>none</height>
+    <weight>none</weight>
+    <age>none</age>
+    <gender>none</gender>
+    <eyes>none</eyes>
+    <hair>none</hair>
+    <speed>30</speed>
+  </general>
+  <classes level="0"/>
+  <abilities>
+    <stat abbr="Str" base="0" name="Strength"/>
+    <stat abbr="Dex" base="0" name="Dexterity"/>
+    <stat abbr="Con" base="0" name="Constitution"/>
+    <stat abbr="Int" base="0" name="Intelligence"/>
+    <stat abbr="Wis" base="0" name="Wisdom"/>
+    <stat abbr="Cha" base="0" name="Charisma"/>
+  </abilities>
+<inventory>
+<plat>0</plat>
+<gold>0</gold>
+<silver>0</silver>
+<copper>0</copper>
+<generalgear>None</generalgear>
+<magicalgear>None</magicalgear>
+</inventory>
+  <saves>
+    <save base="0" magmod="0" miscmod="0" name="Fortitude" stat="Con"/>
+    <save base="0" magmod="0" miscmod="0" name="Reflex" stat="Dex"/>
+    <save base="0" magmod="0" miscmod="0" name="Will" stat="Wis"/>
+  </saves>
+  <hp current="0" max="0"/>
+  <pp current1="0" free="0" max1="0" maxfree="0"/>
+  <skills>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Alchemy" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Animal Empathy" rank="0" stat="Cha" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Appraise" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Balance" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Bluff" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="1" crossclass="1" misc="0" name="Climb" rank="0" stat="Str" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Concetration" rank="0" stat="Con" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Craft" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Decipher Script" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Diplomacy" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Disable Device" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Disguise" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Escape Artist" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Forgery" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Gather Information" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Handle Animal" rank="0" stat="Cha" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Heal" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Hide" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Innuendo" rank="0" stat="Wis" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Intimidate" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Intuit Direction" rank="0" stat="Wis" untrained="0"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Jump" rank="0" stat="Str" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Arcana" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Architecture and Engineering" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Geography" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: History" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Local" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nature" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nobility and Royalty" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: The Planes" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Religion" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Listen" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Move Silently" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Open Lock" rank="0" stat="Dex" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Perform" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Pick Pocket" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Profession" rank="0" stat="Wis" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Read Lips" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Ride" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Scry" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Search" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Sense Motive" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Spellcraft" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Spot" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Swim" rank="0" stat="Str" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Tumble" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Use Magic Device" rank="0" stat="Cha" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Use Rope" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Wilderness Lore" rank="0" stat="Wis" untrained="1"/>
+  </skills>
+  <feats/>
+  <spells/>
+  <powers/>
+<divine/>
+  <attacks>
+    <melee base="0" misc="0"/>
+    <ranged base="0" misc="0"/>
+  </attacks>
+  <ac misc="" natural=""/>
+</nodehandler>
--- a/data/dnd35/dnd35classes.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/dnd35classes.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,779 +1,779 @@
-<classes>
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 107" name="Adept" hd="d?" desc="This NPC class possesses a combination of arcane and divine skills." />
-    <class level="1" book="Heroes of Horror page 82" name="Archivist" hd="d?" desc="Archivists seek out esoteric sources of divine lore, wherever those sources might be, securing those secrets for themselves and their fellow scholars." />
-    <class level="1" book="Complete Psionic page 5" name="Ardent" hd="d?" desc="An ardent's pursuit of various cosmic philosophies gives her access to psionic power in a unique way: through psionic mantles." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 108" name="Aristocrat" hd="d?" desc="This NPC class contains people who are usually educated, wealthy individual who were born into high position." />
-    <class level="1" book="Eberron Campaign Setting page 29" name="Artificer" hd="d?" desc="Artificers are perhaps the ultimate magical dabblers." />
-    <class level="1" book="Player's Handbook v.3.5 page 24" name="Barbarian" hd="d?" desc="A ferocious warrior who uses fury and instinct to bring down foes." />
-    <class level="1" book="Player's Handbook v.3.5 page 26" name="Bard" hd="d?" desc="A performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades." />
-    <class level="1" book="Unearthed Arcana page 49" name="Bardic Sage" hd="d?" desc="A variant bard who focues his efforts on learning, research, and the power of knowledge." />
-    <class level="1" book="Unearthed Arcana page 56" name="Battle Sorcerer" hd="d?" desc="A variant sorcerer who is a capable physical combatant." />
-    <class level="1" book="Player's Handbook II page 6" name="Beguiler" hd="d?" desc="If you delight in manipulating others, either to their disadvantage or for their own good, then the beguiler is the class for you." />
-    <class level="1" book="Tome of Magic page 9" name="Binder" hd="d?" desc="By drawing their seals and speaking words of power, the binder summons strange entities, bargains with them, and binds them to his service." />
-    <class level="1" book="Player's Handbook v.3.5 page 30" name="Cleric" hd="d?" desc="A master of divine magic and a capable warrior as well." />
-    <class level="1" book="Unearthed Arcana page 50" name="Cloistered Cleric" hd="d?" desc="A variant cleric who spends more time than other clerics in study and prayer and less in martial training." />
-    <class level="1" book="Dragonlance Campaign Setting page 46" name="Commoner" hd="d?" desc="This NPC class contains the laborers of the world, such as innkeepers, servants, blacksmiths, farmers, and fisherfolk." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 8" name="Crusader" hd="d?" desc="Devoted knight, divine agent, instrument of vengeance, peerless fighting machine -- the crusader is a warrior dedicated to good, evil, law, chaos, or some other cause." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 41" name="Death's Chosen " hd="d?" desc="If chosen by his would-be undead master, a death's chosen serves as the master's living minion." />
-    <class level="1" book="Unearthed Arcana page 50" name="Divine Bard" hd="d?" desc="A variant bard who derives his special power from a divine tradition." />
-    <class level="1" book="Complete Psionic page 9" name="Divine Mind" hd="d?" desc="A divine mind is a psionic character who channels the power of the divine through pisonic talent instead of faith." />
-    <class level="1" book="Unearthed Arcana page 57" name="Domain Wizard" hd="d?" desc="A variant wizard who uses the arcane domain system and selects a specific domain of spells." />
-    <class level="1" book="Player's Handbook II page 11" name="Dragon Shaman" hd="d?" desc="If you gaze at dragons with awe and aspire to share their power and majesty, then the dragon shaman is the class for you." />
-    <class level="1" book="Dragon Magic page 24" name="Dragonfire Adept" hd="d?" desc="Whether they are bold champions defending the weak and downtrodden, or merciless raiders seeking might and riches, dragonfire adepts are imposing figures who command the magic of dragonkind." />
-    <class level="1" book="Heroes of Horror page 84" name="Dread Necromancer" hd="d?" desc="A practitioner of vile and forbidden arts, the dread necromancer roots about in graveyards, searching out moldering components for her obscene spells." />
-    <class level="1" book="Player's Handbook v.3.5 page 33" name="Druid" hd="d?" desc="One who draws energy from the natural world to cast divine spells and gain strange magical powers." />
-    <class level="1" book="Unearthed Arcana page 51" name="Druidic Avenger" hd="d?" desc="A variant druid who channels her inner fury to wreak vengeance upon those who injure the natural world." />
-    <class level="1" book="Complete Psionic page 144" name="Duergar Racial Class" hd="d?" desc="The duergar, or gray dwarves, lead lives of neverending toil in great underground foundry-cities." />
-    <class level="1" book="Player's Handbook II page 19" name="Duskblade" hd="d?" desc="If you find you can't choose between being an arcane spellcaster who zaps your enemies with powerful spells and a nimble, powerful front-line melee character who lays them low with a sword, the duskblade is the perfect class for you." />
-    <class level="1" book="Races of Stone page 146" name="Dwarf Cleric" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Stone page 146" name="Dwarf Fighter" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Stone page 147" name="Dwarf Sorcerer" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Ghostwalk page 16" name="Eidolon" hd="d?" desc="This variant class for ghosts emphasizes fighting abilities." />
-    <class level="1" book="Ghostwalk page 17" name="Eidoloncer" hd="d?" desc="This variant class for ghosts emphasizes spellcasting abilities." />
-    <class level="1" book="Races of the Wild page 155" name="Elf Paladin" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of the Wild page 155" name="Elf Ranger" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of the Wild page 157" name="Elf Wizard" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Epic Level Handbook page 8" name="Epic Barbarian" hd="d?" desc="An epic ferocious warrior who uses fury and instinct to bring down foes." />
-    <class level="1" book="Epic Level Handbook page 9" name="Epic Bard" hd="d?" desc="An epic performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades." />
-    <class level="1" book="Epic Level Handbook page 10" name="Epic Cleric" hd="d?" desc="An epic master of divine magic and a capable warrior as well." />
-    <class level="1" book="Epic Level Handbook page 10" name="Epic Druid" hd="d?" desc="An epic druid draws energy from the natural world to cast divine spells and gain strange magical powers." />
-    <class level="1" book="Epic Level Handbook page 11" name="Epic Fighter" hd="d?" desc="An epic warrior with exceptional combat capability and unequaled skill with weapons." />
-    <class level="1" book="Epic Level Handbook page 12" name="Epic Monk" hd="d?" desc="An epic martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers." />
-    <class level="1" book="Epic Level Handbook page 13" name="Epic Paladin" hd="d?" desc="An epic champion of justice and destroyer of evil, protected and strengthened by an array of divine powers." />
-    <class level="1" book="Epic Level Handbook page 22" name="Epic Psion" hd="d?" desc="An epic seeker after psionic secrets; a master of the mind and the thoughts of others." />
-    <class level="1" book="Epic Level Handbook page 23" name="Epic Psychic Warrior" hd="d?" desc="An epic warrior who combines combat skill with psionic powers." />
-    <class level="1" book="Epic Level Handbook page 14" name="Epic Ranger" hd="d?" desc="An epic cunning, skilled warrior of the wilderness." />
-    <class level="1" book="Epic Level Handbook page 14" name="Epic Rogue" hd="d?" desc="An epic tricky, skillful scout and spy who wins the battle by stealth rather than brute force." />
-    <class level="1" book="Epic Level Handbook page 15" name="Epic Sorcerer" hd="d?" desc="An epic spellcaster with inborn magical ability." />
-    <class level="1" book="Epic Level Handbook page 16" name="Epic Wizard" hd="d?" desc="An epic potent spellcaster schooled in the arcane arts." />
-    <class level="1" book="Complete Psionic page 153" name="Erudite (variant Psion)" hd="d?" desc="As an alternative to the standard psion class, the erudite is a psionic character who follows a scholarly and self-reflective road to power, instead of a merely self-conscious path like the psion follows." />
-    <class level="1" book="Dragonlance Campaign Setting page 46" name="Expert" hd="d?" desc="This NPC class contains people such as skilled artisans, specialist laborers, and ingenious inventors." />
-    <class level="1" book="Player's Guide to Faerun page 54" name="Eye Of Horus-re" hd="d?" desc="Eyes of Horus-Re are champions of good, sworn enemies of Set, and bane to undead." />
-    <class level="1" book="Complete Divine page 6" name="Favored Soul" hd="d?" desc="Favored souls cast divine spells by means of an innate connection rather than through laborious training and prayer, so their divine connection is natural rather than learned." />
-    <class level="1" book="Heroes of Horror page 102" name="Fiend-blooded" hd="d?" desc="With careful exploration, a spellcaster who feels a call from within can slowly bring the power of their fiendish lineage to the surface." />
-    <class level="1" book="Player's Handbook v.3.5 page 37" name="Fighter" hd="d?" desc="A warrior with exceptional combat capability and unequaled skill with weapons." />
-    <class level="1" book="Complete Adventurer page 51" name="Ghost-faced Killer" hd="d?" desc="Ghost-faced killers act as assassins and spies for hire, a mercenary clan that hides behind a guise of open and honorable conduct." />
-    <class level="1" book="Silver Marches page 109" name="Giant-killer" hd="d?" desc="Giant-killers are great heroes so long as they are killing giants." />
-    <class level="1" book="Complete Psionic page 146" name="Githyanki Racial Class" hd="d?" desc="Githyanki are an ancient race of martial humanoids residing on the Astral Plane." />
-    <class level="1" book="Complete Psionic page 147" name="Githzerai Racial Class" hd="d?" desc="The githzerai are attuned to the mysteries of the inner self and are considered a race of ascetics who harness the power of the mind and the spirit." />
-    <class level="1" book="Races of Stone page 147" name="Gnome Bard" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Complete Warrior page 36" name="Gnome Giant-slayer" hd="d?" desc="The gnome giant-slayer relies on a combination of agility, combat prowess, and pure craftiness to deal with foes." />
-    <class level="1" book="Races of Stone page 148" name="Gnome Illusionist" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Stone page 149" name="Gnome Ranger" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Stone page 150" name="Goliath Barbarian" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Stone page 151" name="Goliath Druid" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Stone page 152" name="Goliath Rogue" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Destiny page 158" name="Half-elf Barbarian" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Destiny page 157" name="Half-elf Bard" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Destiny page 159" name="Half-elf Druid" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Destiny page 157" name="Half-elf Fighter" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Destiny page 160" name="Half-elf Paladin" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of Destiny page 158" name="Half-elf Ranger" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Complete Psionic page 148" name="Half-giant Racial Class" hd="d?" desc="Human-giant hybrids, half-giants were bred by cruel sorcerer-kings who used them as warriors and laborers in a dry land." />
-    <class level="1" book="Races of the Wild page 157" name="Halfling Druid" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of the Wild page 158" name="Halfling Monk" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of the Wild page 159" name="Halfling Rogue" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Miniatures Handbook page 8" name="Healer" hd="d?" desc="A healer is adept both at detecting the ailments of allies and understanding the coarse, unruly thoughts of beasts." />
-    <class level="1" book="Complete Warrior page 5" name="Hexblade" hd="d?" desc="Combining the dynamic powers of martial prowess and arcane might, the hexblade presents a deadly challenge to opponents unused to such a foe." />
-    <class level="1" book="Magic of Incarnum page 20" name="Incarnate" hd="d?" desc="Incarnum is a tool you can use to manipulate the physical manifestations of moral and ethical forces and wield them in righteous pursuit of an ideal." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 65" name="King/queen Of The Wild" hd="d?" desc="Where nature's fury is at its height, there you'll find the kings and queens of the wild." />
-    <class level="1" book="Player's Handbook II page 24" name="Knight" hd="d?" desc="The knight class is a great choice if you want to play a tough, durable melee combatant whose strong personality allows you to manipulate your foes." />
-    <class level="1" book="Silver Marches page 112" name="Knight-errant Of Silverymoon" hd="d?" desc="Charged with the safety of the city of Silverymoon and its citizens, the professional fighting force known as the Knights in Silver is often all that stands between Silverymoon and the dangers of the frontier." />
-    <class level="1" book="Complete Psionic page 13" name="Lurk" hd="d?" desc="A lurk is a psionic character who has honed her mental talents to a deadly focus." />
-    <class level="1" book="Magic of Faerun page 32" name="Mage-killer" hd="d?" desc="Mage-killers master magic designed for combat against other spellcasters." />
-    <class level="1" book="Oriental Adventures page 236" name="Maho-bujin" hd="d?" desc="When Taint overcomes a character, she may find her way to the Festering Pit of Fu Leng and become a maho-bujin." />
-    <class level="1" book="Oriental Adventures page 237" name="Maho-tsukai" hd="d?" desc="Maho (blood magic) wielders are called maho-tsukai." />
-    <class level="1" book="Miniatures Handbook page 11" name="Marshal" hd="d?" desc="Trained in the basics of fighting, marshals possess a general knowledge of weapons and armor." />
-    <class level="1" book="Player's Handbook v.3.5 page 39" name="Monk" hd="d?" desc="A martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers." />
-    <class level="1" book="Dragonlance Campaign Setting page 47" name="Mystic" hd="d?" desc="Mystics are spellcasters who have learned to channel divine energy without worshiping (or even acknowledging) any deity." />
-    <class level="1" book="Complete Warrior page 63" name="Nature's Warrior" hd="d?" desc="Nature's warriors are defenders of the wild, protectors of the natural world . . . and often druids who have spent 'too much time' in wild shape form." />
-    <class level="1" book="Complete Adventurer page 5" name="Ninja" hd="d?" desc="Highly skilled spies and assassins, ninjas can master a broad range of skills and combat techniques." />
-    <class level="1" book="Dragonlance Campaign Setting page 50" name="Noble" hd="d?" desc="Nobles have the ability to use their background, education, natural charm, and skills in social maneuvering to their advantage in day-to-day lives." />
-    <class level="1" book="Dragon Magic page 46" name="Pact-bound Adept" hd="d?" desc="Pact-bound adepts are sorcerers who have learned to transcend their beliefs about spells and magic and embrace arcane power as dragons do." />
-    <class level="1" book="Player's Handbook v.3.5 page 42" name="Paladin" hd="d?" desc="A champion of justice and destroyer of evil, protected and strengthened by an array of divine powers." />
-    <class level="1" book="Unearthed Arcana page 53" name="Paladin Of Freedom" hd="d?" desc="A variant paladin who is dedicated to liberty and free thought." />
-    <class level="1" book="Unearthed Arcana page 53" name="Paladin Of Slaughter" hd="d?" desc="A variant paladin who is a brutal champion of chaos and evil, and who leaves only destruction trailing in his wake." />
-    <class level="1" book="Unearthed Arcana page 54" name="Paladin Of Tyranny" hd="d?" desc="A variant paladin who is a lawful evil villain bent on dominating those weaker than she." />
-    <class level="1" book="Complete Warrior page 13" name="Paladin Variant" hd="d?" desc="A variant paladin class." />
-    <class level="1" book="Unearthed Arcana page 55" name="Planar Ranger" hd="d?" desc="A variant ranger who roams the multiverse instead of the wilderness." />
-    <class level="1" book="Expanded Psionics Handbook page 19" name="Psion" hd="d?" desc="A seeker after psionic secrets; a master of the mind and the thoughts of others." />
-    <class level="1" book="Magic of Eberron page 42" name="Psionic Artificer" hd="d?" desc="Psionic artificers are similar to artificers, but they craft psionic items instead of magic items." />
-    <class level="1" book="Expanded Psionics Handbook page 24" name="Psychic Warrior" hd="d?" desc="A warrior who combines combat skill with psionic powers." />
-    <class level="1" book="Player's Handbook v.3.5 page 46" name="Ranger" hd="d?" desc="A cunning, skilled warrior of the wilderness." />
-    <class level="1" book="Complete Warrior page 13" name="Ranger Variant" hd="d?" desc="A variant ranger class." />
-    <class level="1" book="Races of the Wild page 160" name="Raptoran Cleric" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of the Wild page 161" name="Raptoran Fighter" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Races of the Wild page 157" name="Raptoran Sorcerer" hd="d?" desc="Racial substitution levels." />
-    <class level="1" book="Player's Handbook v.3.5 page 49" name="Rogue" hd="d?" desc="A tricky, skillful scout and spy who wins the battle by stealth rather than brute force." />
-    <class level="1" book="Complete Warrior page 8" name="Samurai" hd="d?" desc="Wielding their signature katana and wakizashi simultaneously, samurai are as potent in melee as a fighter, although they are less versatile." />
-    <class level="1" book="Unearthed Arcana page 50" name="Savage Bard" hd="d?" desc="A variant bard who is a warrior at heart and whose arcane powers strike fear into the enemies of his tribe." />
-    <class level="1" book="Sandstorm page 82" name="Scion Of Tem-et-nu" hd="d?" desc="Paladins of the temple of Tem-Et-Nu are sometimes selected to become the guardians of the rivers." />
-    <class level="1" book="Complete Adventurer page 10" name="Scout" hd="d?" desc="A scout has some training in weapons and a unique combat style that favors fast movement and devastating attacks." />
-    <class level="1" book="Tome of Magic page 111" name="Shadowcaster" hd="d?" desc="The shadowcaster understands the true, primal power of darkness, attunes herself to the Plane of Shadow, and learns great shadow mysteries the equal of any mundane spell." />
-    <class level="1" book="Oriental Adventures page 22" name="Shaman" hd="d?" desc="Shamans are intermediaries between the mortal world and the realm of spirits." />
-    <class level="1" book="Complete Divine page 10" name="Shugenja" hd="d?" desc="The shugenja is a divine spellcaster who casts spells by attuning himself to the primal energies around him and focusing such energy through his body to produce magical effects." />
-    <class level="1" book="Oriental Adventures page 27" name="Sohei" hd="d?" desc="Sohei are warrior monks." />
-    <class level="1" book="Player's Handbook v.3.5 page 51" name="Sorcerer" hd="d?" desc="A spellcaster with inborn magical ability." />
-    <class level="1" book="Magic of Incarnum page 25" name="Soulborn" hd="d?" desc="As a soulborn, you use incarnum to enhance your natural combat ability." />
-    <class level="1" book="Expanded Psionics Handbook page 26" name="Soulknife" hd="d?" desc="A warrior who fights with an idealized blade of personal mental energy." />
-    <class level="1" book="Unearthed Arcana page 59" name="Specialized Wizard Variants" hd="d?" desc="Each variant specialized class gives up one of the standard specialist's class abilities in exchange for a new ability unique to the variant specialist." />
-    <class level="1" book="Unearthed Arcana page 77" name="Spellcaster" hd="d?" desc="A generic class that has an array of magical effects at her beck and call." />
-    <class level="1" book="Complete Adventurer page 13" name="Spellthief" hd="d?" desc="Spellthieves use skill and arcane magic to drain the abilities of their opponents and turn their foes' own powers against them." />
-    <class level="1" book="Complete Divine page 14" name="Spirit Shaman" hd="d?" desc="By bargaining with living spirits, the spirit shaman gains power over the natural world and mighty divine magic." />
-    <class level="1" book="Complete Warrior page 11" name="Swashbuckler" hd="d?" desc="The swashbuckler embodies the concepts of daring and panache." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 15" name="Swordsage" hd="d?" desc="A master of martial maneuvers, the sword sage is a physical adept -- a blade wizard whose knowledge of the Sublime Way lets him unlock potent abilities, many of which are overtly supernatural or magical in nature." />
-    <class level="1" book="Complete Adventurer page 83" name="Thief-acrobat" hd="d?" desc="A thief-acrobat excels in getting in and getting out." />
-    <class level="1" book="Book of Vile Darkness page 68" name="Thrall Of Graz'zt" hd="d?" desc="The thrall of Graz'zt is a sinister, conniving, and thoroughly evil master of arcane lore and dark secrets." />
-    <class level="1" book="Complete Psionic page 149" name="Thri-kreen Racial Class" hd="d?" desc="Fierce hunters and faultless trackers, the thri-kreen are a race of insectfolk sometimes known as mantis warriors." />
-    <class level="1" book="Unearthed Arcana page 51" name="Thug" hd="d?" desc="A variant fighter who is a street fighter and a survivor who learns to mix brute force with a bit of craftiness." />
-    <class level="1" book="Unearthed Arcana page 48" name="Totem Barbarian" hd="d?" desc="A variant barbarian who dedicates himself to a totem creature." />
-    <class level="1" book="Magic of Incarnum page 29" name="Totemist" hd="d?" desc="You channel the soul energy of magical beasts to make your soulmelds and claim them as your totems to acquire a share in their power." />
-    <class level="1" book="Tome of Magic page 198" name="Truenamer" hd="d?" desc="If you want to understand the secret language of the universe, the truenamer class is for you." />
-    <class level="1" book="Book of Vile Darkness page 72" name="Ur-priest" hd="d?" desc="A small number of ur-priests have learned to tap into divine power and use it without praying to or worshiping a god." />
-    <class level="1" book="Sharn: City of Towers page 167" name="Urban Adept" hd="d?" desc="A variant adept for Sharn." />
-    <class level="1" book="Unearthed Arcana page 55" name="Urban Ranger" hd="d?" desc="A variant ranger who stalks the treacherous streets of the city." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 20" name="Warblade" hd="d?" desc="The warblade was born for conflict. Swift, strong, enduring, and utterly confident in his martial skills, he seeks to test himself against worthy foes." />
-    <class level="1" book="Complete Arcane page 5" name="Warlock" hd="d?" desc="A supernatural character whose sinister powers are inborn abilities, not spells." />
-    <class level="1" book="Complete Arcane page 10" name="Warmage" hd="d?" desc="A militant spellcaster whose training focuses on battlefield magic." />
-    <class level="1" book="Dragonlance Campaign Setting page 53" name="Warrior" hd="d?" desc="This NPC class contains people such as soldiers, guards, and militia." />
-    <class level="1" book="Oriental Adventures page 53" name="Weapon Master (kensei)" hd="d?" desc="For weapon masters, the perfection of kiis found in the mastery of a single melee weapon." />
-    <class level="1" book="Expanded Psionics Handbook page 29" name="Wilder" hd="d?" desc="A passionate, reckless talent who wields uncontrolled psionic power." />
-    <class level="1" book="Unearthed Arcana page 56" name="Wilderness Rogue" hd="d?" desc="A variant rogue who prefers to put her skills to use in the great outdoors." />
-    <class level="1" book="Player's Handbook v.3.5 page 55" name="Wizard" hd="d?" desc="A potent spellcaster schooled in the arcane arts." />
-    <class level="1" book="Oriental Adventures page 30" name="Wu Jen" hd="d?" desc="Wu jen are spellcasters with mysterious powers." />
-    <class level="1" book="Savage Species page 97" name="Yuan-ti Cultist" hd="d?" desc="The mysteries of the evil deities of the yuan-ti are mastered by yuan-ti cultist masters." />
-    <class level="1" book="Lords of Madness page 182" name="Abolisher {Prestige Class}" hd="d?" desc="The abolisher is a crusader against that which taints, usurps, and replaces the ordered nature of things with alien desires and monstrous needs." />
-    <class level="1" book="Complete Mage page 50" name="Aburant Champion {Prestige Class}" hd="d?" desc="A warrior who dabbles in abjuration magic." />
-    <class level="1" book="Tome of Magic page 204" name="Acolyte Of The Ego {Prestige Class}" hd="d?" desc="By learning to speak their own truenames, acolytes of the ego strive to unlock hidden powers lost to the cosmos." />
-    <class level="1" book="Complete Arcane page 19" name="Acolyte Of The Skin {Prestige Class}" hd="d?" desc="Acolytes of the skin seek to gain power by replacing their skin with that of a demon's." />
-    <class level="1" book="Epic Level Handbook page 24" name="Agent Retriever {Prestige Class}" hd="d?" desc="Finding items, especially long-lost ones, is an agent retriever's specialty." />
-    <class level="1" book="Unapproachable East page 18" name="Aglarondan Griffonrider {Prestige Class}" hd="d?" desc="Soaring above the Yuirwood and the coasts of Aglarond, the famed Aglarondan griffonriders are an elite force of aerial knights who serve the Simbul and defend their homeland against attack." />
-    <class level="1" book="Oriental Adventures page 220" name="Akodo Champion {Prestige Class}" hd="d?" desc="Akodo champions are the leaders of the mighty army of the Lion clan." />
-    <class level="1" book="Magic of Eberron page 53" name="Alchemist Savant {Prestige Class}" hd="d?" desc="The alchemist savant excels in the capacity to break down the normal barriers that lie between alchemy and magic, between potion and alchemical fluid, between science and art." />
-    <class level="1" book="Complete Arcane page 21" name="Alienist {Prestige Class}" hd="d?" desc="Alienists deal with powers and entities from terrifyingly remote reaches of space and time." />
-    <class level="1" book="Complete Psionic page 17" name="Anarchic Initiate {Prestige Class}" hd="d?" desc="The anarchic initiate is more than a wilder; he is an initiate to the truth that underlies the wildness in the depth of his being." />
-    <class level="1" book="Serpent Kingdoms page 159" name="Ancient Master {Prestige Class}" hd="d?" desc="Those yuan-ti who grow mightier of mind and gain additional psionic powers are called ancient masters." />
-    <class level="1" book="Tome of Magic page 50" name="Anima Mage {Prestige Class}" hd="d?" desc="Anima mages see vestiges as mere tools, no different from spell component pouches or a wand of fireball." />
-    <class level="1" book="Complete Adventurer page 22" name="Animal Lord {Prestige Class}" hd="d?" desc="Each animal lord forms a bond with one group of animals." />
-    <class level="1" book="Book of Exalted Deeds page 49" name="Anointed Knight {Prestige Class}" hd="d?" desc="The anointed knight is a holy soldier who has taken great pains to learn the intricacies of alchemy in order to become a more capable combatant." />
-    <class level="1" book="Book of Exalted Deeds page 51" name="Apostle Of Peace {Prestige Class}" hd="d?" desc="The apostle of peace is an advocate for nonviolent resolution of conflict." />
-    <class level="1" book="Faiths &amp; Pantheons page 182" name="Arachne {Prestige Class}" hd="d?" desc="Arachnes are priestesses of Lolth who have risen to the pinnacle of drow society, worshiping Lolth only for the power she grants." />
-    <class level="1" book="Ghostwalk page 19" name="Arboreal Guardian {Prestige Class}" hd="d?" desc="Within the Spirit Wood are the Arboreal Guardians, men and women dedicated to protecting and ministering the living repositories of elf and half-elf spirits." />
-    <class level="1" book="Underdark page 28" name="Arcachnomancer {Prestige Class}" hd="d?" desc="Many creatures of the Underdark are drawn to the power of the spider and that of the master of spiders -- the arachnomancer." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 176" name="Arcane Archer {Prestige Class}" hd="d?" desc="The arcane archer is a warrior skilled in using magic to supplement her combat prowess." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 40" name="Arcane Devotee {Prestige Class}" hd="d?" desc="Arcane devotees complement the divine magic of a church's clerical leaders and are among the most important and respected members of a deity's following." />
-    <class level="1" book="Races of the Wild page 108" name="Arcane Hierophant  {Prestige Class}" hd="d?" desc="Arcane hierophants wield a blending of arcane magic and divine magic with a heavy emphasis on nature and the elements." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 177" name="Arcane Trickster {Prestige Class}" hd="d?" desc="Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 178" name="Archmage {Prestige Class}" hd="d?" desc="The most advanced practitioners of arcane magic are frequently archmages." />
-    <class level="1" book="Planar Handbook page 55" name="Ardent Dilettante  {Prestige Class}" hd="d?" desc="A diversity of interests and a moderate level of ability in one skill can lead one to become an ardent dilettante." />
-    <class level="1" book="Faiths of Eberron page 70" name="Argent Fist {Prestige Class}" hd="d?" desc="Only a precious few possess the focus, the dedication, and the physical prowess to master the abilities of the argent fist, but few enemies can stand against those who do." />
-    <class level="1" book="Complete Arcane page 24" name="Argent Savant {Prestige Class}" hd="d?" desc="The argent savant regards spells that evoke or apply magical force as the noblest and most fascinating spells at her disposal." />
-    <class level="1" book="Sandstorm page 66" name="Ashworm Dragoon  {Prestige Class}" hd="d?" desc="Ashworm dragoons have formed a bond with a single ashworm that is so strong that it is almost an extension of their wills." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 180" name="Assassin {Prestige Class}" hd="d?" desc="The assassin is the master of dealing quick, lethal blows." />
-    <class level="1" book="Planar Handbook page 63" name="Astral Dancer {Prestige Class}" hd="d?" desc="A few skilled combatants learn to take advantage of conditions on the Astral Plane." />
-    <class level="1" book="Races of Eberron page 133" name="Atavist  {Prestige Class}" hd="d?" desc="The discipline of an atavist strengthens his bond to the ancestral spirit and to all other kalashtar that have embraced their unique heritage." />
-    <class level="1" book="Faiths &amp; Pantheons page 184" name="Auspician {Prestige Class}" hd="d?" desc="Auspicians, who manipulate luck as if it were the strings of a worn mandolin, give credence to their claims." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 46" name="Bane Of Infidels {Prestige Class}" hd="d?" desc="The bane of infidels is the leader of a xenophobic tribe." />
-    <class level="1" book="Oriental Adventures page 34" name="Battle Maiden {Prestige Class}" hd="d?" desc="Battle maidens are the stuff of wonder and legend, an order of mounted female samurai whose swift, fearless attacks are renowned throughout the world." />
-    <class level="1" book="Unearthed Arcana page 164" name="Battle Scion {Prestige Class}" hd="d?" desc="This prestige class is for the wielders of legendary weapons made for the hands of fighters, barbarians, rangers, monks, and the occasional paladin." />
-    <class level="1" book="Races of Faerun page 178" name="Battlerager  {Prestige Class}" hd="d?" desc="Dwarven battleragers, or kuldjargh ('axe idiots'), are legendary berserker warriors who can enter a battle frenzy through ritualist singing." />
-    <class level="1" book="Races of Stone page 97" name="Battlesmith  {Prestige Class}" hd="d?" desc="A battlesmith is a skilled dwarf armorer and weaponsmith who uses her experience in battle, as well as her masterful weaponsmithing and armorsmithing abilities, to create deadly items for her kinsmen to wield in defense of their homes." />
-    <class level="1" book="Oriental Adventures page 225" name="Bayushi Deceiver {Prestige Class}" hd="d?" desc="The Bayushi are charged with the dirtiest work in the empire." />
-    <class level="1" book="Complete Warrior page 16" name="Bear Warrior {Prestige Class}" hd="d?" desc="Bear warriors, through a special relationship with bear spirits, literally adopt a bear's strength in the rage of battle, actually transforming into bears while they fight." />
-    <class level="1" book="Complete Adventurer page 26" name="Beastmaster {Prestige Class}" hd="d?" desc="A beastmaster feels more at home among the animals of nature than fellow sentient beings." />
-    <class level="1" book="Monster Compendium: Monsters of Faerun page 21" name="Beholder Mage  {Prestige Class}" hd="d?" desc="Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race." />
-    <class level="1" book="Lords of Madness page 42" name="Beholder Mage {Prestige Class}" hd="d?" desc="Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race." />
-    <class level="1" book="Book of Exalted Deeds page 53" name="Beloved Of Valarian {Prestige Class}" hd="d?" desc="The beloved of Valarian are women who have foresworn the love of mortals to dedicate themselves entirely to the unicorn deity Valarian." />
-    <class level="1" book="Tome of Magic page 208" name="Bereft {Prestige Class}" hd="d?" desc="The bereft are a group of truenamers who devote themselves to mastering the word of unmaking, a powerful component of Truespeech purportedly able to unravel creation." />
-    <class level="1" book="Deities and Demigods page 201" name="Berserk {Prestige Class}" hd="d?" desc="Berserks are warriors who dress themselves in bearskins, taking advantage of the fear most people have for wild animals and inviting the wild rage of the animal into the warrior's body." />
-    <class level="1" book="Champions of Ruin page 44" name="Black Blood Cultist {Prestige Class}" hd="d?" desc="Black Blood cultists are savage fighters whose natural attacks become more fearsome as they increase in level." />
-    <class level="1" book="Player's Guide to Faerun page 177" name="Black Blood Hunter {Prestige Class}" hd="d?" desc="Malar grants exceptional power to those who supplement their bestial level of evil with truly vile acts." />
-    <class level="1" book="Complete Divine page 21" name="Black Flame Zealot {Prestige Class}" hd="d?" desc="Trained in unholy rites, the black flame zealots use stealth, divine magic, and the zeal of fanaticism to destroy those who have given offense to their god." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 181" name="Blackguard {Prestige Class}" hd="d?" desc="The blackguard is the quintessential black knight." />
-    <class level="1" book="Races of Stone page 99" name="Blade Bravo {Prestige Class}" hd="d?" desc="Blade bravos are gnomes who learn the ways of the rapier." />
-    <class level="1" book="Oriental Adventures page 37" name="Blade Dancer {Prestige Class}" hd="d?" desc="To blade dancers, the sword is more than a weapon -- it is an ally, a friend, a spirit companion." />
-    <class level="1" book="Complete Warrior page 17" name="Bladesinger {Prestige Class}" hd="d?" desc="Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole." />
-    <class level="1" book="Complete Divine page 23" name="Blighter {Prestige Class}" hd="d?" desc="Blighters bring desolation wherever they tread." />
-    <class level="1" book="Complete Arcane page 26" name="Blood Magus {Prestige Class}" hd="d?" desc="Blood magi are deceased spellcasters who gain an understanding of blood's importance when returned to life." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 96" name="Bloodclaw Master {Prestige Class}" hd="d?" desc="A bloodclaw master embraces the animal within to a degree that it becomes external, partially transforming him into the beast from which the discipline was inspired." />
-    <class level="1" book="Complete Adventurer page 28" name="Bloodhound {Prestige Class}" hd="d?" desc="A bloodhound tracks down wrongdoers and brings them to whatever justice awaits them." />
-    <class level="1" book="Draconomicon page 86" name="Bloodscaled Fury {Prestige Class}" hd="d?" desc="A bloodscaled fury is a dragon whose rage surpasses that of a human barbarian as the barbarian's rage surpasses a child's tantrum." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 100" name="Bloodstorm Blade {Prestige Class}" hd="d?" desc="Other martial adepts rightfully look with wonder upon those who learn the bloodstorm style." />
-    <class level="1" book="Miniatures Handbook page 16" name="Bonded Summoner  {Prestige Class}" hd="d?" desc="He who learns to leash the furies of the Elemental Planes is known as a bonded summoner." />
-    <class level="1" book="Ghostwalk page 21" name="Bone Collector {Prestige Class}" hd="d?" desc="A bone collector is a person who draws personal power from the destruction of undead." />
-    <class level="1" book="FN page 117" name="Bone Knight {Prestige Class}" hd="d?" desc="Bone knights are Karrn patriots, living protectors who fight alongside the undead legions of their land." />
-    <class level="1" book="Races of Faerun page 181" name="Breachgnome {Prestige Class}" hd="d?" desc="A breachgnome is a mighty gnome who is skilled in fighting in cramped conditions." />
-    <class level="1" book="Tome of Magic page 212" name="Brimstone Speaker {Prestige Class}" hd="d?" desc="Brimstone speakers regard the secret language of truenames as nothing less than a gift from the gods." />
-    <class level="1" book="Races of Eberron page 139" name="Cabinet Trickster {Prestige Class}" hd="d?" desc="Cabinet tricksters are the changeling agents of the Cabinet of Faces." />
-    <class level="1" book="Book of Vile Darkness page 52" name="Cancer Mage  {Prestige Class}" hd="d?" desc="The cancer mage makes quick, poisonous attacks and then retreats." />
-    <class level="1" book="Tome and Blood: A Guidebook to Wizards and Sorcerers page 52" name="Candle Caster {Prestige Class}" hd="d?" desc="Also called 'spell chandlers,' these specialists fill their time fashioning candles, both for esthetics and for power." />
-    <class level="1" book="Sharn: City of Towers page 162" name="Cannith Wand Adept  {Prestige Class}" hd="d?" desc="The Cannith wand adept is an artificer or other spellcaster who specializes in mastering wands." />
-    <class level="1" book="Explorer's Handbook page 58" name="Cataclysm Mage {Prestige Class}" hd="d?" desc="Cataclysm mages seek after Eberron's most powerful mysteries, long lost to the past." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 12" name="Cavalier  {Prestige Class}" hd="d?" desc="Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor." />
-    <class level="1" book="Complete Warrior page 19" name="Cavalier {Prestige Class}" hd="d?" desc="Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor." />
-    <class level="1" book="Underdark page 30" name="Cavelord {Prestige Class}" hd="d?" desc="A passion for the narrow, dim ways of the world burns in the breast of the cavelord." />
-    <class level="1" book="Player's Guide to Faerun page 178" name="Celebrant Of Sharess {Prestige Class}" hd="d?" desc="Celebrants of Sharess are seducers and warriors, hedonists and pious champions of good." />
-    <class level="1" book="Book of Exalted Deeds page 55" name="Celestial Mystic {Prestige Class}" hd="d?" desc="Celestial mystics seek to attain ultimate unity with the perfect good." />
-    <class level="1" book="Expanded Psionics Handbook page 141" name="Cerebremancer  {Prestige Class}" hd="d?" desc="Cerebremancers access both the arcane mysteries of spellcasting and the psionic powers of the mind." />
-    <class level="1" book="Races of Destiny page 111" name="Chameleon  {Prestige Class}" hd="d?" desc="Chameleons are dilettantes in every class and masters of none." />
-    <class level="1" book="Races of the Wild page 113" name="Champion Of Corellon Larethian {Prestige Class}" hd="d?" desc="The champion of Corellon Larethian is a noble elf fighter, an elf knight or lord who can stand up to any orc or human warrior." />
-    <class level="1" book="Book of Exalted Deeds page 56" name="Champion Of Gwynharwyf {Prestige Class}" hd="d?" desc="The champion of Gwynharwyf is a mortal barbarian who strives to emulate her sublime balance of fury and reserve while retaining a focus on good." />
-    <class level="1" book="Planar Handbook page 61" name="Chaotician {Prestige Class}" hd="d?" desc="Chaoticians seek to enjoy the beauty of the unpredictable, and by seeking to emulate the philosophy of chaos in their actions, they create a fabulous journey through life in which nothing is a bore." />
-    <class level="1" book="Tome of Magic page 117" name="Child Of Night {Prestige Class}" hd="d?" desc="They prefer to call themselves 'black transmogrifists,' but most know them as children of night." />
-    <class level="1" book="Complete Divine page 26" name="Church Inquisitor {Prestige Class}" hd="d?" desc="The church inquisitor uncovers taint within the church and cuts it away." />
-    <class level="1" book="Planar Handbook page 58" name="Cipher Adept {Prestige Class}" hd="d?" desc="Seamless integration brings the cipher adept bliss." />
-    <class level="1" book="Sharn: City of Towers page 163" name="Citadel Elite {Prestige Class}" hd="d?" desc="The elite agent of the Citadel is the best of the best, saved for the most dangerous, most important assignments or granted latitude to serve the King and Crown as he sees fit." />
-    <class level="1" book="Frostburn page 52" name="Cloud Anchorite  {Prestige Class}" hd="d?" desc="The cloud anchorite seeks a way to achieve immortality while maintaining life and awareness." />
-    <class level="1" book="Player's Guide to Faerun page 174" name="Cognition Thief {Prestige Class}" hd="d?" desc="A cognition thief's subtle ability to worm her way into a target's very consciousness makes her the ultimate secret agent." />
-    <class level="1" book="Serpent Kingdoms page 161" name="Coiled Cabalist {Prestige Class}" hd="d?" desc="Standing apart from the priests of Sseth but careful never to draw their collective ire by openly opposing them, the members of the Coiled Cabal pursue the arcane arts largely in secrecy." />
-    <class level="1" book="Heroes of Battle page 99" name="Combat Medic {Prestige Class}" hd="d?" desc="The combat medic keeps her allies alive and tends to the fallen on the front lines of battle." />
-    <class level="1" book="Complete Divine page 28" name="Consecrated Harrier {Prestige Class}" hd="d?" desc="The consecrated harrier acts as a bounty hunter for her religion or organization." />
-    <class level="1" book="Complete Divine page 30" name="Contemplative {Prestige Class}" hd="d?" desc="Contemplatives devote their lives to cultivating a greater closeness with their deities." />
-    <class level="1" book="Heroes of Horror page 88" name="Corrupt Avenger {Prestige Class}" hd="d?" desc="A corrupt avenger accepts any cost to have his vengeance, even to the forfeit of his very soul." />
-    <class level="1" book="Epic Level Handbook page 26" name="Cosmic Descryer {Prestige Class}" hd="d?" desc="The cosmic descryer is interested in the infinite variety of the planes and fascinated by the different layers of the multiverse." />
-    <class level="1" book="Power of Faerun page 108" name="Court Herald {Prestige Class}" hd="d?" desc="The court herald prestige class is a modified version of the loremaster prestige class, which is described in the Dungeon Master's Guide." />
-    <class level="1" book="Races of Stone page 101" name="Cragtop Archer {Prestige Class}" hd="d?" desc="Cragtop archers train their eyes and minds to find target at great distances, and to quickly compensate for wind, movement, and other factors that affect shots of such difficulty." />
-    <class level="1" book="Shining South page 23" name="Crinti Shadow Marauder  {Prestige Class}" hd="d?" desc="Crinti shadow marauders combine the physical prowess of master rider with the stealth of the most cunning shadowdancers." />
-    <class level="1" book="Frostburn page 54" name="Cryokineticist {Prestige Class}" hd="d?" desc="The cryokineticist is the master of cold psionic energy." />
-    <class level="1" book="Lost Empires of Faerun page 10" name="Cultist Of The Shattered Peak  {Prestige Class}" hd="d?" desc="Cultists of the Shattered Peak possess skill at arms, stealth, and a smattering of ancient lore." />
-    <class level="1" book="FN page 86" name="Cyran Avenger {Prestige Class}" hd="d?" desc="These survivors of the Day of Mourning seek to uncover the cause of the cataclysm and avenge their people against the architects of the Mournland." />
-    <class level="1" book="Complete Adventurer page 31" name="Daggerspell Mage {Prestige Class}" hd="d?" desc="Daggerspell mages work to perfect a unique fighting and spellcasting (arcane) style that relies on wielding a pair of daggers at all times." />
-    <class level="1" book="Complete Adventurer page 36" name="Daggerspell Shaper {Prestige Class}" hd="d?" desc="Daggerspell shapers work to perfect a unique fighting and spellcasting (druid) style that relies on wielding a pair of daggers at all times." />
-    <class level="1" book="Oriental Adventures page 215" name="Daidoji Bodyguard {Prestige Class}" hd="d?" desc="The Daidoji concentrate on defensive maneuvers and a style of fighting that induces their opponents to defeat themselves." />
-    <class level="1" book="Complete Warrior page 20" name="Dark Hunter {Prestige Class}" hd="d?" desc="Dark hunters specialize in hunting down and eliminating creatures in the dark, twisting caves of the Underdark." />
-    <class level="1" book="FN page 68" name="Dark Lantern {Prestige Class}" hd="d?" desc="The Dark Lanterns serve the crown of Breland as spies and assassins." />
-    <class level="1" book="Lords of Darkness page 33" name="Darkmask  {Prestige Class}" hd="d?" desc="Darkmasks strike a balance between their faith and their skills at stealth." />
-    <class level="1" book="Lords of Madness page 186" name="Darkrunner {Prestige Class}" hd="d?" desc="Darkrunners devote their lives to traveling the haunted underground depths." />
-    <class level="1" book="Complete Warrior page 23" name="Darkwood Stalker {Prestige Class}" hd="d?" desc="Some elves train as elite hunters of orcs; these hunters are called darkwood stalkers." />
-    <class level="1" book="Races of Stone page 103" name="Dawncaller {Prestige Class}" hd="d?" desc="Dawncallers are goliath bards responsible for guarding their tribe throughout the night." />
-    <class level="1" book="Magic of Eberron page 57" name="Deadgrim {Prestige Class}" hd="d?" desc="The deadgrim are an elite faction with in the Red Watchers, a new organization of undead hunters within Karrnath." />
-    <class level="1" book="Heroes of Horror page 93" name="Death Delver {Prestige Class}" hd="d?" desc="The death delver is that rare individual, who, rather than fearing and avoiding death, delves as deeply into its mysteries as he can, to better understand and eventually gain some small power over it." />
-    <class level="1" book="Ghostwalk page 23" name="Deathwarden Chanter {Prestige Class}" hd="d?" desc="The Deathwarden chanters are the most prestigious, respected, and mysterious members of the dwarven Deathwarden clan." />
-    <class level="1" book="Underdark page 32" name="Deep Diviner {Prestige Class}" hd="d?" desc="Deep diviners are intimates of the earth and all that it hides." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 105" name="Deepstone Sentinel {Prestige Class}" hd="d?" desc="The Stone Dragon discipline traces its roots back to an ancient order of dwarves that used the power of the earth to enhance their combat style." />
-    <class level="1" book="Races of Stone page 105" name="Deepwarden {Prestige Class}" hd="d?" desc="Deepwardens are dwarves who serve as a living early warning system against threats from both the environment and other creatures." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 52" name="Deepwood Sniper {Prestige Class}" hd="d?" desc="A deepwood sniper is patient, careful, quiet , and deadly accurate." />
-    <class level="1" book="Book of Exalted Deeds page 58" name="Defender Of Sealtiel {Prestige Class}" hd="d?" desc="Defenders of Sealtiel are sworn to uphold the ideals of Sealtiel, which includes fighting off forces of evil when they assault good." />
-    <class level="1" book="Planar Handbook page 44" name="Defiant {Prestige Class}" hd="d?" desc="Defiants take the teaching of the Athar to heart in a way that grants them tremendous powers against those who claim to wield divine might." />
-    <class level="1" book="Book of Vile Darkness page 54" name="Demonologist {Prestige Class}" hd="d?" desc="A demonologist is a mortal who has devoted his life to the study of demons." />
-    <class level="1" book="Complete Warrior page 25" name="Dervish {Prestige Class}" hd="d?" desc="The dervish epitomizes speeds, quickness, and abandon." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 13" name="Devoted Defender {Prestige Class}" hd="d?" desc="The devoted defender is a professional guardian." />
-    <class level="1" book="Book of Vile Darkness page 56" name="Diabolist {Prestige Class}" hd="d?" desc="A diabolist does not serve devils -- she wants to be one." />
-    <class level="1" book="Dragon Magic page 30" name="Diamond Dragon {Prestige Class}" hd="d?" desc="The boldest of the sages study the link between gem dragons and psionics, learning to tap into what they refer to as the draconic psionic collective." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 43" name="Dirgesinger {Prestige Class}" hd="d?" desc="Dirgesingers voice melodies not of celebration and joy, but of sorrow and grief." />
-    <class level="1" book="Draconomicon page 87" name="Disciple Of Ashardalon {Prestige Class}" hd="d?" desc="Disciples of Ashardalon bind fiendish spirits to their own hearts, eventually taking on the characteristics of demonic spawn themselves." />
-    <class level="1" book="Book of Vile Darkness page 57" name="Disciple Of Asmodeus {Prestige Class}" hd="d?" desc="A disciple of Asmodeus uses his power and influence to learn secrets, which in turn gains him more power." />
-    <class level="1" book="Book of Vile Darkness page 58" name="Disciple Of Baalzebul {Prestige Class}" hd="d?" desc="A disciple of Baalzebul uses deceit and trickery to get what she wants." />
-    <class level="1" book="Book of Vile Darkness page 60" name="Disciple Of Dispater {Prestige Class}" hd="d?" desc="A disciple of Dispater is a warlike general of evil." />
-    <class level="1" book="Book of Vile Darkness page 60" name="Disciple Of Mammon {Prestige Class}" hd="d?" desc="A disciple of Mammon takes what she wants any way she can." />
-    <class level="1" book="Book of Vile Darkness page 62" name="Disciple Of Mephistopheles {Prestige Class}" hd="d?" desc="A disciple of Mephistopheles wields hellfire as his weapon." />
-    <class level="1" book="Races of the Dragon page 75" name="Disciple Of The Eye {Prestige Class}" hd="d?" desc="As a disciple of the eye, you know the messages that the eyes alone can impart." />
-    <class level="1" book="Tome of Magic page 216" name="Disciple Of The Word {Prestige Class}" hd="d?" desc="Disciples of the word are intellectual warrior monks who, through a deeper understanding of their truenames, transcend the limits of their mortal form." />
-    <class level="1" book="Frostburn page 56" name="Disciple Of Thrym {Prestige Class}" hd="d?" desc="Aside from predictions of Ragnarok, disciples of Thrym spend a large portion of their time undermining those who serve Thor and Loki, the deities who conspired against Thrym." />
-    <class level="1" book="Draconomicon page 89" name="Dispassionate Watcher Of Chronepsis {Prestige Class}" hd="d?" desc="Taking the role of observers rather than active participants, dispassionate watchers of Chronepsis remain aloof from the events of the world." />
-    <class level="1" book="Manual of the Planes page 24" name="Divine Agent  {Prestige Class}" hd="d?" desc="The divine agent is a specially selected agent of her deity, and she acts in the service of that power or deity." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 42" name="Divine Champion {Prestige Class}" hd="d?" desc="Divine champions are mighty warriors who dedicate themselves to their deity's cause, defending holy ground, destroying enemies of the church, and slaying mythical beasts and clerics of opposing faiths." />
-    <class level="1" book="Complete Divine page 33" name="Divine Crusader {Prestige Class}" hd="d?" desc="The divine crusader embodies devotion and dedication to a chosen deity." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 43" name="Divine Disciple {Prestige Class}" hd="d?" desc="Divine disciples interpret the divine will, act as teachers and guides to other members of the clergy, and arm lay followers of their deity with the power of their patron." />
-    <class level="1" book="Epic Level Handbook page 27" name="Divine Emissary {Prestige Class}" hd="d?" desc="Deities have need of powerful servants, many of whom are epic clerics, paladins, and other characters." />
-    <class level="1" book="Complete Divine page 34" name="Divine Oracle {Prestige Class}" hd="d?" desc="Some mortals hear the words of deities; these can be divine oracles." />
-    <class level="1" book="Races of Stone page 107" name="Divine Prankster {Prestige Class}" hd="d?" desc="These gnomes embrace Garl's methods of teaching through harmless object lessons and dedicate their lives to acting as his agents in the world." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 44" name="Divine Seeker {Prestige Class}" hd="d?" desc="The divine seeker infiltrates dangerous places to rescue prisoners, reclaim stolen relics, or eliminate enemy leaders." />
-    <class level="1" book="Return to the Temple of Elemental Evil page 162" name="Doomdreamer  {Prestige Class}" hd="d?" desc="Doomdreamers are the elite among the ranks of the cult of Tharizdun." />
-    <class level="1" book="Faiths &amp; Pantheons page 186" name="Doomguide {Prestige Class}" hd="d?" desc="Doomguides belong to an elite order of spellcasting warriors in service to the Judge of the Damned." />
-    <class level="1" book="Planar Handbook page 47" name="Doomlord {Prestige Class}" hd="d?" desc="The doomlord's life holds the greatest appeal for fighters and barbarians who enjoy smashing and destroying." />
-    <class level="1" book="Races of the Dragon page 79" name="Dracolexi {Prestige Class}" hd="d?" desc="As a dracolexi, you try to understand that primordial vocabulary by devoting yourself to the study of ancient dialects and languages, hoping to discover how certain Draconic words were once uttered." />
-    <class level="1" book="Draconomicon page 122" name="Dracolyte {Prestige Class}" hd="d?" desc="The dracolyte takes up worship of the draconic gods." />
-    <class level="1" book="Draconomicon page 90" name="Dragon Ascendant {Prestige Class}" hd="d?" desc="Dragon ascendants seek to transcend the limitations of material existence so as to become nothing less than deities." />
-    <class level="1" book="Dragon Magic page 34" name="Dragon Descendant {Prestige Class}" hd="d?" desc="A secret monastic order, dragon descendants tap into the power of their draconic heritage to call on their ancestors in times of need." />
-    <class level="1" book="Races of the Dragon page 84" name="Dragon Devotee {Prestige Class}" hd="d?" desc="Some individuals feel the call of dragons more strongly, which may lead them into an attempt to awaken their blood and bring those traits to the fore." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 183" name="Dragon Disciple {Prestige Class}" hd="d?" desc="Dragon disciples use their magic as a catalyst to ignite their dragon blood." />
-    <class level="1" book="Dragon Magic page 38" name="Dragon Lord {Prestige Class}" hd="d?" desc="A dragon lord is the general at the head of an army, the emperor at the helm of an empire, or the warleader who dominates a battlefield." />
-    <class level="1" book="Magic of Eberron page 63" name="Dragon Prophet {Prestige Class}" hd="d?" desc="The dragon prophet is a member of one of the 'lesser races' who shares the dragons' ambitious goal of understanding the complex and convoluted draconic Prophecy." />
-    <class level="1" book="Dragonlance Campaign Setting page 77" name="Dragon Rider  {Prestige Class}" hd="d?" desc="Dragon riders develop a strong bond with their mounts that allows the two to work together." />
-    <class level="1" book="Miniatures Handbook page 18" name="Dragon Samurai {Prestige Class}" hd="d?" desc="Dragon samurai are dedicated warriors, members of a special, self-selected class who revered dragonkind and emulate dragons' ferocious martial abilities to the point of taking on some draconic traits." />
-    <class level="1" book="Races of the Dragon page 88" name="Dragonheart Mage {Prestige Class}" hd="d?" desc="The dragonheart mage is perfect for the dedicated spellcaster who wishes to embrace the power of dragon blood while still advancing in magical expertise." />
-    <class level="1" book="Draconomicon page 123" name="Dragonkith {Prestige Class}" hd="d?" desc="Dragonkith are creatures that serve and aid dragons." />
-    <class level="1" book="Eberron Campaign Setting page 73" name="Dragonmark Heir  {Prestige Class}" hd="d?" desc="Dragonmark heirs have the ability to improve the dragonmarks they have manifested, as well as to develop additional abilities related to their dragonmarks." />
-    <class level="1" book="Draconomicon page 124" name="Dragonrider {Prestige Class}" hd="d?" desc="Dragonriders soar through the clouds atop a draconic steed." />
-    <class level="1" book="Draconomicon page 125" name="Dragonslayer {Prestige Class}" hd="d?" desc="Dragonslayers combat dragons." />
-    <class level="1" book="Draconomicon page 127" name="Dragonsong Lyrist {Prestige Class}" hd="d?" desc="The dragonsong lyrist taps into the power of dragonsong." />
-    <class level="1" book="Draconomicon page 128" name="Dragonstalker {Prestige Class}" hd="d?" desc="The dragonstalker uses stealth and guile to combat dragons." />
-    <class level="1" book="Heroes of Battle page 103" name="Dread Commando {Prestige Class}" hd="d?" desc="Dread commandos are the elite scouts and strike force of a well-trained mercenary band." />
-    <class level="1" book="Complete Adventurer page 39" name="Dread Pirate {Prestige Class}" hd="d?" desc="A dread pirate has mastered every aspect of larceny on the high seas." />
-    <class level="1" book="Heroes of Horror page 98" name="Dread Witch {Prestige Class}" hd="d?" desc="The dread witch is a spellcaster who manipulates fear as readily and effectively as other casters manipulate magic itself." />
-    <class level="1" book="Faiths &amp; Pantheons page 188" name="Dreadmaster {Prestige Class}" hd="d?" desc="Dreadmasters seek to rule absolutely, preferably through terror and domination." />
-    <class level="1" book="Underdark page 33" name="Drow Judicator {Prestige Class}" hd="d?" desc="A mortal imbued with fiendish cruelty, the drow judicator is a knight most foul." />
-    <class level="1" book="Complete Warrior page 27" name="Drunken Master {Prestige Class}" hd="d?" desc="By weaving and staggering about as if inebriated, drunken boxers avoid many blows." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 185" name="Duelist {Prestige Class}" hd="d?" desc="The duelist is a nimble, intelligent fighter trained in making precise attacks with light weapons." />
-    <class level="1" book="Complete Adventurer page 42" name="Dungeon Delver {Prestige Class}" hd="d?" desc="In many ways, the dungeon delver is the ultimate adventuring rogue." />
-    <class level="1" book="Unapproachable East page 22" name="Durthan {Prestige Class}" hd="d?" desc="Durthans are an order of spellcasters who tap into the darker spirits of Rashemen." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 186" name="Dwarven Defender {Prestige Class}" hd="d?" desc="The defender is a sponsored champion of a dwarven cause" />
-    <class level="1" book="Faiths &amp; Pantheons page 189" name="Dweomerkeeper {Prestige Class}" hd="d?" desc="Dweomerkeepers are Mystra's shepherds, safeguarding the Weave against threats to its integrity." />
-    <class level="1" book="Races of Stone page 110" name="Earth Dreamer {Prestige Class}" hd="d?" desc="Earth dreamers move within the ancient dreams of the mountains, attuning themselves to their power and mastering strange abilities over the earth." />
-    <class level="1" book="Complete Psionic page 22" name="Ebon Saint {Prestige Class}" hd="d?" desc="The ebon saint lives in the darkness, but seeks to exposehis enemies to the light." />
-    <class level="1" book="Complete Psionic page 26" name="Ectopic Adept {Prestige Class}" hd="d?" desc="Ectoplasm is the preferred medium of creation for the ectopic adept, and his mind serves as the mold, kiln, and wheel upon which his works are turned." />
-    <class level="1" book="Complete Arcane page 30" name="Effigy Master {Prestige Class}" hd="d?" desc="The effigy master is an expert in the imitation of true life." />
-    <class level="1" book="Eberron Campaign Setting page 74" name="Eldeen Ranger {Prestige Class}" hd="d?" desc="An Eldeen ranger learns special techniques and abilities that help him to fulfill the goal of his sect." />
-    <class level="1" book="Complete Mage page 53" name="Eldritch Disciple {Prestige Class}" hd="d?" desc="A multiclass warlock and divine spellcaster." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 187" name="Eldritch Knight {Prestige Class}" hd="d?" desc="Studying the martial and arcane arts to equal degree, the eldritch knight is a versatile combatant." />
-    <class level="1" book="Complete Mage page 57" name="Eldritch Theurge {Prestige Class}" hd="d?" desc="A multiclass warlock and arcane spellcaster." />
-    <class level="1" book="Faiths &amp; Pantheons page 190" name="Elemental Archon {Prestige Class}" hd="d?" desc="Elemental archons are servants of powerful, seemingly uncaring elemental forces who want to once and for all tip the balance in favor of their chosen element." />
-    <class level="1" book="Draconomicon page 92" name="Elemental Master {Prestige Class}" hd="d?" desc="Elemental masters strive to attain the purity of perfect attunement with both the energy of their breath weapons and the elemental nature of their core." />
-    <class level="1" book="Complete Arcane page 32" name="Elemental Savant {Prestige Class}" hd="d?" desc="Elemental savants study the basic building blocks of existence -- air, earth, fire, and water -- learning to harness their powers." />
-    <class level="1" book="Magic of Eberron page 68" name="Elemental Scion Of Zilargo {Prestige Class}" hd="d?" desc="The elemental scion of Zilargo attempts to understand the true nature of the elements through bizarre methods." />
-    <class level="1" book="Planar Handbook page 65" name="Elemental Warrior {Prestige Class}" hd="d?" desc="The elemental warrior sees that great strength comes from focusing on the most basic aspects of reality." />
-    <class level="1" book="Expanded Psionics Handbook page 142" name="Elocater {Prestige Class}" hd="d?" desc="Elocaters are renowned for their agile combat stratagems, using their knowledge of motion and space to set themselves up for quick attacks against slower opponents." />
-    <class level="1" book="Races of Faerun page 182" name="Elven High Mage {Prestige Class}" hd="d?" desc="Elven high mages are the masters of creating their own epic spells -- mythals that can grow to engulf entire cities." />
-    <class level="1" book="Savage Species page 75" name="Emancipated Spawn  {Prestige Class}" hd="d?" desc="Those spawn of undead who find themselves free of their masters can begin to recall their former lives and a measure of redemption." />
-    <class level="1" book="Book of Exalted Deeds page 59" name="Emissary Of Barachiel {Prestige Class}" hd="d?" desc="The emissaries of Barachiel are peacemakers, diplomats, and evangelists, as well as staunch opponents of evil and corruption." />
-    <class level="1" book="Complete Arcane page 34" name="Enlightened Fist {Prestige Class}" hd="d?" desc="Enlightened fists master the use of touch spells, creating new forms of combat with their fists." />
-    <class level="1" book="Complete Mage page 60" name="Enlightened Spirit {Prestige Class}" hd="d?" desc="A warlock who takes on celestial characteristics." />
-    <class level="1" book="Complete Divine page 36" name="Entropomancer {Prestige Class}" hd="d?" desc="Entropomancers gain attunement to the great nothingness they say lies at the center of the universe." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 53" name="Ephemeral Exemplar {Prestige Class}" hd="d?" desc="Ephemeral exemplars are paragons of incorporealness." />
-    <class level="1" book="Epic Level Handbook page 17" name="Epic Arcane Archer {Prestige Class}" hd="d?" desc="The epic arcane archer is a living extension of the bow, capable of achieving wonders of archery that cause lesser beings to gape in awe." />
-    <class level="1" book="Epic Level Handbook page 18" name="Epic Assassin {Prestige Class}" hd="d?" desc="The epic assassin flits from shadow to shadow, lying in wait until his target is vulnerable, then striking like a cobra." />
-    <class level="1" book="Epic Level Handbook page 19" name="Epic Blackguard {Prestige Class}" hd="d?" desc="The epic blackguard is a twisted reflection of the epic paladin, radiating evil power from every pore of his body." />
-    <class level="1" book="Epic Level Handbook page 20" name="Epic Dwarven Defender {Prestige Class}" hd="d?" desc="The epic dwarven defender becomes the very definition of immovable object." />
-    <class level="1" book="Epic Level Handbook page 28" name="Epic Infiltrator {Prestige Class}" hd="d?" desc="The epic infiltrator is an agent of espionage, an undercover operative, and sometimes a saboteur." />
-    <class level="1" book="Epic Level Handbook page 20" name="Epic Loremaster {Prestige Class}" hd="d?" desc="If the epic loremaster doesn't know something, it probably isn't worth knowing." />
-    <class level="1" book="Epic Level Handbook page 22" name="Epic Psion {Prestige Class}" hd="d?" desc="The epic psion has evolved his inborn mental abilities, achieving mental mastery of lesser mentalities." />
-    <class level="1" book="Epic Level Handbook page 23" name="Epic Psychic Warrior {Prestige Class}" hd="d?" desc="The epic psychic warrior is a meld of mental and martial prowess." />
-    <class level="1" book="Epic Level Handbook page 21" name="Epic Shadowdancer {Prestige Class}" hd="d?" desc="While the epic assassin udes the shadows, the epic shadowdancer becomes the shadows, indistinguishable from the darkness cloaking her." />
-    <class level="1" book="Faiths of Eberron page 52" name="Escalation Mage {Prestige Class}" hd="d?" desc="By giving themselves over to the Shadow and focusing on the dark side of magic, these arcane spellcasters learn how to bargain with their god to make their spells more effective -- for a price." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 109" name="Eternal Blade {Prestige Class}" hd="d?" desc="An eternal blade is an elf who learns a variety of exotic fighting maneuvers with the aid and advice of the spirit of a mighty, ancient elf warrior." />
-    <class level="1" book="Oriental Adventures page 38" name="Eunuch Warlock {Prestige Class}" hd="d?" desc="Eunuch warlocks must be arcane spellcasters of significant ability, and they are often sorcerers rather than wu jen." />
-    <class level="1" book="Complete Divine page 39" name="Evangelist {Prestige Class}" hd="d?" desc="Evangelists travel the world proclaiming their devotion to a particular deity, pantheon, or religious doctrine." />
-    <class level="1" book="Player's Guide to Faerun page 53" name="Evereskan Tomb Guardian {Prestige Class}" hd="d?" desc="The Evereskan tomb guardians are on hand to ensure that the defenses of the tombs are very good indeed." />
-    <class level="1" book="Book of Exalted Deeds page 61" name="Exalted Arcanist {Prestige Class}" hd="d?" desc="Exalted arcanists gain access to spells that channel celestial energy." />
-    <class level="1" book="Complete Adventurer page 44" name="Exemplar {Prestige Class}" hd="d?" desc="An exemplar focuses her energy on improving the skills she possesses until she can perform them with fluidity, grace, and art." />
-    <class level="1" book="Eberron Campaign Setting page 77" name="Exorcist Of The Silver Flame {Prestige Class}" hd="d?" desc="Exorcists of the Silver Flame lead the Church of the Silver Flame's efforts in combating extraplanar threats." />
-    <class level="1" book="Complete Warrior page 30" name="Exotic Weapon Master {Prestige Class}" hd="d?" desc="The only real requirement for exotic weapon master is commitment and perseverance." />
-    <class level="1" book="Eberron Campaign Setting page 79" name="Extreme Explorer {Prestige Class}" hd="d?" desc="The extreme explorer is the iconic action hero of Eberron." />
-    <class level="1" book="Complete Warrior page 31" name="Eye Of Gruumsh {Prestige Class}" hd="d?" desc="An orc or half-orc who heeds the call to serve Gruumsh in his image can become an eye of Gruumsh." />
-    <class level="1" book="Unearthed Arcana page 166" name="Faith Scion {Prestige Class}" hd="d?" desc="This prestige class is meant for characters who wield legendary weapons of divine power for claerics, druids, and paladins." />
-    <class level="1" book="Song and Silence: A Guidebook to Bards and Rogues page 8" name="Fang Of Lolth {Prestige Class}" hd="d?" desc="Fangs of Lolth undergo a transformation that both provides them power and changes them in ways they may not necessarily want." />
-    <class level="1" book="Serpent Kingdoms page 162" name="Fang Of Sseth {Prestige Class}" hd="d?" desc="The Fangs of Sseth constitute the strike force of the Vipers -- the stealthy killers who leave no trace." />
-    <class level="1" book="Planar Handbook page 50" name="Fatemaker {Prestige Class}" hd="d?" desc="'There are two paths to take; one is easy, and that is its only reward.'" />
-    <class level="1" book="Complete Arcane page 37" name="Fatespinner {Prestige Class}" hd="d?" desc="A fatespinner has pulled back the curtain of chance, circumstance, and chaos to glimpse a deeper truth: probability." />
-    <class level="1" book="Fiend Folio page 200" name="Fiend Of Blasphemy  {Prestige Class}" hd="d?" desc="The fiend of blasphemy is a master of the infernal art of perverting the desire to worship and turning it toward the corrupt veneration of fiendish masters." />
-    <class level="1" book="Fiend Folio page 202" name="Fiend Of Corruption {Prestige Class}" hd="d?" desc="Fiends of corruption are preoccupied with corrupting mortals to ensure that their souls end up on the Lower Planes after death." />
-    <class level="1" book="Fiend Folio page 204" name="Fiend Of Possession {Prestige Class}" hd="d?" desc="A fiend of possession is an invasive presence that taints the very soul, corrupting from within." />
-    <class level="1" book="Tome of Magic page 220" name="Fiendbinder {Prestige Class}" hd="d?" desc="A fiendbinder seeks to unlock the truenames of demons, devils, and other vile fiends, and use that knowledge to bind them to service." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 18" name="Fist Of Hextor {Prestige Class}" hd="d?" desc="Fists of Hextor are templars sworn to the service of their unforgiving master." />
-    <class level="1" book="Book of Exalted Deeds page 62" name="Fist Of Raziel {Prestige Class}" hd="d?" desc="The fists of Raziel represent a knightly order dedicated to the celestial patron of holy warfare against evil." />
-    <class level="1" book="Expanded Psionics Handbook page 144" name="Fist Of Zuoken {Prestige Class}" hd="d?" desc="The Fists of Zuoken ore members of an order of martial artists devoted to mastering their own physical and mental development while protecting psions and other psionic creatures." />
-    <class level="1" book="Complete Psionic page 30" name="Flayerspawn Psychic {Prestige Class}" hd="d?" desc="Willing to sacrifice her life, appearance, and even her sanity, the flayerspawn psychic walks a dangerous road, growing in psionic power as she slowly embraces her secret mind flayer heritage." />
-    <class level="1" book="Lords of Madness page 189" name="Fleshwarper {Prestige Class}" hd="d?" desc="The fleshwarper finds no greater canvas than flesh itself." />
-    <class level="1" book="Complete Adventurer page 47" name="Fochlucan Lyrist {Prestige Class}" hd="d?" desc="The Fochlucan lyrist is a legendary figure who serves as the herald and teacher to great kings, the champion of the common folk, and the keeper of lore long forgotten elsewhere." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 56" name="Foe Hunter {Prestige Class}" hd="d?" desc="The foe hunter has but one purpose in life: to kill creatures of the type she hates." />
-    <class level="1" book="Faiths &amp; Pantheons page 193" name="Forest Master {Prestige Class}" hd="d?" desc="Guardians of the pristine wilderness and defenders of the ancient trees, forest masters are the living embodiments of sentient nature." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 57" name="Forsaker {Prestige Class}" hd="d?" desc="The forsaker rebels against the magic of the fantastic world around him." />
-    <class level="1" book="Complete Warrior page 34" name="Frenzied Berserker {Prestige Class}" hd="d?" desc="The frenzied berserker is constantly seeking out more conflict to feed her craving for battle." />
-    <class level="1" book="Frostburn page 58" name="Frost Mage {Prestige Class}" hd="d?" desc="Frost mages usually hail from lands of cold, snow, and ice: tundra, glaciers even outer planes perpetually shrouded in winter." />
-    <class level="1" book="Frostburn page 60" name="Frostrager {Prestige Class}" hd="d?" desc="The frostragers are powerful and dangerous warriors believed by some to be gifted from (and others cursed by) the frost giant deity Thrym with an unstable but powerful supernatural battle rage." />
-    <class level="1" book="Manual of the Planes page 26" name="Gatecrasher {Prestige Class}" hd="d?" desc="Gatecrashers see themselves as cosmic free agents, independent forces who can influence the natives of the planes and even the dynamic forces of magic itself." />
-    <class level="1" book="Player's Guide to Eberron page 88" name="Gatekeeper Mystagogue {Prestige Class}" hd="d?" desc="Heirs to a tradition over sixteen millennia old, the gatekeeper mystagogues stand among the greated foes of the daelkyr and their aberration spawn." />
-    <class level="1" book="Complete Divine page 41" name="Geomancer {Prestige Class}" hd="d?" desc="To the geomancer, all magic is the same." />
-    <class level="1" book="Complete Arcane page 39" name="Geometer {Prestige Class}" hd="d?" desc="The geometer is the master of written magic and spells inscribed within a perfectly rendered diagram." />
-    <class level="1" book="Ghostwalk page 26" name="Ghost Slayer {Prestige Class}" hd="d?" desc="The ghost slayer studies ghost so that they can be dispatched easily and no longer bother the living with their presence." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 20" name="Ghostwalker {Prestige Class}" hd="d?" desc="Ghostwalkers have abilities that point to some underlying, mysterious mysticism." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 21" name="Gladiator {Prestige Class}" hd="d?" desc="Rich or poor, all gladiators face death whenever they step into the arena." />
-    <class level="1" book="Lost Empires of Faerun page 13" name="Glorious Servitor {Prestige Class}" hd="d?" desc="Glorious servitors are exceptionally loyal and devout servants of the Mulhorandi gods." />
-    <class level="1" book="Magic of Faerun page 23" name="Gnome Artificer  {Prestige Class}" hd="d?" desc="Gnome artificers dabble in technology to create fantastic devices, delving into shadow magic when their mundane equipment is insufficient for the task." />
-    <class level="1" book="Faiths &amp; Pantheons page 194" name="Goldeye {Prestige Class}" hd="d?" desc="Goldeyes are agents and promulgators of commercial intercourse, seeking to increase the wealth of their communities and realms by promoting the exchange of coins in trade." />
-    <class level="1" book="Races of Stone page 112" name="Goliath Liberator {Prestige Class}" hd="d?" desc="Goliath liberators are experts at infiltrating giant dwellings, freeing the captives within, then exacting revenge on the giants while the freed goliaths escape." />
-    <class level="1" book="City of Splendors: Waterdeep page 77" name="Gray Hand Enforcer {Prestige Class}" hd="d?" desc="Gray Hand enforcers are highly trained members of the Gray Hands, Waterdeep's elite, high-powered fighting force." />
-    <class level="1" book="Shining South page 24" name="Great Rift Deep Defender {Prestige Class}" hd="d?" desc="The Great Rift deep defender has a keen understanding of the importance of making a stand." />
-    <class level="1" book="Races of Faerun page 183" name="Great Rift Skyguard {Prestige Class}" hd="d?" desc="The hippogriff-mounted skyguards of the Great Rift patrol the skies, ever watchful for the enemies of the gold dwarves." />
-    <class level="1" book="Shining South page 26" name="Great Sea Corsair {Prestige Class}" hd="d?" desc="Adapt the dread pirate prestige class from Song and Silenceto create the Great Sea corsair prestige class." />
-    <class level="1" book="Complete Arcane page 41" name="Green Star Adept {Prestige Class}" hd="d?" desc="A Green Star adept is the master of the strange and powerful magic derived from Alhazarde's glittering green starmetal." />
-    <class level="1" book="Epic Level Handbook page 30" name="Guardian Paramount {Prestige Class}" hd="d?" desc="The guardian paramount is an extraordinary bodyguard, a protector of others who is skilled in preventing harm to his charge." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 45" name="Guild Thief {Prestige Class}" hd="d?" desc="Guild thieves are thieves who operate in urban areas as part of an organized thieves' guild." />
-    <class level="1" book="Magic of Faerun page 26" name="Guild Wizard Of Waterdeep {Prestige Class}" hd="d?" desc="The wizards of the order study and exchange information, create magic items to help support the guild's financial independence, and offer their services to others in the city as watch-wizards or fire guards." />
-    <class level="1" book="Complete Warrior page 38" name="Halfling Outrider {Prestige Class}" hd="d?" desc="Halfling outriders are elite champions whose task is to warn their fellows of, and protect them from, danger." />
-    <class level="1" book="Shining South page 27" name="Halruaan Elder {Prestige Class}" hd="d?" desc="Halruaan elders are the epitomy of magic cast with panache, and their dazzling and unique displays of arcane force make them the most respected practitioners in the land." />
-    <class level="1" book="Shining South page 29" name="Halruaan Magehound {Prestige Class}" hd="d?" desc="Magehounds are Halruaa's inquisitors." />
-    <class level="1" book="Player's Guide to Faerun page 56" name="Hammer Of Moradin {Prestige Class}" hd="d?" desc="An elite order of warrior-priests stands ready to defend the dwarven people against the onslaught of fell giants, dark elves, and goblinoids." />
-    <class level="1" book="Shining South page 31" name="Hand Of The Adama {Prestige Class}" hd="d?" desc="The hand of the Adama is a benign leader, judge and jury, and protector of the common folk all rolled into one." />
-    <class level="1" book="Dragon Magic page 43" name="Hand Of The Winged Masters {Prestige Class}" hd="d?" desc="Dragons often need expert servants to be their eyes, ears, and hands in humanoid society." />
-    <class level="1" book="Player's Guide to Faerun page 58" name="Harper Agent {Prestige Class}" hd="d?" desc="Harper agents are the 'field agents' of the Harper organization, acting directly to gather intelligence and eliminate threats to the greater good." />
-    <class level="1" book="Magic of Faerun page 28" name="Harper Mage {Prestige Class}" hd="d?" desc="The Harper mage has two principal responsibilities: They aid the Harpers with spells and arcane knowledge, and they study, record, and pass on ancient lore." />
-    <class level="1" book="Player's Guide to Faerun page 181" name="Harper Paragon {Prestige Class}" hd="d?" desc="A Harper paragon actively promotes the welfare of other creatures while preventing evil forces from preying on innocents." />
-    <class level="1" book="Magic of Faerun page 29" name="Harper Priest {Prestige Class}" hd="d?" desc="Some Harpers choose to pursue a closer relationship to the deities who inspired the creation of the Harpers." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 46" name="Harper Scout {Prestige Class}" hd="d?" desc="Harper scouts are members of the Harpers, a secret society dedicated to holding back evil, preserving knowledge, and maintaining the balance between civilization and the wild." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 47" name="Hathran {Prestige Class}" hd="d?" desc="Hathrans comprise an elite sisterhood of spellcasters who lead Rashemen." />
-    <class level="1" book="Miniatures Handbook page 20" name="Havoc Mage {Prestige Class}" hd="d?" desc="The havoc mage shares as much in common with a fighter as with a wizard." />
-    <class level="1" book="Faiths &amp; Pantheons page 196" name="Heartwarder {Prestige Class}" hd="d?" desc="Heartwarders are aesthetes and hedonists who actively seek out pleasure and beauty in all things and who nurture the creation of beautiful objects." />
-    <class level="1" book="Eberron Campaign Setting page 80" name="Heir Of Siberys {Prestige Class}" hd="d?" desc="The magic of a Siberys mark is undeniably powerful, and an heir of Siberys manifests one." />
-    <class level="1" book="Oriental Adventures page 39" name="Henshin Mystic {Prestige Class}" hd="d?" desc="Henshin mystics are members of a monastic order that teaches what they consider a great mystery of the universe: that humanity is capable of a transformation (henshin) into divinity." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 63" name="Hexer {Prestige Class}" hd="d?" desc="The hexer uses the power of his gaze." />
-    <class level="1" book="Oriental Adventures page 212" name="Hida Defender {Prestige Class}" hd="d?" desc="Hida defenders train in great armor, a unique characteristic that fits in well with the Crab philosophy of strength and endurance." />
-    <class level="1" book="Draconomicon page 94" name="Hidecarved Dragon {Prestige Class}" hd="d?" desc="Hidecarved dragons are members of an enigmatic order of dragons and half-dragons." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 188" name="Hierophant {Prestige Class}" hd="d?" desc="A divine spellcaster who rises high in the service of his deity gains access to spells and abilities of which lesser faithful can only dream." />
-    <class level="1" book="Player's Guide to Eberron page 104" name="High Elemental Binder {Prestige Class}" hd="d?" desc="As a high elemental binder, you can reach into the planes and immediately draw elemental beings into objects -- coating your armor in stone or your blade in fire." />
-    <class level="1" book="Epic Level Handbook page 31" name="High Proselytizer {Prestige Class}" hd="d?" desc="The high proselytizer is the holy inspiration that begins religious movements." />
-    <class level="1" book="Complete Adventurer page 54" name="Highland Stalker {Prestige Class}" hd="d?" desc="Highland stalkers are consummate trackers with an instinctive knowledge of their mountainous territories." />
-    <class level="1" book="Shining South page 32" name="Hin Fist {Prestige Class}" hd="d?" desc="Adapt the sacred fist prestige class from Complete Divineto create a hin fist." />
-    <class level="1" book="Draconomicon page 130" name="Hoardstealer {Prestige Class}" hd="d?" desc="The hoardstealer specializes in relieving wealthy individuals from large amounts of said wealth." />
-    <class level="1" book="Complete Divine page 45" name="Holy Liberator {Prestige Class}" hd="d?" desc="The holy liberator is a holy warrior, a distant cousin of the paladin." />
-    <class level="1" book="Complete Mage page 64" name="Holy Scourge {Prestige Class}" hd="d?" desc="An arcane spellcaster that specializes in blasting evil." />
-    <class level="1" book="Silver Marches page 110" name="Hordebreaker {Prestige Class}" hd="d?" desc="The hordebreaker is a person who makes destroying the horde threat the perfect engine of orc destruction." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 189" name="Horizon Walker {Prestige Class}" hd="d?" desc="The horizon walker is an unceasing traveler to the universe's most dangerous places." />
-    <class level="1" book="Faiths &amp; Pantheons page 197" name="Horned Harbinger {Prestige Class}" hd="d?" desc="The horned harbingers are agents of the fallen Lord of Bones." />
-    <class level="1" book="Complete Divine page 48" name="Hospitaler {Prestige Class}" hd="d?" desc="Hospitalers are a fighting force of necessity, sworn to poverty, obedience, and the defense of those in their care." />
-    <class level="1" book="Complete Warrior page 40" name="Hulking Hurler {Prestige Class}" hd="d?" desc="Hulking hurlers belong to those races of generously proportioned creatures who enjoy nothing more than wrenching boulders, trees, and even buildings free of their earthly bonds and throwing them at their foes." />
-    <class level="1" book="Complete Warrior page 42" name="Hunter Of The Dead {Prestige Class}" hd="d?" desc="The hunter of the dead spends each restless night tracking undead to their lairs and cleansing the land of their foul presence." />
-    <class level="1" book="Oriental Adventures page 41" name="Iaijutsu Master {Prestige Class}" hd="d?" desc="Iaijutsu masters harness their ki energy to strike with blinding speed and devastating power." />
-    <class level="1" book="Draconomicon page 131" name="Iinitiate Of The Draconic Mysteries {Prestige Class}" hd="d?" desc="Some become students of draconic knowledge that leads to greater power." />
-    <class level="1" book="Underdark page 35" name="Illithid Body Tamer {Prestige Class}" hd="d?" desc="Illithids who embrace the Tamer Creed believe that military might is the most important factor in their race's future mastery of the multiverse." />
-    <class level="1" book="Savage Species page 77" name="Illithid Savant {Prestige Class}" hd="d?" desc="The illithid savant is an academic who deals in applied science, acquiring new knowledge from the brains he consumes." />
-    <class level="1" book="Expanded Psionics Handbook page 146" name="Illithid Slayer {Prestige Class}" hd="d?" desc="Illithid slayers have dedicated their lives to the eradication of the mind flayer 'infection.'" />
-    <class level="1" book="Complete Psionic page 33" name="Illumine Soul {Prestige Class}" hd="d?" desc="The illumine soul is a living conduit of positive energy." />
-    <class level="1" book="Underdark page 37" name="Imaskari Vengeance Taker {Prestige Class}" hd="d?" desc="A secret society dedicated to righting wrongs, the Imaskari vengeance takers are trained by hidden masters in the rites and rituals of revenge." />
-    <class level="1" book="Magic of Eberron page 73" name="Impure Prince {Prestige Class}" hd="d?" desc="Of those who make it their special mission to rid the world of aberrations and their masters, only impure princes can claim the distinction of using daelkyr-inspired corruptions and symbionts as their most effective tool in aberration cleansing." />
-    <class level="1" book="Magic of Incarnum page 115" name="Incandescent Champion {Prestige Class}" hd="d?" desc="The incandescent champion seeks to dispense with barriers and obstacles both tangible and intangible so that she can touch the cosmic soul with her unveiled body, mind, and spirit." />
-    <class level="1" book="Magic of Faerun page 31" name="Incantatrix {Prestige Class}" hd="d?" desc="The incantatrixes are the practitioners of metamagic in Faerun, studying spells that affect other spells and having a fondness for magic that thwarts extraplanar beings." />
-    <class level="1" book="Magic of Incarnum page 121" name="Incarnum Blade {Prestige Class}" hd="d?" desc="Using a secret passed down through the generations, the incarnum blade shapes soul energy drawn from the greatest warriors of the past into a special soulmeld that is incorporated into his melee weapon of choice." />
-    <class level="1" book="Book of Exalted Deeds page 64" name="Initiate Of Pistis Sophia {Prestige Class}" hd="d?" desc="The path of these initiates requires great sacrifices (in the form of at least three sacred vows), but brings great rewards of spiritual power." />
-    <class level="1" book="Complete Arcane page 44" name="Initiate Of The Sevenfold Veil {Prestige Class}" hd="d?" desc="A master of defensive magic, the Initiate of the Sevenfold Veil approaches the prismatic barrier by mastering one by one its constituent veils or layers." />
-    <class level="1" book="Underdark page 39" name="Inquisitor Of The Drowning Goddess {Prestige Class}" hd="d?" desc="Some kuo-toa monks go on to become inquisitors of the Drowning Goddess, who are tasked with protecting the community from inside threats." />
-    <class level="1" book="Dragonlance Campaign Setting page 80" name="Inquisitor {Prestige Class}" hd="d?" desc="By definition, an inquisitor is one who inquires, someone who hunts for people, information, or answers." />
-    <class level="1" book="Complete Warrior page 44" name="Invisible Blade {Prestige Class}" hd="d?" desc="Invisible blades are deadly fighters who prefer to use daggers and related weapons in combat." />
-    <class level="1" book="Races of Stone page 114" name="Iron Mind {Prestige Class}" hd="d?" desc="Elite warriors trained to resist mental compulsions of all kinds, members of the iron mind prestige class defend dwarf and gnome kingdoms against intrusions by mind flayers, dark elf enchanters, and the like." />
-    <class level="1" book="Magic of Incarnum page 126" name="Ironsoul Forgemaster {Prestige Class}" hd="d?" desc="Only the ironsoul forgemaster can craft a weapon that combines these arts with the shaping of soul essence." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 113" name="Jade Phoenix Mage {Prestige Class}" hd="d?" desc="Long ago, a fellowship of swordsages known as the Masters of the Jade Phoenix took up the study of arcane magic in search of a new martial discipline." />
-    <class level="1" book="Shining South page 33" name="Jordain Vizier {Prestige Class}" hd="d?" desc="The Jordaini are a special servitor caste, though still upper class, in the magocracy of Halruaa." />
-    <class level="1" book="Champions of Ruin page 48" name="Justice Of Weald And Woe {Prestige Class}" hd="d?" desc="The justice of weald and woe is the go-to person when something unsavory -- usually involving the removal of humans -- needs doing." />
-    <class level="1" book="Deities and Demigods page 205" name="Justiciar Of Taiia {Prestige Class}" hd="d?" desc="Justiciars of Taiia fulfill the role of carrying out Taiia's sentence against wrongdoers." />
-    <class level="1" book="Player's Guide to Faerun page 63" name="Justiciar Of Tyr {Prestige Class}" hd="d?" desc="Justiciars are the very elite of Tyr's mortal servants, and they act as living embodiments of their god's portfolio." />
-    <class level="1" book="Complete Warrior page 47" name="Justiciar {Prestige Class}" hd="d?" desc="Justiciars make a living kicking the daylights out of criminals who desperately deserve it." />
-    <class level="1" book="Lords of Madness page 194" name="Keeper Of The Cerulean Sign {Prestige Class}" hd="d?" desc="The Cerulean Sign is an ancient rune of power, created untold eons ago by a race or deity long since vanished; now it has keepers." />
-    <class level="1" book="Complete Warrior page 49" name="Kensai {Prestige Class}" hd="d?" desc="The kensai masters body, mind, weapon, and will." />
-    <class level="1" book="Oriental Adventures page 42" name="Kishi Charger {Prestige Class}" hd="d?" desc="Kishi chargers are cavalry soldiers trained to make the greatest possible use of a horse's speed and a rider's agility." />
-    <class level="1" book="City of Splendors: Waterdeep page 81" name="Knight Of The Blue Moon {Prestige Class}" hd="d?" desc="Knights of the Blue Moon are elite soldiers in the endless battle against the Mistress of the Night." />
-    <class level="1" book="Complete Warrior page 53" name="Knight Of The Chalice {Prestige Class}" hd="d?" desc="The knight of the Chalice is a member of an elite knightly organization devoted to fighting demons and other evil outsiders." />
-    <class level="1" book="Dragonlance Campaign Setting page 56" name="Knight Of The Crown {Prestige Class}" hd="d?" desc="The Order of the Crown is the first tier of the Solamnic Knights." />
-    <class level="1" book="CoV page 106" name="Knight Of The Flying Hunt {Prestige Class}" hd="d?" desc="Defenders of Nimbral, protectors of the island realm's quiet, simple folk, noble soldiers answering to the powerful but mysterious Nimbral Lords -- the Knights of the Flying Hunt epitomize valor and grace in word, deed, and bearing." />
-    <class level="1" book="Frostburn page 62" name="Knight Of The Iron Glacier {Prestige Class}" hd="d?" desc="The Knights of the Iron Glacier continue to honor the memory of General Aengrist in their deeds and actions." />
-    <class level="1" book="Dragonlance Campaign Setting page 63" name="Knight Of The Lily {Prestige Class}" hd="d?" desc="The Knights of the Lily are the order of warriors within the Knights of Neraka." />
-    <class level="1" book="Defenders of the Faith: A Guidebook to Clerics and Paladins page 65" name="Knight Of The Middle Circle {Prestige Class}" hd="d?" desc="Knights of the Middle Circle provide security for Stargazer chapterhouses and may be called upon for similar service for allies of the Stargazers." />
-    <class level="1" book="Stormwrack page 52" name="Knight Of The Pearl {Prestige Class}" hd="d?" desc="The knight of the pearl is a loyal defender of the aventi people, dedicated to the service of Aventernus and his appointed kings." />
-    <class level="1" book="Expedition to Castle Ravenloft page 200" name="Knight Of The Raven {Prestige Class}" hd="d?" desc="Before evil descended on the land of Barovia, it was home to an order of virtuous champions, the Knights of the Raven." />
-    <class level="1" book="Dragonlance Campaign Setting page 59" name="Knight Of The Rose {Prestige Class}" hd="d?" desc="The Knights of the Rose are the highest tier of the Solamnic Knights." />
-    <class level="1" book="Tome of Magic page 54" name="Knight Of The Sacred Seal {Prestige Class}" hd="d?" desc="A knight of the sacred seal is never alone because she has formed a true partnership with a single vestige." />
-    <class level="1" book="Dragonlance Campaign Setting page 65" name="Knight Of The Skull {Prestige Class}" hd="d?" desc="Entering battle with strength and divine magic, Knights of the Skull are the spirit of the Dark Knights." />
-    <class level="1" book="Dragonlance Campaign Setting page 58" name="Knight Of The Sword {Prestige Class}" hd="d?" desc="Knights of the Sword are warriors of the Solamnic Knights who fight with power and faith to defend justice and truth." />
-    <class level="1" book="Dragonlance Campaign Setting page 66" name="Knight Of The Thorn {Prestige Class}" hd="d?" desc="The Knights of the Thorn are also known as the 'gray robes' for the ash-colored robes they wear to indicate that they do not serve the Orders of High Sorcery." />
-    <class level="1" book="CoV page 111" name="Knight Of The Weave {Prestige Class}" hd="d?" desc="Members of this mystic order of sacred defenders cherish the Weave like a fine wine." />
-    <class level="1" book="FN page 41" name="Knight Phantom {Prestige Class}" hd="d?" desc="The knight phantom prestige class takes capable wizards and gradually turns them into capable melee fighters, without slowing their spellcasting too much." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 24" name="Knight Protector Of The Great Kingdom {Prestige Class}" hd="d?" desc="Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever." />
-    <class level="1" book="Complete Warrior page 55" name="Knight Protector {Prestige Class}" hd="d?" desc="Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever." />
-    <class level="1" book="Secrets of Xen'drik page 123" name="Landforged Walker {Prestige Class}" hd="d?" desc="Even as they speak for nature, landforged walkers coax the living bounty of the earth to grow on their metal hides, drawing power from the environment around them." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 25" name="Lasher {Prestige Class}" hd="d?" desc="The lasher prestige class uses the whip as an extension of herself." />
-    <class level="1" book="WL page 19" name="Legacy Champion {Prestige Class}" hd="d?" desc="You are so devoted to the history and chronicle of a particular item of legacy that you enjoy enhanced access to your item's legacy abilities." />
-    <class level="1" book="Stormwrack page 56" name="Legendary Captain {Prestige Class}" hd="d?" desc="A legendary captain might be the commander of a fleet's flagship or a bloodthirsty pirate, but whatever the role, her reputation is widespread and her crew fanatically loyal." />
-    <class level="1" book="Epic Level Handbook page 33" name="Legendary Dreadnought {Prestige Class}" hd="d?" desc="The legendary dreadnought is the ultimate foot soldier, an absolute force of destruction, a total warrior who excels at sheer combat prowess." />
-    <class level="1" book="Heroes of Battle page 107" name="Legendary Leader {Prestige Class}" hd="d?" desc="Legendary leaders are the stuff of bards' tales come to life." />
-    <class level="1" book="Dragonlance Campaign Setting page 81" name="Legendary Tactician {Prestige Class}" hd="d?" desc="Legendary tacticians are respected (or feared) for their ability to inspire their troops." />
-    <class level="1" book="Stormwrack page 61" name="Leviathan Hunter {Prestige Class}" hd="d?" desc="The leviathan hunter is dedicated to hunting down creatures of the perilous depths." />
-    <class level="1" book="Book of Vile Darkness page 63" name="Lifedrinker {Prestige Class}" hd="d?" desc="Lifedrinkers are vampires who have been undead for a very long time." />
-    <class level="1" book="Expedition to Castle Ravenloft page 204" name="Lightbringer {Prestige Class}" hd="d?" desc="The Lightbringers are an expansive guild of undead hunters that readily hands out charter memberships to anyone who wants to stamp out undead." />
-    <class level="1" book="Book of Exalted Deeds page 65" name="Lion Of Talisid {Prestige Class}" hd="d?" desc="The lions of Talisid protect nature and emulate their patron in more concrete ways." />
-    <class level="1" book="Sandstorm page 70" name="Lord Of Tides {Prestige Class}" hd="d?" desc="A lord of tides can sense the movement of magma, summon beings of elemental might, and open portals to the Elemental Planes." />
-    <class level="1" book="Races of Destiny page 117" name="Loredelver {Prestige Class}" hd="d?" desc="Loredelvers are illumian spellcasters who find and explore ruins, disable the magical protections that guard them, and sift through the ancient secrets found within." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 191" name="Loremaster {Prestige Class}" hd="d?" desc="Loremasters are spellcasters who concentrate on knowledge, valuing lore and secrets over gold." />
-    <class level="1" book="Races of the Wild page 118" name="Luckstealer {Prestige Class}" hd="d?" desc="As a luckstealer, you're part spellcaster, part professional gambler -- and 100% mischief-maker." />
-    <class level="1" book="Shining South page 35" name="Luiren Marchwarden {Prestige Class}" hd="d?" desc="The Luiren marchwarden is the defender of the frontier in the land of the halflings." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 54" name="Lurking Terror {Prestige Class}" hd="d?" desc="Lurking terrors are the quintessential hunting undead, displaying great prowess with their special abilities and amazing powers of stealth." />
-    <class level="1" book="Complete Mage page 67" name="Lyric Thaumaturge {Prestige Class}" hd="d?" desc="A bard with enhanced spellcasting prowess." />
-    <class level="1" book="Complete Adventurer page 56" name="Maester {Prestige Class}" hd="d?" desc="Maesters are the master crafters of the gnome world." />
-    <class level="1" book="Complete Arcane page 48" name="Mage Of The Arcane Order {Prestige Class}" hd="d?" desc="Also called a 'guildmage,' a member of this prestige class is a spellcaster who belongs to an academy and guild known as the Arcane Order." />
-    <class level="1" book="Lost Empires of Faerun page 17" name="Magelord {Prestige Class}" hd="d?" desc="Quick to anger, haughty, and proud of his Art, the magelord is an arcane spellcaster who studies an ancient magical tradition known for extremely fast and versatile spellcasting" />
-    <class level="1" book="Player's Guide to Faerun page 182" name="Maiden Of Pain {Prestige Class}" hd="d?" desc="Loviatar's most dedicated servants, the maidens of pain, are depraved women who literally make pain their meat and drink." />
-    <class level="1" book="Oriental Adventures page 231" name="Mantis Mercenary {Prestige Class}" hd="d?" desc="Mantis mercenaries make use of peasant weapons and a rolling motion." />
-    <class level="1" book="Shining South page 38" name="Maquar Crusader {Prestige Class}" hd="d?" desc="A Maquar crusader follows a strict code of conduct that not only limits what he can own or where he can live, but also limits the ways in which merchants can influence him." />
-    <class level="1" book="Player's Guide to Faerun page 184" name="Martyred Champion Of Ilmater {Prestige Class}" hd="d?" desc="Having already offered his life in sacrifice once, the martyred champion of Ilmater perseveres in Ilmater's faith." />
-    <class level="1" book="Magic of Faerun page 34" name="Master Alchemist {Prestige Class}" hd="d?" desc="The master alchemist is a spellcaster who specializes in producing potions and elixirs that reproduce the effects of spells of 4th level or higher." />
-    <class level="1" book="Eberron Campaign Setting page 82" name="Master Inquisitive {Prestige Class}" hd="d?" desc="The master inquisitive takes the art of investigation and deduction to the ultimate level, rising to the top of the field." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 27" name="Master Of Chains {Prestige Class}" hd="d?" desc="The master of chains is a combatant specializing in the use of chains -- specifically the spiked chain -- as a weapon." />
-    <class level="1" book="Savage Species page 80" name="Master Of Flies {Prestige Class}" hd="d?" desc="The master of flies is an intelligent swarm that can form a massive being at need, or a single creature that can dissolve into a cloud of vermin." />
-    <class level="1" book="Complete Adventurer page 58" name="Master Of Many Forms {Prestige Class}" hd="d?" desc="A master of many forms has no shape that she calls her own." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 119" name="Master Of Nine {Prestige Class}" hd="d?" desc="Some savants of the Nine Disciplines believe that none of the paths are complete, true disciplines in and of themselves." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 44" name="Master Of Radiance {Prestige Class}" hd="d?" desc="Masters of radiance channel the pure, undiluted power of the sun." />
-    <class level="1" book="Tome of Magic page 121" name="Master Of Shadow {Prestige Class}" hd="d?" desc="Some driven or domineering souls seek nothing less than mastery of darkness itself -- the ability to turn the very shadows into their agents and allies." />
-    <class level="1" book="Defenders of the Faith: A Guidebook to Clerics and Paladins page 66" name="Master Of Shrouds {Prestige Class}" hd="d?" desc="The master of shrouds is an evil spellcaster who magically seizes incorporeal undead and sets them to do her bidding." />
-    <class level="1" book="Complete Warrior page 60" name="Master Of The Unseen Hand {Prestige Class}" hd="d?" desc="Masters of the unseen hand delight in crushing their foes with invisible force, flinging massive objects into the sky, and disarming enemies with a single thought." />
-    <class level="1" book="Unapproachable East page 24" name="Master Of The Yuirwood {Prestige Class}" hd="d?" desc="The masters of the Yuirwood are an elite group of foresters who work to keep the ancient Yuirwood free of evil influence." />
-    <class level="1" book="Serpent Kingdoms page 163" name="Master Of Vipers {Prestige Class}" hd="d?" desc="Outcast yuan-ti learn to hunt not only to feed themselves, but also to spread destruction far and wide for the pure pleasure of it." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 29" name="Master Samurai {Prestige Class}" hd="d?" desc="The master samurai is a military retainer of a feudal overlord; he practices a code of behavior that emphasizes the value of personal honor over life itself." />
-    <class level="1" book="Complete Mage page 70" name="Master Specialist {Prestige Class}" hd="d?" desc="A wizard with greater mastery over a school of specialization." />
-    <class level="1" book="Complete Warrior page 58" name="Master Thrower {Prestige Class}" hd="d?" desc="Master throwers depend on quick reflexes, good planning, and deadly aim." />
-    <class level="1" book="Complete Arcane page 51" name="Master Transmogrifist {Prestige Class}" hd="d?" desc="The master transmogrifist is a sorcerer or wizard who has chosen to specialize in spells that change his form." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 55" name="Master Vampire {Prestige Class}" hd="d?" desc="Any vampire can create spawn, but it takes a very special vampire to rule over an entire gang of minions." />
-    <class level="1" book="Races of Destiny page 123" name="Menacing Brute {Prestige Class}" hd="d?" desc="The menacing brute takes advantage of how must humans fear half-orcs, playing on that dread to make his living." />
-    <class level="1" book="Power of Faerun page 71" name="Merchant Prince {Prestige Class}" hd="d?" desc="A merchant prince (known as a merchant princess if female) is a member of the merchant nobility who has acquired his position and wealth either by being born into a wealthy family or by earning every last coin himself." />
-    <class level="1" book="Expanded Psionics Handbook page 147" name="Metamind {Prestige Class}" hd="d?" desc="Metaminds know that accumulating the most power in the shortest time is the key to psionic superiority." />
-    <class level="1" book="Complete Arcane page 54" name="Mindbender {Prestige Class}" hd="d?" desc="Mindbenders seek to control the thoughts and dreams of others." />
-    <class level="1" book="Complete Warrior page 62" name="Mindspy {Prestige Class}" hd="d?" desc="By reading the minds of her enemies, a mindspy knows exactly what they're going to do a fraction of a second before they do it." />
-    <class level="1" book="Oriental Adventures page 218" name="Mirumoto Niten Master {Prestige Class}" hd="d?" desc="The Mirumoto school teaches a unique style of swordplay, rooted in this sense of duty." />
-    <class level="1" book="Player's Guide to Faerun page 65" name="Monk Of The Long Death {Prestige Class}" hd="d?" desc="Monks of the long death are members of a macabre, secretive order of scholars seeking to understand the true nature of death." />
-    <class level="1" book="CoV page 117" name="Moonsea Skysentinel {Prestige Class}" hd="d?" desc="Moonsea skysentinels are the eyes in the sky for the Knights of the North, scouting the landscape, looking for evidence of Zhentarim activity." />
-    <class level="1" book="Races of Eberron page 143" name="Moonspeaker {Prestige Class}" hd="d?" desc="Bound to the magic of their lycanthrope ancestors, moonspeakers breathe the magic of the world, guided by the twelve moons of Eberron." />
-    <class level="1" book="City of Splendors: Waterdeep page 84" name="Moonstar Agent {Prestige Class}" hd="d?" desc="Moonstar agents, also known as Teukiir, are members of the Tel Teukiira, a group founded by Khelben 'Blackstaff' Arunsun when he broke from the Harpers." />
-    <class level="1" book="Player's Guide to Faerun page 66" name="Morninglord Of Lathander {Prestige Class}" hd="d?" desc="Morninglords are, in many ways, the epitome of the classical cleric archetype." />
-    <class level="1" book="Book of Vile Darkness page 64" name="Mortal Hunter {Prestige Class}" hd="d?" desc="Mortal hunters are fiends who specialize in killing mortals." />
-    <class level="1" book="Oriental Adventures page 228" name="Moto Avenger {Prestige Class}" hd="d?" desc="The Moto avenger is dedicated to a war against the Shadowlands and its evils." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 192" name="Mystic Theurge {Prestige Class}" hd="d?" desc="Blurring the line between divine and arcane, mystic theurges draw power from divine sources and musty tomes alike." />
-    <class level="1" book="Magic of Faerun page 35" name="Mystic Wanderer {Prestige Class}" hd="d?" desc="Mystic wanderers are divine spellcasters who eschew normal church hierarchies and instead embrace freedom, wanderlust, and independence." />
-    <class level="1" book="Serpent Kingdoms page 165" name="Naga Overlord {Prestige Class}" hd="d?" desc="Naga overlords are evil masterminds who operate in secret, usually behind cults of devoted followers." />
-    <class level="1" book="Unapproachable East page 25" name="Nar Demonbinder {Prestige Class}" hd="d?" desc="Master of the black art of demon summoning, the Nar demonbinder keeps alive the sinister traditions of the old Empire of Narfell." />
-    <class level="1" book="Magic of Incarnum page 132" name="Necrocarnate {Prestige Class}" hd="d?" desc="Dealers in death and torturers of souls, necrocarnates number among the most evil creatures in any world." />
-    <class level="1" book="Unapproachable East page 28" name="Nentyar Hunter {Prestige Class}" hd="d?" desc="Sworn to defend the great forests and serve the Nentyarch, druidic ruler of the Circle of Leth, the Nentyar hunters roam the wild lands of the East, uprooting foul and evil things." />
-    <class level="1" book="Champions of Ruin page 53" name="Night Mask Deathbringer {Prestige Class}" hd="d?" desc="Night Mask deathbringers are highly trained members of the Westgate thieves' guild who have caught the favorable attention of the vampires in charge of the organization." />
-    <class level="1" book="Faiths &amp; Pantheons page 198" name="Nightcloak {Prestige Class}" hd="d?" desc="Nightcloaks are the apple of Shar's eye -- devoted to her vision, preserving her secrets, practicing her magic, as twisted and bitter as it is." />
-    <class level="1" book="Complete Mage page 74" name="Nightmare Spinner {Prestige Class}" hd="d?" desc="An arcane spellcaster who weaves fear into illusions." />
-    <class level="1" book="Complete Adventurer page 60" name="Nightsong Enforcer {Prestige Class}" hd="d?" desc="The enforcers of the Nightsong Guild focus on the stealth-centered combat training that rogues usually learn." />
-    <class level="1" book="Complete Adventurer page 62" name="Nightsong Infiltrator {Prestige Class}" hd="d?" desc="The nightsong infiltrator is the perfect thief and the perfect spy." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 30" name="Ninja Of The Crescent Moon {Prestige Class}" hd="d?" desc="The Ninja of the Crescent Moon is a mercenary clan whose members engage in sabotage and other covert missions for an outlandish fee." />
-    <class level="1" book="Oriental Adventures page 43" name="Ninja Spy {Prestige Class}" hd="d?" desc="True ninja spies are masters of exotic weapons, tools of stealth, and strange ki powers." />
-    <class level="1" book="Tome of Magic page 125" name="Noctumancer {Prestige Class}" hd="d?" desc="Noctumancers bridge the gap between shadow and arcane magic." />
-    <class level="1" book="Complete Warrior page 66" name="Occult Slayer {Prestige Class}" hd="d?" desc="The occult slayer is driven to confront any arcane or divine spellcaster who crosses her path." />
-    <class level="1" book="Faiths &amp; Pantheons page 200" name="Ocular Adept {Prestige Class}" hd="d?" desc="Ocular adepts have pledged their religious devotions to the alien entity known as the Great Mother, the deity matron of all beholders." />
-    <class level="1" book="Lost Empires of Faerun page 21" name="Olin Gisir {Prestige Class}" hd="d?" desc="The Olin Gisiae are elite elf mages who have taken it upon themselves to guard dark secrets from the rest of the world" />
-    <class level="1" book="Complete Adventurer page 66" name="Ollam {Prestige Class}" hd="d?" desc="In Dwarven, the world 'ollam' means teacher." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 67" name="Oozemaster {Prestige Class}" hd="d?" desc="Oozemasters relate one-on-one with things that relate to nothing at all." />
-    <class level="1" book="Silver Marches page 114" name="Orc Scout {Prestige Class}" hd="d?" desc="Part wilderness warrior and part spy, the orc scout is a hero to his people." />
-    <class level="1" book="Races of Faerun page 184" name="Orc Warlord {Prestige Class}" hd="d?" desc="The orc warlord is a savage general of an unruly army, the leader of one of the deadly and all too common orc hordes that rampage down from the Spine of the World." />
-    <class level="1" book="Complete Warrior page 68" name="Order Of The Bow Initiate {Prestige Class}" hd="d?" desc="By learning the meditative art of the Way of the Bow, the archer improves his discipline, precision, and spirituality." />
-    <class level="1" book="Races of Destiny page 126" name="Outcast Champion {Prestige Class}" hd="d?" desc="Outcast champions bring hope to those who have no place in society." />
-    <class level="1" book="Song and Silence: A Guidebook to Bards and Rogues page 10" name="Outlaw Of The Crimson Road {Prestige Class}" hd="d?" desc="An outlaw of the crimson road might be a revolutionary, a loyal supporter of some deposed ruler, or merely an ordinary individual who angered the wrong person at the wrong time." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 47" name="Pale Master {Prestige Class}" hd="d?" desc="Arcane casters can become pale masters, who draw on necromantic lore that provides a macabre power all its own." />
-    <class level="1" book="Silver Marches page 115" name="Peerless Archer {Prestige Class}" hd="d?" desc="The peerless archer devotes her life to perfecting her skill with the bow." />
-    <class level="1" book="Races of Stone page 116" name="Peregrine Runner {Prestige Class}" hd="d?" desc="When goliaths need to send a message to another tribe, they send an elite, fleet-of-foot warrior known as a peregrine runner." />
-    <class level="1" book="Epic Level Handbook page 34" name="Perfect Wight {Prestige Class}" hd="d?" desc="The perfect wight is a master of skulking, the ultimate prowler and thief." />
-    <class level="1" book="Complete Divine page 50" name="Pious Templar {Prestige Class}" hd="d?" desc="Sworn to the defense of a temple site, the pious templar is a holy warrior blessed by her deity with combat prowess and great endurance." />
-    <class level="1" book="Manual of the Planes page 28" name="Planar Champion {Prestige Class}" hd="d?" desc="The planar champion moves between the planes, always driven to battle." />
-    <class level="1" book="Faiths of Eberron page 105" name="Planar Shepherd {Prestige Class}" hd="d?" desc="Some druids, especially among the Greensingers or those who have dealt extensively with that sect, reject narrow interpretations of what constitutes the natural world." />
-    <class level="1" book="Manual of the Planes page 30" name="Planeshifter {Prestige Class}" hd="d?" desc="The planeshifter is a magical scholar and expert in planar travel, and through arcane research develops not only the ability to sense planar portals, but also the ability to create his own demiplane." />
-    <class level="1" book="Draconomicon page 133" name="Platinum Knight {Prestige Class}" hd="d?" desc="The platinum knight protects good-aligned dragonkind from their natural enemies." />
-    <class level="1" book="Unearthed Arcana page 69" name="Prestige Bard {Prestige Class}" hd="d?" desc="The prestige bard is a jack-of-all-trades, master of none." />
-    <class level="1" book="Unearthed Arcana page 70" name="Prestige Paladin {Prestige Class}" hd="d?" desc="After training in the arts of combat and the mysteries of the divine, the prestige paladin is anointed as a holy warrior dedicated to the protection of law and goodness." />
-    <class level="1" book="Unearthed Arcana page 71" name="Prestige Ranger {Prestige Class}" hd="d?" desc="The prestige ranger navigates the dark forests, craggy mountains, or desert wastes of her homeland with unparalleled skill." />
-    <class level="1" book="Secrets of Xen'drik page 127" name="Primal Scholar {Prestige Class}" hd="d?" desc="Primal scholars are spellcasters bent on uncovering and mastering the ancient magic that lies buried in the jungles, deserts, and mountains of Xen'drik." />
-    <class level="1" book="Underdark page 40" name="Prime Underdark Guide {Prestige Class}" hd="d?" desc="These skilled guides not only know how to overcome the physical challenges of the Underdark, but they also can help them over the social and cultural hurdles they are sure to face." />
-    <class level="1" book="Frostburn page 65" name="Primeval {Prestige Class}" hd="d?" desc="The primeval is a warrior who has tapped into his racial memories to find and forge a bond with an ancient creature." />
-    <class level="1" book="Book of Exalted Deeds page 66" name="Prophet Of Erathaoi {Prestige Class}" hd="d?" desc="The prophet of Erathaoi is a seer and visionary, a medium of the heavenly will, pronouncing judgment on corruption and evil in the world." />
-    <class level="1" book="Expanded Psionics Handbook page 148" name="Psion Uncarnate {Prestige Class}" hd="d?" desc="Formless, fleshless, and unbound by the limits of corporeality -- this is the goal of every psion uncarnate." />
-    <class level="1" book="Heroes of Horror page 108" name="Purifier Of The Hallowed Doctrine {Prestige Class}" hd="d?" desc="Purifiers of the Hallowed Doctrine consider themselves servants not of gods but of the spiritual well-being of the world itself." />
-    <class level="1" book="Complete Warrior page 70" name="Purple Dragon Knight {Prestige Class}" hd="d?" desc="Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers." />
-    <class level="1" book="Expanded Psionics Handbook page 151" name="Pyrokineticist {Prestige Class}" hd="d?" desc="Pyrokineticists know that a little psionic power goes a long way -- for those interested in fire." />
-    <class level="1" book="Magic of Eberron page 77" name="Quori Mindhunter {Prestige Class}" hd="d?" desc="The quori mindhunter has a single mission: to hunt down and destroy the quori spirits that corrupt humanity, and the possessed Inspired that further the aims of the Dreaming Dark." />
-    <class level="1" book="Races of Eberron page 148" name="Quori Nightmare {Prestige Class}" hd="d?" desc="The quori nightmare taps into the primal horrors and urges of the subconscious." />
-    <class level="1" book="Complete Divine page 52" name="Radiant Servant Of Pelor {Prestige Class}" hd="d?" desc="The radiant servants of Pelor put the dogma of demonstrating strength through charity and modesty into living practice." />
-    <class level="1" book="Complete Warrior page 72" name="Rage Mage {Prestige Class}" hd="d?" desc="The rage mage's approach to magic is based on the primal passion of magic more than the studious quasi-scientific approach." />
-    <class level="1" book="Complete Divine page 54" name="Rainbow Servant {Prestige Class}" hd="d?" desc="Those who have learned what the couatl temples have to offer are known as rainbow servants." />
-    <class level="1" book="Unapproachable East page 29" name="Raumathari Battlemage {Prestige Class}" hd="d?" desc="Employing sword and spell with dauntless courage and deadly force, the handful of Raumathari battlemages remaining in the world comprise a lonely and little-known order of adventurers, explorers, and mercenaries in search of battle." />
-    <class level="1" book="Complete Warrior page 73" name="Ravager {Prestige Class}" hd="d?" desc="The infamous ravager has dedicated himself to the service of Erythnul, deity of slaughter." />
-    <class level="1" book="Races of Eberron page 153" name="Reachrunner {Prestige Class}" hd="d?" desc="Known for their mastery of the untamed world, some shifters rise above others in woodslore, physical ability, and stamina to claim the revered mantle of the reachrunner -- the greatest of shifter trackers and scouts." />
-    <class level="1" book="Complete Warrior page 75" name="Reaping Mauler {Prestige Class}" hd="d?" desc="Reaping maulers are the back-breakers, the limb-twisters, and the neck-snappers among pit fighters." />
-    <class level="1" book="Races of Eberron page 157" name="Recaster {Prestige Class}" hd="d?" desc="To the recaster, the change her own body is capable of is a simple reflection of the mutability of the world around her." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 34" name="Red Avenger {Prestige Class}" hd="d?" desc="The Red Avenger is the master of ki,an ancient and formidable discipline that allows the user to accomplish the extraordinary." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 193" name="Red Wizard {Prestige Class}" hd="d?" desc="The Red Wizards are the masters of Thay, the would-be magical overlords of the land of Faerun." />
-    <class level="1" book="Races of Eberron page 161" name="Reforged {Prestige Class}" hd="d?" desc="The reforged represents the realized ideal of the warforged's living aspects." />
-    <class level="1" book="Magic of Eberron page 81" name="Renegade Mastermaker {Prestige Class}" hd="d?" desc="A renegade mastermaker applies the secrets of warforged creation methods to his own body, slowly replacing parts of his body with mechanical augmentations." />
-    <class level="1" book="Player's Guide to Eberron page 108" name="Revenant Blade {Prestige Class}" hd="d?" desc="The revenant blade is a Valenar elf who can draw on the skills of ancient heroes, the giant-slayers of Xen'drik." />
-    <class level="1" book="Dragonlance Campaign Setting page 83" name="Righteous Zealot {Prestige Class}" hd="d?" desc="The righteous zealot is a person with a cause that directs every aspect of life." />
-    <class level="1" book="Frostburn page 67" name="Rimefire Witch {Prestige Class}" hd="d?" desc="A rimefire witch is one who has followed a mysterious call to the core of a rimefire iceberg and becomes infused with great power by the rimefire eidolon." />
-    <class level="1" book="Book of Exalted Deeds page 68" name="Risen Martyr {Prestige Class}" hd="d?" desc="A risen martyr is an exalted character who continues in his earthly existence after his martyrdom in order to finish some unfinished task." />
-    <class level="1" book="Complete Warrior page 77" name="Ronin {Prestige Class}" hd="d?" desc="A ronin is a masterless warrior cast adrift in the world, but still clinging to the remnants of his former life." />
-    <class level="1" book="Song and Silence: A Guidebook to Bards and Rogues page 13" name="Royal Explorer {Prestige Class}" hd="d?" desc="Some monarchs sponser crack teams of explorers." />
-    <class level="1" book="Races of the Wild page 122" name="Ruathar {Prestige Class}" hd="d?" desc="Also known as 'elf-friend' or 'star-friend,' a ruathar is a person of some other race who has earned the special friendship of the elven folk." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 122" name="Ruby Knight Vindicator {Prestige Class}" hd="d?" desc="The Ruby Knights are a crusader order in the service of Wee Jas, goddess of death and magic." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 51" name="Runecaster {Prestige Class}" hd="d?" desc="Those that choose to master the ability to create runes of power are runecasters." />
-    <class level="1" book="Unapproachable East page 31" name="Runescarred Berserker {Prestige Class}" hd="d?" desc="Deadly barbarians who bear magical runes carved into their flesh, runescarred berserkers are among the most feared of Rashemen's defenders." />
-    <class level="1" book="Races of Stone page 118" name="Runesmith {Prestige Class}" hd="d?" desc="A runesmith has learned to harness the power of runes and can fling fireballsand other staple arcane spells even while encased in full plate armor." />
-    <class level="1" book="Complete Divine page 56" name="Sacred Exorcist {Prestige Class}" hd="d?" desc="Sacred exorcists hope to drive away the spiritual forces of evil, prevening them from causing harm to the bodies and souls of humanity." />
-    <class level="1" book="Complete Divine page 59" name="Sacred Fist {Prestige Class}" hd="d?" desc="Sacred fists are independent organizations found within many temples." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 49" name="Sacred Purifier {Prestige Class}" hd="d?" desc="Sacred purifiers are priestly characters who specialize in destroying undead." />
-    <class level="1" book="Draconomicon page 96" name="Sacred Warder Of Bahamut {Prestige Class}" hd="d?" desc="Sacred warders of Bahamut protect others from the power of Tiamat's brood." />
-    <class level="1" book="Lords of Madness page 198" name="Sanctified Mind {Prestige Class}" hd="d?" desc="A sanctified mind believes that all evil-aligned psionics-using creatures must be crushed." />
-    <class level="1" book="Sandstorm page 76" name="Sand Shaper {Prestige Class}" hd="d?" desc="Sand shapers are part prophet, part priest, part magician, and part assassin." />
-    <class level="1" book="Magic of Incarnum page 136" name="Sapphire Hierarch {Prestige Class}" hd="d?" desc="The elite members of an order of priests of law defend the temple, contemplate the mysteries of the Sapphire Eidolon, and seek to fulfill its single command by perfecting themselves and bringing order out of chaos wherever they find it." />
-    <class level="1" book="Lords of Madness page 21" name="Savant Aboleth {Prestige Class}" hd="d?" desc="Savant aboleths are the eldest, most intelligent, wisest and most forceful of personality." />
-    <class level="1" book="Savage Species page 83" name="Scaled Horror {Prestige Class}" hd="d?" desc="Scaled horrors are elite amphibious soldiers." />
-    <class level="1" book="Races of Destiny page 130" name="Scar Enforcer {Prestige Class}" hd="d?" desc="Scar enforcers are angry, embittered half-elves who have rejected both sides of their ancestry." />
-    <class level="1" book="Stormwrack page 65" name="Scarlet Corsair {Prestige Class}" hd="d?" desc="The scarlet corsair relies on the reputation of her quick blade and terrible fighting skills to drive her prey before her." />
-    <class level="1" book="Tome of Magic page 59" name="Scion Of Dantalion {Prestige Class}" hd="d?" desc="The scions believe that their destiny is to one day take up the crown of a long-forgotten human empire, bear the scepter of rulership, and rebuild the empire that could rival the stars." />
-    <class level="1" book="Sandstorm page 86" name="Scorpion Heritor {Prestige Class}" hd="d?" desc="Scorpion heritors, through a special relationship with the scorpion spirit, gain the mystical abilities of the scorpion, and can even take its shape." />
-    <class level="1" book="Secrets of Xen'drik page 130" name="Scorpion Wraith {Prestige Class}" hd="d?" desc="Scorpion wraiths are the elite warriors of the drow." />
-    <class level="1" book="Shining South page 40" name="Scourge Maiden {Prestige Class}" hd="d?" desc="Scourge maidens are warrior-priestesses of Loviatar dedicated to pain and anguish." />
-    <class level="1" book="Underdark page 42" name="Sea Mother Whip {Prestige Class}" hd="d?" desc="Devout worshipers of Blibdoolpoolp who seek closer communion with the Sea Mother often gain additional abilities in the Sea Mother whip prestige class." />
-    <class level="1" book="Stormwrack page 68" name="Sea Witch {Prestige Class}" hd="d?" desc="A sea witch is a terrible chaotic mage who wields the powers of water and calls on the living horrors of the deep." />
-    <class level="1" book="Complete Divine page 61" name="Seeker Of The Misty Isle {Prestige Class}" hd="d?" desc="Seekers search for the lost elves of Misty Isle." />
-    <class level="1" book="Complete Arcane page 56" name="Seeker Of The Song {Prestige Class}" hd="d?" desc="Seekers of the song wield the power of music in ways that amaze even the most skilled bards." />
-    <class level="1" book="Book of Exalted Deeds page 69" name="Sentinel Of Bharrai {Prestige Class}" hd="d?" desc="Respect for the power of nature, the desire to further the ends of good, and the resolve to destroy evil are the core beliefs of a sentinel of Bharrai." />
-    <class level="1" book="Serpent Kingdoms page 166" name="Serpent Slayer {Prestige Class}" hd="d?" desc="Some individuals devote their entire lives to thwarting the yuan-ti." />
-    <class level="1" book="Player's Guide to Faerun page 71" name="Shaaryan Hunter {Prestige Class}" hd="d?" desc="On the backs of their swift horses, Shaaryan hunters can run down even the fastest prey and either spear it with a lance or pelt it with arrows from horseback." />
-    <class level="1" book="Champions of Ruin page 58" name="Shade Hunter {Prestige Class}" hd="d?" desc="The shade hunter is a breed of adventurer who lives for the thrill of finding lost treasure, defeating ancient traps, and surviving deadly curses laid by the priests of dead gods." />
-    <class level="1" book="Forgotten Realms Campaign Setting page 52" name="Shadow Adept {Prestige Class}" hd="d?" desc="Shadow adepts hurl themselves into the abyss of the Shadow Weave, immediately acquiring all the gifts available to casual students and discovering secrets unavailable to all but the most dedicated." />
-    <class level="1" book="Oriental Adventures page 44" name="Shadow Scout {Prestige Class}" hd="d?" desc="The camouflage of a tiger, the stamina of a horse, the eyes of an eagle: these are the ingredients of the shadow scouts." />
-    <class level="1" book="Races of Destiny page 137" name="Shadow Sentinel {Prestige Class}" hd="d?" desc="Shadow sentinels are elite illumian warriors who protect their people from githyanki raiders, demonic invastions, and hordes of barely imaginable monsters from the Plane of Shadow." />
-    <class level="1" book="Tome of Battle: The Book of Nine Swords page 126" name="Shadow Sun Ninja {Prestige Class}" hd="d?" desc="A Shadow Sun ninja is a martial artist who studies the balance between good and evil, light and dark." />
-    <class level="1" book="Player's Guide to Faerun page 74" name="Shadow Thief Of Amn {Prestige Class}" hd="d?" desc="A shadow thief of Amn knows only her own minions, her coworkers, and her superior." />
-    <class level="1" book="Complete Adventurer page 68" name="Shadowbane Inquisitor {Prestige Class}" hd="d?" desc="Shadowbane inquisitors battle incessantly against evil in whatever form it takes." />
-    <class level="1" book="Complete Adventurer page 70" name="Shadowbane Stalker {Prestige Class}" hd="d?" desc="Shadowbane stalkers find evil hidden in civilized areas so that the martial arm of the order (the inquisitors) can spearhead the attack." />
-    <class level="1" book="Tome of Magic page 129" name="Shadowblade {Prestige Class}" hd="d?" desc="Shadowblades are martial combatants with an innate link to shadow." />
-    <class level="1" book="Races of Stone page 120" name="Shadowcraft Mage {Prestige Class}" hd="d?" desc="Some gnomes have an even greater affinity for illusions than the average representative of their race, resulting in the prestige class known as the shadowcraft mage." />
-    <class level="1" book="Underdark page 43" name="Shadowcrafter {Prestige Class}" hd="d?" desc="Shadowcrafters long ago mastered illusions and glamers." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 194" name="Shadowdancer {Prestige Class}" hd="d?" desc="Operating in the border between light and darkness, shadowdancers are nimble artists of deception." />
-    <class level="1" book="Complete Adventurer page 74" name="Shadowmind {Prestige Class}" hd="d?" desc="A shadowmind blends psionic powers and uncanny stealth into an effective whole." />
-    <class level="1" book="Tome of Magic page 132" name="Shadowsmith {Prestige Class}" hd="d?" desc="Shadowcasters draw power from darkness, and masters of shadow command it, but no one truly manipulates the darkness as does the shadowsmith." />
-    <class level="1" book="Oriental Adventures page 45" name="Shapeshifter {Prestige Class}" hd="d?" desc="Shapeshifters must already have some means of changing their form before learning to master that change." />
-    <class level="1" book="Sharn: City of Towers page 165" name="Sharn Skymage {Prestige Class}" hd="d?" desc="By studying the properties of the manifest zone in which Sharn is situated, learning its intricacies and methods for manipulating it, a spellcaster can improve her magical or natural ability to fly." />
-    <class level="1" book="Oriental Adventures page 222" name="Shiba Protector {Prestige Class}" hd="d?" desc="The warriors of the Shiba family are sworn to protect the Isawa family." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 68" name="Shifter {Prestige Class}" hd="d?" desc="The shifter has no form that she calls her own." />
-    <class level="1" book="Complete Divine page 63" name="Shining Blade Of Heironeous {Prestige Class}" hd="d?" desc="The shining blade of Heironeous is a member of an order of knights dedicated to prowess in melee combat." />
-    <class level="1" book="Oriental Adventures page 46" name="Shintao Monk {Prestige Class}" hd="d?" desc="Shintao monks are dedicated to following the teachings of Shinsei." />
-    <class level="1" book="Unapproachable East page 32" name="Shou Disciple {Prestige Class}" hd="d?" desc="Shou disciples are martial artists who have studied or observed the monks of Kara-Tur and seek to emulate their style." />
-    <class level="1" book="FN page 150" name="Silver Pyromancer {Prestige Class}" hd="d?" desc="The silver pyromancer is an arcane champion of the Church of the Silver Flame, taking his place alongside clerics, paladins, and exorcists in the Church's cause." />
-    <class level="1" book="Faiths &amp; Pantheons page 201" name="Silverstar {Prestige Class}" hd="d?" desc="Silverstars are dedicated advocates of freedom and tolerance, wanderers on the path of truth, and absolute foes of Shar." />
-    <class level="1" book="Races of the Dragon page 91" name="Singer Of Concordance {Prestige Class}" hd="d?" desc="The Singers of Concordance are a small order of wandering draconic spiritual guides who begin as servitors of Io, the Ninefold Dragon, creator of all dragonkind." />
-    <class level="1" book="Oriental Adventures page 48" name="Singh Rager {Prestige Class}" hd="d?" desc="Singh ragers draw their furious strength from the noble lion." />
-    <class level="1" book="Savage Species page 84" name="Siren {Prestige Class}" hd="d?" desc="A harpy siren is an artist who constantly seeks to expand and improve upon her innate sonic ability." />
-    <class level="1" book="Miniatures Handbook page 20" name="Skullclan Hunter {Prestige Class}" hd="d?" desc="The skullclan hunter is the acclaimed foe of unlife." />
-    <class level="1" book="Book of Exalted Deeds page 71" name="Skylord {Prestige Class}" hd="d?" desc="An elf crusader, the skylord uses his kinship with creatures of the sky and the power of the winds to fight evil." />
-    <class level="1" book="Races of the Wild page 126" name="Skypledged {Prestige Class}" hd="d?" desc="The skypledged represent a mystical tradition among the raptorans that hearkens back to an ancient pact with powerful lords of the Elemental Plane of Air." />
-    <class level="1" book="Savage Species page 87" name="Slaad Brooder {Prestige Class}" hd="d?" desc="The brooder's sole purpose is to implant as many eggs pellets as he can to produce the widest possible range of progeny." />
-    <class level="1" book="Book of Exalted Deeds page 73" name="Slayer Of Domiel {Prestige Class}" hd="d?" desc="Sometimes the skillset of an assassin is required for more noble pursuits." />
-    <class level="1" book="Player's Guide to Faerun page 186" name="Slime Lord {Prestige Class}" hd="d?" desc="Slime lords, the most favored of Ghaunadar's servants, are not clerics; they are spies and infiltrators who can change their shapes in order to move unnoticed among members of any race." />
-    <class level="1" book="Deities and Demigods page 208" name="Soldier Of Light {Prestige Class}" hd="d?" desc="The Soldiers of Light are a military order dedicated to open warfare against the minions of their church's enemies." />
-    <class level="1" book="Book of Vile Darkness page 66" name="Soul Eater {Prestige Class}" hd="d?" desc="The soul eater is a monstrous being that feeds on the very essence of life force." />
-    <class level="1" book="Complete Psionic page 36" name="Soulbow {Prestige Class}" hd="d?" desc="In the tradition of the soulknife, a soulbow realizes the direct capacity of her own mind to give shape to weapons of psionic perfection." />
-    <class level="1" book="Magic of Incarnum page 142" name="Soulcaster {Prestige Class}" hd="d?" desc="Soulcasters excel at incorporating soul energy into their magic." />
-    <class level="1" book="Faiths of Eberron page 32" name="Sovereign Speaker {Prestige Class}" hd="d?" desc="Although devotion to a single god enables some individuals to gain additional power, overriding" />
-    <class level="1" book="Unearthed Arcana page 167" name="Spell Scion {Prestige Class}" hd="d?" desc="This prestige class is for characters who wield legendary weapons designed for use by arcane spellcasters, such as wizards, sorcerers, and sometimes bards." />
-    <class level="1" book="Races of Eberron page 166" name="Spellcarved Soldier {Prestige Class}" hd="d?" desc="Spellcarved soldiers are warforged warriors who engrave magic runes into the plating of their inherently magic bodies, gaining remarkable defensive abilities." />
-    <class level="1" book="Magic of Faerun page 37" name="Spelldancer {Prestige Class}" hd="d?" desc="Spelldancers are an energetic sort of spellcaster who draw on the quasi-primal energy of song and dancing to power their magic." />
-    <class level="1" book="Magic of Faerun page 38" name="Spellfire Channeler {Prestige Class}" hd="d?" desc="Those who practice their spellfire can hone their talent into a tool with fantastic abilities that most dabblers can only dream of." />
-    <class level="1" book="Player's Guide to Faerun page 75" name="Spellguard Of Silverymoon {Prestige Class}" hd="d?" desc="The Spellguard, Silverymoon's elite cadre of battle-trained arcane spellcasters, protects the city against the threat of hostile magic and aids the Knights in Silver against more mundane threats." />
-    <class level="1" book="Races of Faerun page 185" name="Spellsinger {Prestige Class}" hd="d?" desc="Spellsingers are rare practitioners of an ancient elven bardic tradition." />
-    <class level="1" book="Complete Warrior page 79" name="Spellsword {Prestige Class}" hd="d?" desc="The dream of melding magic and weaponplay is fulfilled in the person of the spellsword." />
-    <class level="1" book="Magic of Incarnum page 147" name="Spinemeld Warrior {Prestige Class}" hd="d?" desc="When a spinemeld warrior trains, he is participating in a tradition that has long been venerated in skarn society." />
-    <class level="1" book="Lords of Darkness page 11" name="Spur Lord {Prestige Class}" hd="d?" desc="The Spur Lords are elite zealots of the church, wielding the dark power of Cyric and commanding the attention of even the most fanatical clerics." />
-    <class level="1" book="Complete Adventurer page 76" name="Spymaster {Prestige Class}" hd="d?" desc="Spymasters do their work quietly and in private, and they often have a cover identity." />
-    <class level="1" book="Book of Exalted Deeds page 75" name="Stalker Of Kharash {Prestige Class}" hd="d?" desc="The stalkers of Kharash are a loose-knit order of rangers, rogues, and other characters devoted to fighting evil under Kharash's patronage." />
-    <class level="1" book="Dragonlance Campaign Setting page 68" name="Steel Legionnaire {Prestige Class}" hd="d?" desc="Steel legionnaires are members of the Legion of Steel." />
-    <class level="1" book="Races of Stone page 122" name="Stoneblessed {Prestige Class}" hd="d?" desc="A stoneblessed bonds to the stone of the mountains, blending into a dwarf, gnome, or goliath community and making it her home." />
-    <class level="1" book="Races of Stone page 124" name="Stonedeath Assassin {Prestige Class}" hd="d?" desc="Most stonedeath assassins are hobgoblin rogues or rangers, but bugbears and even exceptional goblins have been known to undertake stonedeath training and learn the ways of infiltrating dwarf strongholds by disarming traps, weakening gates, and assassinating dwarf leaders." />
-    <class level="1" book="Complete Warrior page 81" name="Stonelord {Prestige Class}" hd="d?" desc="The earth whispers to special dwarves known as stonelords." />
-    <class level="1" book="Races of Stone page 127" name="Stonespeaker Guardian {Prestige Class}" hd="d?" desc="The stonespeaker guardian taps into the divine power of the earth itself to defend her fellow stonespeakers, as well as other goliaths and friendly races, from their enemies." />
-    <class level="1" book="Complete Psionic page 40" name="Storm Disciple {Prestige Class}" hd="d?" desc="A storm disciple is a character who decides that the best, most glorious way to serve his ideals is through the natural power, fury, and splendor of the storm." />
-    <class level="1" book="Stormwrack page 72" name="Stormcaster {Prestige Class}" hd="d?" desc="The stormcaster is one who seeks to tap into the power of a strange and terrifying phenomenon: the raging storm." />
-    <class level="1" book="Complete Divine page 65" name="Stormlord {Prestige Class}" hd="d?" desc="Stormlords often live as brigands, indulging their personal desires for wealth, food, luxury items, and wanton behavior as they crave random, spectacular acts of violence." />
-    <class level="1" book="Frostburn page 70" name="Stormsinger {Prestige Class}" hd="d?" desc="The stormsingers have learned the secret methods of harnessing the magic powers of music to influence and control the weather." />
-    <class level="1" book="Races of the Wild page 131" name="Stormtalon {Prestige Class}" hd="d?" desc="The stormtalons are consummate aerial warriors, using both their weapons and their razor-sharp foot talons to dive on their hapless foes." />
-    <class level="1" book="Complete Adventurer page 79" name="Streetfighter {Prestige Class}" hd="d?" desc="Streetfighters seek the challenges of the back alleys as a way of testing themselves and their experience in the wilder world." />
-    <class level="1" book="Faiths &amp; Pantheons page 204" name="Strifeleader {Prestige Class}" hd="d?" desc="Strifeleaders are the chief instruments of the Dark Sun, charged with spreading the One True Way of Cyric through force and deception." />
-    <class level="1" book="Complete Arcane page 60" name="Sublime Chord {Prestige Class}" hd="d?" desc="In return for abandoning her continuing study of bardic music, a sublime chord instead masters a number of spells more powerful than most bards can ever use." />
-    <class level="1" book="Complete Arcane page 63" name="Suel Arcanamach {Prestige Class}" hd="d?" desc="Arcanamach formerly served as elite guards and agents for powerful wizards." />
-    <class level="1" book="City of Splendors: Waterdeep page 88" name="Sun Soul Monk {Prestige Class}" hd="d?" desc="Monks of the Sun Soul Order believe that they each harbor a small fragment of the sun's divine essence." />
-    <class level="1" book="Lost Empires of Faerun page 25" name="Sunmaster {Prestige Class}" hd="d?" desc="The sunmasters are members of a sect within the church of Lathander who believe that the Morninglord is the living reincarnation of Amaunator." />
-    <class level="1" book="Savage Species page 89" name="Survivor {Prestige Class}" hd="d?" desc="Those who survive a program of frequent assaults and other dangers emerge a few weeks later -- tougher, faster, and less vulnerable to attacks." />
-    <class level="1" book="Book of Exalted Deeds page 76" name="Swanmay {Prestige Class}" hd="d?" desc="Swanmays are members of a secretive order sworn to protect wilderness areas from evil." />
-    <class level="1" book="Unearthed Arcana page 168" name="Swift Scion {Prestige Class}" hd="d?" desc="This prestige class is for those who wield legendary weapons that make use of or improve the wielder's stealth, speed, or dexterity (in the general sense)." />
-    <class level="1" book="Dragon Magic page 50" name="Swift Wing {Prestige Class}" hd="d?" desc="Swift wings are church servants who see themselves as the fast-moving, hard-hitting crusaders of their god's cadre of worshipers." />
-    <class level="1" book="Faiths &amp; Pantheons page 205" name="Sword Dancer {Prestige Class}" hd="d?" desc="Sword dancers are expected to lead the drow migration and work to promote harmony between drow and surface-dwelling races." />
-    <class level="1" book="Book of Exalted Deeds page 77" name="Sword Of Righteousness {Prestige Class}" hd="d?" desc="Pursuit of a commitment to righteousness and purity that exceeds the norm is a quality of a sword of righteousness." />
-    <class level="1" book="Savage Species page 90" name="Sybil {Prestige Class}" hd="d?" desc="Steeped in ancient lore, or maddened by divine inspiration, the sybil is a reclusive prophet." />
-    <class level="1" book="Miniatures Handbook page 22" name="Tactical Soldier {Prestige Class}" hd="d?" desc="The tactical soldier is the master of teamwork in melee." />
-    <class level="1" book="Heroes of Horror page 113" name="Tainted Scholar {Prestige Class}" hd="d?" desc="No secret is barred from the tainted scholar's grasp, and if such forbidden knowledge comes at the cost of his soul, he's willing to pay that price." />
-    <class level="1" book="Unearthed Arcana page 191" name="Tainted Sorcerer {Prestige Class}" hd="d?" desc="Tainted sorcerers find an easy path to tremendous magical power." />
-    <class level="1" book="Unearthed Arcana page 193" name="Tainted Warrior {Prestige Class}" hd="d?" desc="When a character's taint threatens to exceed the capacity of his body and soul to contain it, he may become possessed by its evil power and transformed into a creature of taint." />
-    <class level="1" book="Draconomicon page 134" name="Talon Of Tiamat {Prestige Class}" hd="d?" desc="The talon of Tiamat furthers the goals of evil dragonkind." />
-    <class level="1" book="Unapproachable East page 34" name="Talontar Blightlord {Prestige Class}" hd="d?" desc="Corrupt priests who revel in decay, the blightlords of Talona are feared and reviled throughout the Unapproachable East." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 70" name="Tamer Of Beasts {Prestige Class}" hd="d?" desc="Through magic and his overwhelming concern for his charges, the tamer of beasts can make them tougher and more intelligent." />
-    <class level="1" book="Complete Warrior page 82" name="Tattooed Monk {Prestige Class}" hd="d?" desc="Certain monastic orders bestow supernatural or spell-like powers on their members by inscribing magic tattoos on their skin." />
-    <class level="1" book="Faiths &amp; Pantheons page 206" name="Techsmith {Prestige Class}" hd="d?" desc="Techsmiths are devoted to the development of new inventions and the progression of achievement in the name of the Wonderbringer." />
-    <class level="1" book="Unapproachable East page 36" name="Telflammar Shadowlord {Prestige Class}" hd="d?" desc="Above all the criminals of the Shadowmasters of Telflamm stand the Telflammar shadowlords,the secret captains of iniquity who demand unquestioned obedience from their numerous minions." />
-    <class level="1" book="Complete Adventurer page 81" name="Tempest {Prestige Class}" hd="d?" desc="A tempest is the point of calm within a whirling barrier of deadly blades." />
-    <class level="1" book="Defenders of the Faith: A Guidebook to Clerics and Paladins page 72" name="Templar {Prestige Class}" hd="d?" desc="Sworn to the defense of a temple site, the templar is a holy warrior blessed by her deity with combat prowess and great endurance." />
-    <class level="1" book="Complete Divine page 67" name="Temple Raider Of Olidammara {Prestige Class}" hd="d?" desc="The temple raiders are an elite cadre of thiees who worship the Laughing Rogue and specialize in stealing valuables and secret lore from the temples of other deities." />
-    <class level="1" book="Tome of Magic page 63" name="Tenebrous Apostate {Prestige Class}" hd="d?" desc="The remnant of divinity once possessed by Orcus, Tenebrous is perhaps the only vestige still worshiped in some places as a god. Some followers, however, believe that Tenebrous is a separate deity, so these Tenebrous apostates revere him as such." />
-    <class level="1" book="Dungeon Master's Guide v.3.5 page 196" name="Thaumaturgist {Prestige Class}" hd="d?" desc="The thaumaturgist reaches out with divine power to other planes of existence, calling creatures there to do his bidding." />
-    <class level="1" book="Champions of Ruin page 63" name="Thayan Gladiator {Prestige Class}" hd="d?" desc="Popular and skillful gladiators fill the arenas of Faerun from Calimshan to the Dragon Coast, but the brutal Thayan gladiators are the best of the best." />
-    <class level="1" book="Complete Warrior page 85" name="Thayan Knight {Prestige Class}" hd="d?" desc="Thayan knights have mastered the art of swordplay, are familiar with magic, and are loyal to none but the tattooed mages." />
-    <class level="1" book="Unapproachable East page 37" name="Thayan Slaver {Prestige Class}" hd="d?" desc="Thayan slavers are cruel marauders who use their awful abilities to abduct creatures and then break their wills." />
-    <class level="1" book="Faiths of Eberron page 84" name="Thief Of Life {Prestige Class}" hd="d?" desc="When the prize is immortality, there is precious little a thief of life will not do to grasp it." />
-    <class level="1" book="Book of Vile Darkness page 67" name="Thrall Of Demogorgon {Prestige Class}" hd="d?" desc="A thrall of Demogorgon thrives on the chaotic nature of mutation and deformity." />
-    <class level="1" book="Book of Vile Darkness page 70" name="Thrall Of Juiblex {Prestige Class}" hd="d?" desc="A thrall of Juiblex oozes a horrible slime and is surrounded by a nauseating stench." />
-    <class level="1" book="Book of Vile Darkness page 71" name="Thrall Of Orcus {Prestige Class}" hd="d?" desc="A thrall of Orcus has devoted herself to the demon prince of undeath." />
-    <class level="1" book="Expanded Psionics Handbook page 153" name="Thrallherd {Prestige Class}" hd="d?" desc="Thrallherds manipulate the minds of others as if they were clay in the hands of a sculptor." />
-    <class level="1" book="Explorer's Handbook page 64" name="Thunder Guide {Prestige Class}" hd="d?" desc="Bodyguards to nobles on safari, shepherds to spelunking university professors, and the real-life heroes of chronicle serials across Khorvaire, thunder guides provide the strong blades, keen senses, and local knowledge necessary to survive a trip across the Thunder Sea." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 57" name="Tomb Warden {Prestige Class}" hd="d?" desc="Tomb wardens serve as selfless, undying protectors of the dead." />
-    <class level="1" book="Lords of Madness page 203" name="Topaz Guardian {Prestige Class}" hd="d?" desc="Resolute crusaders, the topaz guardians are the elite initiates of the Holy Order of the Supernal Topaz Defenders." />
-    <class level="1" book="Magic of Incarnum page 153" name="Totem Rager {Prestige Class}" hd="d?" desc="The totem rager embodies the wrath of nature in its most bestial form." />
-    <class level="1" book="CoV page 123" name="Triadic Knight {Prestige Class}" hd="d?" desc="Triadic knights are holy warriors who worship the Triad of Tyr, Torm, and Ilmater." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 35" name="Tribal Protector {Prestige Class}" hd="d?" desc="The tribal protector is the battlefield champion of a savage humanoid race." />
-    <class level="1" book="Book of Exalted Deeds page 78" name="Troubadour Of Stars {Prestige Class}" hd="d?" desc="Bards who channel their celestial music through their mortal voices and instruments are troubadours of stars." />
-    <class level="1" book="Libris Mortis: The Book of the Dead page 51" name="True Necromancer {Prestige Class}" hd="d?" desc="Those who seek to raise an unyielding obedience from the dead willingly tread the path of necromancy." />
-    <class level="1" book="Complete Mage page 77" name="Ultimate Magus {Prestige Class}" hd="d?" desc="A multiclass arcane preparation spellcaster and arcane spontaneous spellcaster." />
-    <class level="1" book="Magic of Incarnum page 158" name="Umbral Disciple {Prestige Class}" hd="d?" desc="The umbral disciple is a student of shadow in both a literal and a metaphysical sense." />
-    <class level="1" book="Draconomicon page 97" name="Unholy Ravager Of Tiamat {Prestige Class}" hd="d?" desc="Those who devote themselves to Tiamat's cause become unholy ravagers of Tiamat." />
-    <class level="1" book="Epic Level Handbook page 35" name="Union Sentinel {Prestige Class}" hd="d?" desc="A Union Sentinel is a member of an elite police force that guards the demiplane city of Union." />
-    <class level="1" book="Complete Mage page 81" name="Unseen Seer {Prestige Class}" hd="d?" desc="A stealthy character who dabbles in divination magic." />
-    <class level="1" book="Races of Destiny page 141" name="Urban Soul {Prestige Class}" hd="d?" desc="Urban souls are the chosen champions of the deity Urbanus, charged with protecting city denzens from external dangers and from subtler threats to the city." />
-    <class level="1" book="Book of Exalted Deeds page 80" name="Vassal Of Bahamut {Prestige Class}" hd="d?" desc="A vassal of Bahamut is a devout, nondraconic champion in the service of the Dragon King." />
-    <class level="1" book="Champions of Ruin page 67" name="Vengeance Knight {Prestige Class}" hd="d?" desc="Vengeance knights roam the Lands of Intrigue in search of those who have committed acts of treachery against their employers, the Knights of the Shield." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 73" name="Verdant Lord {Prestige Class}" hd="d?" desc="The verdant lord is the final defender of the forest." />
-    <class level="1" book="Underdark page 44" name="Vermin Keeper {Prestige Class}" hd="d?" desc="To a vermin keeper, insects are perfect killers." />
-    <class level="1" book="Book of Vile Darkness page 73" name="Vermin Lord {Prestige Class}" hd="d?" desc="The vermin lord offers itself as a host for all manner of parasitic organisms." />
-    <class level="1" book="Magic of Eberron page 85" name="Vigilant Sentinel Of Aerenal {Prestige Class}" hd="d?" desc="Part spy, part assassin, and completely loyal to the Sibling Kings and Aerenal's undying rulers, the sentinels roam across Eberron." />
-    <class level="1" book="Complete Adventurer page 85" name="Vigilante {Prestige Class}" hd="d?" desc="The vigilante combines magical and mundane investigative techniques to assess a crime scene." />
-    <class level="1" book="Complete Adventurer page 89" name="Virtuoso {Prestige Class}" hd="d?" desc="The typical virtuoso is outgoing, charismatic, and gregarious." />
-    <class level="1" book="Planar Handbook page 53" name="Visionary Seeker {Prestige Class}" hd="d?" desc="A visionary seeker knows how to navigate the mental plain stretching out ahead, finding landfall and truly discovering what it means to know." />
-    <class level="1" book="Complete Divine page 72" name="Void Disciple {Prestige Class}" hd="d?" desc="Void disciples understand that everything in the world contains all the basic elements, held together by the least tangible essence." />
-    <class level="1" book="Sandstorm page 89" name="Walker In The Waste {Prestige Class}" hd="d?" desc="A walker in the waste embodies the harsh, unforgiving nature of the desert." />
-    <class level="1" book="Complete Warrior page 87" name="War Chanter {Prestige Class}" hd="d?" desc="A war chanter's music flows across the battlefield like a raging torrent, catching friends and foes alike in its wake." />
-    <class level="1" book="Miniatures Handbook page 22" name="War Hulk {Prestige Class}" hd="d?" desc="The war hulk is a creature of great size and talent who is specifically trained to shock and awe opposing massed troops." />
-    <class level="1" book="Expanded Psionics Handbook page 155" name="War Mind {Prestige Class}" hd="d?" desc="War minds are expert fighters who claim to possess unequaled knowledge in the art of war." />
-    <class level="1" book="Heroes of Battle page 112" name="War Weaver {Prestige Class}" hd="d?" desc="By weaving together strands of pure arcane power, the war weaver becomes a force to be reckoned with on the battlefield." />
-    <class level="1" book="Magic of Faerun page 40" name="War Wizard Of Cormyr {Prestige Class}" hd="d?" desc="The Cormyrean war wizards are some of the most respected battle-mages in Faerun." />
-    <class level="1" book="Miniatures Handbook page 24" name="Warchief {Prestige Class}" hd="d?" desc="A warchief leads a primitive, aggressive tribe of humanoids, especially when they turn to marauding." />
-    <class level="1" book="Eberron Campaign Setting page 83" name="Warforged Juggernaut {Prestige Class}" hd="d?" desc="As a machine of war, the juggernaut is among the best at dealing damage and sustaining punishment." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 37" name="Warmaster {Prestige Class}" hd="d?" desc="Warmasters are trained at the College of War and can become a formidable presence on the battlefield." />
-    <class level="1" book="Complete Divine page 74" name="Warpriest {Prestige Class}" hd="d?" desc="Warpriests are fierce, earthy clerics who pray for peace but prepare for war." />
-    <class level="1" book="Book of Vile Darkness page 75" name="Warrior Of Darkness {Prestige Class}" hd="d?" desc="The warrior of darkness, sometimes called the dark knight, is a practitioner of black magic." />
-    <class level="1" book="Races of Faerun page 186" name="Warrior Skald {Prestige Class}" hd="d?" desc="Accompanying heroes of great renown, warrior skalds fight at their sides while composing the epics that will be told for centuries to come." />
-    <class level="1" book="Complete Warrior page 89" name="Warshaper {Prestige Class}" hd="d?" desc="The warshaper grows and evolves her own weapons and armor to suit the threat at hand." />
-    <class level="1" book="Races of Faerun page 188" name="Warsling Sniper {Prestige Class}" hd="d?" desc="The warsling sniper is an expert in the use of the weapon commonly associated with the halfling race." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 75" name="Watch Detective {Prestige Class}" hd="d?" desc="The watch detective specializes in solving mysteries." />
-    <class level="1" book="Stormwrack page 76" name="Wavekeeper {Prestige Class}" hd="d?" desc="Some druids feel the call of the primal deeps." />
-    <class level="1" book="Savage Species page 93" name="Waverider {Prestige Class}" hd="d?" desc="The waverider and her companion animal defend their city with a vigor that exceeds either's individual powers." />
-    <class level="1" book="Faiths &amp; Pantheons page 209" name="Waveservant {Prestige Class}" hd="d?" desc="Waveservants server the Bitch Queen as both tribute gatherers and enforcers." />
-    <class level="1" book="Complete Arcane page 65" name="Wayfarer Guide {Prestige Class}" hd="d?" desc="The wayfarer guide focues on honing her skill at instantaneous magical transportation." />
-    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 38" name="Weapon Master {Prestige Class}" hd="d?" desc="For weapon masters, the perfection of kiis found in the mastery of a single melee weapon." />
-    <class level="1" book="Faiths &amp; Pantheons page 210" name="Wearer Of Purple {Prestige Class}" hd="d?" desc="Wearers of purple are members of the Cult of the Dragon who embrace the creation and veneration of the Sacred Ones, the great dracoliches of Faerun." />
-    <class level="1" book="Eberron Campaign Setting page 85" name="Weretouched Master {Prestige Class}" hd="d?" desc="Weretouched masters are shifters who learn to enhance their shifting ability to accentuate the power of their lycanthrope heritage." />
-    <class level="1" book="Races of the Wild page 135" name="Whisperknife {Prestige Class}" hd="d?" desc="The halfling whisperknife seeks to repay murder, theft, or humiliation in the same coin." />
-    <class level="1" book="Complete Arcane page 68" name="Wild Mage {Prestige Class}" hd="d?" desc="Wild mages aspire to cast spells without structure." />
-    <class level="1" book="Complete Adventurer page 92" name="Wild Plains Outrider {Prestige Class}" hd="d?" desc="Wild plains outriders work tirelessly to keep the plains as safe as such remote places can be." />
-    <class level="1" book="Silver Marches page 117" name="Wild Scout {Prestige Class}" hd="d?" desc="Wild scouts are the spies of the wilderness, traversing the open and wild country in search of valuable information." />
-    <class level="1" book="Complete Mage page 84" name="Wild Soul {Prestige Class}" hd="d?" desc="An arcanist who wields power from the realm of the fey." />
-    <class level="1" book="Races of the Wild page 139" name="Wildrunner {Prestige Class}" hd="d?" desc="Wildrunners give themselves almost wholly to nature, seeking to return to their untamed roots and eventually become fey creatures." />
-    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 77" name="Windrider {Prestige Class}" hd="d?" desc="The windrider is a specialist in mounted combat, but hers is no ordinary mount." />
-    <class level="1" book="Faiths &amp; Pantheons page 212" name="Windwalker {Prestige Class}" hd="d?" desc="Windwalkers learn to shape the winds with their hands and ride them to lands as yet unseen." />
-    <class level="1" book="Explorer's Handbook page 70" name="Windwright Captain {Prestige Class}" hd="d?" desc="The self-proclaimed masters of sky and sea, the windwright captains are the finest pilots of airships and wind galleons on Eberron." />
-    <class level="1" book="Frostburn page 72" name="Winterhaunt Of Iborighu {Prestige Class}" hd="d?" desc="As minions of the Frozen King, the winterhaunts of Iborighu lust for nothing less than eternal winter." />
-    <class level="1" book="Oriental Adventures page 54" name="Witch Hunter {Prestige Class}" hd="d?" desc="Witch hunters combine magical training with combat expertise to battle the spiritual forces of evil in the world." />
-    <class level="1" book="Tome of Magic page 67" name="Witch Slayer {Prestige Class}" hd="d?" desc="Witch slayers devote themselves to capturing and destroying those who share their souls with other entities." />
-    <class level="1" book="Magic of Incarnum page 162" name="Witchborn Binder {Prestige Class}" hd="d?" desc="Elite agents within the Vigilant Servants, a society whose members make it their business to frustrate the plans of the witchborn, witchborn binders are incarnum-wielding mage-hunters who can use the power of soul energy to create shields, traps, and shackles." />
-    <class level="1" book="Dragonlance Campaign Setting page 71" name="Wizard Of High Sorcery {Prestige Class}" hd="d?" desc="Once a wizard successfully completes (and survives) the Test of High Sorcery, his choices dictate his robe color and which deity of magic grants him power." />
-    <class level="1" book="Book of Exalted Deeds page 82" name="Wonderworker {Prestige Class}" hd="d?" desc="Wonderworkers sacrifice some of their spellcasting ability to grow closer to the ideal of goodness they revere." />
-    <class level="1" book="Dragon Magic page 55" name="Wyrm Wizard {Prestige Class}" hd="d?" desc="Wyrm wizards are spellcasters who learn new spells not through research and experimentation but rather by tapping into the vast wealth of arcane knowledge possessed by dragons." />
-    <class level="1" book="Oriental Adventures page 55" name="Yakuza {Prestige Class}" hd="d?" desc="Yakuza represent the shadowy underworld and provide protection for the helpless." />
-    <class level="1" book="Underdark page 46" name="Yathchol Webrider {Prestige Class}" hd="d?" desc="With their intimate understanding of webspinning and their familiarity with the Overweb, Yathchol webriders can move about the Underdark as they choose." />
-    <class level="1" book="Player's Guide to Faerun page 187" name="Yathrinshee {Prestige Class}" hd="d?" desc="Yathrinshees, the elite ranks of Kiaransalee's priests, are powerful masters of necromantic magic, both arcane and divine." />
-    <class level="1" book="Complete Psionic page 43" name="Zerth Cenobite {Prestige Class}" hd="d?" desc="The core of a zerth cenobite's studies involve strict meditation on the nature of time and the body's movements through it, culminating in a martial art known as zerthin." />
-    <class level="1" book="Lords of Darkness page 102" name="Zhentarim Skymage {Prestige Class}" hd="d?" desc="These powerful spellcasters ride strange flying beasts and serve the Zhentarim by performing acts of espionage and causing unrest on the frontiers of civilization." />
-    <class level="1" book="Player's Guide to Faerun page 77" name="Zhentarim Spy {Prestige Class}" hd="d?" desc="The Zhentarim spy is probably the one Faerunians encounter most often -- even if they never realize it." /></classes>
+<classes>
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 107" name="Adept" hd="d?" desc="This NPC class possesses a combination of arcane and divine skills." />
+    <class level="1" book="Heroes of Horror page 82" name="Archivist" hd="d?" desc="Archivists seek out esoteric sources of divine lore, wherever those sources might be, securing those secrets for themselves and their fellow scholars." />
+    <class level="1" book="Complete Psionic page 5" name="Ardent" hd="d?" desc="An ardent's pursuit of various cosmic philosophies gives her access to psionic power in a unique way: through psionic mantles." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 108" name="Aristocrat" hd="d?" desc="This NPC class contains people who are usually educated, wealthy individual who were born into high position." />
+    <class level="1" book="Eberron Campaign Setting page 29" name="Artificer" hd="d?" desc="Artificers are perhaps the ultimate magical dabblers." />
+    <class level="1" book="Player's Handbook v.3.5 page 24" name="Barbarian" hd="d?" desc="A ferocious warrior who uses fury and instinct to bring down foes." />
+    <class level="1" book="Player's Handbook v.3.5 page 26" name="Bard" hd="d?" desc="A performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades." />
+    <class level="1" book="Unearthed Arcana page 49" name="Bardic Sage" hd="d?" desc="A variant bard who focues his efforts on learning, research, and the power of knowledge." />
+    <class level="1" book="Unearthed Arcana page 56" name="Battle Sorcerer" hd="d?" desc="A variant sorcerer who is a capable physical combatant." />
+    <class level="1" book="Player's Handbook II page 6" name="Beguiler" hd="d?" desc="If you delight in manipulating others, either to their disadvantage or for their own good, then the beguiler is the class for you." />
+    <class level="1" book="Tome of Magic page 9" name="Binder" hd="d?" desc="By drawing their seals and speaking words of power, the binder summons strange entities, bargains with them, and binds them to his service." />
+    <class level="1" book="Player's Handbook v.3.5 page 30" name="Cleric" hd="d?" desc="A master of divine magic and a capable warrior as well." />
+    <class level="1" book="Unearthed Arcana page 50" name="Cloistered Cleric" hd="d?" desc="A variant cleric who spends more time than other clerics in study and prayer and less in martial training." />
+    <class level="1" book="Dragonlance Campaign Setting page 46" name="Commoner" hd="d?" desc="This NPC class contains the laborers of the world, such as innkeepers, servants, blacksmiths, farmers, and fisherfolk." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 8" name="Crusader" hd="d?" desc="Devoted knight, divine agent, instrument of vengeance, peerless fighting machine -- the crusader is a warrior dedicated to good, evil, law, chaos, or some other cause." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 41" name="Death's Chosen " hd="d?" desc="If chosen by his would-be undead master, a death's chosen serves as the master's living minion." />
+    <class level="1" book="Unearthed Arcana page 50" name="Divine Bard" hd="d?" desc="A variant bard who derives his special power from a divine tradition." />
+    <class level="1" book="Complete Psionic page 9" name="Divine Mind" hd="d?" desc="A divine mind is a psionic character who channels the power of the divine through pisonic talent instead of faith." />
+    <class level="1" book="Unearthed Arcana page 57" name="Domain Wizard" hd="d?" desc="A variant wizard who uses the arcane domain system and selects a specific domain of spells." />
+    <class level="1" book="Player's Handbook II page 11" name="Dragon Shaman" hd="d?" desc="If you gaze at dragons with awe and aspire to share their power and majesty, then the dragon shaman is the class for you." />
+    <class level="1" book="Dragon Magic page 24" name="Dragonfire Adept" hd="d?" desc="Whether they are bold champions defending the weak and downtrodden, or merciless raiders seeking might and riches, dragonfire adepts are imposing figures who command the magic of dragonkind." />
+    <class level="1" book="Heroes of Horror page 84" name="Dread Necromancer" hd="d?" desc="A practitioner of vile and forbidden arts, the dread necromancer roots about in graveyards, searching out moldering components for her obscene spells." />
+    <class level="1" book="Player's Handbook v.3.5 page 33" name="Druid" hd="d?" desc="One who draws energy from the natural world to cast divine spells and gain strange magical powers." />
+    <class level="1" book="Unearthed Arcana page 51" name="Druidic Avenger" hd="d?" desc="A variant druid who channels her inner fury to wreak vengeance upon those who injure the natural world." />
+    <class level="1" book="Complete Psionic page 144" name="Duergar Racial Class" hd="d?" desc="The duergar, or gray dwarves, lead lives of neverending toil in great underground foundry-cities." />
+    <class level="1" book="Player's Handbook II page 19" name="Duskblade" hd="d?" desc="If you find you can't choose between being an arcane spellcaster who zaps your enemies with powerful spells and a nimble, powerful front-line melee character who lays them low with a sword, the duskblade is the perfect class for you." />
+    <class level="1" book="Races of Stone page 146" name="Dwarf Cleric" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Stone page 146" name="Dwarf Fighter" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Stone page 147" name="Dwarf Sorcerer" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Ghostwalk page 16" name="Eidolon" hd="d?" desc="This variant class for ghosts emphasizes fighting abilities." />
+    <class level="1" book="Ghostwalk page 17" name="Eidoloncer" hd="d?" desc="This variant class for ghosts emphasizes spellcasting abilities." />
+    <class level="1" book="Races of the Wild page 155" name="Elf Paladin" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of the Wild page 155" name="Elf Ranger" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of the Wild page 157" name="Elf Wizard" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Epic Level Handbook page 8" name="Epic Barbarian" hd="d?" desc="An epic ferocious warrior who uses fury and instinct to bring down foes." />
+    <class level="1" book="Epic Level Handbook page 9" name="Epic Bard" hd="d?" desc="An epic performer whose music works magic -- a wanderer, a tale-teller, and a jack-of-all trades." />
+    <class level="1" book="Epic Level Handbook page 10" name="Epic Cleric" hd="d?" desc="An epic master of divine magic and a capable warrior as well." />
+    <class level="1" book="Epic Level Handbook page 10" name="Epic Druid" hd="d?" desc="An epic druid draws energy from the natural world to cast divine spells and gain strange magical powers." />
+    <class level="1" book="Epic Level Handbook page 11" name="Epic Fighter" hd="d?" desc="An epic warrior with exceptional combat capability and unequaled skill with weapons." />
+    <class level="1" book="Epic Level Handbook page 12" name="Epic Monk" hd="d?" desc="An epic martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers." />
+    <class level="1" book="Epic Level Handbook page 13" name="Epic Paladin" hd="d?" desc="An epic champion of justice and destroyer of evil, protected and strengthened by an array of divine powers." />
+    <class level="1" book="Epic Level Handbook page 22" name="Epic Psion" hd="d?" desc="An epic seeker after psionic secrets; a master of the mind and the thoughts of others." />
+    <class level="1" book="Epic Level Handbook page 23" name="Epic Psychic Warrior" hd="d?" desc="An epic warrior who combines combat skill with psionic powers." />
+    <class level="1" book="Epic Level Handbook page 14" name="Epic Ranger" hd="d?" desc="An epic cunning, skilled warrior of the wilderness." />
+    <class level="1" book="Epic Level Handbook page 14" name="Epic Rogue" hd="d?" desc="An epic tricky, skillful scout and spy who wins the battle by stealth rather than brute force." />
+    <class level="1" book="Epic Level Handbook page 15" name="Epic Sorcerer" hd="d?" desc="An epic spellcaster with inborn magical ability." />
+    <class level="1" book="Epic Level Handbook page 16" name="Epic Wizard" hd="d?" desc="An epic potent spellcaster schooled in the arcane arts." />
+    <class level="1" book="Complete Psionic page 153" name="Erudite (variant Psion)" hd="d?" desc="As an alternative to the standard psion class, the erudite is a psionic character who follows a scholarly and self-reflective road to power, instead of a merely self-conscious path like the psion follows." />
+    <class level="1" book="Dragonlance Campaign Setting page 46" name="Expert" hd="d?" desc="This NPC class contains people such as skilled artisans, specialist laborers, and ingenious inventors." />
+    <class level="1" book="Player's Guide to Faerun page 54" name="Eye Of Horus-re" hd="d?" desc="Eyes of Horus-Re are champions of good, sworn enemies of Set, and bane to undead." />
+    <class level="1" book="Complete Divine page 6" name="Favored Soul" hd="d?" desc="Favored souls cast divine spells by means of an innate connection rather than through laborious training and prayer, so their divine connection is natural rather than learned." />
+    <class level="1" book="Heroes of Horror page 102" name="Fiend-blooded" hd="d?" desc="With careful exploration, a spellcaster who feels a call from within can slowly bring the power of their fiendish lineage to the surface." />
+    <class level="1" book="Player's Handbook v.3.5 page 37" name="Fighter" hd="d?" desc="A warrior with exceptional combat capability and unequaled skill with weapons." />
+    <class level="1" book="Complete Adventurer page 51" name="Ghost-faced Killer" hd="d?" desc="Ghost-faced killers act as assassins and spies for hire, a mercenary clan that hides behind a guise of open and honorable conduct." />
+    <class level="1" book="Silver Marches page 109" name="Giant-killer" hd="d?" desc="Giant-killers are great heroes so long as they are killing giants." />
+    <class level="1" book="Complete Psionic page 146" name="Githyanki Racial Class" hd="d?" desc="Githyanki are an ancient race of martial humanoids residing on the Astral Plane." />
+    <class level="1" book="Complete Psionic page 147" name="Githzerai Racial Class" hd="d?" desc="The githzerai are attuned to the mysteries of the inner self and are considered a race of ascetics who harness the power of the mind and the spirit." />
+    <class level="1" book="Races of Stone page 147" name="Gnome Bard" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Complete Warrior page 36" name="Gnome Giant-slayer" hd="d?" desc="The gnome giant-slayer relies on a combination of agility, combat prowess, and pure craftiness to deal with foes." />
+    <class level="1" book="Races of Stone page 148" name="Gnome Illusionist" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Stone page 149" name="Gnome Ranger" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Stone page 150" name="Goliath Barbarian" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Stone page 151" name="Goliath Druid" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Stone page 152" name="Goliath Rogue" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Destiny page 158" name="Half-elf Barbarian" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Destiny page 157" name="Half-elf Bard" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Destiny page 159" name="Half-elf Druid" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Destiny page 157" name="Half-elf Fighter" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Destiny page 160" name="Half-elf Paladin" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of Destiny page 158" name="Half-elf Ranger" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Complete Psionic page 148" name="Half-giant Racial Class" hd="d?" desc="Human-giant hybrids, half-giants were bred by cruel sorcerer-kings who used them as warriors and laborers in a dry land." />
+    <class level="1" book="Races of the Wild page 157" name="Halfling Druid" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of the Wild page 158" name="Halfling Monk" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of the Wild page 159" name="Halfling Rogue" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Miniatures Handbook page 8" name="Healer" hd="d?" desc="A healer is adept both at detecting the ailments of allies and understanding the coarse, unruly thoughts of beasts." />
+    <class level="1" book="Complete Warrior page 5" name="Hexblade" hd="d?" desc="Combining the dynamic powers of martial prowess and arcane might, the hexblade presents a deadly challenge to opponents unused to such a foe." />
+    <class level="1" book="Magic of Incarnum page 20" name="Incarnate" hd="d?" desc="Incarnum is a tool you can use to manipulate the physical manifestations of moral and ethical forces and wield them in righteous pursuit of an ideal." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 65" name="King/queen Of The Wild" hd="d?" desc="Where nature's fury is at its height, there you'll find the kings and queens of the wild." />
+    <class level="1" book="Player's Handbook II page 24" name="Knight" hd="d?" desc="The knight class is a great choice if you want to play a tough, durable melee combatant whose strong personality allows you to manipulate your foes." />
+    <class level="1" book="Silver Marches page 112" name="Knight-errant Of Silverymoon" hd="d?" desc="Charged with the safety of the city of Silverymoon and its citizens, the professional fighting force known as the Knights in Silver is often all that stands between Silverymoon and the dangers of the frontier." />
+    <class level="1" book="Complete Psionic page 13" name="Lurk" hd="d?" desc="A lurk is a psionic character who has honed her mental talents to a deadly focus." />
+    <class level="1" book="Magic of Faerun page 32" name="Mage-killer" hd="d?" desc="Mage-killers master magic designed for combat against other spellcasters." />
+    <class level="1" book="Oriental Adventures page 236" name="Maho-bujin" hd="d?" desc="When Taint overcomes a character, she may find her way to the Festering Pit of Fu Leng and become a maho-bujin." />
+    <class level="1" book="Oriental Adventures page 237" name="Maho-tsukai" hd="d?" desc="Maho (blood magic) wielders are called maho-tsukai." />
+    <class level="1" book="Miniatures Handbook page 11" name="Marshal" hd="d?" desc="Trained in the basics of fighting, marshals possess a general knowledge of weapons and armor." />
+    <class level="1" book="Player's Handbook v.3.5 page 39" name="Monk" hd="d?" desc="A martial artist whose unarmed strikes hit fast and hard -- a master of exotic powers." />
+    <class level="1" book="Dragonlance Campaign Setting page 47" name="Mystic" hd="d?" desc="Mystics are spellcasters who have learned to channel divine energy without worshiping (or even acknowledging) any deity." />
+    <class level="1" book="Complete Warrior page 63" name="Nature's Warrior" hd="d?" desc="Nature's warriors are defenders of the wild, protectors of the natural world . . . and often druids who have spent 'too much time' in wild shape form." />
+    <class level="1" book="Complete Adventurer page 5" name="Ninja" hd="d?" desc="Highly skilled spies and assassins, ninjas can master a broad range of skills and combat techniques." />
+    <class level="1" book="Dragonlance Campaign Setting page 50" name="Noble" hd="d?" desc="Nobles have the ability to use their background, education, natural charm, and skills in social maneuvering to their advantage in day-to-day lives." />
+    <class level="1" book="Dragon Magic page 46" name="Pact-bound Adept" hd="d?" desc="Pact-bound adepts are sorcerers who have learned to transcend their beliefs about spells and magic and embrace arcane power as dragons do." />
+    <class level="1" book="Player's Handbook v.3.5 page 42" name="Paladin" hd="d?" desc="A champion of justice and destroyer of evil, protected and strengthened by an array of divine powers." />
+    <class level="1" book="Unearthed Arcana page 53" name="Paladin Of Freedom" hd="d?" desc="A variant paladin who is dedicated to liberty and free thought." />
+    <class level="1" book="Unearthed Arcana page 53" name="Paladin Of Slaughter" hd="d?" desc="A variant paladin who is a brutal champion of chaos and evil, and who leaves only destruction trailing in his wake." />
+    <class level="1" book="Unearthed Arcana page 54" name="Paladin Of Tyranny" hd="d?" desc="A variant paladin who is a lawful evil villain bent on dominating those weaker than she." />
+    <class level="1" book="Complete Warrior page 13" name="Paladin Variant" hd="d?" desc="A variant paladin class." />
+    <class level="1" book="Unearthed Arcana page 55" name="Planar Ranger" hd="d?" desc="A variant ranger who roams the multiverse instead of the wilderness." />
+    <class level="1" book="Expanded Psionics Handbook page 19" name="Psion" hd="d?" desc="A seeker after psionic secrets; a master of the mind and the thoughts of others." />
+    <class level="1" book="Magic of Eberron page 42" name="Psionic Artificer" hd="d?" desc="Psionic artificers are similar to artificers, but they craft psionic items instead of magic items." />
+    <class level="1" book="Expanded Psionics Handbook page 24" name="Psychic Warrior" hd="d?" desc="A warrior who combines combat skill with psionic powers." />
+    <class level="1" book="Player's Handbook v.3.5 page 46" name="Ranger" hd="d?" desc="A cunning, skilled warrior of the wilderness." />
+    <class level="1" book="Complete Warrior page 13" name="Ranger Variant" hd="d?" desc="A variant ranger class." />
+    <class level="1" book="Races of the Wild page 160" name="Raptoran Cleric" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of the Wild page 161" name="Raptoran Fighter" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Races of the Wild page 157" name="Raptoran Sorcerer" hd="d?" desc="Racial substitution levels." />
+    <class level="1" book="Player's Handbook v.3.5 page 49" name="Rogue" hd="d?" desc="A tricky, skillful scout and spy who wins the battle by stealth rather than brute force." />
+    <class level="1" book="Complete Warrior page 8" name="Samurai" hd="d?" desc="Wielding their signature katana and wakizashi simultaneously, samurai are as potent in melee as a fighter, although they are less versatile." />
+    <class level="1" book="Unearthed Arcana page 50" name="Savage Bard" hd="d?" desc="A variant bard who is a warrior at heart and whose arcane powers strike fear into the enemies of his tribe." />
+    <class level="1" book="Sandstorm page 82" name="Scion Of Tem-et-nu" hd="d?" desc="Paladins of the temple of Tem-Et-Nu are sometimes selected to become the guardians of the rivers." />
+    <class level="1" book="Complete Adventurer page 10" name="Scout" hd="d?" desc="A scout has some training in weapons and a unique combat style that favors fast movement and devastating attacks." />
+    <class level="1" book="Tome of Magic page 111" name="Shadowcaster" hd="d?" desc="The shadowcaster understands the true, primal power of darkness, attunes herself to the Plane of Shadow, and learns great shadow mysteries the equal of any mundane spell." />
+    <class level="1" book="Oriental Adventures page 22" name="Shaman" hd="d?" desc="Shamans are intermediaries between the mortal world and the realm of spirits." />
+    <class level="1" book="Complete Divine page 10" name="Shugenja" hd="d?" desc="The shugenja is a divine spellcaster who casts spells by attuning himself to the primal energies around him and focusing such energy through his body to produce magical effects." />
+    <class level="1" book="Oriental Adventures page 27" name="Sohei" hd="d?" desc="Sohei are warrior monks." />
+    <class level="1" book="Player's Handbook v.3.5 page 51" name="Sorcerer" hd="d?" desc="A spellcaster with inborn magical ability." />
+    <class level="1" book="Magic of Incarnum page 25" name="Soulborn" hd="d?" desc="As a soulborn, you use incarnum to enhance your natural combat ability." />
+    <class level="1" book="Expanded Psionics Handbook page 26" name="Soulknife" hd="d?" desc="A warrior who fights with an idealized blade of personal mental energy." />
+    <class level="1" book="Unearthed Arcana page 59" name="Specialized Wizard Variants" hd="d?" desc="Each variant specialized class gives up one of the standard specialist's class abilities in exchange for a new ability unique to the variant specialist." />
+    <class level="1" book="Unearthed Arcana page 77" name="Spellcaster" hd="d?" desc="A generic class that has an array of magical effects at her beck and call." />
+    <class level="1" book="Complete Adventurer page 13" name="Spellthief" hd="d?" desc="Spellthieves use skill and arcane magic to drain the abilities of their opponents and turn their foes' own powers against them." />
+    <class level="1" book="Complete Divine page 14" name="Spirit Shaman" hd="d?" desc="By bargaining with living spirits, the spirit shaman gains power over the natural world and mighty divine magic." />
+    <class level="1" book="Complete Warrior page 11" name="Swashbuckler" hd="d?" desc="The swashbuckler embodies the concepts of daring and panache." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 15" name="Swordsage" hd="d?" desc="A master of martial maneuvers, the sword sage is a physical adept -- a blade wizard whose knowledge of the Sublime Way lets him unlock potent abilities, many of which are overtly supernatural or magical in nature." />
+    <class level="1" book="Complete Adventurer page 83" name="Thief-acrobat" hd="d?" desc="A thief-acrobat excels in getting in and getting out." />
+    <class level="1" book="Book of Vile Darkness page 68" name="Thrall Of Graz'zt" hd="d?" desc="The thrall of Graz'zt is a sinister, conniving, and thoroughly evil master of arcane lore and dark secrets." />
+    <class level="1" book="Complete Psionic page 149" name="Thri-kreen Racial Class" hd="d?" desc="Fierce hunters and faultless trackers, the thri-kreen are a race of insectfolk sometimes known as mantis warriors." />
+    <class level="1" book="Unearthed Arcana page 51" name="Thug" hd="d?" desc="A variant fighter who is a street fighter and a survivor who learns to mix brute force with a bit of craftiness." />
+    <class level="1" book="Unearthed Arcana page 48" name="Totem Barbarian" hd="d?" desc="A variant barbarian who dedicates himself to a totem creature." />
+    <class level="1" book="Magic of Incarnum page 29" name="Totemist" hd="d?" desc="You channel the soul energy of magical beasts to make your soulmelds and claim them as your totems to acquire a share in their power." />
+    <class level="1" book="Tome of Magic page 198" name="Truenamer" hd="d?" desc="If you want to understand the secret language of the universe, the truenamer class is for you." />
+    <class level="1" book="Book of Vile Darkness page 72" name="Ur-priest" hd="d?" desc="A small number of ur-priests have learned to tap into divine power and use it without praying to or worshiping a god." />
+    <class level="1" book="Sharn: City of Towers page 167" name="Urban Adept" hd="d?" desc="A variant adept for Sharn." />
+    <class level="1" book="Unearthed Arcana page 55" name="Urban Ranger" hd="d?" desc="A variant ranger who stalks the treacherous streets of the city." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 20" name="Warblade" hd="d?" desc="The warblade was born for conflict. Swift, strong, enduring, and utterly confident in his martial skills, he seeks to test himself against worthy foes." />
+    <class level="1" book="Complete Arcane page 5" name="Warlock" hd="d?" desc="A supernatural character whose sinister powers are inborn abilities, not spells." />
+    <class level="1" book="Complete Arcane page 10" name="Warmage" hd="d?" desc="A militant spellcaster whose training focuses on battlefield magic." />
+    <class level="1" book="Dragonlance Campaign Setting page 53" name="Warrior" hd="d?" desc="This NPC class contains people such as soldiers, guards, and militia." />
+    <class level="1" book="Oriental Adventures page 53" name="Weapon Master (kensei)" hd="d?" desc="For weapon masters, the perfection of kiis found in the mastery of a single melee weapon." />
+    <class level="1" book="Expanded Psionics Handbook page 29" name="Wilder" hd="d?" desc="A passionate, reckless talent who wields uncontrolled psionic power." />
+    <class level="1" book="Unearthed Arcana page 56" name="Wilderness Rogue" hd="d?" desc="A variant rogue who prefers to put her skills to use in the great outdoors." />
+    <class level="1" book="Player's Handbook v.3.5 page 55" name="Wizard" hd="d?" desc="A potent spellcaster schooled in the arcane arts." />
+    <class level="1" book="Oriental Adventures page 30" name="Wu Jen" hd="d?" desc="Wu jen are spellcasters with mysterious powers." />
+    <class level="1" book="Savage Species page 97" name="Yuan-ti Cultist" hd="d?" desc="The mysteries of the evil deities of the yuan-ti are mastered by yuan-ti cultist masters." />
+    <class level="1" book="Lords of Madness page 182" name="Abolisher {Prestige Class}" hd="d?" desc="The abolisher is a crusader against that which taints, usurps, and replaces the ordered nature of things with alien desires and monstrous needs." />
+    <class level="1" book="Complete Mage page 50" name="Aburant Champion {Prestige Class}" hd="d?" desc="A warrior who dabbles in abjuration magic." />
+    <class level="1" book="Tome of Magic page 204" name="Acolyte Of The Ego {Prestige Class}" hd="d?" desc="By learning to speak their own truenames, acolytes of the ego strive to unlock hidden powers lost to the cosmos." />
+    <class level="1" book="Complete Arcane page 19" name="Acolyte Of The Skin {Prestige Class}" hd="d?" desc="Acolytes of the skin seek to gain power by replacing their skin with that of a demon's." />
+    <class level="1" book="Epic Level Handbook page 24" name="Agent Retriever {Prestige Class}" hd="d?" desc="Finding items, especially long-lost ones, is an agent retriever's specialty." />
+    <class level="1" book="Unapproachable East page 18" name="Aglarondan Griffonrider {Prestige Class}" hd="d?" desc="Soaring above the Yuirwood and the coasts of Aglarond, the famed Aglarondan griffonriders are an elite force of aerial knights who serve the Simbul and defend their homeland against attack." />
+    <class level="1" book="Oriental Adventures page 220" name="Akodo Champion {Prestige Class}" hd="d?" desc="Akodo champions are the leaders of the mighty army of the Lion clan." />
+    <class level="1" book="Magic of Eberron page 53" name="Alchemist Savant {Prestige Class}" hd="d?" desc="The alchemist savant excels in the capacity to break down the normal barriers that lie between alchemy and magic, between potion and alchemical fluid, between science and art." />
+    <class level="1" book="Complete Arcane page 21" name="Alienist {Prestige Class}" hd="d?" desc="Alienists deal with powers and entities from terrifyingly remote reaches of space and time." />
+    <class level="1" book="Complete Psionic page 17" name="Anarchic Initiate {Prestige Class}" hd="d?" desc="The anarchic initiate is more than a wilder; he is an initiate to the truth that underlies the wildness in the depth of his being." />
+    <class level="1" book="Serpent Kingdoms page 159" name="Ancient Master {Prestige Class}" hd="d?" desc="Those yuan-ti who grow mightier of mind and gain additional psionic powers are called ancient masters." />
+    <class level="1" book="Tome of Magic page 50" name="Anima Mage {Prestige Class}" hd="d?" desc="Anima mages see vestiges as mere tools, no different from spell component pouches or a wand of fireball." />
+    <class level="1" book="Complete Adventurer page 22" name="Animal Lord {Prestige Class}" hd="d?" desc="Each animal lord forms a bond with one group of animals." />
+    <class level="1" book="Book of Exalted Deeds page 49" name="Anointed Knight {Prestige Class}" hd="d?" desc="The anointed knight is a holy soldier who has taken great pains to learn the intricacies of alchemy in order to become a more capable combatant." />
+    <class level="1" book="Book of Exalted Deeds page 51" name="Apostle Of Peace {Prestige Class}" hd="d?" desc="The apostle of peace is an advocate for nonviolent resolution of conflict." />
+    <class level="1" book="Faiths &amp; Pantheons page 182" name="Arachne {Prestige Class}" hd="d?" desc="Arachnes are priestesses of Lolth who have risen to the pinnacle of drow society, worshiping Lolth only for the power she grants." />
+    <class level="1" book="Ghostwalk page 19" name="Arboreal Guardian {Prestige Class}" hd="d?" desc="Within the Spirit Wood are the Arboreal Guardians, men and women dedicated to protecting and ministering the living repositories of elf and half-elf spirits." />
+    <class level="1" book="Underdark page 28" name="Arcachnomancer {Prestige Class}" hd="d?" desc="Many creatures of the Underdark are drawn to the power of the spider and that of the master of spiders -- the arachnomancer." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 176" name="Arcane Archer {Prestige Class}" hd="d?" desc="The arcane archer is a warrior skilled in using magic to supplement her combat prowess." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 40" name="Arcane Devotee {Prestige Class}" hd="d?" desc="Arcane devotees complement the divine magic of a church's clerical leaders and are among the most important and respected members of a deity's following." />
+    <class level="1" book="Races of the Wild page 108" name="Arcane Hierophant  {Prestige Class}" hd="d?" desc="Arcane hierophants wield a blending of arcane magic and divine magic with a heavy emphasis on nature and the elements." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 177" name="Arcane Trickster {Prestige Class}" hd="d?" desc="Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 178" name="Archmage {Prestige Class}" hd="d?" desc="The most advanced practitioners of arcane magic are frequently archmages." />
+    <class level="1" book="Planar Handbook page 55" name="Ardent Dilettante  {Prestige Class}" hd="d?" desc="A diversity of interests and a moderate level of ability in one skill can lead one to become an ardent dilettante." />
+    <class level="1" book="Faiths of Eberron page 70" name="Argent Fist {Prestige Class}" hd="d?" desc="Only a precious few possess the focus, the dedication, and the physical prowess to master the abilities of the argent fist, but few enemies can stand against those who do." />
+    <class level="1" book="Complete Arcane page 24" name="Argent Savant {Prestige Class}" hd="d?" desc="The argent savant regards spells that evoke or apply magical force as the noblest and most fascinating spells at her disposal." />
+    <class level="1" book="Sandstorm page 66" name="Ashworm Dragoon  {Prestige Class}" hd="d?" desc="Ashworm dragoons have formed a bond with a single ashworm that is so strong that it is almost an extension of their wills." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 180" name="Assassin {Prestige Class}" hd="d?" desc="The assassin is the master of dealing quick, lethal blows." />
+    <class level="1" book="Planar Handbook page 63" name="Astral Dancer {Prestige Class}" hd="d?" desc="A few skilled combatants learn to take advantage of conditions on the Astral Plane." />
+    <class level="1" book="Races of Eberron page 133" name="Atavist  {Prestige Class}" hd="d?" desc="The discipline of an atavist strengthens his bond to the ancestral spirit and to all other kalashtar that have embraced their unique heritage." />
+    <class level="1" book="Faiths &amp; Pantheons page 184" name="Auspician {Prestige Class}" hd="d?" desc="Auspicians, who manipulate luck as if it were the strings of a worn mandolin, give credence to their claims." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 46" name="Bane Of Infidels {Prestige Class}" hd="d?" desc="The bane of infidels is the leader of a xenophobic tribe." />
+    <class level="1" book="Oriental Adventures page 34" name="Battle Maiden {Prestige Class}" hd="d?" desc="Battle maidens are the stuff of wonder and legend, an order of mounted female samurai whose swift, fearless attacks are renowned throughout the world." />
+    <class level="1" book="Unearthed Arcana page 164" name="Battle Scion {Prestige Class}" hd="d?" desc="This prestige class is for the wielders of legendary weapons made for the hands of fighters, barbarians, rangers, monks, and the occasional paladin." />
+    <class level="1" book="Races of Faerun page 178" name="Battlerager  {Prestige Class}" hd="d?" desc="Dwarven battleragers, or kuldjargh ('axe idiots'), are legendary berserker warriors who can enter a battle frenzy through ritualist singing." />
+    <class level="1" book="Races of Stone page 97" name="Battlesmith  {Prestige Class}" hd="d?" desc="A battlesmith is a skilled dwarf armorer and weaponsmith who uses her experience in battle, as well as her masterful weaponsmithing and armorsmithing abilities, to create deadly items for her kinsmen to wield in defense of their homes." />
+    <class level="1" book="Oriental Adventures page 225" name="Bayushi Deceiver {Prestige Class}" hd="d?" desc="The Bayushi are charged with the dirtiest work in the empire." />
+    <class level="1" book="Complete Warrior page 16" name="Bear Warrior {Prestige Class}" hd="d?" desc="Bear warriors, through a special relationship with bear spirits, literally adopt a bear's strength in the rage of battle, actually transforming into bears while they fight." />
+    <class level="1" book="Complete Adventurer page 26" name="Beastmaster {Prestige Class}" hd="d?" desc="A beastmaster feels more at home among the animals of nature than fellow sentient beings." />
+    <class level="1" book="Monster Compendium: Monsters of Faerun page 21" name="Beholder Mage  {Prestige Class}" hd="d?" desc="Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race." />
+    <class level="1" book="Lords of Madness page 42" name="Beholder Mage {Prestige Class}" hd="d?" desc="Through ritual destruction of its central eye, a beholder can learn to channel and use magic much more quickly and efficiently than can almost any other race." />
+    <class level="1" book="Book of Exalted Deeds page 53" name="Beloved Of Valarian {Prestige Class}" hd="d?" desc="The beloved of Valarian are women who have foresworn the love of mortals to dedicate themselves entirely to the unicorn deity Valarian." />
+    <class level="1" book="Tome of Magic page 208" name="Bereft {Prestige Class}" hd="d?" desc="The bereft are a group of truenamers who devote themselves to mastering the word of unmaking, a powerful component of Truespeech purportedly able to unravel creation." />
+    <class level="1" book="Deities and Demigods page 201" name="Berserk {Prestige Class}" hd="d?" desc="Berserks are warriors who dress themselves in bearskins, taking advantage of the fear most people have for wild animals and inviting the wild rage of the animal into the warrior's body." />
+    <class level="1" book="Champions of Ruin page 44" name="Black Blood Cultist {Prestige Class}" hd="d?" desc="Black Blood cultists are savage fighters whose natural attacks become more fearsome as they increase in level." />
+    <class level="1" book="Player's Guide to Faerun page 177" name="Black Blood Hunter {Prestige Class}" hd="d?" desc="Malar grants exceptional power to those who supplement their bestial level of evil with truly vile acts." />
+    <class level="1" book="Complete Divine page 21" name="Black Flame Zealot {Prestige Class}" hd="d?" desc="Trained in unholy rites, the black flame zealots use stealth, divine magic, and the zeal of fanaticism to destroy those who have given offense to their god." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 181" name="Blackguard {Prestige Class}" hd="d?" desc="The blackguard is the quintessential black knight." />
+    <class level="1" book="Races of Stone page 99" name="Blade Bravo {Prestige Class}" hd="d?" desc="Blade bravos are gnomes who learn the ways of the rapier." />
+    <class level="1" book="Oriental Adventures page 37" name="Blade Dancer {Prestige Class}" hd="d?" desc="To blade dancers, the sword is more than a weapon -- it is an ally, a friend, a spirit companion." />
+    <class level="1" book="Complete Warrior page 17" name="Bladesinger {Prestige Class}" hd="d?" desc="Bladesingers are elves who have blended art, swordplay, and arcane magic into a harmonious whole." />
+    <class level="1" book="Complete Divine page 23" name="Blighter {Prestige Class}" hd="d?" desc="Blighters bring desolation wherever they tread." />
+    <class level="1" book="Complete Arcane page 26" name="Blood Magus {Prestige Class}" hd="d?" desc="Blood magi are deceased spellcasters who gain an understanding of blood's importance when returned to life." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 96" name="Bloodclaw Master {Prestige Class}" hd="d?" desc="A bloodclaw master embraces the animal within to a degree that it becomes external, partially transforming him into the beast from which the discipline was inspired." />
+    <class level="1" book="Complete Adventurer page 28" name="Bloodhound {Prestige Class}" hd="d?" desc="A bloodhound tracks down wrongdoers and brings them to whatever justice awaits them." />
+    <class level="1" book="Draconomicon page 86" name="Bloodscaled Fury {Prestige Class}" hd="d?" desc="A bloodscaled fury is a dragon whose rage surpasses that of a human barbarian as the barbarian's rage surpasses a child's tantrum." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 100" name="Bloodstorm Blade {Prestige Class}" hd="d?" desc="Other martial adepts rightfully look with wonder upon those who learn the bloodstorm style." />
+    <class level="1" book="Miniatures Handbook page 16" name="Bonded Summoner  {Prestige Class}" hd="d?" desc="He who learns to leash the furies of the Elemental Planes is known as a bonded summoner." />
+    <class level="1" book="Ghostwalk page 21" name="Bone Collector {Prestige Class}" hd="d?" desc="A bone collector is a person who draws personal power from the destruction of undead." />
+    <class level="1" book="FN page 117" name="Bone Knight {Prestige Class}" hd="d?" desc="Bone knights are Karrn patriots, living protectors who fight alongside the undead legions of their land." />
+    <class level="1" book="Races of Faerun page 181" name="Breachgnome {Prestige Class}" hd="d?" desc="A breachgnome is a mighty gnome who is skilled in fighting in cramped conditions." />
+    <class level="1" book="Tome of Magic page 212" name="Brimstone Speaker {Prestige Class}" hd="d?" desc="Brimstone speakers regard the secret language of truenames as nothing less than a gift from the gods." />
+    <class level="1" book="Races of Eberron page 139" name="Cabinet Trickster {Prestige Class}" hd="d?" desc="Cabinet tricksters are the changeling agents of the Cabinet of Faces." />
+    <class level="1" book="Book of Vile Darkness page 52" name="Cancer Mage  {Prestige Class}" hd="d?" desc="The cancer mage makes quick, poisonous attacks and then retreats." />
+    <class level="1" book="Tome and Blood: A Guidebook to Wizards and Sorcerers page 52" name="Candle Caster {Prestige Class}" hd="d?" desc="Also called 'spell chandlers,' these specialists fill their time fashioning candles, both for esthetics and for power." />
+    <class level="1" book="Sharn: City of Towers page 162" name="Cannith Wand Adept  {Prestige Class}" hd="d?" desc="The Cannith wand adept is an artificer or other spellcaster who specializes in mastering wands." />
+    <class level="1" book="Explorer's Handbook page 58" name="Cataclysm Mage {Prestige Class}" hd="d?" desc="Cataclysm mages seek after Eberron's most powerful mysteries, long lost to the past." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 12" name="Cavalier  {Prestige Class}" hd="d?" desc="Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor." />
+    <class level="1" book="Complete Warrior page 19" name="Cavalier {Prestige Class}" hd="d?" desc="Representing the ultimate in mounted warfare, the cavalier is the quintessential knight in shining armor." />
+    <class level="1" book="Underdark page 30" name="Cavelord {Prestige Class}" hd="d?" desc="A passion for the narrow, dim ways of the world burns in the breast of the cavelord." />
+    <class level="1" book="Player's Guide to Faerun page 178" name="Celebrant Of Sharess {Prestige Class}" hd="d?" desc="Celebrants of Sharess are seducers and warriors, hedonists and pious champions of good." />
+    <class level="1" book="Book of Exalted Deeds page 55" name="Celestial Mystic {Prestige Class}" hd="d?" desc="Celestial mystics seek to attain ultimate unity with the perfect good." />
+    <class level="1" book="Expanded Psionics Handbook page 141" name="Cerebremancer  {Prestige Class}" hd="d?" desc="Cerebremancers access both the arcane mysteries of spellcasting and the psionic powers of the mind." />
+    <class level="1" book="Races of Destiny page 111" name="Chameleon  {Prestige Class}" hd="d?" desc="Chameleons are dilettantes in every class and masters of none." />
+    <class level="1" book="Races of the Wild page 113" name="Champion Of Corellon Larethian {Prestige Class}" hd="d?" desc="The champion of Corellon Larethian is a noble elf fighter, an elf knight or lord who can stand up to any orc or human warrior." />
+    <class level="1" book="Book of Exalted Deeds page 56" name="Champion Of Gwynharwyf {Prestige Class}" hd="d?" desc="The champion of Gwynharwyf is a mortal barbarian who strives to emulate her sublime balance of fury and reserve while retaining a focus on good." />
+    <class level="1" book="Planar Handbook page 61" name="Chaotician {Prestige Class}" hd="d?" desc="Chaoticians seek to enjoy the beauty of the unpredictable, and by seeking to emulate the philosophy of chaos in their actions, they create a fabulous journey through life in which nothing is a bore." />
+    <class level="1" book="Tome of Magic page 117" name="Child Of Night {Prestige Class}" hd="d?" desc="They prefer to call themselves 'black transmogrifists,' but most know them as children of night." />
+    <class level="1" book="Complete Divine page 26" name="Church Inquisitor {Prestige Class}" hd="d?" desc="The church inquisitor uncovers taint within the church and cuts it away." />
+    <class level="1" book="Planar Handbook page 58" name="Cipher Adept {Prestige Class}" hd="d?" desc="Seamless integration brings the cipher adept bliss." />
+    <class level="1" book="Sharn: City of Towers page 163" name="Citadel Elite {Prestige Class}" hd="d?" desc="The elite agent of the Citadel is the best of the best, saved for the most dangerous, most important assignments or granted latitude to serve the King and Crown as he sees fit." />
+    <class level="1" book="Frostburn page 52" name="Cloud Anchorite  {Prestige Class}" hd="d?" desc="The cloud anchorite seeks a way to achieve immortality while maintaining life and awareness." />
+    <class level="1" book="Player's Guide to Faerun page 174" name="Cognition Thief {Prestige Class}" hd="d?" desc="A cognition thief's subtle ability to worm her way into a target's very consciousness makes her the ultimate secret agent." />
+    <class level="1" book="Serpent Kingdoms page 161" name="Coiled Cabalist {Prestige Class}" hd="d?" desc="Standing apart from the priests of Sseth but careful never to draw their collective ire by openly opposing them, the members of the Coiled Cabal pursue the arcane arts largely in secrecy." />
+    <class level="1" book="Heroes of Battle page 99" name="Combat Medic {Prestige Class}" hd="d?" desc="The combat medic keeps her allies alive and tends to the fallen on the front lines of battle." />
+    <class level="1" book="Complete Divine page 28" name="Consecrated Harrier {Prestige Class}" hd="d?" desc="The consecrated harrier acts as a bounty hunter for her religion or organization." />
+    <class level="1" book="Complete Divine page 30" name="Contemplative {Prestige Class}" hd="d?" desc="Contemplatives devote their lives to cultivating a greater closeness with their deities." />
+    <class level="1" book="Heroes of Horror page 88" name="Corrupt Avenger {Prestige Class}" hd="d?" desc="A corrupt avenger accepts any cost to have his vengeance, even to the forfeit of his very soul." />
+    <class level="1" book="Epic Level Handbook page 26" name="Cosmic Descryer {Prestige Class}" hd="d?" desc="The cosmic descryer is interested in the infinite variety of the planes and fascinated by the different layers of the multiverse." />
+    <class level="1" book="Power of Faerun page 108" name="Court Herald {Prestige Class}" hd="d?" desc="The court herald prestige class is a modified version of the loremaster prestige class, which is described in the Dungeon Master's Guide." />
+    <class level="1" book="Races of Stone page 101" name="Cragtop Archer {Prestige Class}" hd="d?" desc="Cragtop archers train their eyes and minds to find target at great distances, and to quickly compensate for wind, movement, and other factors that affect shots of such difficulty." />
+    <class level="1" book="Shining South page 23" name="Crinti Shadow Marauder  {Prestige Class}" hd="d?" desc="Crinti shadow marauders combine the physical prowess of master rider with the stealth of the most cunning shadowdancers." />
+    <class level="1" book="Frostburn page 54" name="Cryokineticist {Prestige Class}" hd="d?" desc="The cryokineticist is the master of cold psionic energy." />
+    <class level="1" book="Lost Empires of Faerun page 10" name="Cultist Of The Shattered Peak  {Prestige Class}" hd="d?" desc="Cultists of the Shattered Peak possess skill at arms, stealth, and a smattering of ancient lore." />
+    <class level="1" book="FN page 86" name="Cyran Avenger {Prestige Class}" hd="d?" desc="These survivors of the Day of Mourning seek to uncover the cause of the cataclysm and avenge their people against the architects of the Mournland." />
+    <class level="1" book="Complete Adventurer page 31" name="Daggerspell Mage {Prestige Class}" hd="d?" desc="Daggerspell mages work to perfect a unique fighting and spellcasting (arcane) style that relies on wielding a pair of daggers at all times." />
+    <class level="1" book="Complete Adventurer page 36" name="Daggerspell Shaper {Prestige Class}" hd="d?" desc="Daggerspell shapers work to perfect a unique fighting and spellcasting (druid) style that relies on wielding a pair of daggers at all times." />
+    <class level="1" book="Oriental Adventures page 215" name="Daidoji Bodyguard {Prestige Class}" hd="d?" desc="The Daidoji concentrate on defensive maneuvers and a style of fighting that induces their opponents to defeat themselves." />
+    <class level="1" book="Complete Warrior page 20" name="Dark Hunter {Prestige Class}" hd="d?" desc="Dark hunters specialize in hunting down and eliminating creatures in the dark, twisting caves of the Underdark." />
+    <class level="1" book="FN page 68" name="Dark Lantern {Prestige Class}" hd="d?" desc="The Dark Lanterns serve the crown of Breland as spies and assassins." />
+    <class level="1" book="Lords of Darkness page 33" name="Darkmask  {Prestige Class}" hd="d?" desc="Darkmasks strike a balance between their faith and their skills at stealth." />
+    <class level="1" book="Lords of Madness page 186" name="Darkrunner {Prestige Class}" hd="d?" desc="Darkrunners devote their lives to traveling the haunted underground depths." />
+    <class level="1" book="Complete Warrior page 23" name="Darkwood Stalker {Prestige Class}" hd="d?" desc="Some elves train as elite hunters of orcs; these hunters are called darkwood stalkers." />
+    <class level="1" book="Races of Stone page 103" name="Dawncaller {Prestige Class}" hd="d?" desc="Dawncallers are goliath bards responsible for guarding their tribe throughout the night." />
+    <class level="1" book="Magic of Eberron page 57" name="Deadgrim {Prestige Class}" hd="d?" desc="The deadgrim are an elite faction with in the Red Watchers, a new organization of undead hunters within Karrnath." />
+    <class level="1" book="Heroes of Horror page 93" name="Death Delver {Prestige Class}" hd="d?" desc="The death delver is that rare individual, who, rather than fearing and avoiding death, delves as deeply into its mysteries as he can, to better understand and eventually gain some small power over it." />
+    <class level="1" book="Ghostwalk page 23" name="Deathwarden Chanter {Prestige Class}" hd="d?" desc="The Deathwarden chanters are the most prestigious, respected, and mysterious members of the dwarven Deathwarden clan." />
+    <class level="1" book="Underdark page 32" name="Deep Diviner {Prestige Class}" hd="d?" desc="Deep diviners are intimates of the earth and all that it hides." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 105" name="Deepstone Sentinel {Prestige Class}" hd="d?" desc="The Stone Dragon discipline traces its roots back to an ancient order of dwarves that used the power of the earth to enhance their combat style." />
+    <class level="1" book="Races of Stone page 105" name="Deepwarden {Prestige Class}" hd="d?" desc="Deepwardens are dwarves who serve as a living early warning system against threats from both the environment and other creatures." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 52" name="Deepwood Sniper {Prestige Class}" hd="d?" desc="A deepwood sniper is patient, careful, quiet , and deadly accurate." />
+    <class level="1" book="Book of Exalted Deeds page 58" name="Defender Of Sealtiel {Prestige Class}" hd="d?" desc="Defenders of Sealtiel are sworn to uphold the ideals of Sealtiel, which includes fighting off forces of evil when they assault good." />
+    <class level="1" book="Planar Handbook page 44" name="Defiant {Prestige Class}" hd="d?" desc="Defiants take the teaching of the Athar to heart in a way that grants them tremendous powers against those who claim to wield divine might." />
+    <class level="1" book="Book of Vile Darkness page 54" name="Demonologist {Prestige Class}" hd="d?" desc="A demonologist is a mortal who has devoted his life to the study of demons." />
+    <class level="1" book="Complete Warrior page 25" name="Dervish {Prestige Class}" hd="d?" desc="The dervish epitomizes speeds, quickness, and abandon." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 13" name="Devoted Defender {Prestige Class}" hd="d?" desc="The devoted defender is a professional guardian." />
+    <class level="1" book="Book of Vile Darkness page 56" name="Diabolist {Prestige Class}" hd="d?" desc="A diabolist does not serve devils -- she wants to be one." />
+    <class level="1" book="Dragon Magic page 30" name="Diamond Dragon {Prestige Class}" hd="d?" desc="The boldest of the sages study the link between gem dragons and psionics, learning to tap into what they refer to as the draconic psionic collective." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 43" name="Dirgesinger {Prestige Class}" hd="d?" desc="Dirgesingers voice melodies not of celebration and joy, but of sorrow and grief." />
+    <class level="1" book="Draconomicon page 87" name="Disciple Of Ashardalon {Prestige Class}" hd="d?" desc="Disciples of Ashardalon bind fiendish spirits to their own hearts, eventually taking on the characteristics of demonic spawn themselves." />
+    <class level="1" book="Book of Vile Darkness page 57" name="Disciple Of Asmodeus {Prestige Class}" hd="d?" desc="A disciple of Asmodeus uses his power and influence to learn secrets, which in turn gains him more power." />
+    <class level="1" book="Book of Vile Darkness page 58" name="Disciple Of Baalzebul {Prestige Class}" hd="d?" desc="A disciple of Baalzebul uses deceit and trickery to get what she wants." />
+    <class level="1" book="Book of Vile Darkness page 60" name="Disciple Of Dispater {Prestige Class}" hd="d?" desc="A disciple of Dispater is a warlike general of evil." />
+    <class level="1" book="Book of Vile Darkness page 60" name="Disciple Of Mammon {Prestige Class}" hd="d?" desc="A disciple of Mammon takes what she wants any way she can." />
+    <class level="1" book="Book of Vile Darkness page 62" name="Disciple Of Mephistopheles {Prestige Class}" hd="d?" desc="A disciple of Mephistopheles wields hellfire as his weapon." />
+    <class level="1" book="Races of the Dragon page 75" name="Disciple Of The Eye {Prestige Class}" hd="d?" desc="As a disciple of the eye, you know the messages that the eyes alone can impart." />
+    <class level="1" book="Tome of Magic page 216" name="Disciple Of The Word {Prestige Class}" hd="d?" desc="Disciples of the word are intellectual warrior monks who, through a deeper understanding of their truenames, transcend the limits of their mortal form." />
+    <class level="1" book="Frostburn page 56" name="Disciple Of Thrym {Prestige Class}" hd="d?" desc="Aside from predictions of Ragnarok, disciples of Thrym spend a large portion of their time undermining those who serve Thor and Loki, the deities who conspired against Thrym." />
+    <class level="1" book="Draconomicon page 89" name="Dispassionate Watcher Of Chronepsis {Prestige Class}" hd="d?" desc="Taking the role of observers rather than active participants, dispassionate watchers of Chronepsis remain aloof from the events of the world." />
+    <class level="1" book="Manual of the Planes page 24" name="Divine Agent  {Prestige Class}" hd="d?" desc="The divine agent is a specially selected agent of her deity, and she acts in the service of that power or deity." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 42" name="Divine Champion {Prestige Class}" hd="d?" desc="Divine champions are mighty warriors who dedicate themselves to their deity's cause, defending holy ground, destroying enemies of the church, and slaying mythical beasts and clerics of opposing faiths." />
+    <class level="1" book="Complete Divine page 33" name="Divine Crusader {Prestige Class}" hd="d?" desc="The divine crusader embodies devotion and dedication to a chosen deity." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 43" name="Divine Disciple {Prestige Class}" hd="d?" desc="Divine disciples interpret the divine will, act as teachers and guides to other members of the clergy, and arm lay followers of their deity with the power of their patron." />
+    <class level="1" book="Epic Level Handbook page 27" name="Divine Emissary {Prestige Class}" hd="d?" desc="Deities have need of powerful servants, many of whom are epic clerics, paladins, and other characters." />
+    <class level="1" book="Complete Divine page 34" name="Divine Oracle {Prestige Class}" hd="d?" desc="Some mortals hear the words of deities; these can be divine oracles." />
+    <class level="1" book="Races of Stone page 107" name="Divine Prankster {Prestige Class}" hd="d?" desc="These gnomes embrace Garl's methods of teaching through harmless object lessons and dedicate their lives to acting as his agents in the world." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 44" name="Divine Seeker {Prestige Class}" hd="d?" desc="The divine seeker infiltrates dangerous places to rescue prisoners, reclaim stolen relics, or eliminate enemy leaders." />
+    <class level="1" book="Return to the Temple of Elemental Evil page 162" name="Doomdreamer  {Prestige Class}" hd="d?" desc="Doomdreamers are the elite among the ranks of the cult of Tharizdun." />
+    <class level="1" book="Faiths &amp; Pantheons page 186" name="Doomguide {Prestige Class}" hd="d?" desc="Doomguides belong to an elite order of spellcasting warriors in service to the Judge of the Damned." />
+    <class level="1" book="Planar Handbook page 47" name="Doomlord {Prestige Class}" hd="d?" desc="The doomlord's life holds the greatest appeal for fighters and barbarians who enjoy smashing and destroying." />
+    <class level="1" book="Races of the Dragon page 79" name="Dracolexi {Prestige Class}" hd="d?" desc="As a dracolexi, you try to understand that primordial vocabulary by devoting yourself to the study of ancient dialects and languages, hoping to discover how certain Draconic words were once uttered." />
+    <class level="1" book="Draconomicon page 122" name="Dracolyte {Prestige Class}" hd="d?" desc="The dracolyte takes up worship of the draconic gods." />
+    <class level="1" book="Draconomicon page 90" name="Dragon Ascendant {Prestige Class}" hd="d?" desc="Dragon ascendants seek to transcend the limitations of material existence so as to become nothing less than deities." />
+    <class level="1" book="Dragon Magic page 34" name="Dragon Descendant {Prestige Class}" hd="d?" desc="A secret monastic order, dragon descendants tap into the power of their draconic heritage to call on their ancestors in times of need." />
+    <class level="1" book="Races of the Dragon page 84" name="Dragon Devotee {Prestige Class}" hd="d?" desc="Some individuals feel the call of dragons more strongly, which may lead them into an attempt to awaken their blood and bring those traits to the fore." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 183" name="Dragon Disciple {Prestige Class}" hd="d?" desc="Dragon disciples use their magic as a catalyst to ignite their dragon blood." />
+    <class level="1" book="Dragon Magic page 38" name="Dragon Lord {Prestige Class}" hd="d?" desc="A dragon lord is the general at the head of an army, the emperor at the helm of an empire, or the warleader who dominates a battlefield." />
+    <class level="1" book="Magic of Eberron page 63" name="Dragon Prophet {Prestige Class}" hd="d?" desc="The dragon prophet is a member of one of the 'lesser races' who shares the dragons' ambitious goal of understanding the complex and convoluted draconic Prophecy." />
+    <class level="1" book="Dragonlance Campaign Setting page 77" name="Dragon Rider  {Prestige Class}" hd="d?" desc="Dragon riders develop a strong bond with their mounts that allows the two to work together." />
+    <class level="1" book="Miniatures Handbook page 18" name="Dragon Samurai {Prestige Class}" hd="d?" desc="Dragon samurai are dedicated warriors, members of a special, self-selected class who revered dragonkind and emulate dragons' ferocious martial abilities to the point of taking on some draconic traits." />
+    <class level="1" book="Races of the Dragon page 88" name="Dragonheart Mage {Prestige Class}" hd="d?" desc="The dragonheart mage is perfect for the dedicated spellcaster who wishes to embrace the power of dragon blood while still advancing in magical expertise." />
+    <class level="1" book="Draconomicon page 123" name="Dragonkith {Prestige Class}" hd="d?" desc="Dragonkith are creatures that serve and aid dragons." />
+    <class level="1" book="Eberron Campaign Setting page 73" name="Dragonmark Heir  {Prestige Class}" hd="d?" desc="Dragonmark heirs have the ability to improve the dragonmarks they have manifested, as well as to develop additional abilities related to their dragonmarks." />
+    <class level="1" book="Draconomicon page 124" name="Dragonrider {Prestige Class}" hd="d?" desc="Dragonriders soar through the clouds atop a draconic steed." />
+    <class level="1" book="Draconomicon page 125" name="Dragonslayer {Prestige Class}" hd="d?" desc="Dragonslayers combat dragons." />
+    <class level="1" book="Draconomicon page 127" name="Dragonsong Lyrist {Prestige Class}" hd="d?" desc="The dragonsong lyrist taps into the power of dragonsong." />
+    <class level="1" book="Draconomicon page 128" name="Dragonstalker {Prestige Class}" hd="d?" desc="The dragonstalker uses stealth and guile to combat dragons." />
+    <class level="1" book="Heroes of Battle page 103" name="Dread Commando {Prestige Class}" hd="d?" desc="Dread commandos are the elite scouts and strike force of a well-trained mercenary band." />
+    <class level="1" book="Complete Adventurer page 39" name="Dread Pirate {Prestige Class}" hd="d?" desc="A dread pirate has mastered every aspect of larceny on the high seas." />
+    <class level="1" book="Heroes of Horror page 98" name="Dread Witch {Prestige Class}" hd="d?" desc="The dread witch is a spellcaster who manipulates fear as readily and effectively as other casters manipulate magic itself." />
+    <class level="1" book="Faiths &amp; Pantheons page 188" name="Dreadmaster {Prestige Class}" hd="d?" desc="Dreadmasters seek to rule absolutely, preferably through terror and domination." />
+    <class level="1" book="Underdark page 33" name="Drow Judicator {Prestige Class}" hd="d?" desc="A mortal imbued with fiendish cruelty, the drow judicator is a knight most foul." />
+    <class level="1" book="Complete Warrior page 27" name="Drunken Master {Prestige Class}" hd="d?" desc="By weaving and staggering about as if inebriated, drunken boxers avoid many blows." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 185" name="Duelist {Prestige Class}" hd="d?" desc="The duelist is a nimble, intelligent fighter trained in making precise attacks with light weapons." />
+    <class level="1" book="Complete Adventurer page 42" name="Dungeon Delver {Prestige Class}" hd="d?" desc="In many ways, the dungeon delver is the ultimate adventuring rogue." />
+    <class level="1" book="Unapproachable East page 22" name="Durthan {Prestige Class}" hd="d?" desc="Durthans are an order of spellcasters who tap into the darker spirits of Rashemen." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 186" name="Dwarven Defender {Prestige Class}" hd="d?" desc="The defender is a sponsored champion of a dwarven cause" />
+    <class level="1" book="Faiths &amp; Pantheons page 189" name="Dweomerkeeper {Prestige Class}" hd="d?" desc="Dweomerkeepers are Mystra's shepherds, safeguarding the Weave against threats to its integrity." />
+    <class level="1" book="Races of Stone page 110" name="Earth Dreamer {Prestige Class}" hd="d?" desc="Earth dreamers move within the ancient dreams of the mountains, attuning themselves to their power and mastering strange abilities over the earth." />
+    <class level="1" book="Complete Psionic page 22" name="Ebon Saint {Prestige Class}" hd="d?" desc="The ebon saint lives in the darkness, but seeks to exposehis enemies to the light." />
+    <class level="1" book="Complete Psionic page 26" name="Ectopic Adept {Prestige Class}" hd="d?" desc="Ectoplasm is the preferred medium of creation for the ectopic adept, and his mind serves as the mold, kiln, and wheel upon which his works are turned." />
+    <class level="1" book="Complete Arcane page 30" name="Effigy Master {Prestige Class}" hd="d?" desc="The effigy master is an expert in the imitation of true life." />
+    <class level="1" book="Eberron Campaign Setting page 74" name="Eldeen Ranger {Prestige Class}" hd="d?" desc="An Eldeen ranger learns special techniques and abilities that help him to fulfill the goal of his sect." />
+    <class level="1" book="Complete Mage page 53" name="Eldritch Disciple {Prestige Class}" hd="d?" desc="A multiclass warlock and divine spellcaster." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 187" name="Eldritch Knight {Prestige Class}" hd="d?" desc="Studying the martial and arcane arts to equal degree, the eldritch knight is a versatile combatant." />
+    <class level="1" book="Complete Mage page 57" name="Eldritch Theurge {Prestige Class}" hd="d?" desc="A multiclass warlock and arcane spellcaster." />
+    <class level="1" book="Faiths &amp; Pantheons page 190" name="Elemental Archon {Prestige Class}" hd="d?" desc="Elemental archons are servants of powerful, seemingly uncaring elemental forces who want to once and for all tip the balance in favor of their chosen element." />
+    <class level="1" book="Draconomicon page 92" name="Elemental Master {Prestige Class}" hd="d?" desc="Elemental masters strive to attain the purity of perfect attunement with both the energy of their breath weapons and the elemental nature of their core." />
+    <class level="1" book="Complete Arcane page 32" name="Elemental Savant {Prestige Class}" hd="d?" desc="Elemental savants study the basic building blocks of existence -- air, earth, fire, and water -- learning to harness their powers." />
+    <class level="1" book="Magic of Eberron page 68" name="Elemental Scion Of Zilargo {Prestige Class}" hd="d?" desc="The elemental scion of Zilargo attempts to understand the true nature of the elements through bizarre methods." />
+    <class level="1" book="Planar Handbook page 65" name="Elemental Warrior {Prestige Class}" hd="d?" desc="The elemental warrior sees that great strength comes from focusing on the most basic aspects of reality." />
+    <class level="1" book="Expanded Psionics Handbook page 142" name="Elocater {Prestige Class}" hd="d?" desc="Elocaters are renowned for their agile combat stratagems, using their knowledge of motion and space to set themselves up for quick attacks against slower opponents." />
+    <class level="1" book="Races of Faerun page 182" name="Elven High Mage {Prestige Class}" hd="d?" desc="Elven high mages are the masters of creating their own epic spells -- mythals that can grow to engulf entire cities." />
+    <class level="1" book="Savage Species page 75" name="Emancipated Spawn  {Prestige Class}" hd="d?" desc="Those spawn of undead who find themselves free of their masters can begin to recall their former lives and a measure of redemption." />
+    <class level="1" book="Book of Exalted Deeds page 59" name="Emissary Of Barachiel {Prestige Class}" hd="d?" desc="The emissaries of Barachiel are peacemakers, diplomats, and evangelists, as well as staunch opponents of evil and corruption." />
+    <class level="1" book="Complete Arcane page 34" name="Enlightened Fist {Prestige Class}" hd="d?" desc="Enlightened fists master the use of touch spells, creating new forms of combat with their fists." />
+    <class level="1" book="Complete Mage page 60" name="Enlightened Spirit {Prestige Class}" hd="d?" desc="A warlock who takes on celestial characteristics." />
+    <class level="1" book="Complete Divine page 36" name="Entropomancer {Prestige Class}" hd="d?" desc="Entropomancers gain attunement to the great nothingness they say lies at the center of the universe." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 53" name="Ephemeral Exemplar {Prestige Class}" hd="d?" desc="Ephemeral exemplars are paragons of incorporealness." />
+    <class level="1" book="Epic Level Handbook page 17" name="Epic Arcane Archer {Prestige Class}" hd="d?" desc="The epic arcane archer is a living extension of the bow, capable of achieving wonders of archery that cause lesser beings to gape in awe." />
+    <class level="1" book="Epic Level Handbook page 18" name="Epic Assassin {Prestige Class}" hd="d?" desc="The epic assassin flits from shadow to shadow, lying in wait until his target is vulnerable, then striking like a cobra." />
+    <class level="1" book="Epic Level Handbook page 19" name="Epic Blackguard {Prestige Class}" hd="d?" desc="The epic blackguard is a twisted reflection of the epic paladin, radiating evil power from every pore of his body." />
+    <class level="1" book="Epic Level Handbook page 20" name="Epic Dwarven Defender {Prestige Class}" hd="d?" desc="The epic dwarven defender becomes the very definition of immovable object." />
+    <class level="1" book="Epic Level Handbook page 28" name="Epic Infiltrator {Prestige Class}" hd="d?" desc="The epic infiltrator is an agent of espionage, an undercover operative, and sometimes a saboteur." />
+    <class level="1" book="Epic Level Handbook page 20" name="Epic Loremaster {Prestige Class}" hd="d?" desc="If the epic loremaster doesn't know something, it probably isn't worth knowing." />
+    <class level="1" book="Epic Level Handbook page 22" name="Epic Psion {Prestige Class}" hd="d?" desc="The epic psion has evolved his inborn mental abilities, achieving mental mastery of lesser mentalities." />
+    <class level="1" book="Epic Level Handbook page 23" name="Epic Psychic Warrior {Prestige Class}" hd="d?" desc="The epic psychic warrior is a meld of mental and martial prowess." />
+    <class level="1" book="Epic Level Handbook page 21" name="Epic Shadowdancer {Prestige Class}" hd="d?" desc="While the epic assassin udes the shadows, the epic shadowdancer becomes the shadows, indistinguishable from the darkness cloaking her." />
+    <class level="1" book="Faiths of Eberron page 52" name="Escalation Mage {Prestige Class}" hd="d?" desc="By giving themselves over to the Shadow and focusing on the dark side of magic, these arcane spellcasters learn how to bargain with their god to make their spells more effective -- for a price." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 109" name="Eternal Blade {Prestige Class}" hd="d?" desc="An eternal blade is an elf who learns a variety of exotic fighting maneuvers with the aid and advice of the spirit of a mighty, ancient elf warrior." />
+    <class level="1" book="Oriental Adventures page 38" name="Eunuch Warlock {Prestige Class}" hd="d?" desc="Eunuch warlocks must be arcane spellcasters of significant ability, and they are often sorcerers rather than wu jen." />
+    <class level="1" book="Complete Divine page 39" name="Evangelist {Prestige Class}" hd="d?" desc="Evangelists travel the world proclaiming their devotion to a particular deity, pantheon, or religious doctrine." />
+    <class level="1" book="Player's Guide to Faerun page 53" name="Evereskan Tomb Guardian {Prestige Class}" hd="d?" desc="The Evereskan tomb guardians are on hand to ensure that the defenses of the tombs are very good indeed." />
+    <class level="1" book="Book of Exalted Deeds page 61" name="Exalted Arcanist {Prestige Class}" hd="d?" desc="Exalted arcanists gain access to spells that channel celestial energy." />
+    <class level="1" book="Complete Adventurer page 44" name="Exemplar {Prestige Class}" hd="d?" desc="An exemplar focuses her energy on improving the skills she possesses until she can perform them with fluidity, grace, and art." />
+    <class level="1" book="Eberron Campaign Setting page 77" name="Exorcist Of The Silver Flame {Prestige Class}" hd="d?" desc="Exorcists of the Silver Flame lead the Church of the Silver Flame's efforts in combating extraplanar threats." />
+    <class level="1" book="Complete Warrior page 30" name="Exotic Weapon Master {Prestige Class}" hd="d?" desc="The only real requirement for exotic weapon master is commitment and perseverance." />
+    <class level="1" book="Eberron Campaign Setting page 79" name="Extreme Explorer {Prestige Class}" hd="d?" desc="The extreme explorer is the iconic action hero of Eberron." />
+    <class level="1" book="Complete Warrior page 31" name="Eye Of Gruumsh {Prestige Class}" hd="d?" desc="An orc or half-orc who heeds the call to serve Gruumsh in his image can become an eye of Gruumsh." />
+    <class level="1" book="Unearthed Arcana page 166" name="Faith Scion {Prestige Class}" hd="d?" desc="This prestige class is meant for characters who wield legendary weapons of divine power for claerics, druids, and paladins." />
+    <class level="1" book="Song and Silence: A Guidebook to Bards and Rogues page 8" name="Fang Of Lolth {Prestige Class}" hd="d?" desc="Fangs of Lolth undergo a transformation that both provides them power and changes them in ways they may not necessarily want." />
+    <class level="1" book="Serpent Kingdoms page 162" name="Fang Of Sseth {Prestige Class}" hd="d?" desc="The Fangs of Sseth constitute the strike force of the Vipers -- the stealthy killers who leave no trace." />
+    <class level="1" book="Planar Handbook page 50" name="Fatemaker {Prestige Class}" hd="d?" desc="'There are two paths to take; one is easy, and that is its only reward.'" />
+    <class level="1" book="Complete Arcane page 37" name="Fatespinner {Prestige Class}" hd="d?" desc="A fatespinner has pulled back the curtain of chance, circumstance, and chaos to glimpse a deeper truth: probability." />
+    <class level="1" book="Fiend Folio page 200" name="Fiend Of Blasphemy  {Prestige Class}" hd="d?" desc="The fiend of blasphemy is a master of the infernal art of perverting the desire to worship and turning it toward the corrupt veneration of fiendish masters." />
+    <class level="1" book="Fiend Folio page 202" name="Fiend Of Corruption {Prestige Class}" hd="d?" desc="Fiends of corruption are preoccupied with corrupting mortals to ensure that their souls end up on the Lower Planes after death." />
+    <class level="1" book="Fiend Folio page 204" name="Fiend Of Possession {Prestige Class}" hd="d?" desc="A fiend of possession is an invasive presence that taints the very soul, corrupting from within." />
+    <class level="1" book="Tome of Magic page 220" name="Fiendbinder {Prestige Class}" hd="d?" desc="A fiendbinder seeks to unlock the truenames of demons, devils, and other vile fiends, and use that knowledge to bind them to service." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 18" name="Fist Of Hextor {Prestige Class}" hd="d?" desc="Fists of Hextor are templars sworn to the service of their unforgiving master." />
+    <class level="1" book="Book of Exalted Deeds page 62" name="Fist Of Raziel {Prestige Class}" hd="d?" desc="The fists of Raziel represent a knightly order dedicated to the celestial patron of holy warfare against evil." />
+    <class level="1" book="Expanded Psionics Handbook page 144" name="Fist Of Zuoken {Prestige Class}" hd="d?" desc="The Fists of Zuoken ore members of an order of martial artists devoted to mastering their own physical and mental development while protecting psions and other psionic creatures." />
+    <class level="1" book="Complete Psionic page 30" name="Flayerspawn Psychic {Prestige Class}" hd="d?" desc="Willing to sacrifice her life, appearance, and even her sanity, the flayerspawn psychic walks a dangerous road, growing in psionic power as she slowly embraces her secret mind flayer heritage." />
+    <class level="1" book="Lords of Madness page 189" name="Fleshwarper {Prestige Class}" hd="d?" desc="The fleshwarper finds no greater canvas than flesh itself." />
+    <class level="1" book="Complete Adventurer page 47" name="Fochlucan Lyrist {Prestige Class}" hd="d?" desc="The Fochlucan lyrist is a legendary figure who serves as the herald and teacher to great kings, the champion of the common folk, and the keeper of lore long forgotten elsewhere." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 56" name="Foe Hunter {Prestige Class}" hd="d?" desc="The foe hunter has but one purpose in life: to kill creatures of the type she hates." />
+    <class level="1" book="Faiths &amp; Pantheons page 193" name="Forest Master {Prestige Class}" hd="d?" desc="Guardians of the pristine wilderness and defenders of the ancient trees, forest masters are the living embodiments of sentient nature." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 57" name="Forsaker {Prestige Class}" hd="d?" desc="The forsaker rebels against the magic of the fantastic world around him." />
+    <class level="1" book="Complete Warrior page 34" name="Frenzied Berserker {Prestige Class}" hd="d?" desc="The frenzied berserker is constantly seeking out more conflict to feed her craving for battle." />
+    <class level="1" book="Frostburn page 58" name="Frost Mage {Prestige Class}" hd="d?" desc="Frost mages usually hail from lands of cold, snow, and ice: tundra, glaciers even outer planes perpetually shrouded in winter." />
+    <class level="1" book="Frostburn page 60" name="Frostrager {Prestige Class}" hd="d?" desc="The frostragers are powerful and dangerous warriors believed by some to be gifted from (and others cursed by) the frost giant deity Thrym with an unstable but powerful supernatural battle rage." />
+    <class level="1" book="Manual of the Planes page 26" name="Gatecrasher {Prestige Class}" hd="d?" desc="Gatecrashers see themselves as cosmic free agents, independent forces who can influence the natives of the planes and even the dynamic forces of magic itself." />
+    <class level="1" book="Player's Guide to Eberron page 88" name="Gatekeeper Mystagogue {Prestige Class}" hd="d?" desc="Heirs to a tradition over sixteen millennia old, the gatekeeper mystagogues stand among the greated foes of the daelkyr and their aberration spawn." />
+    <class level="1" book="Complete Divine page 41" name="Geomancer {Prestige Class}" hd="d?" desc="To the geomancer, all magic is the same." />
+    <class level="1" book="Complete Arcane page 39" name="Geometer {Prestige Class}" hd="d?" desc="The geometer is the master of written magic and spells inscribed within a perfectly rendered diagram." />
+    <class level="1" book="Ghostwalk page 26" name="Ghost Slayer {Prestige Class}" hd="d?" desc="The ghost slayer studies ghost so that they can be dispatched easily and no longer bother the living with their presence." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 20" name="Ghostwalker {Prestige Class}" hd="d?" desc="Ghostwalkers have abilities that point to some underlying, mysterious mysticism." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 21" name="Gladiator {Prestige Class}" hd="d?" desc="Rich or poor, all gladiators face death whenever they step into the arena." />
+    <class level="1" book="Lost Empires of Faerun page 13" name="Glorious Servitor {Prestige Class}" hd="d?" desc="Glorious servitors are exceptionally loyal and devout servants of the Mulhorandi gods." />
+    <class level="1" book="Magic of Faerun page 23" name="Gnome Artificer  {Prestige Class}" hd="d?" desc="Gnome artificers dabble in technology to create fantastic devices, delving into shadow magic when their mundane equipment is insufficient for the task." />
+    <class level="1" book="Faiths &amp; Pantheons page 194" name="Goldeye {Prestige Class}" hd="d?" desc="Goldeyes are agents and promulgators of commercial intercourse, seeking to increase the wealth of their communities and realms by promoting the exchange of coins in trade." />
+    <class level="1" book="Races of Stone page 112" name="Goliath Liberator {Prestige Class}" hd="d?" desc="Goliath liberators are experts at infiltrating giant dwellings, freeing the captives within, then exacting revenge on the giants while the freed goliaths escape." />
+    <class level="1" book="City of Splendors: Waterdeep page 77" name="Gray Hand Enforcer {Prestige Class}" hd="d?" desc="Gray Hand enforcers are highly trained members of the Gray Hands, Waterdeep's elite, high-powered fighting force." />
+    <class level="1" book="Shining South page 24" name="Great Rift Deep Defender {Prestige Class}" hd="d?" desc="The Great Rift deep defender has a keen understanding of the importance of making a stand." />
+    <class level="1" book="Races of Faerun page 183" name="Great Rift Skyguard {Prestige Class}" hd="d?" desc="The hippogriff-mounted skyguards of the Great Rift patrol the skies, ever watchful for the enemies of the gold dwarves." />
+    <class level="1" book="Shining South page 26" name="Great Sea Corsair {Prestige Class}" hd="d?" desc="Adapt the dread pirate prestige class from Song and Silenceto create the Great Sea corsair prestige class." />
+    <class level="1" book="Complete Arcane page 41" name="Green Star Adept {Prestige Class}" hd="d?" desc="A Green Star adept is the master of the strange and powerful magic derived from Alhazarde's glittering green starmetal." />
+    <class level="1" book="Epic Level Handbook page 30" name="Guardian Paramount {Prestige Class}" hd="d?" desc="The guardian paramount is an extraordinary bodyguard, a protector of others who is skilled in preventing harm to his charge." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 45" name="Guild Thief {Prestige Class}" hd="d?" desc="Guild thieves are thieves who operate in urban areas as part of an organized thieves' guild." />
+    <class level="1" book="Magic of Faerun page 26" name="Guild Wizard Of Waterdeep {Prestige Class}" hd="d?" desc="The wizards of the order study and exchange information, create magic items to help support the guild's financial independence, and offer their services to others in the city as watch-wizards or fire guards." />
+    <class level="1" book="Complete Warrior page 38" name="Halfling Outrider {Prestige Class}" hd="d?" desc="Halfling outriders are elite champions whose task is to warn their fellows of, and protect them from, danger." />
+    <class level="1" book="Shining South page 27" name="Halruaan Elder {Prestige Class}" hd="d?" desc="Halruaan elders are the epitomy of magic cast with panache, and their dazzling and unique displays of arcane force make them the most respected practitioners in the land." />
+    <class level="1" book="Shining South page 29" name="Halruaan Magehound {Prestige Class}" hd="d?" desc="Magehounds are Halruaa's inquisitors." />
+    <class level="1" book="Player's Guide to Faerun page 56" name="Hammer Of Moradin {Prestige Class}" hd="d?" desc="An elite order of warrior-priests stands ready to defend the dwarven people against the onslaught of fell giants, dark elves, and goblinoids." />
+    <class level="1" book="Shining South page 31" name="Hand Of The Adama {Prestige Class}" hd="d?" desc="The hand of the Adama is a benign leader, judge and jury, and protector of the common folk all rolled into one." />
+    <class level="1" book="Dragon Magic page 43" name="Hand Of The Winged Masters {Prestige Class}" hd="d?" desc="Dragons often need expert servants to be their eyes, ears, and hands in humanoid society." />
+    <class level="1" book="Player's Guide to Faerun page 58" name="Harper Agent {Prestige Class}" hd="d?" desc="Harper agents are the 'field agents' of the Harper organization, acting directly to gather intelligence and eliminate threats to the greater good." />
+    <class level="1" book="Magic of Faerun page 28" name="Harper Mage {Prestige Class}" hd="d?" desc="The Harper mage has two principal responsibilities: They aid the Harpers with spells and arcane knowledge, and they study, record, and pass on ancient lore." />
+    <class level="1" book="Player's Guide to Faerun page 181" name="Harper Paragon {Prestige Class}" hd="d?" desc="A Harper paragon actively promotes the welfare of other creatures while preventing evil forces from preying on innocents." />
+    <class level="1" book="Magic of Faerun page 29" name="Harper Priest {Prestige Class}" hd="d?" desc="Some Harpers choose to pursue a closer relationship to the deities who inspired the creation of the Harpers." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 46" name="Harper Scout {Prestige Class}" hd="d?" desc="Harper scouts are members of the Harpers, a secret society dedicated to holding back evil, preserving knowledge, and maintaining the balance between civilization and the wild." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 47" name="Hathran {Prestige Class}" hd="d?" desc="Hathrans comprise an elite sisterhood of spellcasters who lead Rashemen." />
+    <class level="1" book="Miniatures Handbook page 20" name="Havoc Mage {Prestige Class}" hd="d?" desc="The havoc mage shares as much in common with a fighter as with a wizard." />
+    <class level="1" book="Faiths &amp; Pantheons page 196" name="Heartwarder {Prestige Class}" hd="d?" desc="Heartwarders are aesthetes and hedonists who actively seek out pleasure and beauty in all things and who nurture the creation of beautiful objects." />
+    <class level="1" book="Eberron Campaign Setting page 80" name="Heir Of Siberys {Prestige Class}" hd="d?" desc="The magic of a Siberys mark is undeniably powerful, and an heir of Siberys manifests one." />
+    <class level="1" book="Oriental Adventures page 39" name="Henshin Mystic {Prestige Class}" hd="d?" desc="Henshin mystics are members of a monastic order that teaches what they consider a great mystery of the universe: that humanity is capable of a transformation (henshin) into divinity." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 63" name="Hexer {Prestige Class}" hd="d?" desc="The hexer uses the power of his gaze." />
+    <class level="1" book="Oriental Adventures page 212" name="Hida Defender {Prestige Class}" hd="d?" desc="Hida defenders train in great armor, a unique characteristic that fits in well with the Crab philosophy of strength and endurance." />
+    <class level="1" book="Draconomicon page 94" name="Hidecarved Dragon {Prestige Class}" hd="d?" desc="Hidecarved dragons are members of an enigmatic order of dragons and half-dragons." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 188" name="Hierophant {Prestige Class}" hd="d?" desc="A divine spellcaster who rises high in the service of his deity gains access to spells and abilities of which lesser faithful can only dream." />
+    <class level="1" book="Player's Guide to Eberron page 104" name="High Elemental Binder {Prestige Class}" hd="d?" desc="As a high elemental binder, you can reach into the planes and immediately draw elemental beings into objects -- coating your armor in stone or your blade in fire." />
+    <class level="1" book="Epic Level Handbook page 31" name="High Proselytizer {Prestige Class}" hd="d?" desc="The high proselytizer is the holy inspiration that begins religious movements." />
+    <class level="1" book="Complete Adventurer page 54" name="Highland Stalker {Prestige Class}" hd="d?" desc="Highland stalkers are consummate trackers with an instinctive knowledge of their mountainous territories." />
+    <class level="1" book="Shining South page 32" name="Hin Fist {Prestige Class}" hd="d?" desc="Adapt the sacred fist prestige class from Complete Divineto create a hin fist." />
+    <class level="1" book="Draconomicon page 130" name="Hoardstealer {Prestige Class}" hd="d?" desc="The hoardstealer specializes in relieving wealthy individuals from large amounts of said wealth." />
+    <class level="1" book="Complete Divine page 45" name="Holy Liberator {Prestige Class}" hd="d?" desc="The holy liberator is a holy warrior, a distant cousin of the paladin." />
+    <class level="1" book="Complete Mage page 64" name="Holy Scourge {Prestige Class}" hd="d?" desc="An arcane spellcaster that specializes in blasting evil." />
+    <class level="1" book="Silver Marches page 110" name="Hordebreaker {Prestige Class}" hd="d?" desc="The hordebreaker is a person who makes destroying the horde threat the perfect engine of orc destruction." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 189" name="Horizon Walker {Prestige Class}" hd="d?" desc="The horizon walker is an unceasing traveler to the universe's most dangerous places." />
+    <class level="1" book="Faiths &amp; Pantheons page 197" name="Horned Harbinger {Prestige Class}" hd="d?" desc="The horned harbingers are agents of the fallen Lord of Bones." />
+    <class level="1" book="Complete Divine page 48" name="Hospitaler {Prestige Class}" hd="d?" desc="Hospitalers are a fighting force of necessity, sworn to poverty, obedience, and the defense of those in their care." />
+    <class level="1" book="Complete Warrior page 40" name="Hulking Hurler {Prestige Class}" hd="d?" desc="Hulking hurlers belong to those races of generously proportioned creatures who enjoy nothing more than wrenching boulders, trees, and even buildings free of their earthly bonds and throwing them at their foes." />
+    <class level="1" book="Complete Warrior page 42" name="Hunter Of The Dead {Prestige Class}" hd="d?" desc="The hunter of the dead spends each restless night tracking undead to their lairs and cleansing the land of their foul presence." />
+    <class level="1" book="Oriental Adventures page 41" name="Iaijutsu Master {Prestige Class}" hd="d?" desc="Iaijutsu masters harness their ki energy to strike with blinding speed and devastating power." />
+    <class level="1" book="Draconomicon page 131" name="Iinitiate Of The Draconic Mysteries {Prestige Class}" hd="d?" desc="Some become students of draconic knowledge that leads to greater power." />
+    <class level="1" book="Underdark page 35" name="Illithid Body Tamer {Prestige Class}" hd="d?" desc="Illithids who embrace the Tamer Creed believe that military might is the most important factor in their race's future mastery of the multiverse." />
+    <class level="1" book="Savage Species page 77" name="Illithid Savant {Prestige Class}" hd="d?" desc="The illithid savant is an academic who deals in applied science, acquiring new knowledge from the brains he consumes." />
+    <class level="1" book="Expanded Psionics Handbook page 146" name="Illithid Slayer {Prestige Class}" hd="d?" desc="Illithid slayers have dedicated their lives to the eradication of the mind flayer 'infection.'" />
+    <class level="1" book="Complete Psionic page 33" name="Illumine Soul {Prestige Class}" hd="d?" desc="The illumine soul is a living conduit of positive energy." />
+    <class level="1" book="Underdark page 37" name="Imaskari Vengeance Taker {Prestige Class}" hd="d?" desc="A secret society dedicated to righting wrongs, the Imaskari vengeance takers are trained by hidden masters in the rites and rituals of revenge." />
+    <class level="1" book="Magic of Eberron page 73" name="Impure Prince {Prestige Class}" hd="d?" desc="Of those who make it their special mission to rid the world of aberrations and their masters, only impure princes can claim the distinction of using daelkyr-inspired corruptions and symbionts as their most effective tool in aberration cleansing." />
+    <class level="1" book="Magic of Incarnum page 115" name="Incandescent Champion {Prestige Class}" hd="d?" desc="The incandescent champion seeks to dispense with barriers and obstacles both tangible and intangible so that she can touch the cosmic soul with her unveiled body, mind, and spirit." />
+    <class level="1" book="Magic of Faerun page 31" name="Incantatrix {Prestige Class}" hd="d?" desc="The incantatrixes are the practitioners of metamagic in Faerun, studying spells that affect other spells and having a fondness for magic that thwarts extraplanar beings." />
+    <class level="1" book="Magic of Incarnum page 121" name="Incarnum Blade {Prestige Class}" hd="d?" desc="Using a secret passed down through the generations, the incarnum blade shapes soul energy drawn from the greatest warriors of the past into a special soulmeld that is incorporated into his melee weapon of choice." />
+    <class level="1" book="Book of Exalted Deeds page 64" name="Initiate Of Pistis Sophia {Prestige Class}" hd="d?" desc="The path of these initiates requires great sacrifices (in the form of at least three sacred vows), but brings great rewards of spiritual power." />
+    <class level="1" book="Complete Arcane page 44" name="Initiate Of The Sevenfold Veil {Prestige Class}" hd="d?" desc="A master of defensive magic, the Initiate of the Sevenfold Veil approaches the prismatic barrier by mastering one by one its constituent veils or layers." />
+    <class level="1" book="Underdark page 39" name="Inquisitor Of The Drowning Goddess {Prestige Class}" hd="d?" desc="Some kuo-toa monks go on to become inquisitors of the Drowning Goddess, who are tasked with protecting the community from inside threats." />
+    <class level="1" book="Dragonlance Campaign Setting page 80" name="Inquisitor {Prestige Class}" hd="d?" desc="By definition, an inquisitor is one who inquires, someone who hunts for people, information, or answers." />
+    <class level="1" book="Complete Warrior page 44" name="Invisible Blade {Prestige Class}" hd="d?" desc="Invisible blades are deadly fighters who prefer to use daggers and related weapons in combat." />
+    <class level="1" book="Races of Stone page 114" name="Iron Mind {Prestige Class}" hd="d?" desc="Elite warriors trained to resist mental compulsions of all kinds, members of the iron mind prestige class defend dwarf and gnome kingdoms against intrusions by mind flayers, dark elf enchanters, and the like." />
+    <class level="1" book="Magic of Incarnum page 126" name="Ironsoul Forgemaster {Prestige Class}" hd="d?" desc="Only the ironsoul forgemaster can craft a weapon that combines these arts with the shaping of soul essence." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 113" name="Jade Phoenix Mage {Prestige Class}" hd="d?" desc="Long ago, a fellowship of swordsages known as the Masters of the Jade Phoenix took up the study of arcane magic in search of a new martial discipline." />
+    <class level="1" book="Shining South page 33" name="Jordain Vizier {Prestige Class}" hd="d?" desc="The Jordaini are a special servitor caste, though still upper class, in the magocracy of Halruaa." />
+    <class level="1" book="Champions of Ruin page 48" name="Justice Of Weald And Woe {Prestige Class}" hd="d?" desc="The justice of weald and woe is the go-to person when something unsavory -- usually involving the removal of humans -- needs doing." />
+    <class level="1" book="Deities and Demigods page 205" name="Justiciar Of Taiia {Prestige Class}" hd="d?" desc="Justiciars of Taiia fulfill the role of carrying out Taiia's sentence against wrongdoers." />
+    <class level="1" book="Player's Guide to Faerun page 63" name="Justiciar Of Tyr {Prestige Class}" hd="d?" desc="Justiciars are the very elite of Tyr's mortal servants, and they act as living embodiments of their god's portfolio." />
+    <class level="1" book="Complete Warrior page 47" name="Justiciar {Prestige Class}" hd="d?" desc="Justiciars make a living kicking the daylights out of criminals who desperately deserve it." />
+    <class level="1" book="Lords of Madness page 194" name="Keeper Of The Cerulean Sign {Prestige Class}" hd="d?" desc="The Cerulean Sign is an ancient rune of power, created untold eons ago by a race or deity long since vanished; now it has keepers." />
+    <class level="1" book="Complete Warrior page 49" name="Kensai {Prestige Class}" hd="d?" desc="The kensai masters body, mind, weapon, and will." />
+    <class level="1" book="Oriental Adventures page 42" name="Kishi Charger {Prestige Class}" hd="d?" desc="Kishi chargers are cavalry soldiers trained to make the greatest possible use of a horse's speed and a rider's agility." />
+    <class level="1" book="City of Splendors: Waterdeep page 81" name="Knight Of The Blue Moon {Prestige Class}" hd="d?" desc="Knights of the Blue Moon are elite soldiers in the endless battle against the Mistress of the Night." />
+    <class level="1" book="Complete Warrior page 53" name="Knight Of The Chalice {Prestige Class}" hd="d?" desc="The knight of the Chalice is a member of an elite knightly organization devoted to fighting demons and other evil outsiders." />
+    <class level="1" book="Dragonlance Campaign Setting page 56" name="Knight Of The Crown {Prestige Class}" hd="d?" desc="The Order of the Crown is the first tier of the Solamnic Knights." />
+    <class level="1" book="CoV page 106" name="Knight Of The Flying Hunt {Prestige Class}" hd="d?" desc="Defenders of Nimbral, protectors of the island realm's quiet, simple folk, noble soldiers answering to the powerful but mysterious Nimbral Lords -- the Knights of the Flying Hunt epitomize valor and grace in word, deed, and bearing." />
+    <class level="1" book="Frostburn page 62" name="Knight Of The Iron Glacier {Prestige Class}" hd="d?" desc="The Knights of the Iron Glacier continue to honor the memory of General Aengrist in their deeds and actions." />
+    <class level="1" book="Dragonlance Campaign Setting page 63" name="Knight Of The Lily {Prestige Class}" hd="d?" desc="The Knights of the Lily are the order of warriors within the Knights of Neraka." />
+    <class level="1" book="Defenders of the Faith: A Guidebook to Clerics and Paladins page 65" name="Knight Of The Middle Circle {Prestige Class}" hd="d?" desc="Knights of the Middle Circle provide security for Stargazer chapterhouses and may be called upon for similar service for allies of the Stargazers." />
+    <class level="1" book="Stormwrack page 52" name="Knight Of The Pearl {Prestige Class}" hd="d?" desc="The knight of the pearl is a loyal defender of the aventi people, dedicated to the service of Aventernus and his appointed kings." />
+    <class level="1" book="Expedition to Castle Ravenloft page 200" name="Knight Of The Raven {Prestige Class}" hd="d?" desc="Before evil descended on the land of Barovia, it was home to an order of virtuous champions, the Knights of the Raven." />
+    <class level="1" book="Dragonlance Campaign Setting page 59" name="Knight Of The Rose {Prestige Class}" hd="d?" desc="The Knights of the Rose are the highest tier of the Solamnic Knights." />
+    <class level="1" book="Tome of Magic page 54" name="Knight Of The Sacred Seal {Prestige Class}" hd="d?" desc="A knight of the sacred seal is never alone because she has formed a true partnership with a single vestige." />
+    <class level="1" book="Dragonlance Campaign Setting page 65" name="Knight Of The Skull {Prestige Class}" hd="d?" desc="Entering battle with strength and divine magic, Knights of the Skull are the spirit of the Dark Knights." />
+    <class level="1" book="Dragonlance Campaign Setting page 58" name="Knight Of The Sword {Prestige Class}" hd="d?" desc="Knights of the Sword are warriors of the Solamnic Knights who fight with power and faith to defend justice and truth." />
+    <class level="1" book="Dragonlance Campaign Setting page 66" name="Knight Of The Thorn {Prestige Class}" hd="d?" desc="The Knights of the Thorn are also known as the 'gray robes' for the ash-colored robes they wear to indicate that they do not serve the Orders of High Sorcery." />
+    <class level="1" book="CoV page 111" name="Knight Of The Weave {Prestige Class}" hd="d?" desc="Members of this mystic order of sacred defenders cherish the Weave like a fine wine." />
+    <class level="1" book="FN page 41" name="Knight Phantom {Prestige Class}" hd="d?" desc="The knight phantom prestige class takes capable wizards and gradually turns them into capable melee fighters, without slowing their spellcasting too much." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 24" name="Knight Protector Of The Great Kingdom {Prestige Class}" hd="d?" desc="Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever." />
+    <class level="1" book="Complete Warrior page 55" name="Knight Protector {Prestige Class}" hd="d?" desc="Knight protectors are martial characters dedicated to restoring the ideals of knightly chivalry before they fade forever." />
+    <class level="1" book="Secrets of Xen'drik page 123" name="Landforged Walker {Prestige Class}" hd="d?" desc="Even as they speak for nature, landforged walkers coax the living bounty of the earth to grow on their metal hides, drawing power from the environment around them." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 25" name="Lasher {Prestige Class}" hd="d?" desc="The lasher prestige class uses the whip as an extension of herself." />
+    <class level="1" book="WL page 19" name="Legacy Champion {Prestige Class}" hd="d?" desc="You are so devoted to the history and chronicle of a particular item of legacy that you enjoy enhanced access to your item's legacy abilities." />
+    <class level="1" book="Stormwrack page 56" name="Legendary Captain {Prestige Class}" hd="d?" desc="A legendary captain might be the commander of a fleet's flagship or a bloodthirsty pirate, but whatever the role, her reputation is widespread and her crew fanatically loyal." />
+    <class level="1" book="Epic Level Handbook page 33" name="Legendary Dreadnought {Prestige Class}" hd="d?" desc="The legendary dreadnought is the ultimate foot soldier, an absolute force of destruction, a total warrior who excels at sheer combat prowess." />
+    <class level="1" book="Heroes of Battle page 107" name="Legendary Leader {Prestige Class}" hd="d?" desc="Legendary leaders are the stuff of bards' tales come to life." />
+    <class level="1" book="Dragonlance Campaign Setting page 81" name="Legendary Tactician {Prestige Class}" hd="d?" desc="Legendary tacticians are respected (or feared) for their ability to inspire their troops." />
+    <class level="1" book="Stormwrack page 61" name="Leviathan Hunter {Prestige Class}" hd="d?" desc="The leviathan hunter is dedicated to hunting down creatures of the perilous depths." />
+    <class level="1" book="Book of Vile Darkness page 63" name="Lifedrinker {Prestige Class}" hd="d?" desc="Lifedrinkers are vampires who have been undead for a very long time." />
+    <class level="1" book="Expedition to Castle Ravenloft page 204" name="Lightbringer {Prestige Class}" hd="d?" desc="The Lightbringers are an expansive guild of undead hunters that readily hands out charter memberships to anyone who wants to stamp out undead." />
+    <class level="1" book="Book of Exalted Deeds page 65" name="Lion Of Talisid {Prestige Class}" hd="d?" desc="The lions of Talisid protect nature and emulate their patron in more concrete ways." />
+    <class level="1" book="Sandstorm page 70" name="Lord Of Tides {Prestige Class}" hd="d?" desc="A lord of tides can sense the movement of magma, summon beings of elemental might, and open portals to the Elemental Planes." />
+    <class level="1" book="Races of Destiny page 117" name="Loredelver {Prestige Class}" hd="d?" desc="Loredelvers are illumian spellcasters who find and explore ruins, disable the magical protections that guard them, and sift through the ancient secrets found within." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 191" name="Loremaster {Prestige Class}" hd="d?" desc="Loremasters are spellcasters who concentrate on knowledge, valuing lore and secrets over gold." />
+    <class level="1" book="Races of the Wild page 118" name="Luckstealer {Prestige Class}" hd="d?" desc="As a luckstealer, you're part spellcaster, part professional gambler -- and 100% mischief-maker." />
+    <class level="1" book="Shining South page 35" name="Luiren Marchwarden {Prestige Class}" hd="d?" desc="The Luiren marchwarden is the defender of the frontier in the land of the halflings." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 54" name="Lurking Terror {Prestige Class}" hd="d?" desc="Lurking terrors are the quintessential hunting undead, displaying great prowess with their special abilities and amazing powers of stealth." />
+    <class level="1" book="Complete Mage page 67" name="Lyric Thaumaturge {Prestige Class}" hd="d?" desc="A bard with enhanced spellcasting prowess." />
+    <class level="1" book="Complete Adventurer page 56" name="Maester {Prestige Class}" hd="d?" desc="Maesters are the master crafters of the gnome world." />
+    <class level="1" book="Complete Arcane page 48" name="Mage Of The Arcane Order {Prestige Class}" hd="d?" desc="Also called a 'guildmage,' a member of this prestige class is a spellcaster who belongs to an academy and guild known as the Arcane Order." />
+    <class level="1" book="Lost Empires of Faerun page 17" name="Magelord {Prestige Class}" hd="d?" desc="Quick to anger, haughty, and proud of his Art, the magelord is an arcane spellcaster who studies an ancient magical tradition known for extremely fast and versatile spellcasting" />
+    <class level="1" book="Player's Guide to Faerun page 182" name="Maiden Of Pain {Prestige Class}" hd="d?" desc="Loviatar's most dedicated servants, the maidens of pain, are depraved women who literally make pain their meat and drink." />
+    <class level="1" book="Oriental Adventures page 231" name="Mantis Mercenary {Prestige Class}" hd="d?" desc="Mantis mercenaries make use of peasant weapons and a rolling motion." />
+    <class level="1" book="Shining South page 38" name="Maquar Crusader {Prestige Class}" hd="d?" desc="A Maquar crusader follows a strict code of conduct that not only limits what he can own or where he can live, but also limits the ways in which merchants can influence him." />
+    <class level="1" book="Player's Guide to Faerun page 184" name="Martyred Champion Of Ilmater {Prestige Class}" hd="d?" desc="Having already offered his life in sacrifice once, the martyred champion of Ilmater perseveres in Ilmater's faith." />
+    <class level="1" book="Magic of Faerun page 34" name="Master Alchemist {Prestige Class}" hd="d?" desc="The master alchemist is a spellcaster who specializes in producing potions and elixirs that reproduce the effects of spells of 4th level or higher." />
+    <class level="1" book="Eberron Campaign Setting page 82" name="Master Inquisitive {Prestige Class}" hd="d?" desc="The master inquisitive takes the art of investigation and deduction to the ultimate level, rising to the top of the field." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 27" name="Master Of Chains {Prestige Class}" hd="d?" desc="The master of chains is a combatant specializing in the use of chains -- specifically the spiked chain -- as a weapon." />
+    <class level="1" book="Savage Species page 80" name="Master Of Flies {Prestige Class}" hd="d?" desc="The master of flies is an intelligent swarm that can form a massive being at need, or a single creature that can dissolve into a cloud of vermin." />
+    <class level="1" book="Complete Adventurer page 58" name="Master Of Many Forms {Prestige Class}" hd="d?" desc="A master of many forms has no shape that she calls her own." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 119" name="Master Of Nine {Prestige Class}" hd="d?" desc="Some savants of the Nine Disciplines believe that none of the paths are complete, true disciplines in and of themselves." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 44" name="Master Of Radiance {Prestige Class}" hd="d?" desc="Masters of radiance channel the pure, undiluted power of the sun." />
+    <class level="1" book="Tome of Magic page 121" name="Master Of Shadow {Prestige Class}" hd="d?" desc="Some driven or domineering souls seek nothing less than mastery of darkness itself -- the ability to turn the very shadows into their agents and allies." />
+    <class level="1" book="Defenders of the Faith: A Guidebook to Clerics and Paladins page 66" name="Master Of Shrouds {Prestige Class}" hd="d?" desc="The master of shrouds is an evil spellcaster who magically seizes incorporeal undead and sets them to do her bidding." />
+    <class level="1" book="Complete Warrior page 60" name="Master Of The Unseen Hand {Prestige Class}" hd="d?" desc="Masters of the unseen hand delight in crushing their foes with invisible force, flinging massive objects into the sky, and disarming enemies with a single thought." />
+    <class level="1" book="Unapproachable East page 24" name="Master Of The Yuirwood {Prestige Class}" hd="d?" desc="The masters of the Yuirwood are an elite group of foresters who work to keep the ancient Yuirwood free of evil influence." />
+    <class level="1" book="Serpent Kingdoms page 163" name="Master Of Vipers {Prestige Class}" hd="d?" desc="Outcast yuan-ti learn to hunt not only to feed themselves, but also to spread destruction far and wide for the pure pleasure of it." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 29" name="Master Samurai {Prestige Class}" hd="d?" desc="The master samurai is a military retainer of a feudal overlord; he practices a code of behavior that emphasizes the value of personal honor over life itself." />
+    <class level="1" book="Complete Mage page 70" name="Master Specialist {Prestige Class}" hd="d?" desc="A wizard with greater mastery over a school of specialization." />
+    <class level="1" book="Complete Warrior page 58" name="Master Thrower {Prestige Class}" hd="d?" desc="Master throwers depend on quick reflexes, good planning, and deadly aim." />
+    <class level="1" book="Complete Arcane page 51" name="Master Transmogrifist {Prestige Class}" hd="d?" desc="The master transmogrifist is a sorcerer or wizard who has chosen to specialize in spells that change his form." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 55" name="Master Vampire {Prestige Class}" hd="d?" desc="Any vampire can create spawn, but it takes a very special vampire to rule over an entire gang of minions." />
+    <class level="1" book="Races of Destiny page 123" name="Menacing Brute {Prestige Class}" hd="d?" desc="The menacing brute takes advantage of how must humans fear half-orcs, playing on that dread to make his living." />
+    <class level="1" book="Power of Faerun page 71" name="Merchant Prince {Prestige Class}" hd="d?" desc="A merchant prince (known as a merchant princess if female) is a member of the merchant nobility who has acquired his position and wealth either by being born into a wealthy family or by earning every last coin himself." />
+    <class level="1" book="Expanded Psionics Handbook page 147" name="Metamind {Prestige Class}" hd="d?" desc="Metaminds know that accumulating the most power in the shortest time is the key to psionic superiority." />
+    <class level="1" book="Complete Arcane page 54" name="Mindbender {Prestige Class}" hd="d?" desc="Mindbenders seek to control the thoughts and dreams of others." />
+    <class level="1" book="Complete Warrior page 62" name="Mindspy {Prestige Class}" hd="d?" desc="By reading the minds of her enemies, a mindspy knows exactly what they're going to do a fraction of a second before they do it." />
+    <class level="1" book="Oriental Adventures page 218" name="Mirumoto Niten Master {Prestige Class}" hd="d?" desc="The Mirumoto school teaches a unique style of swordplay, rooted in this sense of duty." />
+    <class level="1" book="Player's Guide to Faerun page 65" name="Monk Of The Long Death {Prestige Class}" hd="d?" desc="Monks of the long death are members of a macabre, secretive order of scholars seeking to understand the true nature of death." />
+    <class level="1" book="CoV page 117" name="Moonsea Skysentinel {Prestige Class}" hd="d?" desc="Moonsea skysentinels are the eyes in the sky for the Knights of the North, scouting the landscape, looking for evidence of Zhentarim activity." />
+    <class level="1" book="Races of Eberron page 143" name="Moonspeaker {Prestige Class}" hd="d?" desc="Bound to the magic of their lycanthrope ancestors, moonspeakers breathe the magic of the world, guided by the twelve moons of Eberron." />
+    <class level="1" book="City of Splendors: Waterdeep page 84" name="Moonstar Agent {Prestige Class}" hd="d?" desc="Moonstar agents, also known as Teukiir, are members of the Tel Teukiira, a group founded by Khelben 'Blackstaff' Arunsun when he broke from the Harpers." />
+    <class level="1" book="Player's Guide to Faerun page 66" name="Morninglord Of Lathander {Prestige Class}" hd="d?" desc="Morninglords are, in many ways, the epitome of the classical cleric archetype." />
+    <class level="1" book="Book of Vile Darkness page 64" name="Mortal Hunter {Prestige Class}" hd="d?" desc="Mortal hunters are fiends who specialize in killing mortals." />
+    <class level="1" book="Oriental Adventures page 228" name="Moto Avenger {Prestige Class}" hd="d?" desc="The Moto avenger is dedicated to a war against the Shadowlands and its evils." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 192" name="Mystic Theurge {Prestige Class}" hd="d?" desc="Blurring the line between divine and arcane, mystic theurges draw power from divine sources and musty tomes alike." />
+    <class level="1" book="Magic of Faerun page 35" name="Mystic Wanderer {Prestige Class}" hd="d?" desc="Mystic wanderers are divine spellcasters who eschew normal church hierarchies and instead embrace freedom, wanderlust, and independence." />
+    <class level="1" book="Serpent Kingdoms page 165" name="Naga Overlord {Prestige Class}" hd="d?" desc="Naga overlords are evil masterminds who operate in secret, usually behind cults of devoted followers." />
+    <class level="1" book="Unapproachable East page 25" name="Nar Demonbinder {Prestige Class}" hd="d?" desc="Master of the black art of demon summoning, the Nar demonbinder keeps alive the sinister traditions of the old Empire of Narfell." />
+    <class level="1" book="Magic of Incarnum page 132" name="Necrocarnate {Prestige Class}" hd="d?" desc="Dealers in death and torturers of souls, necrocarnates number among the most evil creatures in any world." />
+    <class level="1" book="Unapproachable East page 28" name="Nentyar Hunter {Prestige Class}" hd="d?" desc="Sworn to defend the great forests and serve the Nentyarch, druidic ruler of the Circle of Leth, the Nentyar hunters roam the wild lands of the East, uprooting foul and evil things." />
+    <class level="1" book="Champions of Ruin page 53" name="Night Mask Deathbringer {Prestige Class}" hd="d?" desc="Night Mask deathbringers are highly trained members of the Westgate thieves' guild who have caught the favorable attention of the vampires in charge of the organization." />
+    <class level="1" book="Faiths &amp; Pantheons page 198" name="Nightcloak {Prestige Class}" hd="d?" desc="Nightcloaks are the apple of Shar's eye -- devoted to her vision, preserving her secrets, practicing her magic, as twisted and bitter as it is." />
+    <class level="1" book="Complete Mage page 74" name="Nightmare Spinner {Prestige Class}" hd="d?" desc="An arcane spellcaster who weaves fear into illusions." />
+    <class level="1" book="Complete Adventurer page 60" name="Nightsong Enforcer {Prestige Class}" hd="d?" desc="The enforcers of the Nightsong Guild focus on the stealth-centered combat training that rogues usually learn." />
+    <class level="1" book="Complete Adventurer page 62" name="Nightsong Infiltrator {Prestige Class}" hd="d?" desc="The nightsong infiltrator is the perfect thief and the perfect spy." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 30" name="Ninja Of The Crescent Moon {Prestige Class}" hd="d?" desc="The Ninja of the Crescent Moon is a mercenary clan whose members engage in sabotage and other covert missions for an outlandish fee." />
+    <class level="1" book="Oriental Adventures page 43" name="Ninja Spy {Prestige Class}" hd="d?" desc="True ninja spies are masters of exotic weapons, tools of stealth, and strange ki powers." />
+    <class level="1" book="Tome of Magic page 125" name="Noctumancer {Prestige Class}" hd="d?" desc="Noctumancers bridge the gap between shadow and arcane magic." />
+    <class level="1" book="Complete Warrior page 66" name="Occult Slayer {Prestige Class}" hd="d?" desc="The occult slayer is driven to confront any arcane or divine spellcaster who crosses her path." />
+    <class level="1" book="Faiths &amp; Pantheons page 200" name="Ocular Adept {Prestige Class}" hd="d?" desc="Ocular adepts have pledged their religious devotions to the alien entity known as the Great Mother, the deity matron of all beholders." />
+    <class level="1" book="Lost Empires of Faerun page 21" name="Olin Gisir {Prestige Class}" hd="d?" desc="The Olin Gisiae are elite elf mages who have taken it upon themselves to guard dark secrets from the rest of the world" />
+    <class level="1" book="Complete Adventurer page 66" name="Ollam {Prestige Class}" hd="d?" desc="In Dwarven, the world 'ollam' means teacher." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 67" name="Oozemaster {Prestige Class}" hd="d?" desc="Oozemasters relate one-on-one with things that relate to nothing at all." />
+    <class level="1" book="Silver Marches page 114" name="Orc Scout {Prestige Class}" hd="d?" desc="Part wilderness warrior and part spy, the orc scout is a hero to his people." />
+    <class level="1" book="Races of Faerun page 184" name="Orc Warlord {Prestige Class}" hd="d?" desc="The orc warlord is a savage general of an unruly army, the leader of one of the deadly and all too common orc hordes that rampage down from the Spine of the World." />
+    <class level="1" book="Complete Warrior page 68" name="Order Of The Bow Initiate {Prestige Class}" hd="d?" desc="By learning the meditative art of the Way of the Bow, the archer improves his discipline, precision, and spirituality." />
+    <class level="1" book="Races of Destiny page 126" name="Outcast Champion {Prestige Class}" hd="d?" desc="Outcast champions bring hope to those who have no place in society." />
+    <class level="1" book="Song and Silence: A Guidebook to Bards and Rogues page 10" name="Outlaw Of The Crimson Road {Prestige Class}" hd="d?" desc="An outlaw of the crimson road might be a revolutionary, a loyal supporter of some deposed ruler, or merely an ordinary individual who angered the wrong person at the wrong time." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 47" name="Pale Master {Prestige Class}" hd="d?" desc="Arcane casters can become pale masters, who draw on necromantic lore that provides a macabre power all its own." />
+    <class level="1" book="Silver Marches page 115" name="Peerless Archer {Prestige Class}" hd="d?" desc="The peerless archer devotes her life to perfecting her skill with the bow." />
+    <class level="1" book="Races of Stone page 116" name="Peregrine Runner {Prestige Class}" hd="d?" desc="When goliaths need to send a message to another tribe, they send an elite, fleet-of-foot warrior known as a peregrine runner." />
+    <class level="1" book="Epic Level Handbook page 34" name="Perfect Wight {Prestige Class}" hd="d?" desc="The perfect wight is a master of skulking, the ultimate prowler and thief." />
+    <class level="1" book="Complete Divine page 50" name="Pious Templar {Prestige Class}" hd="d?" desc="Sworn to the defense of a temple site, the pious templar is a holy warrior blessed by her deity with combat prowess and great endurance." />
+    <class level="1" book="Manual of the Planes page 28" name="Planar Champion {Prestige Class}" hd="d?" desc="The planar champion moves between the planes, always driven to battle." />
+    <class level="1" book="Faiths of Eberron page 105" name="Planar Shepherd {Prestige Class}" hd="d?" desc="Some druids, especially among the Greensingers or those who have dealt extensively with that sect, reject narrow interpretations of what constitutes the natural world." />
+    <class level="1" book="Manual of the Planes page 30" name="Planeshifter {Prestige Class}" hd="d?" desc="The planeshifter is a magical scholar and expert in planar travel, and through arcane research develops not only the ability to sense planar portals, but also the ability to create his own demiplane." />
+    <class level="1" book="Draconomicon page 133" name="Platinum Knight {Prestige Class}" hd="d?" desc="The platinum knight protects good-aligned dragonkind from their natural enemies." />
+    <class level="1" book="Unearthed Arcana page 69" name="Prestige Bard {Prestige Class}" hd="d?" desc="The prestige bard is a jack-of-all-trades, master of none." />
+    <class level="1" book="Unearthed Arcana page 70" name="Prestige Paladin {Prestige Class}" hd="d?" desc="After training in the arts of combat and the mysteries of the divine, the prestige paladin is anointed as a holy warrior dedicated to the protection of law and goodness." />
+    <class level="1" book="Unearthed Arcana page 71" name="Prestige Ranger {Prestige Class}" hd="d?" desc="The prestige ranger navigates the dark forests, craggy mountains, or desert wastes of her homeland with unparalleled skill." />
+    <class level="1" book="Secrets of Xen'drik page 127" name="Primal Scholar {Prestige Class}" hd="d?" desc="Primal scholars are spellcasters bent on uncovering and mastering the ancient magic that lies buried in the jungles, deserts, and mountains of Xen'drik." />
+    <class level="1" book="Underdark page 40" name="Prime Underdark Guide {Prestige Class}" hd="d?" desc="These skilled guides not only know how to overcome the physical challenges of the Underdark, but they also can help them over the social and cultural hurdles they are sure to face." />
+    <class level="1" book="Frostburn page 65" name="Primeval {Prestige Class}" hd="d?" desc="The primeval is a warrior who has tapped into his racial memories to find and forge a bond with an ancient creature." />
+    <class level="1" book="Book of Exalted Deeds page 66" name="Prophet Of Erathaoi {Prestige Class}" hd="d?" desc="The prophet of Erathaoi is a seer and visionary, a medium of the heavenly will, pronouncing judgment on corruption and evil in the world." />
+    <class level="1" book="Expanded Psionics Handbook page 148" name="Psion Uncarnate {Prestige Class}" hd="d?" desc="Formless, fleshless, and unbound by the limits of corporeality -- this is the goal of every psion uncarnate." />
+    <class level="1" book="Heroes of Horror page 108" name="Purifier Of The Hallowed Doctrine {Prestige Class}" hd="d?" desc="Purifiers of the Hallowed Doctrine consider themselves servants not of gods but of the spiritual well-being of the world itself." />
+    <class level="1" book="Complete Warrior page 70" name="Purple Dragon Knight {Prestige Class}" hd="d?" desc="Purple Dragon knights develop uncanny skills related to coordinating and leading soldiers." />
+    <class level="1" book="Expanded Psionics Handbook page 151" name="Pyrokineticist {Prestige Class}" hd="d?" desc="Pyrokineticists know that a little psionic power goes a long way -- for those interested in fire." />
+    <class level="1" book="Magic of Eberron page 77" name="Quori Mindhunter {Prestige Class}" hd="d?" desc="The quori mindhunter has a single mission: to hunt down and destroy the quori spirits that corrupt humanity, and the possessed Inspired that further the aims of the Dreaming Dark." />
+    <class level="1" book="Races of Eberron page 148" name="Quori Nightmare {Prestige Class}" hd="d?" desc="The quori nightmare taps into the primal horrors and urges of the subconscious." />
+    <class level="1" book="Complete Divine page 52" name="Radiant Servant Of Pelor {Prestige Class}" hd="d?" desc="The radiant servants of Pelor put the dogma of demonstrating strength through charity and modesty into living practice." />
+    <class level="1" book="Complete Warrior page 72" name="Rage Mage {Prestige Class}" hd="d?" desc="The rage mage's approach to magic is based on the primal passion of magic more than the studious quasi-scientific approach." />
+    <class level="1" book="Complete Divine page 54" name="Rainbow Servant {Prestige Class}" hd="d?" desc="Those who have learned what the couatl temples have to offer are known as rainbow servants." />
+    <class level="1" book="Unapproachable East page 29" name="Raumathari Battlemage {Prestige Class}" hd="d?" desc="Employing sword and spell with dauntless courage and deadly force, the handful of Raumathari battlemages remaining in the world comprise a lonely and little-known order of adventurers, explorers, and mercenaries in search of battle." />
+    <class level="1" book="Complete Warrior page 73" name="Ravager {Prestige Class}" hd="d?" desc="The infamous ravager has dedicated himself to the service of Erythnul, deity of slaughter." />
+    <class level="1" book="Races of Eberron page 153" name="Reachrunner {Prestige Class}" hd="d?" desc="Known for their mastery of the untamed world, some shifters rise above others in woodslore, physical ability, and stamina to claim the revered mantle of the reachrunner -- the greatest of shifter trackers and scouts." />
+    <class level="1" book="Complete Warrior page 75" name="Reaping Mauler {Prestige Class}" hd="d?" desc="Reaping maulers are the back-breakers, the limb-twisters, and the neck-snappers among pit fighters." />
+    <class level="1" book="Races of Eberron page 157" name="Recaster {Prestige Class}" hd="d?" desc="To the recaster, the change her own body is capable of is a simple reflection of the mutability of the world around her." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 34" name="Red Avenger {Prestige Class}" hd="d?" desc="The Red Avenger is the master of ki,an ancient and formidable discipline that allows the user to accomplish the extraordinary." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 193" name="Red Wizard {Prestige Class}" hd="d?" desc="The Red Wizards are the masters of Thay, the would-be magical overlords of the land of Faerun." />
+    <class level="1" book="Races of Eberron page 161" name="Reforged {Prestige Class}" hd="d?" desc="The reforged represents the realized ideal of the warforged's living aspects." />
+    <class level="1" book="Magic of Eberron page 81" name="Renegade Mastermaker {Prestige Class}" hd="d?" desc="A renegade mastermaker applies the secrets of warforged creation methods to his own body, slowly replacing parts of his body with mechanical augmentations." />
+    <class level="1" book="Player's Guide to Eberron page 108" name="Revenant Blade {Prestige Class}" hd="d?" desc="The revenant blade is a Valenar elf who can draw on the skills of ancient heroes, the giant-slayers of Xen'drik." />
+    <class level="1" book="Dragonlance Campaign Setting page 83" name="Righteous Zealot {Prestige Class}" hd="d?" desc="The righteous zealot is a person with a cause that directs every aspect of life." />
+    <class level="1" book="Frostburn page 67" name="Rimefire Witch {Prestige Class}" hd="d?" desc="A rimefire witch is one who has followed a mysterious call to the core of a rimefire iceberg and becomes infused with great power by the rimefire eidolon." />
+    <class level="1" book="Book of Exalted Deeds page 68" name="Risen Martyr {Prestige Class}" hd="d?" desc="A risen martyr is an exalted character who continues in his earthly existence after his martyrdom in order to finish some unfinished task." />
+    <class level="1" book="Complete Warrior page 77" name="Ronin {Prestige Class}" hd="d?" desc="A ronin is a masterless warrior cast adrift in the world, but still clinging to the remnants of his former life." />
+    <class level="1" book="Song and Silence: A Guidebook to Bards and Rogues page 13" name="Royal Explorer {Prestige Class}" hd="d?" desc="Some monarchs sponser crack teams of explorers." />
+    <class level="1" book="Races of the Wild page 122" name="Ruathar {Prestige Class}" hd="d?" desc="Also known as 'elf-friend' or 'star-friend,' a ruathar is a person of some other race who has earned the special friendship of the elven folk." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 122" name="Ruby Knight Vindicator {Prestige Class}" hd="d?" desc="The Ruby Knights are a crusader order in the service of Wee Jas, goddess of death and magic." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 51" name="Runecaster {Prestige Class}" hd="d?" desc="Those that choose to master the ability to create runes of power are runecasters." />
+    <class level="1" book="Unapproachable East page 31" name="Runescarred Berserker {Prestige Class}" hd="d?" desc="Deadly barbarians who bear magical runes carved into their flesh, runescarred berserkers are among the most feared of Rashemen's defenders." />
+    <class level="1" book="Races of Stone page 118" name="Runesmith {Prestige Class}" hd="d?" desc="A runesmith has learned to harness the power of runes and can fling fireballsand other staple arcane spells even while encased in full plate armor." />
+    <class level="1" book="Complete Divine page 56" name="Sacred Exorcist {Prestige Class}" hd="d?" desc="Sacred exorcists hope to drive away the spiritual forces of evil, prevening them from causing harm to the bodies and souls of humanity." />
+    <class level="1" book="Complete Divine page 59" name="Sacred Fist {Prestige Class}" hd="d?" desc="Sacred fists are independent organizations found within many temples." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 49" name="Sacred Purifier {Prestige Class}" hd="d?" desc="Sacred purifiers are priestly characters who specialize in destroying undead." />
+    <class level="1" book="Draconomicon page 96" name="Sacred Warder Of Bahamut {Prestige Class}" hd="d?" desc="Sacred warders of Bahamut protect others from the power of Tiamat's brood." />
+    <class level="1" book="Lords of Madness page 198" name="Sanctified Mind {Prestige Class}" hd="d?" desc="A sanctified mind believes that all evil-aligned psionics-using creatures must be crushed." />
+    <class level="1" book="Sandstorm page 76" name="Sand Shaper {Prestige Class}" hd="d?" desc="Sand shapers are part prophet, part priest, part magician, and part assassin." />
+    <class level="1" book="Magic of Incarnum page 136" name="Sapphire Hierarch {Prestige Class}" hd="d?" desc="The elite members of an order of priests of law defend the temple, contemplate the mysteries of the Sapphire Eidolon, and seek to fulfill its single command by perfecting themselves and bringing order out of chaos wherever they find it." />
+    <class level="1" book="Lords of Madness page 21" name="Savant Aboleth {Prestige Class}" hd="d?" desc="Savant aboleths are the eldest, most intelligent, wisest and most forceful of personality." />
+    <class level="1" book="Savage Species page 83" name="Scaled Horror {Prestige Class}" hd="d?" desc="Scaled horrors are elite amphibious soldiers." />
+    <class level="1" book="Races of Destiny page 130" name="Scar Enforcer {Prestige Class}" hd="d?" desc="Scar enforcers are angry, embittered half-elves who have rejected both sides of their ancestry." />
+    <class level="1" book="Stormwrack page 65" name="Scarlet Corsair {Prestige Class}" hd="d?" desc="The scarlet corsair relies on the reputation of her quick blade and terrible fighting skills to drive her prey before her." />
+    <class level="1" book="Tome of Magic page 59" name="Scion Of Dantalion {Prestige Class}" hd="d?" desc="The scions believe that their destiny is to one day take up the crown of a long-forgotten human empire, bear the scepter of rulership, and rebuild the empire that could rival the stars." />
+    <class level="1" book="Sandstorm page 86" name="Scorpion Heritor {Prestige Class}" hd="d?" desc="Scorpion heritors, through a special relationship with the scorpion spirit, gain the mystical abilities of the scorpion, and can even take its shape." />
+    <class level="1" book="Secrets of Xen'drik page 130" name="Scorpion Wraith {Prestige Class}" hd="d?" desc="Scorpion wraiths are the elite warriors of the drow." />
+    <class level="1" book="Shining South page 40" name="Scourge Maiden {Prestige Class}" hd="d?" desc="Scourge maidens are warrior-priestesses of Loviatar dedicated to pain and anguish." />
+    <class level="1" book="Underdark page 42" name="Sea Mother Whip {Prestige Class}" hd="d?" desc="Devout worshipers of Blibdoolpoolp who seek closer communion with the Sea Mother often gain additional abilities in the Sea Mother whip prestige class." />
+    <class level="1" book="Stormwrack page 68" name="Sea Witch {Prestige Class}" hd="d?" desc="A sea witch is a terrible chaotic mage who wields the powers of water and calls on the living horrors of the deep." />
+    <class level="1" book="Complete Divine page 61" name="Seeker Of The Misty Isle {Prestige Class}" hd="d?" desc="Seekers search for the lost elves of Misty Isle." />
+    <class level="1" book="Complete Arcane page 56" name="Seeker Of The Song {Prestige Class}" hd="d?" desc="Seekers of the song wield the power of music in ways that amaze even the most skilled bards." />
+    <class level="1" book="Book of Exalted Deeds page 69" name="Sentinel Of Bharrai {Prestige Class}" hd="d?" desc="Respect for the power of nature, the desire to further the ends of good, and the resolve to destroy evil are the core beliefs of a sentinel of Bharrai." />
+    <class level="1" book="Serpent Kingdoms page 166" name="Serpent Slayer {Prestige Class}" hd="d?" desc="Some individuals devote their entire lives to thwarting the yuan-ti." />
+    <class level="1" book="Player's Guide to Faerun page 71" name="Shaaryan Hunter {Prestige Class}" hd="d?" desc="On the backs of their swift horses, Shaaryan hunters can run down even the fastest prey and either spear it with a lance or pelt it with arrows from horseback." />
+    <class level="1" book="Champions of Ruin page 58" name="Shade Hunter {Prestige Class}" hd="d?" desc="The shade hunter is a breed of adventurer who lives for the thrill of finding lost treasure, defeating ancient traps, and surviving deadly curses laid by the priests of dead gods." />
+    <class level="1" book="Forgotten Realms Campaign Setting page 52" name="Shadow Adept {Prestige Class}" hd="d?" desc="Shadow adepts hurl themselves into the abyss of the Shadow Weave, immediately acquiring all the gifts available to casual students and discovering secrets unavailable to all but the most dedicated." />
+    <class level="1" book="Oriental Adventures page 44" name="Shadow Scout {Prestige Class}" hd="d?" desc="The camouflage of a tiger, the stamina of a horse, the eyes of an eagle: these are the ingredients of the shadow scouts." />
+    <class level="1" book="Races of Destiny page 137" name="Shadow Sentinel {Prestige Class}" hd="d?" desc="Shadow sentinels are elite illumian warriors who protect their people from githyanki raiders, demonic invastions, and hordes of barely imaginable monsters from the Plane of Shadow." />
+    <class level="1" book="Tome of Battle: The Book of Nine Swords page 126" name="Shadow Sun Ninja {Prestige Class}" hd="d?" desc="A Shadow Sun ninja is a martial artist who studies the balance between good and evil, light and dark." />
+    <class level="1" book="Player's Guide to Faerun page 74" name="Shadow Thief Of Amn {Prestige Class}" hd="d?" desc="A shadow thief of Amn knows only her own minions, her coworkers, and her superior." />
+    <class level="1" book="Complete Adventurer page 68" name="Shadowbane Inquisitor {Prestige Class}" hd="d?" desc="Shadowbane inquisitors battle incessantly against evil in whatever form it takes." />
+    <class level="1" book="Complete Adventurer page 70" name="Shadowbane Stalker {Prestige Class}" hd="d?" desc="Shadowbane stalkers find evil hidden in civilized areas so that the martial arm of the order (the inquisitors) can spearhead the attack." />
+    <class level="1" book="Tome of Magic page 129" name="Shadowblade {Prestige Class}" hd="d?" desc="Shadowblades are martial combatants with an innate link to shadow." />
+    <class level="1" book="Races of Stone page 120" name="Shadowcraft Mage {Prestige Class}" hd="d?" desc="Some gnomes have an even greater affinity for illusions than the average representative of their race, resulting in the prestige class known as the shadowcraft mage." />
+    <class level="1" book="Underdark page 43" name="Shadowcrafter {Prestige Class}" hd="d?" desc="Shadowcrafters long ago mastered illusions and glamers." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 194" name="Shadowdancer {Prestige Class}" hd="d?" desc="Operating in the border between light and darkness, shadowdancers are nimble artists of deception." />
+    <class level="1" book="Complete Adventurer page 74" name="Shadowmind {Prestige Class}" hd="d?" desc="A shadowmind blends psionic powers and uncanny stealth into an effective whole." />
+    <class level="1" book="Tome of Magic page 132" name="Shadowsmith {Prestige Class}" hd="d?" desc="Shadowcasters draw power from darkness, and masters of shadow command it, but no one truly manipulates the darkness as does the shadowsmith." />
+    <class level="1" book="Oriental Adventures page 45" name="Shapeshifter {Prestige Class}" hd="d?" desc="Shapeshifters must already have some means of changing their form before learning to master that change." />
+    <class level="1" book="Sharn: City of Towers page 165" name="Sharn Skymage {Prestige Class}" hd="d?" desc="By studying the properties of the manifest zone in which Sharn is situated, learning its intricacies and methods for manipulating it, a spellcaster can improve her magical or natural ability to fly." />
+    <class level="1" book="Oriental Adventures page 222" name="Shiba Protector {Prestige Class}" hd="d?" desc="The warriors of the Shiba family are sworn to protect the Isawa family." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 68" name="Shifter {Prestige Class}" hd="d?" desc="The shifter has no form that she calls her own." />
+    <class level="1" book="Complete Divine page 63" name="Shining Blade Of Heironeous {Prestige Class}" hd="d?" desc="The shining blade of Heironeous is a member of an order of knights dedicated to prowess in melee combat." />
+    <class level="1" book="Oriental Adventures page 46" name="Shintao Monk {Prestige Class}" hd="d?" desc="Shintao monks are dedicated to following the teachings of Shinsei." />
+    <class level="1" book="Unapproachable East page 32" name="Shou Disciple {Prestige Class}" hd="d?" desc="Shou disciples are martial artists who have studied or observed the monks of Kara-Tur and seek to emulate their style." />
+    <class level="1" book="FN page 150" name="Silver Pyromancer {Prestige Class}" hd="d?" desc="The silver pyromancer is an arcane champion of the Church of the Silver Flame, taking his place alongside clerics, paladins, and exorcists in the Church's cause." />
+    <class level="1" book="Faiths &amp; Pantheons page 201" name="Silverstar {Prestige Class}" hd="d?" desc="Silverstars are dedicated advocates of freedom and tolerance, wanderers on the path of truth, and absolute foes of Shar." />
+    <class level="1" book="Races of the Dragon page 91" name="Singer Of Concordance {Prestige Class}" hd="d?" desc="The Singers of Concordance are a small order of wandering draconic spiritual guides who begin as servitors of Io, the Ninefold Dragon, creator of all dragonkind." />
+    <class level="1" book="Oriental Adventures page 48" name="Singh Rager {Prestige Class}" hd="d?" desc="Singh ragers draw their furious strength from the noble lion." />
+    <class level="1" book="Savage Species page 84" name="Siren {Prestige Class}" hd="d?" desc="A harpy siren is an artist who constantly seeks to expand and improve upon her innate sonic ability." />
+    <class level="1" book="Miniatures Handbook page 20" name="Skullclan Hunter {Prestige Class}" hd="d?" desc="The skullclan hunter is the acclaimed foe of unlife." />
+    <class level="1" book="Book of Exalted Deeds page 71" name="Skylord {Prestige Class}" hd="d?" desc="An elf crusader, the skylord uses his kinship with creatures of the sky and the power of the winds to fight evil." />
+    <class level="1" book="Races of the Wild page 126" name="Skypledged {Prestige Class}" hd="d?" desc="The skypledged represent a mystical tradition among the raptorans that hearkens back to an ancient pact with powerful lords of the Elemental Plane of Air." />
+    <class level="1" book="Savage Species page 87" name="Slaad Brooder {Prestige Class}" hd="d?" desc="The brooder's sole purpose is to implant as many eggs pellets as he can to produce the widest possible range of progeny." />
+    <class level="1" book="Book of Exalted Deeds page 73" name="Slayer Of Domiel {Prestige Class}" hd="d?" desc="Sometimes the skillset of an assassin is required for more noble pursuits." />
+    <class level="1" book="Player's Guide to Faerun page 186" name="Slime Lord {Prestige Class}" hd="d?" desc="Slime lords, the most favored of Ghaunadar's servants, are not clerics; they are spies and infiltrators who can change their shapes in order to move unnoticed among members of any race." />
+    <class level="1" book="Deities and Demigods page 208" name="Soldier Of Light {Prestige Class}" hd="d?" desc="The Soldiers of Light are a military order dedicated to open warfare against the minions of their church's enemies." />
+    <class level="1" book="Book of Vile Darkness page 66" name="Soul Eater {Prestige Class}" hd="d?" desc="The soul eater is a monstrous being that feeds on the very essence of life force." />
+    <class level="1" book="Complete Psionic page 36" name="Soulbow {Prestige Class}" hd="d?" desc="In the tradition of the soulknife, a soulbow realizes the direct capacity of her own mind to give shape to weapons of psionic perfection." />
+    <class level="1" book="Magic of Incarnum page 142" name="Soulcaster {Prestige Class}" hd="d?" desc="Soulcasters excel at incorporating soul energy into their magic." />
+    <class level="1" book="Faiths of Eberron page 32" name="Sovereign Speaker {Prestige Class}" hd="d?" desc="Although devotion to a single god enables some individuals to gain additional power, overriding" />
+    <class level="1" book="Unearthed Arcana page 167" name="Spell Scion {Prestige Class}" hd="d?" desc="This prestige class is for characters who wield legendary weapons designed for use by arcane spellcasters, such as wizards, sorcerers, and sometimes bards." />
+    <class level="1" book="Races of Eberron page 166" name="Spellcarved Soldier {Prestige Class}" hd="d?" desc="Spellcarved soldiers are warforged warriors who engrave magic runes into the plating of their inherently magic bodies, gaining remarkable defensive abilities." />
+    <class level="1" book="Magic of Faerun page 37" name="Spelldancer {Prestige Class}" hd="d?" desc="Spelldancers are an energetic sort of spellcaster who draw on the quasi-primal energy of song and dancing to power their magic." />
+    <class level="1" book="Magic of Faerun page 38" name="Spellfire Channeler {Prestige Class}" hd="d?" desc="Those who practice their spellfire can hone their talent into a tool with fantastic abilities that most dabblers can only dream of." />
+    <class level="1" book="Player's Guide to Faerun page 75" name="Spellguard Of Silverymoon {Prestige Class}" hd="d?" desc="The Spellguard, Silverymoon's elite cadre of battle-trained arcane spellcasters, protects the city against the threat of hostile magic and aids the Knights in Silver against more mundane threats." />
+    <class level="1" book="Races of Faerun page 185" name="Spellsinger {Prestige Class}" hd="d?" desc="Spellsingers are rare practitioners of an ancient elven bardic tradition." />
+    <class level="1" book="Complete Warrior page 79" name="Spellsword {Prestige Class}" hd="d?" desc="The dream of melding magic and weaponplay is fulfilled in the person of the spellsword." />
+    <class level="1" book="Magic of Incarnum page 147" name="Spinemeld Warrior {Prestige Class}" hd="d?" desc="When a spinemeld warrior trains, he is participating in a tradition that has long been venerated in skarn society." />
+    <class level="1" book="Lords of Darkness page 11" name="Spur Lord {Prestige Class}" hd="d?" desc="The Spur Lords are elite zealots of the church, wielding the dark power of Cyric and commanding the attention of even the most fanatical clerics." />
+    <class level="1" book="Complete Adventurer page 76" name="Spymaster {Prestige Class}" hd="d?" desc="Spymasters do their work quietly and in private, and they often have a cover identity." />
+    <class level="1" book="Book of Exalted Deeds page 75" name="Stalker Of Kharash {Prestige Class}" hd="d?" desc="The stalkers of Kharash are a loose-knit order of rangers, rogues, and other characters devoted to fighting evil under Kharash's patronage." />
+    <class level="1" book="Dragonlance Campaign Setting page 68" name="Steel Legionnaire {Prestige Class}" hd="d?" desc="Steel legionnaires are members of the Legion of Steel." />
+    <class level="1" book="Races of Stone page 122" name="Stoneblessed {Prestige Class}" hd="d?" desc="A stoneblessed bonds to the stone of the mountains, blending into a dwarf, gnome, or goliath community and making it her home." />
+    <class level="1" book="Races of Stone page 124" name="Stonedeath Assassin {Prestige Class}" hd="d?" desc="Most stonedeath assassins are hobgoblin rogues or rangers, but bugbears and even exceptional goblins have been known to undertake stonedeath training and learn the ways of infiltrating dwarf strongholds by disarming traps, weakening gates, and assassinating dwarf leaders." />
+    <class level="1" book="Complete Warrior page 81" name="Stonelord {Prestige Class}" hd="d?" desc="The earth whispers to special dwarves known as stonelords." />
+    <class level="1" book="Races of Stone page 127" name="Stonespeaker Guardian {Prestige Class}" hd="d?" desc="The stonespeaker guardian taps into the divine power of the earth itself to defend her fellow stonespeakers, as well as other goliaths and friendly races, from their enemies." />
+    <class level="1" book="Complete Psionic page 40" name="Storm Disciple {Prestige Class}" hd="d?" desc="A storm disciple is a character who decides that the best, most glorious way to serve his ideals is through the natural power, fury, and splendor of the storm." />
+    <class level="1" book="Stormwrack page 72" name="Stormcaster {Prestige Class}" hd="d?" desc="The stormcaster is one who seeks to tap into the power of a strange and terrifying phenomenon: the raging storm." />
+    <class level="1" book="Complete Divine page 65" name="Stormlord {Prestige Class}" hd="d?" desc="Stormlords often live as brigands, indulging their personal desires for wealth, food, luxury items, and wanton behavior as they crave random, spectacular acts of violence." />
+    <class level="1" book="Frostburn page 70" name="Stormsinger {Prestige Class}" hd="d?" desc="The stormsingers have learned the secret methods of harnessing the magic powers of music to influence and control the weather." />
+    <class level="1" book="Races of the Wild page 131" name="Stormtalon {Prestige Class}" hd="d?" desc="The stormtalons are consummate aerial warriors, using both their weapons and their razor-sharp foot talons to dive on their hapless foes." />
+    <class level="1" book="Complete Adventurer page 79" name="Streetfighter {Prestige Class}" hd="d?" desc="Streetfighters seek the challenges of the back alleys as a way of testing themselves and their experience in the wilder world." />
+    <class level="1" book="Faiths &amp; Pantheons page 204" name="Strifeleader {Prestige Class}" hd="d?" desc="Strifeleaders are the chief instruments of the Dark Sun, charged with spreading the One True Way of Cyric through force and deception." />
+    <class level="1" book="Complete Arcane page 60" name="Sublime Chord {Prestige Class}" hd="d?" desc="In return for abandoning her continuing study of bardic music, a sublime chord instead masters a number of spells more powerful than most bards can ever use." />
+    <class level="1" book="Complete Arcane page 63" name="Suel Arcanamach {Prestige Class}" hd="d?" desc="Arcanamach formerly served as elite guards and agents for powerful wizards." />
+    <class level="1" book="City of Splendors: Waterdeep page 88" name="Sun Soul Monk {Prestige Class}" hd="d?" desc="Monks of the Sun Soul Order believe that they each harbor a small fragment of the sun's divine essence." />
+    <class level="1" book="Lost Empires of Faerun page 25" name="Sunmaster {Prestige Class}" hd="d?" desc="The sunmasters are members of a sect within the church of Lathander who believe that the Morninglord is the living reincarnation of Amaunator." />
+    <class level="1" book="Savage Species page 89" name="Survivor {Prestige Class}" hd="d?" desc="Those who survive a program of frequent assaults and other dangers emerge a few weeks later -- tougher, faster, and less vulnerable to attacks." />
+    <class level="1" book="Book of Exalted Deeds page 76" name="Swanmay {Prestige Class}" hd="d?" desc="Swanmays are members of a secretive order sworn to protect wilderness areas from evil." />
+    <class level="1" book="Unearthed Arcana page 168" name="Swift Scion {Prestige Class}" hd="d?" desc="This prestige class is for those who wield legendary weapons that make use of or improve the wielder's stealth, speed, or dexterity (in the general sense)." />
+    <class level="1" book="Dragon Magic page 50" name="Swift Wing {Prestige Class}" hd="d?" desc="Swift wings are church servants who see themselves as the fast-moving, hard-hitting crusaders of their god's cadre of worshipers." />
+    <class level="1" book="Faiths &amp; Pantheons page 205" name="Sword Dancer {Prestige Class}" hd="d?" desc="Sword dancers are expected to lead the drow migration and work to promote harmony between drow and surface-dwelling races." />
+    <class level="1" book="Book of Exalted Deeds page 77" name="Sword Of Righteousness {Prestige Class}" hd="d?" desc="Pursuit of a commitment to righteousness and purity that exceeds the norm is a quality of a sword of righteousness." />
+    <class level="1" book="Savage Species page 90" name="Sybil {Prestige Class}" hd="d?" desc="Steeped in ancient lore, or maddened by divine inspiration, the sybil is a reclusive prophet." />
+    <class level="1" book="Miniatures Handbook page 22" name="Tactical Soldier {Prestige Class}" hd="d?" desc="The tactical soldier is the master of teamwork in melee." />
+    <class level="1" book="Heroes of Horror page 113" name="Tainted Scholar {Prestige Class}" hd="d?" desc="No secret is barred from the tainted scholar's grasp, and if such forbidden knowledge comes at the cost of his soul, he's willing to pay that price." />
+    <class level="1" book="Unearthed Arcana page 191" name="Tainted Sorcerer {Prestige Class}" hd="d?" desc="Tainted sorcerers find an easy path to tremendous magical power." />
+    <class level="1" book="Unearthed Arcana page 193" name="Tainted Warrior {Prestige Class}" hd="d?" desc="When a character's taint threatens to exceed the capacity of his body and soul to contain it, he may become possessed by its evil power and transformed into a creature of taint." />
+    <class level="1" book="Draconomicon page 134" name="Talon Of Tiamat {Prestige Class}" hd="d?" desc="The talon of Tiamat furthers the goals of evil dragonkind." />
+    <class level="1" book="Unapproachable East page 34" name="Talontar Blightlord {Prestige Class}" hd="d?" desc="Corrupt priests who revel in decay, the blightlords of Talona are feared and reviled throughout the Unapproachable East." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 70" name="Tamer Of Beasts {Prestige Class}" hd="d?" desc="Through magic and his overwhelming concern for his charges, the tamer of beasts can make them tougher and more intelligent." />
+    <class level="1" book="Complete Warrior page 82" name="Tattooed Monk {Prestige Class}" hd="d?" desc="Certain monastic orders bestow supernatural or spell-like powers on their members by inscribing magic tattoos on their skin." />
+    <class level="1" book="Faiths &amp; Pantheons page 206" name="Techsmith {Prestige Class}" hd="d?" desc="Techsmiths are devoted to the development of new inventions and the progression of achievement in the name of the Wonderbringer." />
+    <class level="1" book="Unapproachable East page 36" name="Telflammar Shadowlord {Prestige Class}" hd="d?" desc="Above all the criminals of the Shadowmasters of Telflamm stand the Telflammar shadowlords,the secret captains of iniquity who demand unquestioned obedience from their numerous minions." />
+    <class level="1" book="Complete Adventurer page 81" name="Tempest {Prestige Class}" hd="d?" desc="A tempest is the point of calm within a whirling barrier of deadly blades." />
+    <class level="1" book="Defenders of the Faith: A Guidebook to Clerics and Paladins page 72" name="Templar {Prestige Class}" hd="d?" desc="Sworn to the defense of a temple site, the templar is a holy warrior blessed by her deity with combat prowess and great endurance." />
+    <class level="1" book="Complete Divine page 67" name="Temple Raider Of Olidammara {Prestige Class}" hd="d?" desc="The temple raiders are an elite cadre of thiees who worship the Laughing Rogue and specialize in stealing valuables and secret lore from the temples of other deities." />
+    <class level="1" book="Tome of Magic page 63" name="Tenebrous Apostate {Prestige Class}" hd="d?" desc="The remnant of divinity once possessed by Orcus, Tenebrous is perhaps the only vestige still worshiped in some places as a god. Some followers, however, believe that Tenebrous is a separate deity, so these Tenebrous apostates revere him as such." />
+    <class level="1" book="Dungeon Master's Guide v.3.5 page 196" name="Thaumaturgist {Prestige Class}" hd="d?" desc="The thaumaturgist reaches out with divine power to other planes of existence, calling creatures there to do his bidding." />
+    <class level="1" book="Champions of Ruin page 63" name="Thayan Gladiator {Prestige Class}" hd="d?" desc="Popular and skillful gladiators fill the arenas of Faerun from Calimshan to the Dragon Coast, but the brutal Thayan gladiators are the best of the best." />
+    <class level="1" book="Complete Warrior page 85" name="Thayan Knight {Prestige Class}" hd="d?" desc="Thayan knights have mastered the art of swordplay, are familiar with magic, and are loyal to none but the tattooed mages." />
+    <class level="1" book="Unapproachable East page 37" name="Thayan Slaver {Prestige Class}" hd="d?" desc="Thayan slavers are cruel marauders who use their awful abilities to abduct creatures and then break their wills." />
+    <class level="1" book="Faiths of Eberron page 84" name="Thief Of Life {Prestige Class}" hd="d?" desc="When the prize is immortality, there is precious little a thief of life will not do to grasp it." />
+    <class level="1" book="Book of Vile Darkness page 67" name="Thrall Of Demogorgon {Prestige Class}" hd="d?" desc="A thrall of Demogorgon thrives on the chaotic nature of mutation and deformity." />
+    <class level="1" book="Book of Vile Darkness page 70" name="Thrall Of Juiblex {Prestige Class}" hd="d?" desc="A thrall of Juiblex oozes a horrible slime and is surrounded by a nauseating stench." />
+    <class level="1" book="Book of Vile Darkness page 71" name="Thrall Of Orcus {Prestige Class}" hd="d?" desc="A thrall of Orcus has devoted herself to the demon prince of undeath." />
+    <class level="1" book="Expanded Psionics Handbook page 153" name="Thrallherd {Prestige Class}" hd="d?" desc="Thrallherds manipulate the minds of others as if they were clay in the hands of a sculptor." />
+    <class level="1" book="Explorer's Handbook page 64" name="Thunder Guide {Prestige Class}" hd="d?" desc="Bodyguards to nobles on safari, shepherds to spelunking university professors, and the real-life heroes of chronicle serials across Khorvaire, thunder guides provide the strong blades, keen senses, and local knowledge necessary to survive a trip across the Thunder Sea." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 57" name="Tomb Warden {Prestige Class}" hd="d?" desc="Tomb wardens serve as selfless, undying protectors of the dead." />
+    <class level="1" book="Lords of Madness page 203" name="Topaz Guardian {Prestige Class}" hd="d?" desc="Resolute crusaders, the topaz guardians are the elite initiates of the Holy Order of the Supernal Topaz Defenders." />
+    <class level="1" book="Magic of Incarnum page 153" name="Totem Rager {Prestige Class}" hd="d?" desc="The totem rager embodies the wrath of nature in its most bestial form." />
+    <class level="1" book="CoV page 123" name="Triadic Knight {Prestige Class}" hd="d?" desc="Triadic knights are holy warriors who worship the Triad of Tyr, Torm, and Ilmater." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 35" name="Tribal Protector {Prestige Class}" hd="d?" desc="The tribal protector is the battlefield champion of a savage humanoid race." />
+    <class level="1" book="Book of Exalted Deeds page 78" name="Troubadour Of Stars {Prestige Class}" hd="d?" desc="Bards who channel their celestial music through their mortal voices and instruments are troubadours of stars." />
+    <class level="1" book="Libris Mortis: The Book of the Dead page 51" name="True Necromancer {Prestige Class}" hd="d?" desc="Those who seek to raise an unyielding obedience from the dead willingly tread the path of necromancy." />
+    <class level="1" book="Complete Mage page 77" name="Ultimate Magus {Prestige Class}" hd="d?" desc="A multiclass arcane preparation spellcaster and arcane spontaneous spellcaster." />
+    <class level="1" book="Magic of Incarnum page 158" name="Umbral Disciple {Prestige Class}" hd="d?" desc="The umbral disciple is a student of shadow in both a literal and a metaphysical sense." />
+    <class level="1" book="Draconomicon page 97" name="Unholy Ravager Of Tiamat {Prestige Class}" hd="d?" desc="Those who devote themselves to Tiamat's cause become unholy ravagers of Tiamat." />
+    <class level="1" book="Epic Level Handbook page 35" name="Union Sentinel {Prestige Class}" hd="d?" desc="A Union Sentinel is a member of an elite police force that guards the demiplane city of Union." />
+    <class level="1" book="Complete Mage page 81" name="Unseen Seer {Prestige Class}" hd="d?" desc="A stealthy character who dabbles in divination magic." />
+    <class level="1" book="Races of Destiny page 141" name="Urban Soul {Prestige Class}" hd="d?" desc="Urban souls are the chosen champions of the deity Urbanus, charged with protecting city denzens from external dangers and from subtler threats to the city." />
+    <class level="1" book="Book of Exalted Deeds page 80" name="Vassal Of Bahamut {Prestige Class}" hd="d?" desc="A vassal of Bahamut is a devout, nondraconic champion in the service of the Dragon King." />
+    <class level="1" book="Champions of Ruin page 67" name="Vengeance Knight {Prestige Class}" hd="d?" desc="Vengeance knights roam the Lands of Intrigue in search of those who have committed acts of treachery against their employers, the Knights of the Shield." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 73" name="Verdant Lord {Prestige Class}" hd="d?" desc="The verdant lord is the final defender of the forest." />
+    <class level="1" book="Underdark page 44" name="Vermin Keeper {Prestige Class}" hd="d?" desc="To a vermin keeper, insects are perfect killers." />
+    <class level="1" book="Book of Vile Darkness page 73" name="Vermin Lord {Prestige Class}" hd="d?" desc="The vermin lord offers itself as a host for all manner of parasitic organisms." />
+    <class level="1" book="Magic of Eberron page 85" name="Vigilant Sentinel Of Aerenal {Prestige Class}" hd="d?" desc="Part spy, part assassin, and completely loyal to the Sibling Kings and Aerenal's undying rulers, the sentinels roam across Eberron." />
+    <class level="1" book="Complete Adventurer page 85" name="Vigilante {Prestige Class}" hd="d?" desc="The vigilante combines magical and mundane investigative techniques to assess a crime scene." />
+    <class level="1" book="Complete Adventurer page 89" name="Virtuoso {Prestige Class}" hd="d?" desc="The typical virtuoso is outgoing, charismatic, and gregarious." />
+    <class level="1" book="Planar Handbook page 53" name="Visionary Seeker {Prestige Class}" hd="d?" desc="A visionary seeker knows how to navigate the mental plain stretching out ahead, finding landfall and truly discovering what it means to know." />
+    <class level="1" book="Complete Divine page 72" name="Void Disciple {Prestige Class}" hd="d?" desc="Void disciples understand that everything in the world contains all the basic elements, held together by the least tangible essence." />
+    <class level="1" book="Sandstorm page 89" name="Walker In The Waste {Prestige Class}" hd="d?" desc="A walker in the waste embodies the harsh, unforgiving nature of the desert." />
+    <class level="1" book="Complete Warrior page 87" name="War Chanter {Prestige Class}" hd="d?" desc="A war chanter's music flows across the battlefield like a raging torrent, catching friends and foes alike in its wake." />
+    <class level="1" book="Miniatures Handbook page 22" name="War Hulk {Prestige Class}" hd="d?" desc="The war hulk is a creature of great size and talent who is specifically trained to shock and awe opposing massed troops." />
+    <class level="1" book="Expanded Psionics Handbook page 155" name="War Mind {Prestige Class}" hd="d?" desc="War minds are expert fighters who claim to possess unequaled knowledge in the art of war." />
+    <class level="1" book="Heroes of Battle page 112" name="War Weaver {Prestige Class}" hd="d?" desc="By weaving together strands of pure arcane power, the war weaver becomes a force to be reckoned with on the battlefield." />
+    <class level="1" book="Magic of Faerun page 40" name="War Wizard Of Cormyr {Prestige Class}" hd="d?" desc="The Cormyrean war wizards are some of the most respected battle-mages in Faerun." />
+    <class level="1" book="Miniatures Handbook page 24" name="Warchief {Prestige Class}" hd="d?" desc="A warchief leads a primitive, aggressive tribe of humanoids, especially when they turn to marauding." />
+    <class level="1" book="Eberron Campaign Setting page 83" name="Warforged Juggernaut {Prestige Class}" hd="d?" desc="As a machine of war, the juggernaut is among the best at dealing damage and sustaining punishment." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 37" name="Warmaster {Prestige Class}" hd="d?" desc="Warmasters are trained at the College of War and can become a formidable presence on the battlefield." />
+    <class level="1" book="Complete Divine page 74" name="Warpriest {Prestige Class}" hd="d?" desc="Warpriests are fierce, earthy clerics who pray for peace but prepare for war." />
+    <class level="1" book="Book of Vile Darkness page 75" name="Warrior Of Darkness {Prestige Class}" hd="d?" desc="The warrior of darkness, sometimes called the dark knight, is a practitioner of black magic." />
+    <class level="1" book="Races of Faerun page 186" name="Warrior Skald {Prestige Class}" hd="d?" desc="Accompanying heroes of great renown, warrior skalds fight at their sides while composing the epics that will be told for centuries to come." />
+    <class level="1" book="Complete Warrior page 89" name="Warshaper {Prestige Class}" hd="d?" desc="The warshaper grows and evolves her own weapons and armor to suit the threat at hand." />
+    <class level="1" book="Races of Faerun page 188" name="Warsling Sniper {Prestige Class}" hd="d?" desc="The warsling sniper is an expert in the use of the weapon commonly associated with the halfling race." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 75" name="Watch Detective {Prestige Class}" hd="d?" desc="The watch detective specializes in solving mysteries." />
+    <class level="1" book="Stormwrack page 76" name="Wavekeeper {Prestige Class}" hd="d?" desc="Some druids feel the call of the primal deeps." />
+    <class level="1" book="Savage Species page 93" name="Waverider {Prestige Class}" hd="d?" desc="The waverider and her companion animal defend their city with a vigor that exceeds either's individual powers." />
+    <class level="1" book="Faiths &amp; Pantheons page 209" name="Waveservant {Prestige Class}" hd="d?" desc="Waveservants server the Bitch Queen as both tribute gatherers and enforcers." />
+    <class level="1" book="Complete Arcane page 65" name="Wayfarer Guide {Prestige Class}" hd="d?" desc="The wayfarer guide focues on honing her skill at instantaneous magical transportation." />
+    <class level="1" book="Sword and Fist: A Guidebook to Monks and Fighters page 38" name="Weapon Master {Prestige Class}" hd="d?" desc="For weapon masters, the perfection of kiis found in the mastery of a single melee weapon." />
+    <class level="1" book="Faiths &amp; Pantheons page 210" name="Wearer Of Purple {Prestige Class}" hd="d?" desc="Wearers of purple are members of the Cult of the Dragon who embrace the creation and veneration of the Sacred Ones, the great dracoliches of Faerun." />
+    <class level="1" book="Eberron Campaign Setting page 85" name="Weretouched Master {Prestige Class}" hd="d?" desc="Weretouched masters are shifters who learn to enhance their shifting ability to accentuate the power of their lycanthrope heritage." />
+    <class level="1" book="Races of the Wild page 135" name="Whisperknife {Prestige Class}" hd="d?" desc="The halfling whisperknife seeks to repay murder, theft, or humiliation in the same coin." />
+    <class level="1" book="Complete Arcane page 68" name="Wild Mage {Prestige Class}" hd="d?" desc="Wild mages aspire to cast spells without structure." />
+    <class level="1" book="Complete Adventurer page 92" name="Wild Plains Outrider {Prestige Class}" hd="d?" desc="Wild plains outriders work tirelessly to keep the plains as safe as such remote places can be." />
+    <class level="1" book="Silver Marches page 117" name="Wild Scout {Prestige Class}" hd="d?" desc="Wild scouts are the spies of the wilderness, traversing the open and wild country in search of valuable information." />
+    <class level="1" book="Complete Mage page 84" name="Wild Soul {Prestige Class}" hd="d?" desc="An arcanist who wields power from the realm of the fey." />
+    <class level="1" book="Races of the Wild page 139" name="Wildrunner {Prestige Class}" hd="d?" desc="Wildrunners give themselves almost wholly to nature, seeking to return to their untamed roots and eventually become fey creatures." />
+    <class level="1" book="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 77" name="Windrider {Prestige Class}" hd="d?" desc="The windrider is a specialist in mounted combat, but hers is no ordinary mount." />
+    <class level="1" book="Faiths &amp; Pantheons page 212" name="Windwalker {Prestige Class}" hd="d?" desc="Windwalkers learn to shape the winds with their hands and ride them to lands as yet unseen." />
+    <class level="1" book="Explorer's Handbook page 70" name="Windwright Captain {Prestige Class}" hd="d?" desc="The self-proclaimed masters of sky and sea, the windwright captains are the finest pilots of airships and wind galleons on Eberron." />
+    <class level="1" book="Frostburn page 72" name="Winterhaunt Of Iborighu {Prestige Class}" hd="d?" desc="As minions of the Frozen King, the winterhaunts of Iborighu lust for nothing less than eternal winter." />
+    <class level="1" book="Oriental Adventures page 54" name="Witch Hunter {Prestige Class}" hd="d?" desc="Witch hunters combine magical training with combat expertise to battle the spiritual forces of evil in the world." />
+    <class level="1" book="Tome of Magic page 67" name="Witch Slayer {Prestige Class}" hd="d?" desc="Witch slayers devote themselves to capturing and destroying those who share their souls with other entities." />
+    <class level="1" book="Magic of Incarnum page 162" name="Witchborn Binder {Prestige Class}" hd="d?" desc="Elite agents within the Vigilant Servants, a society whose members make it their business to frustrate the plans of the witchborn, witchborn binders are incarnum-wielding mage-hunters who can use the power of soul energy to create shields, traps, and shackles." />
+    <class level="1" book="Dragonlance Campaign Setting page 71" name="Wizard Of High Sorcery {Prestige Class}" hd="d?" desc="Once a wizard successfully completes (and survives) the Test of High Sorcery, his choices dictate his robe color and which deity of magic grants him power." />
+    <class level="1" book="Book of Exalted Deeds page 82" name="Wonderworker {Prestige Class}" hd="d?" desc="Wonderworkers sacrifice some of their spellcasting ability to grow closer to the ideal of goodness they revere." />
+    <class level="1" book="Dragon Magic page 55" name="Wyrm Wizard {Prestige Class}" hd="d?" desc="Wyrm wizards are spellcasters who learn new spells not through research and experimentation but rather by tapping into the vast wealth of arcane knowledge possessed by dragons." />
+    <class level="1" book="Oriental Adventures page 55" name="Yakuza {Prestige Class}" hd="d?" desc="Yakuza represent the shadowy underworld and provide protection for the helpless." />
+    <class level="1" book="Underdark page 46" name="Yathchol Webrider {Prestige Class}" hd="d?" desc="With their intimate understanding of webspinning and their familiarity with the Overweb, Yathchol webriders can move about the Underdark as they choose." />
+    <class level="1" book="Player's Guide to Faerun page 187" name="Yathrinshee {Prestige Class}" hd="d?" desc="Yathrinshees, the elite ranks of Kiaransalee's priests, are powerful masters of necromantic magic, both arcane and divine." />
+    <class level="1" book="Complete Psionic page 43" name="Zerth Cenobite {Prestige Class}" hd="d?" desc="The core of a zerth cenobite's studies involve strict meditation on the nature of time and the body's movements through it, culminating in a martial art known as zerthin." />
+    <class level="1" book="Lords of Darkness page 102" name="Zhentarim Skymage {Prestige Class}" hd="d?" desc="These powerful spellcasters ride strange flying beasts and serve the Zhentarim by performing acts of espionage and causing unrest on the frontiers of civilization." />
+    <class level="1" book="Player's Guide to Faerun page 77" name="Zhentarim Spy {Prestige Class}" hd="d?" desc="The Zhentarim spy is probably the one Faerunians encounter most often -- even if they never realize it." /></classes>
--- a/data/dnd35/dnd35feats.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/dnd35feats.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2940 +1,2940 @@
-<feats>
-    <feat type="Arms and Equipment Guide page 73" name="[Creature Type] Trainer" desc="You are skilled at training a particular type  of creature." />
-    <feat type="Eberron Campaign Setting page 47" name="Aberrant Dragonmark" desc="Although you are not a recognized member of  one of the dragonmarked families, you have manifested a dragonmark." />
-    <feat type="Lords of Madness page 178" name="Aberration Banemagic" desc="You can cast spells that do additional damage  to aberrations." />
-    <feat type="Lords of Madness page 178" name="Aberration Blood" desc="One of your ancestors was an aberration and  has passed the taint of its aberrant physiology down through the generations  to you." />
-    <feat type="Lords of Madness page 178" name="Aberration Wild Shape" desc="Thanks to your heritage, you have learned to  channel your inhuman bloodline into your shapeshifting power." />
-    <feat type="Monster Manual v.3.5 page 303" name="Ability Focus" desc="Choose one of the creature's special attacks.  This attack becomes more potent than normal." />
-    <feat type="Monster Manual II page 18" name="Ability Focus" desc="One of the creature's special attacks is more  potent than normal." />
-    <feat type="Monster Manual III page 206" name="Ability Focus" desc="The special attack of a creature with this feat  is more potent than normal." />
-    <feat type="Savage Species page 30" name="Ability Focus" desc="Choose one of your spell-like abilities. This  attack becomes much more potent than normal." />
-    <feat type="Races of Destiny page 150" name="Able Learner" desc="You have great aptitude for learning." />
-    <feat type="Races of the Wild page 148" name="Able Sniper" desc="You are accomplished at remaining unseen when  you're sniping with a ranged weapon." />
-    <feat type="Unearthed Arcana page 92" name="Accurate Jaunt" desc="You have an instinctive sense of interplanar  travel." />
-    <feat type="Planar Handbook page 37" name="Acheron Flurry" desc="You master the secret technique developed by  Acheron-native special forces of limiting a foe's options in hand-to-hand  combat." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Acrobatic" desc="You have excellent body awareness and coordination." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Acrobatic" desc="You have excellent body awareness and coordination." />
-    <feat type="Eberron Campaign Setting page 47" name="Action Boost" desc="You have the ability to alter your luck drastically  in dire circumstances." />
-    <feat type="Eberron Campaign Setting page 50" name="Action Surge" desc="By spending 2 action points, you can perform  an additional action in a round." />
-    <feat type="Eberron Campaign Setting page 50" name="Adamantine Body" desc="At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction." />
-    <feat type="Monster Manual III page 192" name="Adamantine Body" desc="At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction." />
-    <feat type="Races of Eberron page 118" name="Adamantine Body" desc="At the cost of mobility, your warforged body  can be crafted with a layer of adamantine that provides formidable protective  armor and some damage reduction." />
-    <feat type="Epic Level Handbook page 50" name="Additional Magic Item Space" desc="You can wear more magic items." />
-    <feat type="Draconomicon page 67" name="Adroit Flyby Attack" desc="You can make flyby attacks and get out of reach  quickly." />
-    <feat type="Races of Eberron page 105" name="Aerenal Beastmaster" desc="As an elf of Aerenal, you consider baboons sacred  animals and they serve you obediently." />
-    <feat type="Races of the Wild page 148" name="Aerial Reflexes" desc="Your aerial agility allows you to avoid dangerous  effects while airborne." />
-    <feat type="Races of the Wild page 148" name="Aerial Superiority" desc="You can use your flying ability to gain an advantage  against landbound foes or airborne foes that you can outmaneuver." />
-    <feat type="Races of Faerun page 160" name="Aftersight" desc="You have a trace of the Sight in your blood,  which enables you to pick up echoes of the past, both wondrous and terrible." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Agile" desc="You are particularly flexible and poised." />
-    <feat type="Races of the Wild page 148" name="Agile Athlete" desc="You rely on your agility to perform athletic  feats, rather than brute strength." />
-    <feat type="Lords of Madness page 44" name="Agile Tyrant" desc="A creature with this feat develops longer, more  flexible eyestalks than its kin. This extra flexibility allows it to bring  additional eye rays to bear against its foes." />
-    <feat type="Ghostwalk page 28" name="Agony Touch" desc="Choose one physical ability score. When you  touch a creature, you can deal damage to this ability score." />
-    <feat type="Planar Handbook page 37" name="Air Heritage" desc="You are descended from creatures native to the  Elemental Plane of Air." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Alertness" desc="You have finely tuned senses." />
-    <feat type="Expanded Psionics Handbook page 41" name="Aligned Attack" desc="Your melee or ranged attack overcomes your opponent's  alignment-based damage reduction and deals additional damage." />
-    <feat type="Shining South page 19" name="Allied Defense" desc="You are good at protecting nearby allies." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Alluring" desc="Others have an inexplicable urge to believe  your every word." />
-    <feat type="Frostburn page 45" name="Altitude Adaptation" desc="Your body adapts quickly to changes in altitude,  preventing you from suffering as much from altitude sickness." />
-    <feat type="Planar Handbook page 38" name="Anarchic Heritage" desc="You are descended from creatures native to the  planes of chaos." />
-    <feat type="Races of Eberron page 105" name="Ancestral Guidance" desc="The spirit of your patron ancestor guides your  hands and thoughts in times of trouble." />
-    <feat type="Races of Stone page 136" name="Ancestral Knowledge" desc="You have a strong connection to the ancestors  of your clan, giving you understanding and knowledge beyond the mortal realms." />
-    <feat type="Book of Exalted Deeds page 39" name="Ancestral Relic" desc="You own an ancestral heirloom and can invest  it with increasing power." />
-    <feat type="Races of Faerun page 161" name="Ancestral Spirit" desc="You have ties to the long-dead spirit of one  of your clan's ancestors, who whispers ancient words of wisdom into your  mind in times of need." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Animal Affinity" desc="You are good with animals." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 20" name="Animal Control" desc="You can channel the power of nature to gain  mastery over animal creatures." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 20" name="Animal Defiance" desc="You can channel the power of nature to drive  off animals." />
-    <feat type="Book of Exalted Deeds page 41" name="Animal Friend" desc="Animals respond favorably to the aura of goodness  that exudes from you." />
-    <feat type="Races of Faerun page 161" name="Animal Friends" desc="Your ability to speak with animals has  allowed you to befriend an animal as a permanent ally." />
-    <feat type="Shining South page 19" name="Ankheg Tribe Ambush" desc="You have learned how to hide and spring to attack,  much like the ankhegs that roam the plains where you hunt." />
-    <feat type="Expanded Psionics Handbook page 41" name="Antipsionic Magic" desc="Your spells are more potent when used against  psionic characters and creatures." />
-    <feat type="Complete Warrior page 112" name="Anvil of Thunder" desc="You have mastered the style of fighting with  hammer and axes at the same time, and have learned to deal thunderous blows  with this unique pairing of weapons." />
-    <feat type="Complete Adventurer page 103" name="Appraise Magic Value" desc="Your ability to determine an item's worth and  your knowledge of magic allow you to determine the exact properties of a  magic item without the use of the identify spell or similar magic." />
-    <feat type="Dungeon Master's Guide II page 176" name="Apprentice" desc="A character with this feat has apprenticed himself  to a master in order to speed his learning and bolster his skills." />
-    <feat type="Stormwrack page 90" name="Aquatic Shot" desc="You have developed the technique of firing a  ranged weapon into or through the water with better accuracy than normal,  striking at just the right angle to allow it to slice through the obstruction  with precision." />
-    <feat type="Lords of Madness page 178" name="Aquatic Spellcasting" desc="You know how to cast spells that work equally  well in or out of water." />
-    <feat type="Races of Faerun page 161" name="Arachnid Rider" desc="You are trained in the art of employing spiders  as steeds." />
-    <feat type="Complete Arcane page 73" name="Arcane Defense" desc="Choose a school of magic, such as illusion.  You can resist spells from that school better than normal." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 38" name="Arcane Defense" desc="Choose a school of magic. You can resist spells  from that school better than normal." />
-    <feat type="Complete Divine page 79" name="Arcane Disciple" desc="Choose a deity, and then select a domain available  to clerics of that deity. You can learn to cast spells associated with that  domain as arcane spells." />
-    <feat type="Races of Destiny page 154" name="Arcane Insight" desc="By immersing yourself in the teachings of Boccob,  you have unearthed magical secrets and gained special insight into arcane  spellcasting." />
-    <feat type="Lost Empires of Faerun page 6" name="Arcane Manipulation" desc="You are learned in the arcane ways of Netheril,  where masters of magic once molded and shaped arcane energy to their own  will." />
-    <feat type="Complete Arcane page 73" name="Arcane Mastery" desc="You are quick and certain in your efforts to  defeat the arcane defenses and spells of others." />
-    <feat type="Complete Arcane page 73" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
-    <feat type="Forgotten Realms Campaign Setting page 33" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
-    <feat type="Player's Guide to Faerun page 32" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 38" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
-    <feat type="Forgotten Realms Campaign Setting page 33" name="Arcane Schooling" desc="In your homeland, all who show some skill at  the Art may receive training as a wielder of magic." />
-    <feat type="Player's Guide to Faerun page 33" name="Arcane Schooling" desc="In your homeland, all who show some skill at  the Art may receive training as arcane spellcasters." />
-    <feat type="Complete Warrior page 96" name="Arcane Strike" desc="You can channel arcane energy into your melee  attacks." />
-    <feat type="Lost Empires of Faerun page 6" name="Arcane Transfiguration" desc="Drawing upon forgotten lore, you broaden your  arcane studies and master a school of magic previously prohibited to you." />
-    <feat type="Races of Faerun page 161" name="Arctic Adaptation" desc="You have adapted to the snowbound environment  of the arctic reaches of Faerun." />
-    <feat type="Savage Species page 30" name="Area Attack" desc="You can wield improvised weapons to attack several  spaces at once." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Armor Proficiency (Heavy)" desc="You are proficient with heavy armor." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Armor Proficiency (Light)" desc="You are proficient with light armor." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Armor Proficiency (Medium)" desc="You are proficient with medium armor." />
-    <feat type="Complete Warrior page 151" name="Armor Skin" desc="Your skin becomes like armor." />
-    <feat type="Epic Level Handbook page 50" name="Armor Skin" desc="Your skin becomes like armor." />
-    <feat type="Oriental Adventures page 60" name="Art of Fascination" desc="You claim descent from Kakita Wayozu, whose  art was so great it is said that she helped create an alternate world." />
-    <feat type="Complete Warrior page 96" name="Arterial Strike" desc="Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Arterial Strike" desc="Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss." />
-    <feat type="Frostburn page 46" name="Artic Priest" desc="You can swap out prepared spells to cast spell  to aid in exploring and surviving in frostfell areas." />
-    <feat type="Forgotten Realms Campaign Setting page 33" name="Artist" desc="You come from a culture in which the arts, philosophy,  and music have a prominent place in society." />
-    <feat type="Oriental Adventures page 61" name="Artist" desc="You claim descent from Doji, who was known as  a creator of culture and civilization." />
-    <feat type="Player's Guide to Faerun page 33" name="Artist" desc="Your people are renowned for their skill at  story and song." />
-    <feat type="Complete Adventurer page 105" name="Ascetic Hunter" desc="You have gone beyond the bounds of your monastic  training to incorporate new modes of bringing the unlawful to justice." />
-    <feat type="Complete Adventurer page 105" name="Ascetic Knight" desc="You belong to a special order of religious monks  that teaches its adherents that self-enlightenment and honorable service  grow from the same well of purity." />
-    <feat type="Complete Adventurer page 105" name="Ascetic Magic" desc="You practice an unusual martial art that mixes  self-taught spellcasting and melee attacks to great effect." />
-    <feat type="Complete Adventurer page 106" name="Ascetic Rogue" desc="You have gone beyond the bounds of your monastic  training to incorporate new modes of stealthy combat." />
-    <feat type="Eberron Campaign Setting page 50" name="Ashbound" desc="You have been trained in the druidic traditions  of the Ashbound, seeing yourself as one of nature's avengers." />
-    <feat type="Savage Species page 30" name="Assume Supernatural Ability" desc="You learn to use a supernatural ability of an  assumed form." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Athletic" desc="You have a knack for athletic endeavors." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Athletic" desc="You're physically fit and adept at outdoor sports." />
-    <feat type="Oriental Adventures page 61" name="Attention to Detail" desc="You are descended from Akodo's advisor Ikoma  -- a historian, judge, and storyteller." />
-    <feat type="Magic of Faerun page 21" name="Attune Gem" desc="You can magically imbue gems to hold a spell  until triggered." />
-    <feat type="Eberron Campaign Setting page 50" name="Attune Magic Weapon" desc="Through your study of magic weapons, you have  become adept at eking every advantage out of their enhanced qualities." />
-    <feat type="Complete Divine page 79" name="Augment Healing " desc="You can increase your healing ability." />
-    <feat type="Magic of Faerun page 21" name="Augment Summoning" desc="Your summoned creatures are better than normal." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Augment Summoning" desc="Your summoned creatures are more powerful than  normal." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Augment Summoning" desc="Your summoned creatures are more powerful than  normal." />
-    <feat type="Complete Adventurer page 191" name="Augmented Alchemy" desc="You can create alchemical items and substances  that are much more powerful than normal." />
-    <feat type="Epic Level Handbook page 50" name="Augmented Alchemy" desc="You can create alchemical items and substances  that are much more powerful than normal." />
-    <feat type="Races of Stone page 136" name="Auspicious Marking" desc="Your [goliath] skin patterns indicate that fate  has marked you for greatness, and the patterns shift slowly to take new  forms." />
-    <feat type="Complete Arcane page 191" name="Automatic Quicken Spell" desc="You can cast any of your lesser spells with  a moment's thought." />
-    <feat type="Epic Level Handbook page 50" name="Automatic Quicken Spell" desc="You can cast any of your lesser spells with  a moment's thought." />
-    <feat type="Complete Arcane page 191" name="Automatic Silent Spell" desc="You can cast any of your lesser spells silently." />
-    <feat type="Epic Level Handbook page 51" name="Automatic Silent Spell" desc="You can cast any of your lesser spells silently." />
-    <feat type="Complete Arcane page 191" name="Automatic Still Spell" desc="You can cast any of your lesser spells without  gestures." />
-    <feat type="Epic Level Handbook page 51" name="Automatic Still Spell" desc="You can cast any of your lesser spells without  gestures." />
-    <feat type="Expanded Psionics Handbook page 41" name="Autonomous" desc="You have a knack for psionic self-sufficiency." />
-    <feat type="Draconomicon page 67" name="Awaken Frightful Presence" desc="You gain frightful presence." />
-    <feat type="Draconomicon page 67" name="Awaken Spell Resistance" desc="You gain spell resistance." />
-    <feat type="Monster Manual v.3.5 page 303" name="Awesome Blow" desc="The creature can choose to deliver blows that  send its smaller opponents flying like bowling pins." />
-    <feat type="Monster Manual III page 206" name="Awesome Blow" desc="A creature with this feat can choose to deliver  blows that send its smaller opponents flying like bowling pins." />
-    <feat type="Underdark page 24" name="Axeshield" desc="You know how to defend yourself with a battleaxe." />
-    <feat type="Races of Stone page 137" name="Axespike" desc="You have mastered the art of fighting in spiked  armor while wielding a greataxe. You blend greataxe blows and armor spike  attacks into one constant, deadly attack form." />
-    <feat type="Player's Guide to Faerun page 33" name="Axethrower" desc="You have learned how to hurl weapons to deadly  effect." />
-    <feat type="Planar Handbook page 38" name="Axiomatic Heritage" desc="You are descended from creatures native to the  planes of law." />
-    <feat type="Complete Warrior page 96" name="Axiomatic Strike" desc="You can turn your fist into an instrument of  law." />
-    <feat type="Player's Guide to Faerun page 135" name="Axiomatic Strike" desc="Your attacks deal incredible damage to chaotic  creatures." />
-    <feat type="Races of Faerun page 161" name="Azerblood" desc="You are descended from the shield dwarves of  Clan Azerkyn, who once ruled the Adamant Kingdom of Xothaerin beneath western  Amn. The blood of the azer runs thick in your veins." />
-    <feat type="Libris Mortis: The Book of the Dead page 24" name="Baleful Moan" desc="Your hollow cry strikes fear into the hearts  of the living." />
-    <feat type="Heroes of Battle page 96" name="Ballista Proficiency" desc="You have trained in ballista operation." />
-    <feat type="Epic Level Handbook page 51" name="Bane of Enemies" desc="Your attacks deal great damage to your favored  enemies." />
-    <feat type="Lords of Madness page 44" name="Bane of the Unclean" desc="A creature with this feat hates aberrant beholders  so strongly that it gains bonuses when fighting them." />
-    <feat type="Serpent Kingdoms page 144" name="Barbed Stinger" desc="Your stinger is unusually difficult to dislodge." />
-    <feat type="Races of Faerun page 161" name="Batrider" desc="You are highly skilled in the art of flying  dire bats, a common form of transportation among the shield dwarves of the  Far Hills." />
-    <feat type="Complete Arcane page 75" name="Battle Caster" desc="Building on your existing training allows you  to avoid the chance of arcane spell failure when you wear armor heavier  than normal." />
-    <feat type="Races of the Wild page 148" name="Battle Casting" desc="You have a knack for staying out of harm's way  when casting spells." />
-    <feat type="Races of Stone page 137" name="Battle Hardened" desc="Your extensive battle experience has left you  incredibly calm and composed, even in the heat of battle." />
-    <feat type="UE page 42" name="Battle Jump" desc="You know how to launch a devastating attack  from above by dropping onto your opponent." />
-    <feat type="Miniatures Handbook page 25" name="Battlefield Inspiration" desc="You inspire courage in your allies." />
-    <feat type="Races of Eberron page 116" name="Battleshifter Training" desc="Your shifter fighting instincts grant you a  sophisticated blend of defensive techniques and controlled attacks." />
-    <feat type="Complete Warrior page 112" name="Bear Fang" desc="You have mastered the fierce style of fighting  with axe and dagger at the same time." />
-    <feat type="Epic Level Handbook page 51" name="Beast Companion" desc="You can befriend a beast." />
-    <feat type="Eberron Campaign Setting page 50" name="Beast Shape" desc="You call upon the power of your beast totem  to physically change your form." />
-    <feat type="Eberron Campaign Setting page 51" name="Beast Totem" desc="In the druidic custom of your people, you have  claimed a kind of magical beast as your totem -- a patron, protector, and  source of strength." />
-    <feat type="Epic Level Handbook page 51" name="Beast Wild Shape" desc="You can wild shape into magical beast form." />
-    <feat type="Eberron Campaign Setting page 51" name="Beasthide Elite" desc="Your shifter trait improves." />
-    <feat type="Frostburn page 47" name="Beckon the Frozen" desc="Creatures you summon are infused with cold energy  and have the cold subtype." />
-    <feat type="Lords of Madness page 179" name="Bestial Hide" desc="Your skin is thicker, scalier, or furrier than  normal." />
-    <feat type="Eberron Campaign Setting page 51" name="Bind Elemental" desc="You can craft magic items that use bound elementals  for special effects, including weapons, armor, airships, and elemental galleons." />
-    <feat type="Complete Arcane page 75" name="Black Lore of Moil" desc="Your study of the sinister knowledge and spellcasting  techniques of the long-dead Nightlords of Moil makes your necromancy spells  especially potent." />
-    <feat type="Stormwrack page 91" name="Blackwater Invocation" desc="You can call upon negative energy to infuse  normal water around you, transforming it into the dark, cold water found  at the bottom of the deepest ocean trenches." />
-    <feat type="Races of Eberron page 107" name="Bladebearer of the Valenar" desc="Your extensive training makes you especially  adept with the curved blades of the Valenar." />
-    <feat type="Unearthed Arcana page 92" name="Bladeproof Skin" desc="Your skin has a degree of protection from even  the sharpest edge." />
-    <feat type="Sandstorm page 49" name="Blazing Berserker" desc="When you enter your rage, your body becomes  infused with fire." />
-    <feat type="Sandstorm page 49" name="Blessed by Tem-Et-Nu" desc="Tem-Et-Nu has marked you as having an important  destiny in her temple." />
-    <feat type="Player's Guide to Faerun page 176" name="Blessed of the Seven Sisters" desc="As a result of a personal connection to one  of the Seven Sisters, you have a taste of Mystra's special favor." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Blind-Fight" desc="You know how to fight in melee without being  able to see your foes." />
-    <feat type="Epic Level Handbook page 51" name="Blinding Speed" desc="You can trigger short bursts of great speed." />
-    <feat type="Complete Adventurer page 114" name="Blindsense" desc="You can sense creatures that you cannot see." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 21" name="Blindsight" desc="Your senses are as keen as the bat's." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 5" name="Blindsight, 5-Foot Radius" desc="You sense opponents in the darkness." />
-    <feat type="Deities and Demigods page 49" name="Blindsight, 5-Foot Radius" desc="The deity senses opponents in the darkness." />
-    <feat type="Heroes of Battle page 96" name="Block Arrow" desc="You can block incoming arrows with your shield." />
-    <feat type="Races of Faerun page 161" name="Blood of the Warlord" desc="You can influence a large number of orcs." />
-    <feat type="Oriental Adventures page 61" name="Blood Sorcerer" desc="You are descended from Yogo, the Scorpion shugenja  who was the first guardian of the Black Scrolls of Fu Leng." />
-    <feat type="Forgotten Realms Campaign Setting page 33" name="Blooded" desc="Enemies find it difficult to catch you off guard." />
-    <feat type="Player's Guide to Faerun page 35" name="Blooded" desc="You know what it means to fight for your life,  and you understand the value of quick wits and quicker reactions when blades  are bared and deadly spells are chanted." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Bloodline of Fire" desc="You are descended from the efreet who ruled  Calimshan for two millennia." />
-    <feat type="Player's Guide to Faerun page 35" name="Bloodline of Fire" desc="You are descended from the efreet who ruled  Calimshan long ago." />
-    <feat type="Champions of Ruin page 17" name="Bloodsoaked Intimidate" desc="Your bloody and vicious approach to combat makes  you a fearsome foe." />
-    <feat type="Savage Species page 31" name="Blowhard" desc="You can blow targets over with your breath." />
-    <feat type="Complete Divine page 79" name="Boar's Ferocity" desc="You can continue fighting even at the brink  of death." />
-    <feat type="Expanded Psionics Handbook page 41" name="Body Fuel" desc="You can expand your power point total at the  expense of your health." />
-    <feat type="Serpent Kingdoms page 144" name="Body Pouch" desc="You can open a cavity in your body without harm  to yourself and use it to carry or conceal items or creatures." />
-    <feat type="Libris Mortis: The Book of the Dead page 25" name="Bolster Resistance" desc="Undead you raise or create are more resistant  to turning than normal." />
-    <feat type="Savage Species page 31" name="Bonus Breath" desc="You can use your breath weapons one more time  per day than you normally could." />
-    <feat type="Complete Divine page 89" name="Bonus Domain" desc="You have access to one additional domain of  spells." />
-    <feat type="Epic Level Handbook page 51" name="Bonus Domain" desc="You have access to one additional domain of  spells." />
-    <feat type="Races of Eberron page 108" name="Boomerang Daze" desc="You can daze the targets of your boomerang attacks." />
-    <feat type="Races of Eberron page 108" name="Boomerang Ricochet" desc="You can strike up to two foes with a single  boomerang throw." />
-    <feat type="Expanded Psionics Handbook page 43" name="Boost Construct" desc="Your astral constructs have more abilities." />
-    <feat type="Book of Vile Darkness page 47" name="Boost Spell Resistance" desc="By making a deal with an evil power, the character  makes himself even more resistant to magic." />
-    <feat type="Book of Vile Darkness page 47" name="Boost Spell-Like Ability" desc="One of the creature's spell-like abilities is  harder to resist than it otherwise would be." />
-    <feat type="Oriental Adventures page 61" name="Born Duelist" desc="You claim descent from Mirumoto, one of the  first two samurai to join Togashi in his meditative retreat." />
-    <feat type="Races of the Wild page 148" name="Born Flyer" desc="You can fly as though born to do it." />
-    <feat type="Complete Arcane page 76" name="Born of the Three Thunders" desc="You have learned to marry the power of lightning  and thunder in your electricity and sonic spells." />
-    <feat type="Underdark page 24" name="Bowslinger" desc="You can ready ranged weapons surprisingly quickly." />
-    <feat type="Complete Adventurer page 106" name="Brachiation" desc="You can swing through trees like a monkey." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 21" name="Brachiation" desc="You move through trees like a monkey." />
-    <feat type="Unearthed Arcana page 92" name="Breadth of Knowledge" desc="Your time spent plumbing the depths of magic  knowledge has resulted in a treasure trove of obscure facts." />
-    <feat type="Races of Faerun page 161" name="Breathing Link" desc="You can allow a person adjacent to you to breathe  water." />
-    <feat type="Stormwrack page 92" name="Breathing Link" desc="You can allow a person adjacent to you to breathe  water." />
-    <feat type="Player's Handbook v.3.5 page 89" name="Brew Potion" desc="You can create potions, which carry spells within  themselves." />
-    <feat type="Races of Destiny page 150" name="Bright Sigil" desc="You have established a greater degree of control  over your sigils. When you concentrate, you can emit strong illumination  from the glowing symbols that surround your head." />
-    <feat type="Complete Adventurer page 106" name="Brutal Throw" desc="You have learned how to hurl weapons to deadly  effect." />
-    <feat type="Races of Eberron page 116" name="Brute Fighting" desc="Your extensive training with two-handed weapons  is revealed through brutally effective tactics." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Bullheaded" desc="The stubbornness and determination of your kind  is legendary." />
-    <feat type="Player's Guide to Faerun page 37" name="Bullheaded" desc="The stubbornness and determination of your kind  are legendary." />
-    <feat type="Epic Level Handbook page 51" name="Bulwark of Defense" desc="Your defensive stance bonuses increase." />
-    <feat type="Races of Stone page 137" name="Burrow Friend" desc="Your natural rapport with burrowing mammals  improves." />
-    <feat type="Expanded Psionics Handbook page 43" name="Burrowing Power" desc="Your powers sometimes bypass barriers." />
-    <feat type="Races of Faerun page 161" name="Calishite Elementalist" desc="You are a student of the Calishite tradition  of elemental magic and have mastered its mysterious lore. You may choose  to specialize in air magic or fire magic." />
-    <feat type="Races of Eberron page 108" name="Call of the Undying" desc="You call upon the power of the Undying Court  to instantly recall a previously cast spell." />
-    <feat type="Races of Faerun page 162" name="Caravanner" desc="You are skilled at leading caravans along established  trade routes." />
-    <feat type="Races of the Wild page 148" name="Catfolk Pounce" desc="You can rush unaware foes and deliver several  attacks before they have a chance to respond." />
-    <feat type="Underdark page 24" name="Caustic Adaptation" desc="Long have your ancestors hunted and been hunted  in the depths. Natural selection has given your blood an unpalatable, acidic  quality." />
-    <feat type="Complete Warrior page 108" name="Cavalry Charger" desc="Fighting from the back of a steed is second  nature to you." />
-    <feat type="Underdark page 24" name="Caver" desc="You are knowledgeable about the secrets of the  subterranean world and wise in its ways." />
-    <feat type="Races of Faerun page 162" name="Celestial Bloodline" desc="Some of your latent abilities have matured." />
-    <feat type="Book of Exalted Deeds page 41" name="Celestial Familiar" desc="As long as you are able to acquire a new familiar,  you may receive a celestial as a familiar." />
-    <feat type="Planar Handbook page 38" name="Celestial Heritage" desc="You are descended from creatures native to the  Upper Planes" />
-    <feat type="Book of Exalted Deeds page 42" name="Celestial Mount" desc="Your special mount is a true creature of the  heavens." />
-    <feat type="Planar Handbook page 38" name="Celestial Summoning Specialist" desc="You can select from a larger number of options  when summoning good creatures." />
-    <feat type="Races of the Wild page 148" name="Centaur Trample" desc="You have trained to use your large body and  unique physiology against your foes. You have learned how to knock down  opponents and ride over them in combat." />
-    <feat type="Expanded Psionics Handbook page 44" name="Chain Power" desc="You can manifest powers that arc to hit other  targets in addition to the primary target." />
-    <feat type="Complete Arcane page 76" name="Chain Spell" desc="You can cast spells that arc to other targets  in addition to your primary target." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Chain Spell" desc="You can cast spells that arc to other targets  in addition to your primary target." />
-    <feat type="Champions of Ruin page 17" name="Chakram Ricochet" desc="You can hurl a chakram so that it strikes two  enemies instead of one." />
-    <feat type="Serpent Kingdoms page 144" name="Chameleon Hide" desc="You can alter the hue of your scales to match  the surrounding terrain." />
-    <feat type="Lost Empires of Faerun page 7" name="Channel Charge" desc="You can power a charged magic item with your  own magical ability." />
-    <feat type="WL page 13" name="Channel Legacy" desc="You can call upon the hidden strength within  your legacy item to empower yourself for a single spectacular effort." />
-    <feat type="Races of Destiny page 150" name="Channeled Rage" desc="You can focus your rage to counter charms and  compulsions." />
-    <feat type="Complete Adventurer page 113" name="Chant of Fortitude" desc="You can channel the power of your bardic music  to sustain your allies, allowing them to function even after receiving wounds  that would cause others to falter." />
-    <feat type="Expanded Psionics Handbook page 44" name="Chaotic Mind" desc="The turbulence of your thoughts prevents others  from gaining insight into your actions." />
-    <feat type="Epic Level Handbook page 51" name="Chaotic Rage" desc="Your rage is particularly damaging to lawful  creatures." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 78" name="Chariot Archery" desc="You are skilled at using ranged weapons from  a chariot." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 79" name="Chariot Charge" desc="You are skilled at charging with your chariot." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 78" name="Chariot Combat" desc="You are skilled in chariot combat." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 79" name="Chariot Sideswipe" desc="You are skilled at using your chariot's scythe  blades against foes." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 78" name="Chariot Trample" desc="You are trained in using your chariot to knock  down opponents." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Charlatan" desc="You're adept at fooling people. You know how  to tell them just what they want to hear." />
-    <feat type="Serpent Kingdoms page 145" name="Charm Immunity" desc="You are immune to charm effects." />
-    <feat type="Serpent Kingdoms page 145" name="Charm Resistance" desc="You can resist charm effects better than you  otherwise could." />
-    <feat type="Shining South page 19" name="Cheetah Tribe Sprint" desc="You have learned the secret of lightning-fast  running from the cheetah that roams the plains where you live." />
-    <feat type="Complete Divine page 79" name="Cheetah's Speed" desc="You can run with the speed of the cheetah." />
-    <feat type="Eberron Campaign Setting page 51" name="Child of Winter" desc="You are trained in the druidic traditions of  the Children of Winter, an Eldeen Reaches sect that embraces death and decay." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Chink in the Armor" desc="You are an expert at slipping a weapon between  armor plates or into seams." />
-    <feat type="Oriental Adventures page 61" name="Choke Hold" desc="You have learned the correct way to apply pressure  to render an opponent unconscious." />
-    <feat type="Races of Faerun page 162" name="Chondathan Missionary" desc="Your training has emphasized spells that help  you spread the word of your faith." />
-    <feat type="Frostburn page 47" name="Chosen of Iborighu" desc="You gain features that identify you as an ally  to the church of Iborighu and grant you supernatural qualities." />
-    <feat type="Player's Guide to Faerun page 135" name="Chosen Weapon Specialization" desc="You deal more damage than normal when wielding  your deity's chosen weapon." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 5" name="Circle Kick" desc="You kick multiple opponents with the same attack  action." />
-    <feat type="Ghostwalk page 29" name="Circle Magic" desc="You know how to use your connection to Galaedros  the Wood God to channel magical power to another spellcaster of your faith." />
-    <feat type="Races of Destiny page 150" name="City Slicker" desc="You are very familiar with city life and the  inner workings of your hometown." />
-    <feat type="Races of Stone page 137" name="Clan Prestige" desc="Your actions have brought you some measure of  fame and respect from your clan, whether from battle prowess or years of  service to the clan." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Cleave" desc="You can follow through with powerful blows." />
-    <feat type="Complete Warrior page 97" name="Clever Wrestling " desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
-    <feat type="Draconomicon page 103" name="Clever Wrestling" desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Clever Wrestling" desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
-    <feat type="Stormwrack page 92" name="Clever Wrestling" desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
-    <feat type="Eberron Campaign Setting page 52" name="Cliffwalk Elite" desc="Your shifter trait improves." />
-    <feat type="Races of Eberron page 113" name="Cliffwalk Elite" desc="Your cliffwalk shifter trait improves." />
-    <feat type="Complete Adventurer page 114" name="Climb Like an Ape" desc="You can improve your climbing ability." />
-    <feat type="Draconomicon page 67" name="Clinging Breath" desc="Your breath weapon clings to creatures and continues  to affect them in the round after you breath." />
-    <feat type="Expanded Psionics Handbook page 44" name="Cloak Dance" desc="You are skilled at using optical tricks to make  yourself seem to be where you are not." />
-    <feat type="Expanded Psionics Handbook page 44" name="Closed Mind" desc="Your mind is better able to resist psionics  than normal." />
-    <feat type="Races of Faerun page 162" name="Close-Quarters Fighting" desc="You are skilled at resisting grapple attacks  from creatures that usually grapple opponents." />
-    <feat type="Complete Warrior page 97" name="Close-Quarters Fighting" desc="You are skilled at fighting at close range and  resisting grapple attempts." />
-    <feat type="Draconomicon page 103" name="Close-Quarters Fighting" desc="You are skilled at fighting at close range and  resisting grapple attempts." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 5" name="Close-Quarters Fighting" desc="You are skilled at fighting at close range and  resisting grapple attacks." />
-    <feat type="Serpent Kingdoms page 145" name="Cobra Head" desc="You can extend the skin of your neck into a  cobra hood." />
-    <feat type="Frostburn page 47" name="Cold Endurance" desc="You can exist with ease in low-temperature environments." />
-    <feat type="Frostburn page 47" name="Cold Focus" desc="Your cold spells are more potent than normal." />
-    <feat type="Races of Eberron page 119" name="Cold Iron Tracery" desc="Cold-forged iron that runs through your body  allows you to overcome the supernatural defenses of certain creatures and  protecting against some magical attacks." />
-    <feat type="Frostburn page 47" name="Cold Spell Specialization" desc="You do additional damage with cold spells." />
-    <feat type="Complete Arcane page 181" name="Collegiate Wizard" desc="You have undergone extensive training in a formal  school for wizards." />
-    <feat type="Epic Level Handbook page 52" name="Colossal Wild Shape" desc="You can wild shape into animals of Colossal  size." />
-    <feat type="Complete Warrior page 151" name="Combat Archery" desc="You can fire a bow in melee safely." />
-    <feat type="Epic Level Handbook page 52" name="Combat Archery" desc="You can fire a bow in melee safely." />
-    <feat type="Complete Warrior page 110" name="Combat Brute" desc="You employ strength and leverage to great effect  in battle." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Combat Casting" desc="You are adept at casting spells in combat." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Combat Expertise" desc="You are trained at using your combat skill for  defense as well as offense." />
-    <feat type="Complete Warrior page 151" name="Combat Insight" desc="Your keen intellect allows you to place melee  attacks where they will deal the most damage." />
-    <feat type="Complete Adventurer page 106" name="Combat Intuition" desc="Your keen understanding of your opponent's moves  and your instinctive feel for the flow of combat enable you to shrewdly  assess your opponent's combat capabilities." />
-    <feat type="Expanded Psionics Handbook page 44" name="Combat Manifestation" desc="You are adept at manifesting powers in combat." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Combat Reflexes" desc="You can respond quickly and repeatedly to opponents  who let their defenses down." />
-    <feat type="Complete Arcane page 76" name="Communicator" desc="You possess a magical understanding of the essence  of language." />
-    <feat type="Races of Destiny page 150" name="Complementary Insight" desc="You get more out of having skills that work  well together." />
-    <feat type="Unearthed Arcana page 92" name="Conductivity" desc="You have crude control over electricity effects  near you." />
-    <feat type="Races of the Wild page 153" name="Confound the Big Folk" desc="You excel when battling foes bigger than you  are." />
-    <feat type="Book of Exalted Deeds page 42" name="Consecrate Spell" desc="You can imbue your spells with the raw energy  of good, by the grace of a celestial power." />
-    <feat type="Complete Divine page 79" name="Consecrate Spell" desc="You can imbue your spells with the raw energy  of good." />
-    <feat type="Book of Exalted Deeds page 42" name="Consecrate Spell Trigger" desc="You can channel holy power through a spell trigger  item, such as a wand or staff." />
-    <feat type="Book of Exalted Deeds page 42" name="Consecrate Spell-Like Ability" desc="You can channel holy power into your spell-like  abilities." />
-    <feat type="Races of Eberron page 119" name="Construct Lock" desc="Your knowledge of construct nature allows you  to deal extra damage to or even immobilize such foes." />
-    <feat type="Libris Mortis: The Book of the Dead page 25" name="Contagious Paralysis" desc="Your paralyzing attack is contagious." />
-    <feat type="Ghostwalk page 29" name="Control Visage" desc="Your ghost body is shaped as if you were alive  and unharmed, and you can control what your ghost body appears to wear." />
-    <feat type="Unearthed Arcana page 92" name="Controlled Immolation" desc="If you catch on fire, the flames don't hurt  you." />
-    <feat type="Savage Species page 31" name="Controlled Respiration" desc="You can stay out of water longer than you otherwise  could." />
-    <feat type="Oriental Adventures page 61" name="Cool Head" desc="You are descended from the great diplomat Ide,  who was chosen to be the voice of Shinjo in all dealings with strangers." />
-    <feat type="Complete Arcane page 76" name="Cooperative Spell" desc="You can cast spells to greater effect in conjunction  with the same spell cast by another individual." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Cooperative Spell" desc="You can cast spells to greater effect in conjunction  with the same spell cast by another individual." />
-    <feat type="Heroes of Battle page 96" name="Coordinated Shot" desc="You are extraordinarily talented at making ranged  attacks past your allies." />
-    <feat type="Races of the Wild page 149" name="Coordinated Strike" desc="You and your animal companion or special mount  can coordinate your melee attacks to gain an advantage in combat." />
-    <feat type="Lost Empires of Faerun page 7" name="Cormanthyran Moon Magic" desc="You have mastered the ancient elven techniques  of drawing power from Sehanine Moonbow's light." />
-    <feat type="Dragonlance Campaign Setting page 85" name="Cornered Rat" desc="You can go from piteous groveling to a murderous  fury in the blink of an eye." />
-    <feat type="Ghostwalk page 29" name="Corpse Malevolence" desc="You can possess and animate dead bodies." />
-    <feat type="Libris Mortis: The Book of the Dead page 25" name="Corpsecrafter" desc="Undead you raise or create are tougher than  normal." />
-    <feat type="Ghostwalk page 29" name="Corrupt Arcane Studies" desc="You have dabbled in strange magic that has increased  your power but adversely affected your mind." />
-    <feat type="Book of Vile Darkness page 47" name="Corrupt Spell" desc="The character can transform one of her spells  into a thing of evil due to a deal she makes with an evil power." />
-    <feat type="Complete Divine page 79" name="Corrupt Spell" desc="You can transform one of your spells into an  evil version of itself." />
-    <feat type="Champions of Ruin page 17" name="Corrupt Spell" desc="You can transform one of your spells into a  thing of evil due to a deal you make with an evil power." />
-    <feat type="Book of Vile Darkness page 48" name="Corrupt Spell-Like Ability" desc="One of the creature's spell-like abilities is  powered by evil. A dark pact provides the creature with unholy energy." />
-    <feat type="Libris Mortis: The Book of the Dead page 25" name="Corrupted Wild Shape" desc="You have learned to use the necromantic energy  that powers your undead form to overcome the inability of undead creatures  to wild shape." />
-    <feat type="Ghostwalk page 29" name="Corrupting Touch" desc="Your touch can damage creatures." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Cosmopolitan" desc="Your exposure to the thousand forking paths  of the city has taught you things you ordinarily would never have uncovered." />
-    <feat type="Player's Guide to Faerun page 37" name="Cosmopolitan" desc="You've been lied to more times than you can  count." />
-    <feat type="Complete Adventurer page 114" name="Cougar's Vision" desc="You can see in the dark like a cat." />
-    <feat type="Heroes of Battle page 97" name="Courageous Rally" desc="You can rally demoralized foes with your bardic  music." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Courteous Magocracy" desc="You were raised in a land where mighty wizards  order affairs." />
-    <feat type="Shining South page 20" name="Cover Your Tracks" desc="You are good at masking your route, making it  difficult for others to track you." />
-    <feat type="Lords of Madness page 22" name="Craft Aboleth Glyph" desc="An aboleth with this feat can create magic glyphs  that store spells or have specialized effects of their own." />
-    <feat type="Unearthed Arcana page 99" name="Craft Alchemical Item" desc="You are capable of creating alchemical items  and substances." />
-    <feat type="Expanded Psionics Handbook page 44" name="Craft Cognizance Crystal" desc="You can create psionic cognizance crystals  that store power points." />
-    <feat type="Monster Manual v.3.5 page 303" name="Craft Construct" desc="The creature can create golems and other magic  automatons that obey its orders." />
-    <feat type="Monster Manual III page 206" name="Craft Construct" desc="A creature with this feat can create golems  and other magic automatons that obey its orders" />
-    <feat type="Complete Arcane page 77" name="Craft Contingent Spell" desc="You know how to attach semipermanent spells  to a creature and set them to activate under certain conditions." />
-    <feat type="UE page 42" name="Craft Contingent Spell" desc="You know how to create contingent spells, which  are semipermanent spells that can be 'worn' and activated under certain  conditions." />
-    <feat type="Oriental Adventures page 61" name="Craft Crystal Weapon" desc="You can create magic weapons from Kuni crystal,  which is deadly to creatures of the Shadowlands." />
-    <feat type="Expanded Psionics Handbook page 44" name="Craft Dorje" desc="You can create slender crystal wands called  dorjes that manifest powers when charges are expended." />
-    <feat type="Epic Level Handbook page 52" name="Craft Epic Magic Arms and Armor" desc="You can craft magic arms and armor of epic power." />
-    <feat type="Epic Level Handbook page 52" name="Craft Epic Rod" desc="You can craft magic rods of epic power." />
-    <feat type="Epic Level Handbook page 52" name="Craft Epic Staff" desc="You can craft magic staffs of epic power." />
-    <feat type="Epic Level Handbook page 52" name="Craft Epic Wondrous Item" desc="You can craft wondrous items of epic power." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Craft Magic Arms and Armor" desc="You can create magic weapons, armor, and shields." />
-    <feat type="Unearthed Arcana page 99" name="Craft Masterwork Armor" desc="You are trained in the creation of fine armor  and shields." />
-    <feat type="Unearthed Arcana page 99" name="Craft Masterwork Ranged Weapon" desc="You are trained in the creation of fine ranged  weapons and ammunition." />
-    <feat type="Unearthed Arcana page 99" name="Craft Masterwork Weapon" desc="You are trained in the creation of fine melee  and thrown weapons." />
-    <feat type="Expanded Psionics Handbook page 44" name="Craft Psicrown" desc="You can create psicrowns, which have multiple  psionic effects." />
-    <feat type="Expanded Psionics Handbook page 44" name="Craft Psionic Arms and Armor" desc="You can create psionic weapons, armor, and shields." />
-    <feat type="Expanded Psionics Handbook page 45" name="Craft Psionic Construct" desc="You can create golems and other psionic automatons  that obey your orders." />
-    <feat type="Lords of Madness page 69" name="Craft Psionic Seal" desc="A creature with this feat can create psionic  glyphs or symbols that hold spells or psionic powers until triggered." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Craft Rod" desc="You can create magic rods, which have varied  magical effects." />
-    <feat type="Races of Stone page 137" name="Craft Rune Circle" desc="You can create rune circles, stationary magic  items that hold a variety of spells and effects." />
-    <feat type="Lost Empires of Faerun page 8" name="Craft Scepter" desc="You know the ancient Netherese secret of creating  magic scepters." />
-    <feat type="Frostburn page 47" name="Craft Skull Talisman" desc="You can create skull talismans, which carry  spells within themselves." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Craft Staff" desc="You can create magic staffs, each of which has  multiple magical effects." />
-    <feat type="Oriental Adventures page 61" name="Craft Talisman" desc="You can create magic fetishes, single-use magic  items that hold spells until triggered." />
-    <feat type="Expanded Psionics Handbook page 45" name="Craft Universal Item" desc="You can create universal psionic items." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Craft Wand" desc="You can create wands, which hold spells." />
-    <feat type="Player's Handbook v.3.5 page 92" name="Craft Wondrous Item" desc="You can create a wide variety of magic items." />
-    <feat type="Champions of Ruin page 17" name="Craven" desc="Like most sly rogues, you are a dangerous coward.  However, your sneak attacks deal more damage than normal." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Create Infusion" desc="You store a divine spell within a specially  prepared herb." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Create Portal" desc="You have learned the ancient craft of creating  a portal." />
-    <feat type="Complete Warrior page 113" name="Crescent Moon" desc="You have mastered the style of fighting with  sword and dagger." />
-    <feat type="Races of Destiny page 156" name="Crowd Tactics" desc="You are adept at moving through and fighting  in crowds." />
-    <feat type="Savage Species page 31" name="Crush" desc="Like a dragon, you can hurl your body onto opponents  to deal tremendous damage." />
-    <feat type="Savage Species page 31" name="Cumbrous Dodge" desc="You have a chance to dodge attacks that hit  you, but at a cost." />
-    <feat type="Savage Species page 31" name="Cumbrous Fortitude" desc="You have a greater chance than normal to resist  attacks against your vitality, but at a cost." />
-    <feat type="Savage Species page 31" name="Cumbrous Reflexes" desc="You have a greater chance to resist attacks  against your agility, but at a cost." />
-    <feat type="Savage Species page 31" name="Cumbrous Will" desc="You have a greater chance to resist attacks  against your willpower, but at a cost." />
-    <feat type="Draconomicon page 103" name="Cunning Sidestep" desc="You have a better than normal chance to avoid  being bull rushed or tripped." />
-    <feat type="WL page 14" name="Curative Legacy" desc="Your item's legacy is so linked with your aura  that it restores your health each time it is activated." />
-    <feat type="Stormwrack page 92" name="Curling Wave Strike" desc="Mimicking the forceful power of the wave, you  can trip multiple foes as part of the same strike." />
-    <feat type="Races of the Wild page 149" name="Dallah Thaun's Luck" desc="You can rely on a good dose of luck to get you  through almost any scrape." />
-    <feat type="Complete Warrior page 151" name="Damage Reduction" desc="You can shrug off some damage from attacks." />
-    <feat type="Epic Level Handbook page 52" name="Damage Reduction" desc="You can shrug off some damage from attacks." />
-    <feat type="Ghostwalk page 30" name="Dancing Blade" desc="You have an energetic fighting style modeled  after traditional Salkirian dancing." />
-    <feat type="Races of Eberron page 117" name="Dancing with Shadows" desc="You have studied shesan talarash dasyannah,  the martial dance of the kalashtar." />
-    <feat type="Complete Adventurer page 106" name="Danger Sense" desc="You are one twitchy individual." />
-    <feat type="Miniatures Handbook page 25" name="Danger Sense" desc="You are one twitchy mother goose." />
-    <feat type="Races of Eberron page 108" name="Darguun Mauler" desc="The memory of your people's lost glory drives  your brutal mastery of the weapons of Darguun." />
-    <feat type="Book of Vile Darkness page 48" name="Dark Speech" desc="The character learns a smattering of the language  of truly dark power." />
-    <feat type="Lords of Madness page 179" name="Darkstalker" desc="You have learned how to stalk and surprise creatures  whose senses are very different from those of a humanoid." />
-    <feat type="Complete Warrior page 97" name="Dash" desc="You can move faster than normal." />
-    <feat type="Miniatures Handbook page 25" name="Dash" desc="You can move faster than normal." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Dash" desc="You move faster than normal for your race." />
-    <feat type="Libris Mortis: The Book of the Dead page 25" name="Daunting Presence" desc="You are skilled at inducing fear in your opponents." />
-    <feat type="Miniatures Handbook page 25" name="Daunting Presence" desc="You are skilled at inducing fear in your opponents." />
-    <feat type="Player's Guide to Faerun page 37" name="Dauntless" desc="You can stand up to greater punishment than  most and still keep going." />
-    <feat type="Player's Guide to Faerun page 37" name="Daylight Adaptation" desc="You have accustomed yourself to the painful  sunlight of the surface world." />
-    <feat type="Races of Eberron page 108" name="Daylight Adaptation" desc="You have grown accustomed to living in the surface  world, such that bright light no longer blinds or dazzles you." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Daylight Adaptation" desc="Through long exile from the shadowed homelands  of your kind, you have learned to endure the painful sunlight of the surface  world." />
-    <feat type="Libris Mortis: The Book of the Dead page 25" name="Deadly Chill" desc="Undead you raise or create deal more damage  than normal." />
-    <feat type="Serpent Kingdoms page 145" name="Deadly Poison" desc="Your poison attack deals more damage than normal." />
-    <feat type="Savage Species page 31" name="Deadly Poison" desc="Your poison attack deals more damage than normal." />
-    <feat type="Expanded Psionics Handbook page 45" name="Deadly Precision" desc="You empty your mind of all distracting emotion,  becoming an instrument of deadly precision." />
-    <feat type="Serpent Kingdoms page 145" name="Deadly Spittle" desc="You can use your spit attack against multiple  opponents." />
-    <feat type="Epic Level Handbook page 52" name="Deafening Song" desc="Your bardic music deafens those nearby." />
-    <feat type="Complete Adventurer page 106" name="Death Blow" desc="You waste no time in dealing with downed foes." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Death Blow" desc="You waste no time in dealing with downed foes." />
-    <feat type="Lords of Madness page 22" name="Death Frenzy" desc="When an aboleth takes this feat, its sense of  immortality rebels against the very concept of death." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Death Master" desc="Foes are especially afraid of your critical  hits." />
-    <feat type="Epic Level Handbook page 52" name="Death of Enemies" desc="You can instantly slay your favored enemies  with a single strike." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Deceitful" desc="You have a knack for disguising the truth." />
-    <feat type="Savage Species page 32" name="Deep Denizen" desc="You are adapted to a subterranean environment." />
-    <feat type="Expanded Psionics Handbook page 45" name="Deep Impact" desc="You can strike your foe with a melee weapon  as if making a touch attack." />
-    <feat type="Races of Stone page 137" name="Deep Vision" desc="Your mental focus helps you see farther with  darkvision." />
-    <feat type="Races of Faerun page 162" name="Deepening Darkness" desc="Your inherent ability to create darkness is  more powerful than normal." />
-    <feat type="Lords of Madness page 179" name="Deepspawn" desc="Your body undergoes a shocking degeneration  into something that is strikingly inhuman." />
-    <feat type="Races of the Wild page 150" name="Defensive Archery" desc="You can avoid attacks of opportunity when making  ranged attacks while threatened." />
-    <feat type="Complete Warrior page 97" name="Defensive Strike" desc="You can turn a strong defense into a powerful  offense." />
-    <feat type="Oriental Adventures page 62" name="Defensive Strike" desc="You can turn a strong defense into a powerful  offense." />
-    <feat type="Complete Warrior page 97" name="Defensive Throw" desc="You can use your opponent's weight, strength,  and momentum against her, deflecting her attack and throwing her to the  ground." />
-    <feat type="Oriental Adventures page 62" name="Defensive Throw" desc="You can use your opponent's  weight, strength, and momentum against her, deflecting her attack and throwing  her to the ground." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Deflect Arrows" desc="You can deflect incoming arrows, as well as  crossbow bolts, spears, and other projectile or thrown weapons." />
-    <feat type="Races of Stone page 137" name="Deflective Armor" desc="Your armor shields you from touch attacks as  well as regular blows." />
-    <feat type="Book of Vile Darkness page 48" name="Deformity (Clawed Hands)" desc="Because of intentional self-mutilation, the  character has deformed arms and hands ending in sharp claws." />
-    <feat type="Book of Vile Darkness page 48" name="Deformity (Eyes)" desc="The character has either drilled a hole in her  forehead trying to add a third eye, or she has supernaturally scarred one  of her regular eyes." />
-    <feat type="Book of Vile Darkness page 48" name="Deformity (Face)" desc="Because of intentional self-mutilation, the  character has a hideous face." />
-    <feat type="Book of Vile Darkness page 48" name="Deformity (Gaunt)" desc="Through intentional starvation and macabre operations,  the character is grossly underweight." />
-    <feat type="Book of Vile Darkness page 48" name="Deformity (Obese)" desc="Through intentional gorging and general gluttony,  the character is obese." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Deft Hands" desc="You have exceptional manual dexterity." />
-    <feat type="Complete Adventurer page 106" name="Deft Opportunist" desc="You are prepared for the unexpected." />
-    <feat type="Miniatures Handbook page 25" name="Deft Opportunist" desc="You are prepared for the unexpected." />
-    <feat type="Complete Adventurer page 106" name="Deft Strike" desc="You can place attacks at weak points in your  opponent's defenses." />
-    <feat type="Draconomicon page 103" name="Deft Strike" desc="You can place attacks at weak points in your  opponent's defenses." />
-    <feat type="Expanded Psionics Handbook page 45" name="Delay Power" desc="You can manifest powers that go off up to 5  rounds later." />
-    <feat type="Complete Arcane page 77" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
-    <feat type="Player's Guide to Faerun page 37" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
-    <feat type="Champions of Ruin page 22" name="Demonsworn Knight" desc="A scornful champion of the demon princes, you  detest and oppose devils and other creatures that refuse to heed the call  of chaos." />
-    <feat type="Savage Species page 32" name="Desert Dweller" desc="You are adapted to a desert environment." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Destruction Retribution" desc="Undead you raise or create harbor a retributive  curse that is unleashed if they are destroyed." />
-    <feat type="Complete Warrior page 97" name="Destructive Rage" desc="You can shatter barriers and objects when enraged." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Destructive Rage" desc="You shatter barriers and objects when enraged." />
-    <feat type="Savage Species page 32" name="Detach" desc="You can remove a part of your body and use it  as a ranged weapon." />
-    <feat type="Draconomicon page 68" name="Devastating Critical" desc="Choose one type of melee weapon, such as a claw  or bite. With that weapon, you are capable of killing any creature with  a single strike." />
-    <feat type="Epic Level Handbook page 53" name="Devastating Critical" desc="Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you are capable of killing any creature with  a single strike." />
-    <feat type="Complete Adventurer page 107" name="Devoted Inquisitor" desc="Your faithful service to your patron deity involves  training and methods that many paladins consider questionable." />
-    <feat type="Complete Adventurer page 107" name="Devoted Performer" desc="You have foregone the pursuit of frivolous musical  talents, instead entering religious training in service of honor and justice." />
-    <feat type="Complete Adventurer page 108" name="Devoted Tracker" desc="You have found a balance between your woodland  training and your devotion to religious training, blending these two aspects  into one seamless whole." />
-    <feat type="Epic Level Handbook page 53" name="Dexterous Fortitude" desc="You are able to resist physical attacks with  exceptional agility." />
-    <feat type="Epic Level Handbook page 53" name="Dexterous Will" desc="You are able to resist compelling effects with  exceptional agility." />
-    <feat type="Ghostwalk page 30" name="Diehard" desc="You can remain conscious after attacks that  would fell others." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Diehard" desc="You can remain conscious after attacks that  would fell others." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Diligent" desc="Your meticulousness allows you to analyze minute  details that others miss." />
-    <feat type="Epic Level Handbook page 53" name="Diminutive Wild Shape" desc="You can wild shape into animals of Diminutive  size." />
-    <feat type="Races of Eberron page 108" name="Dinosaur Hunter" desc="Your extraordinary knowledge of dinosaurs grants  you a special aptitude for tracking and hunting them." />
-    <feat type="Races of Eberron page 108" name="Dinosaur Wrangler" desc="You are attuned to dinosaurs and possess a special  bond with them." />
-    <feat type="Draconomicon page 68" name="Dire Charge" desc="You can make a full attack as part of a charge." />
-    <feat type="Epic Level Handbook page 53" name="Dire Charge" desc="You can make a full attack as part of a charge." />
-    <feat type="Champions of Ruin page 17" name="Dire Flail Smash" desc="You have mastered the style of fighting with  the dire flail and have learned to deal thunderous blows with the weapon." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Dirty Fighting" desc="You know the brutal and effective fighting tactics  of the streets and back alleys." />
-    <feat type="Champions of Ruin page 20" name="Dirty Rat" desc="You are quite adept at slipping under a foe's  guard while he's distracted." />
-    <feat type="Book of Vile Darkness page 49" name="Disciple of Darkness" desc="The character formally supplicates himself to  an archdevil." />
-    <feat type="Champions of Ruin page 23" name="Disciple of Darkness" desc="You formally supplicate yourself to an archdevil.  In return for this obedience, you gain a small measure of the archdevil's  power." />
-    <feat type="Complete Divine page 80" name="Disciple of the Sun" desc="You can destroy undead instead of merely turning  them." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Discipline" desc="Your people are admired for their single-minded  determination and clarity of purpose." />
-    <feat type="Oriental Adventures page 62" name="Discipline" desc="Your ancestor, Naka Kaeteru, was the first Grand  Master of all the elements, a master of meditation and contemplation." />
-    <feat type="Player's Guide to Faerun page 38" name="Discipline" desc="Your people are admired for their single-minded  determination and clarity of purpose." />
-    <feat type="Races of Faerun page 162" name="Disentangler" desc="Thanks to the teachings of Thard Harr, you have  practiced evading the attacks of jungle plants." />
-    <feat type="Complete Adventurer page 108" name="Disguise Spell" desc="You can cast spells without observers noticing." />
-    <feat type="Deities and Demigods page 50" name="Disguise Spell" desc="The deity can cast spells without observers  noticing it." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Disguise Spell" desc="You can cast spells without observers noticing." />
-    <feat type="Lords of Madness page 44" name="Disintegration Finesse" desc="A creature with this feat can use disintegrate  effects to affect smaller, more exacting areas." />
-    <feat type="Lords of Madness page 45" name="Disjunction Ray" desc="A beholder with this feat can narrow its antimagic  cone down to an eye ray that disjoins magic." />
-    <feat type="Epic Level Handbook page 53" name="Distant Shot" desc="You can target a thing you can see with a ranged  weapon." />
-    <feat type="Races of Eberron page 117" name="Disturbing Visage" desc="You can change your features to chilling effect." />
-    <feat type="Complete Adventurer page 108" name="Dive for Cover" desc="You can dive behind cover or drop to the ground  quickly enough to avoid many area effects." />
-    <feat type="Races of Destiny page 156" name="Diverse Background" desc="You have a wide and diverse background, giving  you a greater understanding of different occupations." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Divine Accuracy" desc="You can channel positive energy to give your  allies' melee attacks another chance to strike true against incorporeal  creatures." />
-    <feat type="Complete Warrior page 106" name="Divine Cleansing " desc="You can channel energy to improve your allies'  ability to resist attacks against their vitality and health." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Cleansing" desc="You can channel energy to improve you and your  allies' ability to resist poison and curses." />
-    <feat type="Races of Stone page 137" name="Divine Damage Reduction" desc="You can channel energy to give yourself a small  amount of protection from weapons." />
-    <feat type="Ghostwalk page 30" name="Divine Energy Focus" desc="You have a gift for channeling positive or negative  energy." />
-    <feat type="Complete Divine page 80" name="Divine Metamagic" desc="You can channel energy into some of your divine  spells to make them more powerful." />
-    <feat type="Complete Warrior page 106" name="Divine Might" desc="You can channel energy to increase the damage  you deal in combat." />
-    <feat type="Deities and Demigods page 50" name="Divine Might" desc="The deity can channel energy to increase its  damage in combat." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Might" desc="You can channel energy to increase the damage  you deal in combat." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Divine Might" desc="You can channel energy to increase your damage  in combat." />
-    <feat type="Complete Warrior page 106" name="Divine Resistance" desc="You can channel energy to temporarily reduce  damage you and your allies take from some sources." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Resistance" desc="You can channel energy to temporarily reduce  damage you and your allies take from some sources." />
-    <feat type="Complete Warrior page 106" name="Divine Shield" desc="You can channel energy to make your shield more  effective for either offense or defense." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Shield" desc="You can channel energy to make your shield more  effective for either offense or defense." />
-    <feat type="Player's Guide to Faerun page 135" name="Divine Spell Penetration" desc="Choose one component of your alignment. Any  divine spells of that alignment that you cast are more capable of defeating  spell resistance than normal." />
-    <feat type="Complete Divine page 80" name="Divine Spell Power" desc="You can channel positive or negative energy  to enhance your divine spellcasting ability." />
-    <feat type="Races of Stone page 137" name="Divine Spellshield" desc="You can channel energy to help your allies resist  spells and spell-like effects." />
-    <feat type="Deities and Demigods page 50" name="Divine Vengeance" desc="The deity can channel energy to do additional  damage in combat against undead." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Divine Vengeance" desc="You can channel energy to deal additional damage  against undead in melee." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Divine Vengeance" desc="You channel energy to do additional energy damage  in combat against undead." />
-    <feat type="Complete Warrior page 108" name="Divine Vigor" desc="You can channel energy to increase your speed  and durability." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Divine Vigor" desc="You can channel energy to increase your speed  and Constitution." />
-    <feat type="Races of the Wild page 150" name="Diving Charge" desc="You can dive down at a target to deal a devastating  strike." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Dodge" desc="You are adept at dodging blows." />
-    <feat type="Complete Divine page 80" name="Domain Focus" desc="You have mastered the subtle intricacies of  the divine power you've devoted yourself to." />
-    <feat type="Complete Divine page 80" name="Domain Spontaneity " desc="You are so familiar with one of your domains  that you can convert other prepared spells into spells from that domain." />
-    <feat type="Champions of Ruin page 20" name="Doomspeak" desc="You can demoralize an enemy with horrible condemnations  and grim portents of impending doom." />
-    <feat type="Miniatures Handbook page 25" name="Double Hit" desc="You can react with your off hand to make an  additional attack along with an attack of opportunity." />
-    <feat type="Eberron Campaign Setting page 52" name="Double Steel Strike" desc="Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the two-bladed  sword." />
-    <feat type="Complete Arcane page 77" name="Double Wand Wielder" desc="You can activate two wands at the same time." />
-    <feat type="Dragonlance Campaign Setting page 85" name="Draconian Breath Weapon" desc="You have harnessed your draconic heritage and  can attack with a dragonlike breath weapon." />
-    <feat type="Complete Arcane page 77" name="Draconic Breath" desc="You can convert your arcane spells into a breath  weapon." />
-    <feat type="Complete Arcane page 77" name="Draconic Claw" desc="You develop the natural weapons of your draconic  ancestors." />
-    <feat type="Complete Arcane page 77" name="Draconic Flight" desc="The secret of draconic flight is revealed to  you, granting you the ability to fly occasionally." />
-    <feat type="Complete Arcane page 77" name="Draconic Heritage" desc="You have greater connection with your distant  draconic bloodline." />
-    <feat type="Draconomicon page 69" name="Draconic Knowledge" desc="You are attuned to nature and the elements and  can draw on deep wells of knowledge." />
-    <feat type="Complete Arcane page 78" name="Draconic Legacy" desc="You have realized greater arcane power through  your draconic heritage." />
-    <feat type="Complete Arcane page 78" name="Draconic Power" desc="You have greater power manipulating the energies  of your heritage." />
-    <feat type="Complete Arcane page 78" name="Draconic Presence" desc="When you use your magic, your mere presence  can terrify those around you." />
-    <feat type="Complete Arcane page 78" name="Draconic Resistance" desc="Your bloodline hardens your body against the  energy type of your progenitor." />
-    <feat type="Complete Arcane page 78" name="Draconic Skin" desc="Your skin takes on the sheen, luster, and hardness  of your draconic parentage." />
-    <feat type="Draconomicon page 104" name="Dragon Cohort" desc="You gain the service of a loyal dragon ally." />
-    <feat type="Draconomicon page 104" name="Dragon Familiar" desc="When you are able to acquire a new familiar,  you may select a wyrmling dragon as a familiar." />
-    <feat type="Draconomicon page 104" name="Dragon Hunter " desc="You have made a special study of dragons and  know how to defend against a dragon's attacks." />
-    <feat type="Draconomicon page 104" name="Dragon Hunter Bravery " desc="You resist dragons' frightful presence, and  your mere presence helps others resist as well." />
-    <feat type="Draconomicon page 104" name="Dragon Hunter Defense" desc="Your insight into the tactics and abilities  of dragons grants you awareness of how best to avoid their magical attacks." />
-    <feat type="Eberron Campaign Setting page 52" name="Dragon Rage" desc="You call upon the power of your dragon totem  to enhance your barbarian rage." />
-    <feat type="Draconomicon page 105" name="Dragon Steed" desc="You have earned the service of a loyal draconic  steed." />
-    <feat type="Eberron Campaign Setting page 52" name="Dragon Totem" desc="As a proud warrior of the barbarian tribes of  Argonnessen and Seren, you have claimed one of the true dragon types as  your totem -- a patron, protector, and source of strength." />
-    <feat type="Draconomicon page 105" name="Dragon Wild Shape" desc="You can take the form of a dragon." />
-    <feat type="Epic Level Handbook page 53" name="Dragon Wild Shape" desc="You can take the form of a dragon." />
-    <feat type="Draconomicon page 105" name="Dragonbane" desc="You have made a special study of dragons and  are adept at pulling off deliberate attacks that take advantage of a dragon's  weak spots." />
-    <feat type="Draconomicon page 105" name="Dragoncrafter" desc="You can make special weapons, armor, and other  items using parts of dragons as materials." />
-    <feat type="Draconomicon page 105" name="Dragondoom" desc="You have learned how to place blows against  a dragon that deal tremendous damage." />
-    <feat type="Draconomicon page 105" name="Dragonfoe" desc="You have learned how to attack dragons more  effectively than most other individuals." />
-    <feat type="Draconomicon page 105" name="Dragonfriend" desc="You are a known and respected ally of dragons." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Dragon's Toughness" desc="You are incredibly tough." />
-    <feat type="Draconomicon page 105" name="Dragonsong " desc="Your song or poetics echo the power of the dragonsong,  an ancient style of vocal performance created by dragons in the distant  past." />
-    <feat type="Draconomicon page 105" name="Dragonthrall" desc="You have pledged your life to the service of  evil dragonkind." />
-    <feat type="UE page 43" name="Draw from the Land" desc="You can draw strength and sustenance from the  land itself." />
-    <feat type="Races of Destiny page 154" name="Dread Tyranny" desc="A devoted student of Hextor's militant teachings,  you are skilled at intimidating and dominating weaker beings." />
-    <feat type="Player's Guide to Faerun page 38" name="Dreadful Wrath" desc="You are terrible to behold in battle, and few  foes have the heart to face you without quailing" />
-    <feat type="Races of Eberron page 113" name="Dreamsight Elite" desc="Your dreamsight shifter trait improves." />
-    <feat type="Sandstorm page 49" name="Drift Magic" desc="You can tap the power of drift magic." />
-    <feat type="Races of Faerun page 162" name="Drow Eyes" desc="You have trained your eyes to see in the dark  as well as your full drow ancestors." />
-    <feat type="Races of Eberron page 109" name="Drow Skirmisher" desc="Your experience with the guerrilla-style combat  of the deep jungle grants you mastery of the weapons of the drow." />
-    <feat type="Complete Adventurer page 108" name="Dual Strike" desc="You are an expert skirmisher skilled at fighting  with two weapons." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Dual Strike" desc="Your combat teamwork makes you a more dangerous  foe." />
-    <feat type="Races of Faerun page 162" name="Duergar Mindshaper" desc="You are accomplished at using the power of your  mind to overcome weaker personalities." />
-    <feat type="City of Splendors: Waterdeep page 144" name="Dungeoneer's Intuition" desc="You can sense when things don't feel right,  and you have a knack for avoiding deadly traps and ambushes." />
-    <feat type="Lords of Madness page 180" name="Durable Form" desc="You are much more resilient than the fragile  humanoids that do not share your aberrant heritage." />
-    <feat type="Savage Species page 33" name="Dust Cloud" desc="You can sweep dust into the air to hide from  opponents." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Dwarf's Toughness" desc="You are tougher than you were before." />
-    <feat type="Races of Stone page 138" name="Dwarven Armor Proficiency" desc="You are familiar with exotic armor of dwarven  manufacture and understand how to use it properly." />
-    <feat type="Complete Warrior page 97" name="Eagle Claw Attack" desc="Your superior insight allows you to strike objects  with impressive force." />
-    <feat type="Oriental Adventures page 62" name="Eagle Claw Attack" desc="Your unarmed attacks can shatter objects." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Eagle Claw Attack" desc="Your unarmed attacks shatter objects." />
-    <feat type="Shining South page 20" name="Eagle Tribe Vision" desc="You have keen eyesight reminiscent of the giant  eagles that fly over your tribal lands." />
-    <feat type="Sandstorm page 49" name="Eagle's Fury" desc="You know how to wield the eagle's claw with  deadly speed." />
-    <feat type="Complete Divine page 80" name="Eagle's Wings" desc="You can take wing and fly with the grace of  an eagle." />
-    <feat type="Races of Stone page 138" name="Earth Adept" desc="You are in tune with the ground at your feet,  making you more dangerous in the shifting conditions of combat." />
-    <feat type="Races of Stone page 138" name="Earth Fist" desc="Your bond with the earth and martial training  has imbued your fists with the qualities of cold iron." />
-    <feat type="Planar Handbook page 38" name="Earth Heritage" desc="You are descended from creatures native to the  Elemental Plane of Earth." />
-    <feat type="Races of Stone page 138" name="Earth Master" desc="You are in tune with the ground at your feet,  helping you anticipate your opponent's movements in combat." />
-    <feat type="Races of Stone page 138" name="Earth Power" desc="You draw psionic energy from raw stone." />
-    <feat type="Races of Stone page 138" name="Earth Sense" desc="You are in tune with the earth beneath you." />
-    <feat type="Races of Stone page 138" name="Earth Spell" desc="You draw magical power from the earth beneath  your feet." />
-    <feat type="Complete Warrior page 97" name="Earth's Embrace" desc="You can crush opponents when you grapple them." />
-    <feat type="Oriental Adventures page 62" name="Earth's Embrace" desc="You can crush opponents when you grapple them." />
-    <feat type="Races of Stone page 139" name="Earth's Warding" desc="You can channel energy to infuse your skin with  the strength of the earth." />
-    <feat type="Eberron Campaign Setting page 52" name="Ecclesiarch" desc="You command a degree of respect in your church's  hierarchy." />
-    <feat type="Ghostwalk page 30" name="Ectoplasm" desc="You can create ectoplasm, a gooey physical manifestation  of base supernatural spiritual energy." />
-    <feat type="Eberron Campaign Setting page 52" name="Education" desc="Some lands hold the pen in higher regard than  the sword." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Education" desc="In your youth you received the benefit of several  years of more or less formal schooling." />
-    <feat type="Ghostwalk page 31" name="Education" desc="In your youth you received the benefit of several  years of more or less formal schooling." />
-    <feat type="Player's Guide to Faerun page 38" name="Education" desc="You hail from a land where the pen is held in  higher regard than the sword." />
-    <feat type="Epic Level Handbook page 53" name="Efficient Item Creation" desc="Select an item creation feat. You can create  magic items using that feat much more quickly than normal." />
-    <feat type="Races of Faerun page 162" name="Eldritch Linguist" desc="You have a deep understanding of how words themselves  have their own kind of magic, and a mastery of the secret syntax of power." />
-    <feat type="Races of Faerun page 163" name="Elemental Bloodline" desc="You have taken on some of the aspects of the  type of element that infuses your flesh." />
-    <feat type="Complete Divine page 80" name="Elemental Healing" desc="You can channel elemental energy to heal creatures  of a specific elemental subtype." />
-    <feat type="Complete Divine page 81" name="Elemental Smiting" desc="You can channel elemental energy to deal extra  damage to creatures tied to a specific element." />
-    <feat type="Planar Handbook page 39" name="Elemental Spellcasting" desc="Choose an element. You cast spells with that  descriptor more effectively than normal." />
-    <feat type="Complete Divine page 81" name="Elephant's Hide" desc="You can thicken your skin to the toughness of  an elephant's." />
-    <feat type="Races of the Wild page 150" name="Elf Dilettante" desc="Throughout the long years of your life, you  have developed a talent for doing just about anything." />
-    <feat type="Underdark page 25" name="Elfhunter" desc="Because of your cultural hatred for elves, you  have had specific training in how best to fight them." />
-    <feat type="Complete Warrior page 110" name="Elusive Target " desc="Trying to land a blow against you can be a maddening  experience." />
-    <feat type="Draconomicon page 69" name="Embed Spell Focus" desc="You can embed focus components required for  your spells into your body." />
-    <feat type="WL page 14" name="Empower Legacy" desc="You can use one of your item's legacy abilities  to greater effect." />
-    <feat type="Expanded Psionics Handbook page 46" name="Empower Power" desc="You can manifest powers to greater effect." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Empower Spell" desc="You can cast spells to greater effect." />
-    <feat type="Book of Vile Darkness page 49" name="Empower Spell-Like Ability" desc="The creature can use a spell-like ability with  greater effect." />
-    <feat type="Monster Manual v.3.5 page 303" name="Empower Spell-Like Ability" desc="The creature can use a spell-like ability with  greater effect than normal." />
-    <feat type="Monster Manual III page 206" name="Empower Spell-Like Ability" desc="A creature with this feat can use a spell-like  ability with greater effect than normal." />
-    <feat type="Savage Species page 33" name="Empower Spell-Like Ability" desc="You can use a spell-like ability with greater  effect than normal." />
-    <feat type="Complete Divine page 81" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
-    <feat type="Ghostwalk page 31" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Empower Turning" desc="You can turn or rebuke greater numbers of undead  with a single turning attempt." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Empowered Ability Damage" desc="Your ability damage (or ability drain) special  attack is more potent than normal." />
-    <feat type="Oriental Adventures page 80" name="Empty Hand Mastery" desc="You have mastered the martial arts style of  'Empty Hand' -- a hard form emphasizing strikes with the hand." />
-    <feat type="Races of Stone page 139" name="Enchanting Song" desc="You can channel the power of your bardic music  to temporarily increase the power of your enchantment spells." />
-    <feat type="Player's Handbook v.3.5 page 93" name="Endurance" desc="You are capable of amazing feats of stamina." />
-    <feat type="Draconomicon page 70" name="Endure Blows" desc="You are adept at lessening the effects of blows." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Endure Sunlight" desc="Your vulnerability to sunlight is reduced." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Enduring Life" desc="You can ignore the effect of negative levels  for a short time." />
-    <feat type="Races of Stone page 139" name="Energize Armor" desc="You can charge your armor with psionic energy,  making it resistant to energy damage." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Energize Spell" desc="Your spells channel positive energy to deal  extra damage to undead creatures, but are less effective against other opponents." />
-    <feat type="Complete Arcane page 78" name="Energy Admixture" desc="You can modify a spell that uses one type of  energy to add an equal amount of another energy type." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Energy Admixture" desc="You can modify a spell that uses one type of  energy to mix in an equal amount of another type of energy." />
-    <feat type="Miniatures Handbook page 25" name="Energy Affinity" desc="You can modify a spell that uses one type of  energy to use another type of energy." />
-    <feat type="Epic Level Handbook page 53" name="Energy Resistance" desc="You can resist the effects of a chosen type  of energy." />
-    <feat type="Complete Arcane page 79" name="Energy Substitution" desc="You can modify an energy-based spell to use  another type of energy instead." />
-    <feat type="Deities and Demigods page 50" name="Energy Substitution" desc="The deity can modify a spell that uses energy  to use another type of energy." />
-    <feat type="Magic of Faerun page 21" name="Energy Substitution" desc="You can modify a spell that uses one type of  energy to use another type of energy." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Energy Substitution" desc="You can modify a spell that uses one type of  energy to use another type of energy." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Enervate Spell" desc="Your spells channel negative energy to deal  extra damage to undead creatures, but are less effective against unliving  opponents." />
-    <feat type="Ghostwalk page 31" name="Enervating Touch" desc="Your touch can bestow negative levels upon creatures." />
-    <feat type="Races of Faerun page 163" name="Enervative Healing" desc="You can use the life energy of an opponent to  heal yourself." />
-    <feat type="Player's Guide to Faerun page 135" name="Enhance Effect" desc="You can change the characteristics of a persistent  spell effect that is already in place." />
-    <feat type="Epic Level Handbook page 114" name="Enhance Item" desc="You can increase the minimum DC for saving throws  of magic items that you" />
-    <feat type="Complete Arcane page 191" name="Enhance Spell" desc="You can increase the power limit of your damage-dealing  spells." />
-    <feat type="Epic Level Handbook page 53" name="Enhance Spell" desc="You can increase the power limit of your damage-dealing  spells." />
-    <feat type="Underdark page 25" name="Enhanced Adhesive" desc="The natural adhesive you secrete becomes stickier." />
-    <feat type="Races of Destiny page 152" name="Enhanced Power Sigils" desc="Your illumian power sigils are more powerful  than normal." />
-    <feat type="Draconomicon page 70" name="Enlarge Breathe" desc="Your breath weapon is larger than normal." />
-    <feat type="Lords of Madness page 22" name="Enlarge Mucus Cloud" desc="An aboleth with this feat can extend its mucus  cloud into a wider area." />
-    <feat type="Expanded Psionics Handbook page 46" name="Enlarge Power" desc="You can manifest powers farther than normal." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Enlarge Spell" desc="You can cast spells farther than normal." />
-    <feat type="Champions of Ruin page 20" name="Entangling Spell" desc="Your spell releases residual eldritch power  that entangles your enemies." />
-    <feat type="Complete Warrior page 151" name="Epic Combat Expertise " desc="You have extraordinary talent at using your  combat skill for defense." />
-    <feat type="Player's Guide to Faerun page 135" name="Epic Counterspell" desc="You can counterspell any number of spells each  round." />
-    <feat type="Complete Divine page 89" name="Epic Devotion" desc="Choose an alignment component different from  your own alignment. You are particularly resistant to spells of that alignment." />
-    <feat type="Player's Guide to Faerun page 135" name="Epic Devotion" desc="Choose an alignment component that you do not  possess. You are particularly resistant to spells with that descriptor." />
-    <feat type="Complete Adventurer page 191" name="Epic Dodge" desc="You are able to evade attacks with exceptional  agility." />
-    <feat type="Epic Level Handbook page 54" name="Epic Dodge" desc="You are able to evade attacks with exceptional  agility." />
-    <feat type="Epic Level Handbook page 54" name="Epic Endurance" desc="You are capable of legendary feats of stamina." />
-    <feat type="Expanded Psionics Handbook page 34" name="Epic Expanded Knowledge" desc="You learn another power." />
-    <feat type="Draconomicon page 70" name="Epic Fortitude" desc="You have tremendously high fortitude." />
-    <feat type="Epic Level Handbook page 54" name="Epic Fortitude" desc="You have tremendously high fortitude." />
-    <feat type="Epic Level Handbook page 54" name="Epic Inspiration" desc="Your bardic music provides greater inspiration  than normally possible." />
-    <feat type="Epic Level Handbook page 54" name="Epic Leadership" desc="You attract more powerful cohorts and followers  than normally possible." />
-    <feat type="Complete Warrior page 151" name="Epic Prowess" desc="You have great skill in combat." />
-    <feat type="Epic Level Handbook page 54" name="Epic Prowess" desc="You gain great skill in combat." />
-    <feat type="Expanded Psionics Handbook page 34" name="Epic Psionic Focus" desc="You can expend your psionic focus to greater  effect." />
-    <feat type="Draconomicon page 70" name="Epic Reflexes" desc="You have tremendously fast reflexes." />
-    <feat type="Epic Level Handbook page 54" name="Epic Reflexes" desc="You have tremendously fast reflexes." />
-    <feat type="Complete Adventurer page 191" name="Epic Reputation" desc="Your reputation provides great bonuses on interactions  with others." />
-    <feat type="Epic Level Handbook page 54" name="Epic Reputation" desc="Your reputation provides great bonuses on interactions  with others." />
-    <feat type="Complete Adventurer page 191" name="Epic Skill Focus" desc="Choose a skill, such as Move Silently. You have  a legendary knack with that skill." />
-    <feat type="Epic Level Handbook page 54" name="Epic Skill Focus" desc="Choose a skill, such as Move Silently. You have  a legendary knack with that skill." />
-    <feat type="Epic Level Handbook page 54" name="Epic Speed" desc="You can move much more quickly than a normal  person." />
-    <feat type="Complete Arcane page 192" name="Epic Spell Focus " desc="Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal." />
-    <feat type="Epic Level Handbook page 54" name="Epic Spell Focus" desc="Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal." />
-    <feat type="Complete Arcane page 192" name="Epic Spell Penetration" desc="Your spells are tremendously potent, breaking  through spell resistance with ease." />
-    <feat type="Epic Level Handbook page 54" name="Epic Spell Penetration" desc="Your spells are tremendously potent, breaking  through spell resistance with ease." />
-    <feat type="Epic Level Handbook page 55" name="Epic Spellcasting" desc="You can create and cast spells that transcend  the most powerful existing spells." />
-    <feat type="Player's Guide to Faerun page 136" name="Epic Spellfire Wielder" desc="You can store more spellfire energy levels than  normal." />
-    <feat type="Complete Warrior page 151" name="Epic Sunder" desc="You are preternaturally tough." />
-    <feat type="Complete Warrior page 151" name="Epic Toughness" desc="You are specially good at using one chosen type  of weapon." />
-    <feat type="Epic Level Handbook page 55" name="Epic Toughness" desc="You are preternaturally tough." />
-    <feat type="Complete Warrior page 151" name="Epic Weapon Focus " desc="You deal extra damage when attacking objects." />
-    <feat type="Epic Level Handbook page 55" name="Epic Weapon Focus" desc="Choose one type of weapon, such as a greataxe.  You are especially good at using this weapon." />
-    <feat type="Epic Level Handbook page 55" name="Epic Weapon Specialization" desc="Choose one type of weapon, such as a greataxe.  You deal extraordinary damage wielding this weapon." />
-    <feat type="Draconomicon page 70" name="Epic Will" desc="You have tremendously strong willpower." />
-    <feat type="Epic Level Handbook page 55" name="Epic Will" desc="You have tremendously strong willpower." />
-    <feat type="Deities and Demigods page 50" name="Eschew Materials " desc="The deity can cast spells without material components." />
-    <feat type="Epic Level Handbook page 69" name="Eschew Materials" desc="You can cast spells without material components." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Eschew Materials" desc="You can cast spells without material components." />
-    <feat type="Lords of Darkness page 189" name="Eschew Materials" desc="You can cast spells without material components." />
-    <feat type="Magic of Faerun page 22" name="Eschew Materials" desc="You can cast spells without material components." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Eschew Materials" desc="You can cast spells without relying on material  components." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Eschew Materials" desc="You can cast spells without material components." />
-    <feat type="Races of Destiny page 155" name="Eternal Strength" desc="You have taken Kord's fighting ways to heart.  Throwing yourself into every brawl, you draw upon your mighty deity's strength." />
-    <feat type="Ghostwalk page 31" name="Ethereal Sidestep" desc="You can teleport yourself a short distance." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Ethran" desc="You have been initiated into the secrets of  the Witches of Rashemen as a member of the Ethran, the 'untried.'" />
-    <feat type="Player's Guide to Faerun page 38" name="Ethran" desc="You have been initiated into  the secrets of the Witches of Rashemen as a member of the Ethran, the 'untrained.'" />
-    <feat type="UE page 43" name="Ettercap Berserker" desc="The intense physical training required to join  your lodge has made you tougher." />
-    <feat type="Book of Vile Darkness page 49" name="Evil Brand" desc="The character is physically marked forever as  a servant of an evil power or as a villain." />
-    <feat type="Champions of Ruin page 23" name="Evil Brand" desc="You are physically marked forever as a servant  of an evil power or as a villain." />
-    <feat type="Champions of Ruin page 23" name="Evil Embraced" desc="You embrace the power of your fiendish patron  and call upon that power in moments of great need." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Eviscerator" desc="The allies of your foes are especially afraid  of your critical hits." />
-    <feat type="Book of Exalted Deeds page 42" name="Exalted Companion" desc="Instead of an animal companion, you have a magical  beast of good alignment." />
-    <feat type="Book of Exalted Deeds page 42" name="Exalted Smite" desc="Your smite ability is empowered with holy energy." />
-    <feat type="Book of Exalted Deeds page 42" name="Exalted Spell Resistance" desc="You are particularly resistant to evil spells." />
-    <feat type="Book of Exalted Deeds page 42" name="Exalted Turning" desc="You turn undead with such power that affected  undead take damage." />
-    <feat type="Book of Exalted Deeds page 42" name="Exalted Wild Shape" desc="You can use your wild shape ability to take  the form of a good-aligned magical beast." />
-    <feat type="Eberron Campaign Setting page 52" name="Exceptional Artisan" desc="You are an expert at creating magic items faster  than usual." />
-    <feat type="Epic Level Handbook page 55" name="Exceptional Deflection" desc="You can deflect any type of ranged attack." />
-    <feat type="Races of Stone page 139" name="Exotic Armor Proficiency" desc="Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly." />
-    <feat type="Underdark page 25" name="Exotic Armor Proficiency" desc="Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly." />
-    <feat type="Races of Stone page 139" name="Exotic Shield Proficiency" desc="Choose an exotic shield. You are proficient  with that type of exotic shield." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Exotic Weapon Proficiency" desc="Choose a type of exotic weapon. You understand  how to use that type of exotic weapon in combat." />
-    <feat type="Heroes of Battle page 97" name="Expanded Aura of Courage" desc="Your aura of courage protects more allies than  normal." />
-    <feat type="Expanded Psionics Handbook page 46" name="Expanded Knowledge" desc="You learn another power." />
-    <feat type="Ghostwalk page 31" name="Expanded Possession" desc="You can ride or possess an additional type of  creature." />
-    <feat type="Races of the Wild page 150" name="Expeditious Dodge" desc="You're good at avoiding attacks while moving  quickly." />
-    <feat type="Heroes of Battle page 97" name="Expert Siege Engineer" desc="You are particularly skilled at operating siege  weapons, such as catapults and battering rams." />
-    <feat type="Stormwrack page 92" name="Expert Swimmer" desc="You swim like a fish. You can stay underwater  far longer than others of your race, and you are at home in the water." />
-    <feat type="Complete Adventurer page 109" name="Expert Tactician" desc="Your tactical skills work to your advantage." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Expert Tactician" desc="Your tactical skills work to your advantage." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Expert Tactician" desc="Your tactical skills work to your advantage." />
-    <feat type="Complete Arcane page 79" name="Explosive Spell" desc="You can cast spells that blast creatures off  their feet." />
-    <feat type="UE page 43" name="Explosive Spell" desc="You can cast spells that blast creatures off  their feet." />
-    <feat type="Expanded Psionics Handbook page 46" name="Extend Power" desc="You can manifest powers that last longer than  normal." />
-    <feat type="Complete Warrior page 97" name="Extend Rage" desc="You are able to maintain your rage longer than  most." />
-    <feat type="Eberron Campaign Setting page 52" name="Extend Rage" desc="You are able to maintain your rage longer than  most." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Extend Spell" desc="You can cast spells that last longer than normal." />
-    <feat type="Draconomicon page 70" name="Extend Spreading Breath" desc="You can convert your breath weapon into a spread  effect that can be used at range." />
-    <feat type="Epic Level Handbook page 56" name="Extended Life Span" desc="You are exceptionally long-lived." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extended Rage" desc="Your rage lasts longer than it normally would." />
-    <feat type="UE page 43" name="Extended Rage" desc="Your rage lasts longer than it normally would." />
-    <feat type="Savage Species page 34" name="Extended Reach" desc="Your flexible body allows you to reach farther  than normal." />
-    <feat type="Miniatures Handbook page 26" name="Extra Domain Spell" desc="You have chosen to be more specialized in a  particular domain." />
-    <feat type="Complete Arcane page 79" name="Extra Edge" desc="Your ability to deal spell damage is particularly  striking." />
-    <feat type="Ghostwalk page 32" name="Extra Favored Enemy" desc="You select an additional favored enemy." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extra Favored Enemy" desc="You select an additional favored enemy." />
-    <feat type="Heroes of Battle page 97" name="Extra Followers" desc="Your charismatic magnetism attracts even more  followers to your banner." />
-    <feat type="Complete Arcane page 79" name="Extra Invocation" desc="You learn an additional invocation." />
-    <feat type="Savage Species page 34" name="Extra Item Space" desc="You can wear more magic items than are normally  allowed." />
-    <feat type="Complete Adventurer page 109" name="Extra Music" desc="You can use your bardic music more often than  you otherwise could." />
-    <feat type="Deities and Demigods page 50" name="Extra Music" desc="The deity can use its bardic songs more often  than it otherwise could." />
-    <feat type="Eberron Campaign Setting page 52" name="Extra Music" desc="You can use your bardic music more often than  you otherwise could." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Extra Music" desc="You can use your bardic music more often than  you otherwise could." />
-    <feat type="Complete Warrior page 98" name="Extra Rage" desc="You may rage more frequently than normal." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extra Rage" desc="You rage more frequently than you normally would." />
-    <feat type="Eberron Campaign Setting page 53" name="Extra Rings" desc="Your familiarity with forging magic rings allows  you to make use of more rings than normal." />
-    <feat type="Eberron Campaign Setting page 53" name="Extra Shifter Trait" desc="You manifest a second shifter trait while shifting." />
-    <feat type="Monster Manual III page 150" name="Extra Shifter Trait" desc="You manifest a second shifter trait while shifting." />
-    <feat type="Races of Eberron page 114" name="Extra Shifter Trait" desc="You manifest a second shifter trait while shifting." />
-    <feat type="Races of Stone page 139" name="Extra Silence" desc="You can generate a field of silence more often  than other whisper gnomes can." />
-    <feat type="Complete Arcane page 79" name="Extra Slot" desc="You can cast an additional spell." />
-    <feat type="Ghostwalk page 32" name="Extra Slot" desc="You can cast an extra spell." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Extra Slot" desc="You can cast an extra spell." />
-    <feat type="Complete Warrior page 98" name="Extra Smiting" desc="You can make more smite attacks." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Extra Smiting" desc="You can make more smite attacks." />
-    <feat type="Complete Arcane page 79" name="Extra Spell" desc="You learn an additional spell." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Extra Spell" desc="You can learn one more spell." />
-    <feat type="Complete Arcane page 80" name="Extra Spell Secret" desc="You learn an additional spell secret." />
-    <feat type="Complete Warrior page 98" name="Extra Stunning" desc="You gain extra stunning attacks." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Extra Stunning Attacks" desc="You gain extra stunning attacks when fighting  unarmed." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Extra Turning" desc="You can turn or rebuke creatures more often  than normal." />
-    <feat type="Complete Divine page 81" name="Extra Wild Shape" desc="You can use wild shape more frequently than  you normally could." />
-    <feat type="Ghostwalk page 32" name="Extra Wild Shape" desc="You can use wild shape more frequently than  you normally could." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extra Wild Shape" desc="You use wild shape more frequently than you  normally could." />
-    <feat type="Underdark page 25" name="Extra Wild Shape" desc="You can use wild shape more frequently than  you normally could." />
-    <feat type="Eberron Campaign Setting page 53" name="Extraordinary Artisan" desc="You are an expert at creating magic items at  a lower cost than usual." />
-    <feat type="Complete Adventurer page 109" name="Extraordinary Concentration" desc="Your mind is so focused that you can cast spells  even while concentrating on another spell." />
-    <feat type="Complete Adventurer page 109" name="Extraordinary Spell Aim" desc="You can shape a spell's area to exclude one  creature from its effects." />
-    <feat type="Complete Warrior page 98" name="Eyes in the Back of Your Head" desc="Your superior battle sense helps minimize the  threat of flanking." />
-    <feat type="Deities and Demigods page 50" name="Eyes in the Back of Your Head" desc="The deity's superior battle sense helps minimize  the threat of flanking attacks." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Eyes in the Back of Your Head" desc="Your superior battle sense helps minimize the  threat of flanking." />
-    <feat type="Races of Faerun page 163" name="Eyes of Light" desc="You can focus the holy power within you to create  a beam of destructive light energy." />
-    <feat type="Unearthed Arcana page 93" name="Eyes to the Sky" desc="You have an instinctive sense of when someone  is magically watching you." />
-    <feat type="Ghostwalk page 32" name="Fade" desc="You can make your ghost body more diaphanous  and difficult to detect." />
-    <feat type="Frostburn page 48" name="Faith in the Frost" desc="You channel frozen energies from your deity  when you turn or rebuke creatures." />
-    <feat type="Oriental Adventures page 62" name="Falling Far Strike" desc="You have mastered the art of striking a nerve  that blinds a humanoid opponent." />
-    <feat type="Unearthed Arcana page 93" name="False Pretenses" desc="Those who try to charm you get an unpleasant  surprise." />
-    <feat type="Lost Empires of Faerun page 8" name="Familiar Concentration" desc="In the tradition of Narfell's ancient summoners,  your familiar can concentrate to maintain spells for you." />
-    <feat type="Dungeon Master's Guide v.3.5 page 209" name="Familiar Spell" desc="Your familiar can cast a spell." />
-    <feat type="Epic Level Handbook page 56" name="Familiar Spell" desc="Your familiar can use one of your spells as  a spell-like ability." />
-    <feat type="Underdark page 25" name="Familiar Spell" desc="You are so well acquainted with the spells you  have mastered that you can store the prepared spells in the mind of your  familiar." />
-    <feat type="Races of Destiny page 155" name="Far Horizons" desc="By dedicating yourself to the philosophies of  Fharlanghn, you have become a more world-wise and capable traveler." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Far Shot" desc="You can get greater distance out of a ranged  weapon." />
-    <feat type="Draconomicon page 70" name="Fast Healing" desc="You heal your wounds very quickly." />
-    <feat type="Epic Level Handbook page 56" name="Fast Healing" desc="You heal your wounds very quickly." />
-    <feat type="Complete Divine page 81" name="Fast Wild Shape" desc="You assume your wild shape faster and more easily  than you otherwise could." />
-    <feat type="Ghostwalk page 32" name="Fast Wild Shape" desc="You can assume your wild shape faster and more  easily than you normally could." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Fast Wild Shape" desc="You assume your wild shape faster and more easily  than you otherwise could." />
-    <feat type="Complete Warrior page 98" name="Faster Healing" desc="You recover faster than normal." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Faster Healing" desc="You recover faster than others do." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Favored Critical" desc="You know how to hit your favored enemies where  it hurts." />
-    <feat type="Eberron Campaign Setting page 53" name="Favored in House" desc="You are a member of one of the dragonmarked  mercantile houses and wield some influence in that house." />
-    <feat type="Book of Exalted Deeds page 43" name="Favored of the Companions" desc="You swear allegiance to the Talisid or one of  the Five Companions, the paragons of the guardinals, and in exchange gain  power to act on their behalf." />
-    <feat type="Player's Guide to Faerun page 176" name="Favored of the Zulkirs" desc="Through your position of prestige among the  Red Wizards, you have gained access to secrets of evil magic known to few  outside the zulkirs themselves." />
-    <feat type="Complete Warrior page 98" name="Favored Power Attack" desc="You are able to deal more damage against your  favored enemies." />
-    <feat type="Player's Guide to Faerun page 38" name="Fearless" desc="You are a stranger to fear." />
-    <feat type="Races of Destiny page 152" name="Fearless Destiny" desc="Your grand destiny allows you to avoid death." />
-    <feat type="Oriental Adventures page 62" name="Fearsome and Fearless" desc="You claim descent from the first Akodo, the  paragon of samurai virtue." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Feign Weakness" desc="You capitalize on your foe's perceptions of  your unarmed status." />
-    <feat type="Libris Mortis: The Book of the Dead page 26" name="Fell Animate" desc="Living foes slain by your spell may rise as  zombies." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Fell Drain" desc="Living foes damaged by your spell also gain  a negative level." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Fell Frighten" desc="Living foes damaged by your spell are also shaken." />
-    <feat type="Expanded Psionics Handbook page 46" name="Fell Shot" desc="You can strike your foe with a ranged weapon  as if making a touch attack." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Fell Weaken" desc="Living foes damaged by your spell are also weakened." />
-    <feat type="Champions of Ruin page 20" name="Feral Animal Companion" desc="You can enslave a feral animal and adopt it  as your animal companion." />
-    <feat type="Races of Faerun page 163" name="Fiendish Bloodline" desc="Some of your latent abilities, inherited from  an unusually powerful fiendish ancestor, have matured." />
-    <feat type="Planar Handbook page 39" name="Fiendish Heritage" desc="You are descended from creatures native to the  Lower Planes." />
-    <feat type="Planar Handbook page 39" name="Fiendish Summoning Specialist" desc="You can select from a larger number of options  when summoning evil creatures." />
-    <feat type="Sandstorm page 49" name="Fiery Spell" desc="Your fire magic is bolstered, further scorching  your enemies." />
-    <feat type="Sharn: City of Towers page 157" name="Filth Eater" desc="You are highly resistant to the effects of disease  and can usually eat spoiled food without suffering ill effects." />
-    <feat type="Savage Species page 34" name="Final Strike" desc="Your death throes are destructive." />
-    <feat type="Epic Level Handbook page 56" name="Fine Wild Shape" desc="You can wild shape into animals of Fine size." />
-    <feat type="Planar Handbook page 39" name="Fire Heritage" desc="You are descended from creatures native to the  Elemental Plane of Fire." />
-    <feat type="Book of Exalted Deeds page 43" name="Fist of the Heavens" desc="Your stunning attack is empowered by celestial  might." />
-    <feat type="Complete Warrior page 99" name="Fists of Iron" desc="You have learned the secrets of imbuing your  unarmed attacks with extra force." />
-    <feat type="Oriental Adventures page 62" name="Fists of Iron" desc="You have learned the secrets of imbuing your  unarmed attacks with extra force." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Fists of Iron" desc="You have learned the secrets of imbuing your  unarmed attacks with extra force." />
-    <feat type="Champions of Ruin page 20" name="Flay Foe" desc="You are skilled at flaying the flesh from your  enemy's bones." />
-    <feat type="Complete Warrior page 99" name="Fleet of Foot" desc="You run nimbly, able to turn corners without  losing momentum." />
-    <feat type="Deities and Demigods page 50" name="Fleet of Foot" desc="The deity runs so nimbly that it can turn corners  without losing momentum." />
-    <feat type="Player's Guide to Faerun page 38" name="Fleet of Foot" desc="You are extraordinarily swift." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Fleet of Foot" desc="You run so nimbly that you can turn corners  without losing momentum." />
-    <feat type="Eberron Campaign Setting page 53" name="Flensing Strike" desc="You have studied a martial style practiced by  monks devoted to the Mockery, which has taught you to cut your opponent's  skin in a very painful way." />
-    <feat type="Complete Warrior page 99" name="Flick of the Wrist" desc="With a single motion, you can draw a light weapon  and make a devastating attack." />
-    <feat type="Races of the Wild page 150" name="Flick of the Wrist" desc="With a single motion, you can draw a light weapon  and make a devastating attack." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Flick of the Wrist" desc="With a single motion, you can draw a light weapon  and make a devastating attack." />
-    <feat type="Races of Stone page 139" name="Fling Ally" desc="You can launch your comrades into the air as  if they were thrown weapons." />
-    <feat type="Races of Stone page 140" name="Fling Enemy" desc="When you're wrestling a foe, you can lift him  into the air and hurl him." />
-    <feat type="Savage Species page 34" name="Fling Enemy" desc="You can pick up an opponent and fling it." />
-    <feat type="Monster Manual v.3.5 page 303" name="Flyby Attack" desc="The creature can attack on the wing." />
-    <feat type="Monster Manual II page 18" name="Flyby Attack" desc="The creature can attack on the wing." />
-    <feat type="Monster Manual III page 206" name="Flyby Attack" desc="A creature with this feat can attack on the  wing." />
-    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Flyby Attack" desc="The creature can attack on the wing." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Flyby Attack" desc="You attack while on the wing." />
-    <feat type="Dragonlance Campaign Setting page 85" name="Flyby Breath" desc="You can employ your breath weapon in a high-speed  attack pass." />
-    <feat type="Stormwrack page 92" name="Flying Fish Leap" desc="You can hurl yourself out of the water with  ease." />
-    <feat type="Complete Warrior page 99" name="Flying Kick" desc="You literally leap into battle, dealing devastating  damage." />
-    <feat type="Oriental Adventures page 62" name="Flying Kick" desc="You literally leap into battle, dealing devastating  damage." />
-    <feat type="Lords of Madness page 45" name="Focused Antimagic" desc="A beholder with this feat can focus the antimagic  of its central eye to target a single person or object." />
-    <feat type="Races of the Wild page 151" name="Focused Mind" desc="When you have the opportunity to concentrate  on a task, you usually do very well at it." />
-    <feat type="Races of Stone page 140" name="Focused Shield" desc="Your mental focus makes you more adept at using  your shield." />
-    <feat type="Expanded Psionics Handbook page 46" name="Focused Sunder" desc="You can sense the stress points on others' weapons." />
-    <feat type="Forgotten Realms Campaign Setting page 34" name="Foe Hunter" desc="In lands threatened by evil nonhumans, many  warriors learn ways to fight effectively against these creatures." />
-    <feat type="Ghostwalk page 32" name="Foe Hunter" desc="You have been trained in the methods of fighting  various kinds of yuan-ti." />
-    <feat type="Player's Guide to Faerun page 38" name="Foe Hunter" desc="In a land threatened by fierce raiders, you  have learned to fight effectively against certain foes." />
-    <feat type="Miniatures Handbook page 26" name="Foe Specialist" desc="You are trained at how to damage a particular  type of foe." />
-    <feat type="Oriental Adventures page 80" name="Foot and Fist Mastery" desc="You have mastered the martial arts style of  'Foot and Fist' -- a hard form emphasizing strikes with the hands and feet." />
-    <feat type="Complete Adventurer page 109" name="Force of Personality" desc="You have cultivated an unshakable belief in  your self-worth." />
-    <feat type="Expanded Psionics Handbook page 46" name="Force of Will" desc="You are able to resist psionic attacks with  extreme force of will." />
-    <feat type="Ghostwalk page 32" name="Forceful Staff Style" desc="You can stun people with your quarterstaff and  push them around after you stun them." />
-    <feat type="Races of Faerun page 163" name="Forest Gnome Phantasist" desc="You can protect your forest home with a variety  of phantasms and patterns to befuddle your foes." />
-    <feat type="Forgotten Realms Campaign Setting page 35" name="Forester" desc="You are knowledgeable about the secrets of the  forest and wise in its ways." />
-    <feat type="Player's Guide to Faerun page 39" name="Forester" desc="You are one with Faerun's mighty forests." />
-    <feat type="Epic Level Handbook page 56" name="Forge Epic Ring" desc="You can craft magic rings of epic power." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Forge Ring" desc="You can create magic rings, which have varied  magical effects." />
-    <feat type="Player's Guide to Faerun page 39" name="Forgeheart" desc="Because you are inured to the hellish heat of  your homeland, you are resistant to blasts of fire that would damage other  creatures." />
-    <feat type="Serpent Kingdoms page 145" name="Forked Tongue" desc="You speak with a honeyed voice that bends listeners  to your will." />
-    <feat type="Complete Warrior page 110" name="Formation Expert" desc="You are trained at fighting in ranks and files." />
-    <feat type="Complete Arcane page 80" name="Fortify Spell" desc="You cast spells that more easily penetrate spell  resistance." />
-    <feat type="UE page 43" name="Fortify Spell" desc="You can cast spells that easily penetrate spell  resistance." />
-    <feat type="Complete Warrior page 99" name="Freezing the Lifeblood" desc="You can paralyze a humanoid opponent with an  unarmed attack." />
-    <feat type="Oriental Adventures page 62" name="Freezing the Lifeblood" desc="You can paralyze a humanoid opponent with an  unarmed attack." />
-    <feat type="Ghostwalk page 33" name="Freezing Touch" desc="Your touch is supernaturally cold." />
-    <feat type="Ghostwalk page 33" name="Frightful Moan" desc="You can unleash a moan that panics creatures  near you." />
-    <feat type="Draconomicon page 106" name="Frightful Presence" desc="Like a dragon, your mere presence can terrify  those around you." />
-    <feat type="Ghostwalk page 33" name="Frightful Presence" desc="Your very presence can cause others to be stricken  with fear." />
-    <feat type="Frostburn page 48" name="Frostfell Prodigy" desc="You gain additional bonus spells in cold regions." />
-    <feat type="Frostburn page 48" name="Frozen Berserker" desc="When you enter your barbarian rage, your body  becomes infused with cold energy." />
-    <feat type="Frostburn page 48" name="Frozen Magic" desc="Your cold spells are more powerful when you  cast them in a cold region." />
-    <feat type="Frostburn page 48" name="Frozen Wild Shape" desc="You can assume the form of magical beasts with  the cold subtype." />
-    <feat type="Ghostwalk page 33" name="Full Manifestation" desc="You can manifest fully when you would otherwise  be forced to be incorporeal." />
-    <feat type="Player's Guide to Faerun page 39" name="Furious Charge" desc="Your people are known for their love of battle,  and they rarely waste time in meeting a foe blade-to-blade." />
-    <feat type="Savage Species page 35" name="Gap of the Serpent" desc="You can swallow larger creatures than normal." />
-    <feat type="Serpent Kingdoms page 146" name="Gape of the Serpent" desc="Like a snake, you can stretch your mouth to  an outlandish extent to accommodate immense prey." />
-    <feat type="Epic Level Handbook page 56" name="Gargantuan Wild Shape" desc="You can wild shape into animals of Gargantuan  size." />
-    <feat type="Eberron Campaign Setting page 54" name="Gatekeeper Initiate" desc="You have been trained in the ancient druidic  tradition of the Gatekeepers, founded originally to ward off an extraplanar  assault by aberrations." />
-    <feat type="Races of Faerun page 163" name="Genie Lore" desc="You have studied centuries of Calishite lore  regarding geniekind." />
-    <feat type="Races of Eberron page 112" name="Gestalt Anchor" desc="Your strong bond to your quori spirit allows  you and your kalashtar allies to move and act as a fluid unit." />
-    <feat type="Expanded Psionics Handbook page 46" name="Ghost Attack" desc="Your deadly strikes against incorporeal foes  always hit their mark." />
-    <feat type="Ghostwalk page 33" name="Ghost Flight" desc="Your fully manifested ghost body can fly." />
-    <feat type="Ghostwalk page 33" name="Ghost Glide" desc="Your fully manifested ghost body can slowly  fly." />
-    <feat type="Ghostwalk page 33" name="Ghost Hand" desc="You can move small objects in a limited manner  when you are a ghost." />
-    <feat type="Ghostwalk page 33" name="Ghost Healing" desc="You can transfer some of your own ectoplasm  to another ghost to heal it." />
-    <feat type="Ghostwalk page 33" name="Ghost Ride" desc="You can hide within the physical body of a living  creature, perceiving the world through its senses, but without the ability  to control the host." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Ghost Scarred" desc="You are adept at fighting incorporeal undead." />
-    <feat type="Ghostwalk page 34" name="Ghost Smiting" desc="You can use your smite ability to smite ghosts." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Ghostly Grasp" desc="You can handle corporeal objects even while  corporeal." />
-    <feat type="Ghostwalk page 34" name="Ghost-Touch Spell" desc="You know how to tune your damaging spells to  affect ghosts without harming other creatures." />
-    <feat type="Complete Warrior page 111" name="Giantbane" desc="You are trained in fighting foes larger than  you are." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Giant's Toughness" desc="You are amazingly tough." />
-    <feat type="Player's Guide to Faerun page 176" name="Gift of Discernment" desc="You can rely on your conscience to steer you  away from evil deeds." />
-    <feat type="Book of Exalted Deeds page 43" name="Gift of Faith" desc="You have an unusual capacity to trust in divine  providence working all things for the good." />
-    <feat type="Book of Exalted Deeds page 43" name="Gift of Grace" desc="You can improve the saving throws of your allies  by sharing some of your divine grace." />
-    <feat type="Ghostwalk page 34" name="Gift of Tongues" desc="You have an intuitive talent for learning languages." />
-    <feat type="Races of Faerun page 163" name="Gift of Tongues" desc="You have an intuitive talent for learning languages." />
-    <feat type="Oriental Adventures page 62" name="Gifted General" desc="Your ancestor Daidoji Yurei, an ancient daimyo  of the Daidoji family, was a gifted general -- the first in Rokugan to use  guerilla warfare." />
-    <feat type="Complete Divine page 82" name="Glorious Weapons" desc="You can channel positive or negative energy  to imbue your allies' weapons with an alignment." />
-    <feat type="Races of the Wild page 151" name="Gnoll Ferocity" desc="You embody the savage ferocity of your people.  When you fly into a berserk rage, you can bite opponents with your powerful  jaws." />
-    <feat type="Races of Stone page 140" name="Gnome Foe Killer" desc="Your battle techniques against your racial foes  improve." />
-    <feat type="Complete Adventurer page 109" name="Goad " desc="You are skilled at inducing opponents to attack  you." />
-    <feat type="Miniatures Handbook page 26" name="Goad" desc="You are skilled at inducing opponents to attack  you." />
-    <feat type="Races of Stone page 140" name="Goad" desc="You are skilled at inducing opponents to attack  you." />
-    <feat type="Lost Empires of Faerun page 8" name="Godsight" desc="You enjoy the special blessing of a deity of  the Mulhorandi pantheon, who has granted you unerring powers of perception." />
-    <feat type="Races of Faerun page 163" name="Gold Dwarf Dweomersmith" desc="You have learned the secrets of gold dwarf magic  that creates or enhances weapons." />
-    <feat type="Races of Eberron page 114" name="Gorebrute Elite" desc="Your mighty charge attack can knock down foes." />
-    <feat type="Fiend Folio page 207" name="Graft Flesh" desc="You can apply a certain type of graft to other  living creatures or to yourself." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Graft Flesh" desc="You can apply a certain type of graft to other  living creatures or to yourself." />
-    <feat type="Lords of Madness page 216" name="Graft Flesh" desc="You can apply a certain type of graft to other  living creatures or to yourself." />
-    <feat type="Underdark page 25" name="Graft Illithid Flesh" desc="You can apply illithid grafts to other living  creatures or to yourself." />
-    <feat type="Serpent Kingdoms page 146" name="Graft Yuan-Ti Flesh" desc="You can apply yuan-ti grafts to other living  creatures or to yourself." />
-    <feat type="Ghostwalk page 34" name="Grand Malevolence" desc="You can possess multiple creatures and control  their actions." />
-    <feat type="Oriental Adventures page 63" name="Grappling Block" desc="You can catch and pin an opponent's weapon with  your bare hands." />
-    <feat type="Savage Species page 35" name="Grass Trekker" desc="You are adapted to a plains environment." />
-    <feat type="Eberron Campaign Setting page 54" name="Great Bite" desc="You know how to hit where it hurts with your  fangs." />
-    <feat type="Stormwrack page 92" name="Great Captain" desc="You are a master pilot and battle leader; your  crew anticipates your every command and leaps to do your bidding." />
-    <feat type="Epic Level Handbook page 56" name="Great Charisma" desc="Your powers of persuasion and leadership are  greater than normal." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Great Cleave" desc="You can wield a melee weapon with such power  that you can strike multiple times when you fell your foes." />
-    <feat type="Epic Level Handbook page 56" name="Great Constitution" desc="Your health and endurance are greater than normal." />
-    <feat type="Oriental Adventures page 63" name="Great Crafter" desc="Your ancestor, Kaiu, was the first and greatest  blacksmith of the Crab clan." />
-    <feat type="Epic Level Handbook page 56" name="Great Dexterity" desc="Your agility and coordination are greater than  normal." />
-    <feat type="Oriental Adventures page 63" name="Great Diplomat" desc="You are descended from Asako, one of the companions  of the first Phoenix, a great healer, diplomat, and warrior." />
-    <feat type="Savage Species page 35" name="Great Flyby Attack" desc="You can make multiple flyby attacks in a round." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Great Fortitude" desc="You are tougher than normal." />
-    <feat type="Epic Level Handbook page 56" name="Great Intelligence" desc="Your powers of reason and learning are greater  than normal." />
-    <feat type="Eberron Campaign Setting page 54" name="Great Rend" desc="You know how to hit where it hurts with your  claws." />
-    <feat type="Dungeon Master's Guide v.3.5 page 209" name="Great Smiting" desc="Your smite attacks are much more powerful than  normal." />
-    <feat type="Epic Level Handbook page 56" name="Great Smiting" desc="Your smite attacks are much more powerful than  normal." />
-    <feat type="UE page 43" name="Great Stag Berserker" desc="Your fighting style employs aggressive charges  in the manner of your lodge's totem animal." />
-    <feat type="Oriental Adventures page 63" name="Great Stamina" desc="Your ancestor, Daidoji Masashigi, gave his life  defending the Kaiu Wall alongside the Crab at the Battle of the Landbridge." />
-    <feat type="Epic Level Handbook page 57" name="Great Strength" desc="Your muscle and physical power are greater than  normal." />
-    <feat type="Oriental Adventures page 63" name="Great Teamwork" desc="You are a descendant of Hida Banuken, the Crab  champion who oversaw the construction of the Kaiu Wall during the battle  of the Cresting Wave." />
-    <feat type="Epic Level Handbook page 57" name="Great Wisdom" desc="Your willpower and insight are greater than  normal." />
-    <feat type="Oriental Adventures page 63" name="Greater Ki Shout" desc="Your ki shout can panic your opponents." />
-    <feat type="Frostburn page 48" name="Greater Cold Focus" desc="Your cold spells are now even more potent than  before." />
-    <feat type="Eberron Campaign Setting page 54" name="Greater Dragonmark" desc="You have a greater dragonmark." />
-    <feat type="Races of Stone page 141" name="Greater Heavy Armor Optimization" desc="You have mastered the use of heavy armor, maximizing  its protective qualities while moving more easily in it." />
-    <feat type="Complete Warrior page 99" name="Greater Kiai Shout" desc="You kiai shout can panic your opponents." />
-    <feat type="WL page 14" name="Greater Legacy" desc="You awaken the most powerful abilities of a  specific item of legacy." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Manyshot" desc="You are skilled at firing many arrows at once,  even at different opponents." />
-    <feat type="Savage Species page 35" name="Greater Mighty Roar" desc="You unsettle opponents with a dreadful roar  as you attack." />
-    <feat type="Serpent Kingdoms page 146" name="Greater Multigrab" desc="You can grapple enemies effortlessly with your  natural weapons." />
-    <feat type="Savage Species page 35" name="Greater Multigrab" desc="You can grapple enemies effortlessly with your  natural weapons." />
-    <feat type="Deities and Demigods page 50" name="Greater Multiweapon Fighting" desc="A deity with three or more hands can fight with  a weapon in each hand." />
-    <feat type="Epic Level Handbook page 69" name="Greater Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
-    <feat type="Savage Species page 35" name="Greater Multiweapon Fighting" desc="A creature with three or more arms can fight  with a weapon in each hand. The creature can make up to three attacks per  round with each extra weapon." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Power Penetration" desc="Your powers are especially potent at breaking  through power resistance." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Power Specialization" desc="You deal more damage with your powers." />
-    <feat type="Eberron Campaign Setting page 54" name="Greater Powerful Charge" desc="You can charge with extra force." />
-    <feat type="Miniatures Handbook page 27" name="Greater Powerful Charge" desc="You can charge with extra force." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Endowment" desc="You can use meditation to focus your powers." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Fist" desc="You can charge your unarmed strike or natural  weapon with additional damage potential." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Shot" desc="You can charge your ranged attacks with additional  damage potential." />
-    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Weapon" desc="You can charge your melee weapon with additional  damage potential." />
-    <feat type="Complete Warrior page 99" name="Greater Resiliency" desc="Your extraordinary resilience to damage increases." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Greater Resiliency" desc="Your extraordinary resilience to damage increases." />
-    <feat type="Eberron Campaign Setting page 54" name="Greater Shifter Defense" desc="By delving deeper into your shifter heritage,  you develop the ability to ignore some damage from every attack." />
-    <feat type="Deities and Demigods page 50" name="Greater Spell Focus" desc="The deity chooses a school of magic to which  it already has applied the Spell Focus feat." />
-    <feat type="Epic Level Handbook page 69" name="Greater Spell Focus" desc="Choose a school of magic, such as illusion.  Your spells of that school are far more potent than normal." />
-    <feat type="Forgotten Realms Campaign Setting page 35" name="Greater Spell Focus" desc="Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Greater Spell Focus" desc="Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Greater Spell Focus" desc="Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal." />
-    <feat type="Deities and Demigods page 50" name="Greater Spell Penetration" desc="The deity's spells are especially potent, defeating  spell resistance more readily than normal." />
-    <feat type="Epic Level Handbook page 69" name="Greater Spell Penetration" desc="Your spells are especially potent, defeating  spell resistance more readily than normal." />
-    <feat type="Forgotten Realms Campaign Setting page 35" name="Greater Spell Penetration" desc="Your spells are especially potent, defeating  spell resistance more readily than normal." />
-    <feat type="Player's Handbook v.3.5 page 94" name="Greater Spell Penetration" desc="Your spells are remarkably potent, breaking  through spell resistance more readily than normal." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Greater Spell Penetration" desc="Your spells are especially potent, breaking  through spell resistance more readily than normal." />
-    <feat type="Complete Warrior page 100" name="Greater Two-Weapon Defense" desc="When fighting with two weapons, your defenses  are extraordinarily strong." />
-    <feat type="Deities and Demigods page 50" name="Greater Two-Weapon Fighting" desc="The deity is a master at fighting two-handed." />
-    <feat type="Epic Level Handbook page 69" name="Greater Two-Weapon Fighting" desc="You are a master at fighting two-handed." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Greater Two-Weapon Fighting" desc="You are a master at fighting two-handed." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Greater Two-Weapon Fighting" desc="You are a master at fighting two-handed." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Greater Weapon Focus" desc="Choose one type of weapon for which you have  already selected Weapon Focus. You can also choose unarmed strike or grapple  as your weapon for purposes of this feat. You are especially good at using  this weapon." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Greater Weapon Specialization" desc="Choose one type of weapon for which you have  already selected Weapon Specialization You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon." />
-    <feat type="Ghostwalk page 34" name="Greater Witchlight" desc="Your witchlight can last longer, become hotter,  or give off more light." />
-    <feat type="Ghostwalk page 35" name="Green Bond" desc="You have an empathic bond with one of the spirit  trees around Manifest" />
-    <feat type="Complete Adventurer page 110" name="Green Ear" desc="Your bardic music can affect plant creatures." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Green Ear" desc="Your bardic music and virtuoso performance affect  plants and plant creatures." />
-    <feat type="Lost Empires of Faerun page 8" name="Greenbound Summoning" desc="You are learned in a long-forgotten manner of  summoning once practiced by Eaerlanni elves of the High Forest." />
-    <feat type="Eberron Campaign Setting page 54" name="Greensinger Initiate" desc="You have embraced the druidic traditions of  the Greensingers, a chaotic Eldeen Reaches sect with close ties to the fey." />
-    <feat type="Lords of Madness page 114" name="Grell Alchemy" desc="A creature that has this feat has studied the  alien and disturbing arcane lore of the grell, and understands the magical  and physical laws by which their spells and devices function." />
-    <feat type="Races of Faerun page 163" name="Grim Visage" desc="Your eyes have seen a lot, and now they show  everyone that you aren't to be trifled with. Even glib people stammer in  your presence." />
-    <feat type="Complete Divine page 82" name="Grizzly's Claws" desc="You can grow claws as sharp as those of a bear." />
-    <feat type="Complete Adventurer page 192" name="Group Inspiration" desc="Your bardic powers can inspire more allies than  normal." />
-    <feat type="Epic Level Handbook page 57" name="Group Inspiration" desc="You can inspire competence or greatness in more  than one ally simultaneously." />
-    <feat type="Complete Arcane page 80" name="Guardian Spirit" desc="Your watchful spirit is more capable than normal." />
-    <feat type="Heroes of Battle page 97" name="Guerrilla Scout" desc="You know how to use your senses to greater effect." />
-    <feat type="Heroes of Battle page 97" name="Guerrilla Warrior" desc="You know how to move stealthily, even when armored." />
-    <feat type="Shining South page 20" name="Halruuan Adept" desc="You have studied the old cooperative spellcasting  traditions of Halruaa, and you are well-versed in the rites and arcana of  Halruuan magic." />
-    <feat type="Races of Faerun page 164" name="Hammer Fist" desc="You are trained in an unarmed fighting style  that emphasizes a two-handed strike." />
-    <feat type="Complete Warrior page 113" name="Hammer's Edge" desc="You are a master of the style of fighting with  a hammer and sword at the same time." />
-    <feat type="Complete Warrior page 100" name="Hamstring" desc="You can wound your opponents' legs, hampering  their movement." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Hamstring" desc="You can wound an opponent's legs, hampering  his or her movement." />
-    <feat type="City of Splendors: Waterdeep page 145" name="Hand of Tyr" desc="You have sacrificed your right hand to Tyr,  the Maimed God, proving your resilience and strength of spirit." />
-    <feat type="Book of Exalted Deeds page 43" name="Hands of a Healer" desc="You can heal more damage than normal by laying  on hands." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Hardened Flesh" desc="Undead you raise or create can better handle  themselves in a fight." />
-    <feat type="Races of Faerun page 164" name="Harem Trained" desc="You have been trained to serve as a jhasin (if  male) or jhasina (if female) and are well versed in song, music, dance,  art, the recitation of great literature, the art of massage, and other duties  of the harem." />
-    <feat type="Ghostwalk page 35" name="Haunting Appearance" desc="You can make your ghost body assume a terrifying  appearance that can frighten observers." />
-    <feat type="Eberron Campaign Setting page 54" name="Haunting Melody" desc="You can use your music to inspire fear." />
-    <feat type="Ghostwalk page 35" name="Haunting Voice" desc="You can make your voice originate from another  location." />
-    <feat type="Complete Adventurer page 114" name="Hawk's Vision" desc="You can improve your visual acuity." />
-    <feat type="Races of Faerun page 164" name="Headlong Rush" desc="You charge your foes with immense force, heedless  of your own safety." />
-    <feat type="Eberron Campaign Setting page 55" name="Healing Factor" desc="When your current period of shifting ends, you  heal a limited amount of damage." />
-    <feat type="Monster Manual III page 150" name="Healing Factor" desc="When your current period of shifting ends, you  heal a limited amount of damage." />
-    <feat type="Races of Faerun page 164" name="Healing Flames" desc="You can draw energy from open flames to heal  yourself." />
-    <feat type="Complete Adventurer page 110" name="Hear the Unseen" desc="Your sense of hearing is so acute that you can  partially pinpoint an opponent's location by sound, allowing you to strike  even if the opponent is concealed or displaced." />
-    <feat type="Sandstorm page 50" name="Heat Endurance" desc="Either as a result of growing up in the waste,  or by training your body and mind to ignore the effects of searing heat,  you can exist with ease in high-temperature environments." />
-    <feat type="Shining South page 20" name="Heat Tolerance" desc="You are used to living in hot, humid conditions." />
-    <feat type="Races of Stone page 141" name="Heavy Armor Optimization" desc="You have trained extensively in heavy armor,  and you have learned to take advantage of the protection it offers." />
-    <feat type="Races of Stone page 141" name="Heavy Lithoderms" desc="You have stony growths on your skin that afford  you protection against attacks." />
-    <feat type="Draconomicon page 70" name="Heighten Breath" desc="Your breath weapon is even more deadly than  normal." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Heighten Spell" desc="You can cast a spell as if it were a higher-level  spell than it actually is." />
-    <feat type="Complete Arcane page 80" name="Heighten Spell-Like Ability" desc="You can use a spell-like ability as if it were  a higher spell-level equivalent than it actually is." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
-    <feat type="Ghostwalk page 35" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
-    <feat type="Champions of Ruin page 23" name="Hellbound Knight" desc="A devoted disciple of the Nine Hells, you have  sworn to strike down creatures that oppose law and threaten tyranny." />
-    <feat type="Races of Destiny page 152" name="Heroic Destiny" desc="You have a destiny to fulfill." />
-    <feat type="Races of Eberron page 109" name="Heroic Metamagic" desc="In times of great need, you can call upon a  heroic reserve of power to strengthen your spells." />
-    <feat type="Eberron Campaign Setting page 55" name="Heroic Spirit" desc="You have a larger reservoir of luck than the  average hero." />
-    <feat type="Complete Warrior page 113" name="High Sword Low Axe" desc="You have mastered the style of fighting with  a sword and axe at the same time." />
-    <feat type="Races of Faerun page 164" name="Highborn Drow" desc="You have learned how to tap into the advanced  magical abilities of your drow noble heritage." />
-    <feat type="Underdark page 25" name="Highborn Drow" desc="You have learned how to tap into the advanced  magical abilities available to you through your drow noble heritage." />
-    <feat type="Races of Faerun page 164" name="Hin Wandermage" desc="You have a natural affinity for spells that  take you from place to place." />
-    <feat type="Epic Level Handbook page 57" name="Hindering Song" desc="Your bardic music interferes with opposing spellcasters." />
-    <feat type="Complete Warrior page 100" name="Hold the Line" desc="You are trained in defensive techniques against  charging opponents." />
-    <feat type="Deities and Demigods page 51" name="Hold the Line" desc="The deity is trained in defensive techniques  against charging opponents." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Hold the Line" desc="You are trained in defensive techniques against  charging opponents." />
-    <feat type="Shining South page 20" name="Hold the Line" desc="You are trained in defensive techniques against  charging opponents." />
-    <feat type="Book of Exalted Deeds page 44" name="Holy Ki Strike" desc="Your unarmed attacks deal extra damage to evil  creatures." />
-    <feat type="Book of Exalted Deeds page 44" name="Holy Radiance" desc="You can increase the intensity of the light  surrounding you to damage undead creatures." />
-    <feat type="Complete Divine page 89" name="Holy Strike" desc="Your attacks deal great damage to evil creatures." />
-    <feat type="Epic Level Handbook page 57" name="Holy Strike" desc="Your attacks deal great damage to evil creatures." />
-    <feat type="Book of Exalted Deeds page 44" name="Holy Subdual" desc="You can turn bonus damage into nonlethal damage." />
-    <feat type="Oriental Adventures page 63" name="Honest Merchant" desc="Your ancestor, Bayushi Tesaguri, was the son  of Bayushi Junzen, Scorpion Clan Champion." />
-    <feat type="Dragonlance Campaign Setting page 86" name="Honor-Bound" desc="Keeping your word and upholding your honor is  of great importance to you." />
-    <feat type="Ghostwalk page 35" name="Horrific Appearance" desc="You can blast creatures with your simple appearance." />
-    <feat type="Forgotten Realms Campaign Setting page 35" name="Horse Nomad" desc="You have been raised in a culture that relies  upon riding and shooting for survival." />
-    <feat type="Player's Guide to Faerun page 39" name="Horse Nomad" desc="You have been raised in a culture that relies  upon riding and shooting." />
-    <feat type="Expanded Psionics Handbook page 47" name="Hostile Mind" desc="Your mind recoils violently against those who  use psionics against you." />
-    <feat type="Monster Manual v.3.5 page 304" name="Hover" desc="The creature can come to a halt in midair." />
-    <feat type="Monster Manual II page 18" name="Hover" desc="The creature can halt its forward motion while  flying, regardless of maneuverability." />
-    <feat type="Dragonlance Campaign Setting page 86" name="Hulking Brute " desc="You possess a truly impressive stature." />
-    <feat type="Races of Destiny page 152" name="Human Heritage" desc="Your human heritage is more prominent than in  others of your kind." />
-    <feat type="Miniatures Handbook page 27" name="Hurling Charge" desc="You are trained in using thrown weapons as part  of a charge attack." />
-    <feat type="Shining South page 20" name="Hyena Tribe Hunter" desc="You have learned the secrets of hunting from  the hyena that roams the lands where your tribe wanders." />
-    <feat type="Oriental Adventures page 63" name="Iaijutsu Master" desc="You are not only descended from Kakita, the  greatest duelist ever to have lived, but you share a karmic tie to his spirit." />
-    <feat type="Frostburn page 48" name="Ice Harmonics" desc="Your summon spells work better in the frostfell  if you summon native creatures." />
-    <feat type="UE page 44" name="Ice Troll Berserker" desc="When raging, your skin becomes very thick and  tough like the ice trolls that plague parts of your homeland." />
-    <feat type="Frostburn page 48" name="Icy Calling" desc="You can use your voice to shatter ice." />
-    <feat type="Epic Level Handbook page 57" name="Ignore Material Components" desc="You need not use any material components in  casting spells." />
-    <feat type="Expanded Psionics Handbook page 47" name="Imprint Stone" desc="You can create power stones to store psionic  powers." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Improve Bull Rush" desc="You know how to push opponents back." />
-    <feat type="Oriental Adventures page 63" name="Improved Aid" desc="You are descended from Hida Tadaka, the great  Crab daimyo who gave his life to avert a war between his clan and the Lion." />
-    <feat type="Epic Level Handbook page 57" name="Improved Alignment-Based Casting" desc="Your spells of a particular alignment are more  powerful than normal." />
-    <feat type="Epic Level Handbook page 57" name="Improved Arrow of Death" desc="Your arrows of death are harder to resist." />
-    <feat type="Savage Species page 35" name="Improved Assume Supernatural Ability" desc="You gain skills using a supernatural ability  of an assumed form." />
-    <feat type="Epic Level Handbook page 57" name="Improved Aura of Courage" desc="Your aura of courage is stronger than normal." />
-    <feat type="Epic Level Handbook page 57" name="Improved Aura of Despair" desc="Your aura of despair is wider than normal." />
-    <feat type="Complete Warrior page 100" name="Improved Buckler Defense" desc="You can attack with an off-hand weapon while  retaining a buckler's shield bonus to your Armor Class." />
-    <feat type="Heroes of Battle page 98" name="Improved Cohort" desc="You attract a more powerful cohort than you  normally would." />
-    <feat type="Frostburn page 48" name="Improved Cold Endurance" desc="Your training and natural hardiness have improved  your natural resistance to cold temperatures." />
-    <feat type="Complete Arcane page 192" name="Improved Combat Casting" desc="You heighten your ability to cast spells while  threatened without fear of being attacked." />
-    <feat type="Epic Level Handbook page 57" name="Improved Combat Casting" desc="You can cast spells while threatened without  fear of being attacked." />
-    <feat type="Complete Warrior page 100" name="Improved Combat Expertise" desc="You have mastered the art of defense in combat." />
-    <feat type="Epic Level Handbook page 57" name="Improved Combat Reflexes" desc="You can respond to any number of opponents who  let their defenses down." />
-    <feat type="Ghostwalk page 35" name="Improved Control Visage" desc="You can change your ghost form's appearance." />
-    <feat type="Player's Guide to Faerun page 136" name="Improved Cooperative Metamagic" desc="Your ability to enhance an ally's spell during  casting is expanded." />
-    <feat type="Epic Level Handbook page 70" name="Improved Counterspell" desc="You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency." />
-    <feat type="Forgotten Realms Campaign Setting page 35" name="Improved Counterspell" desc="You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Improved Counterspell" desc="You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Improved Critical" desc="Choose one type of weapon. With that weapon,  you know how to hit where it hurts." />
-    <feat type="Eberron Campaign Setting page 55" name="Improved Damage Reduction" desc="You gain damage reduction or improve your existing  damage reduction." />
-    <feat type="Epic Level Handbook page 58" name="Improved Darkvision" desc="Your ability to see in the dark is greater than  normal." />
-    <feat type="Epic Level Handbook page 58" name="Improved Death Attack" desc="Your death attack is harder to overcome." />
-    <feat type="Ghostwalk page 35" name="Improved Deflection" desc="You are adept at deflecting things before they  strike you." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Improved Disarm" desc="You know how to disarm opponents in melee combat." />
-    <feat type="Complete Adventurer page 110" name="Improved Diversion" desc="You can create a diversion to hide quickly and  with less effort." />
-    <feat type="Dragonlance Campaign Setting page 86" name="Improved Draconian Breath Weapon" desc="You have mastered your draconic heritage and  improved on your innate breath weapon." />
-    <feat type="Planar Handbook page 40" name="Improved Elemental Heritage" desc="You have manifested an even stronger tie to  your elemental ancestor, resulting in a minor resistance to elemental effects." />
-    <feat type="Dungeon Master's Guide v.3.5 page 209" name="Improved Elemental Wild Shape " desc="You can take the form of a larger variety of  elementals than normal." />
-    <feat type="Epic Level Handbook page 58" name="Improved Elemental Wild Shape" desc="You can take the form of a greater variety of  elementals than normal." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Energy Drain" desc="You draw extra power from your energy-drained  victims." />
-    <feat type="Races of Faerun page 164" name="Improved Energy Resistance" desc="Choose one form of energy to which you have  a natural (not spell- or item-generated) resistance. Your inherent resistance  to this kind of energy is more effective than normal." />
-    <feat type="Complete Warrior page 100" name="Improved Familiar" desc="This feat allows spellcasters to acquire a new  familiar from a nonstandard list, but only when they could normally acquire  a new familiar." />
-    <feat type="Forgotten Realms Campaign Setting page 35" name="Improved Familiar" desc="So long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list." />
-    <feat type="Player's Guide to Faerun page 39" name="Improved Familiar" desc="Refer to the Improved Familiar feat description  on page 200 of the Dungeon Master's Guide." />
-    <feat type="Races of Faerun page 165" name="Improved Familiar" desc="See the discussion of the Improved Familiar  feat in Chapter 1 of the Forgotten Realms Campaign Setting. Table A-5 shows  additional improved familiars from this book that are available with this  feat." />
-    <feat type="Serpent Kingdoms page 146" name="Improved Familiar" desc="Refer to the Improved Familiar feat description  in the Dungeon Master's Guide." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Improved Familiar" desc="As long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list." />
-    <feat type="Complete Warrior page 101" name="Improved Favored Enemy" desc="You know how to hit your favored enemies where  it hurts." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Favored Enemy" desc="Gain bonuses against favored enemies." />
-    <feat type="Epic Level Handbook page 58" name="Improved Favored Enemy" desc="You gain bonuses against favored enemies." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Improved Feint" desc="You are skilled at misdirecting your opponent's  attention in combat." />
-    <feat type="Champions of Ruin page 20" name="Improved Fiendish Servant" desc="You gain the service of a powerful fiendish  animal servitor." />
-    <feat type="Complete Adventurer page 110" name="Improved Flight" desc="You gain greater maneuverability when flying  than you would normally have." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Improved Flight" desc="You gain greater maneuverability when flying  than you would normally have." />
-    <feat type="Races of Faerun page 165" name="Improved Flight" desc="You gain greater maneuverability when flying  than you would normally have." />
-    <feat type="Races of the Wild page 151" name="Improved Flight" desc="You have gained greater maneuverability when  flying than you would normally have." />
-    <feat type="Sharn: City of Towers page 157" name="Improved Flight Item (Item Creation)" desc="You have learned to make use of the manifest  zone in Sharn to craft magic items that grant superior flight." />
-    <feat type="Epic Level Handbook page 70" name="Improved Flyby Attack" desc="The creature can attack on the wing with increased  mobility." />
-    <feat type="Savage Species page 36" name="Improved Flyby Attack" desc="You can attack on the wing with increased mobility." />
-    <feat type="Eberron Campaign Setting page 55" name="Improved Fortification" desc="You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits." />
-    <feat type="Monster Manual III page 192" name="Improved Fortification" desc="You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits." />
-    <feat type="Frostburn page 49" name="Improved Frosty Touch" desc="Your frosty touch causes more cold damage." />
-    <feat type="Ghostwalk page 35" name="Improved Ghost Flight" desc="Your ghost body can fly rapidly." />
-    <feat type="Deities and Demigods page 51" name="Improved Grapple " desc="The deity is skilled in martial arts that emphasize  holds and throws." />
-    <feat type="Oriental Adventures page 63" name="Improved Grapple" desc="You are skilled in martial arts that emphasize  holds and throws." />
-    <feat type="Player's Handbook v.3.5 page 95" name="Improved Grapple" desc="You are skilled at grappling opponents." />
-    <feat type="UE page 44" name="Improved Grapple" desc="You are skilled in martial arts that emphasize  holds and throws." />
-    <feat type="Sandstorm page 50" name="Improved Heat Endurance" desc="You can survive even in the most extreme natural  heat conditions." />
-    <feat type="Epic Level Handbook page 58" name="Improved Heighten Spell" desc="You can cast a spell at any level above its  own." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Initiative" desc="You can react more quickly than normal in a  fight." />
-    <feat type="Epic Level Handbook page 58" name="Improved Ki Strike" desc="You can strike opponents with great damage reduction." />
-    <feat type="Races of Faerun page 165" name="Improved Levitation" desc="You have learned to use part of your levitate  spell-like ability at a time, allowing multiple uses with a shorter duration." />
-    <feat type="Underdark page 25" name="Improved Levitation" desc="You have learned to use only part of your levitate  spell-like ability at a time, allowing multiple uses with shorter duration." />
-    <feat type="Races of Faerun page 165" name="Improved Low Blow" desc="You are especially good at using the Low Blow  feat." />
-    <feat type="Epic Level Handbook page 58" name="Improved Low-Light Vision" desc="The range of your low-light vision is greater  than normal." />
-    <feat type="Draconomicon page 70" name="Improved Maneuverability" desc="Your maneuverability in flight improves." />
-    <feat type="Epic Level Handbook page 58" name="Improved Manifestation" desc="You can manifest psionic powers more powerful  than the normal limits of manifestation." />
-    <feat type="Expanded Psionics Handbook page 34" name="Improved Manifestation" desc="You increase your power point reserve." />
-    <feat type="Epic Level Handbook page 58" name="Improved Manyshot" desc="You can fire even more arrows as a single attack  against a nearby target." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Metamagic" desc="You can cast spells using metamagic feats more  easily than normal." />
-    <feat type="Epic Level Handbook page 59" name="Improved Metamagic" desc="You can cast spells using metamagic feats more  easily than normal." />
-    <feat type="Expanded Psionics Handbook page 34" name="Improved Metapsionics" desc="You can manifest powers using metapsionic feats  more often than normal." />
-    <feat type="Complete Warrior page 101" name="Improved Mounted Archery" desc="You can make ranged attacks from a mount almost  as well as you can from the ground." />
-    <feat type="Draconomicon page 70" name="Improved Multiattack" desc="You are particularly adept at using all your  natural weapons at once." />
-    <feat type="Epic Level Handbook page 70" name="Improved Multiattack" desc="The creature is particularly adept at using  all its natural weapons at once." />
-    <feat type="Savage Species page 36" name="Improved Multiattack" desc="You are particularly adept at using all your  natural weapons at once." />
-    <feat type="Deities and Demigods page 51" name="Improved Multiweapon Fighting" desc="A deity with three or more hands can fight with  a weapon in each hand." />
-    <feat type="Epic Level Handbook page 70" name="Improved Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
-    <feat type="Savage Species page 36" name="Improved Multiweapon Fighting" desc="You are expert at fighting with a weapon in  each of your three or more hands. You can make up to two attacks per round  with each off-hand weapon." />
-    <feat type="Monster Manual v.3.5 page 304" name="Improved Natural Armor" desc="The creature's natural armor is thicker and  harder than that of other of its kind." />
-    <feat type="Monster Manual III page 206" name="Improved Natural Armor" desc="The natural armor of a creature with this feat  is thicker and harder than normal for its kind." />
-    <feat type="Races of Faerun page 165" name="Improved Natural Armor" desc="Your skin is even tougher than that of most  of your kind." />
-    <feat type="Eberron Campaign Setting page 55" name="Improved Natural Attack" desc="One of a creature's natural attacks is more  dangerous than its type and size would otherwise indicate." />
-    <feat type="Monster Manual v.3.5 page 304" name="Improved Natural Attack" desc="The creature's natural attacks are more dangerous  than its size and type would otherwise dictate." />
-    <feat type="Monster Manual III page 206" name="Improved Natural Attack" desc="The natural attacks of a creature with this  feat are more dangerous than its size and type would otherwise dictate." />
-    <feat type="Planar Handbook page 40" name="Improved Outer Planar Heritage" desc="Your ancestral tie to the Outer Planes manifests  as an ability to deal damage with your natural attacks as if they matched  the alignment of your ancestors." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Overrun" desc="You are skilled at knocking down opponents." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Improved Overrun" desc="You are trained in knocking over opponents that  are smaller than you." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Paralysis" desc="You are better at paralyzing your victims." />
-    <feat type="Ghostwalk page 36" name="Improved Poltergeist Hand" desc="You can move a large object at a distance when  you are a ghost." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Precise Shot" desc="Your ranged attacks can ignore the effects of  cover or concealment." />
-    <feat type="Expanded Psionics Handbook page 47" name="Improved Psicrystal" desc="You can upgrade your psicrystal." />
-    <feat type="Complete Warrior page 101" name="Improved Rapid Shot" desc="You are an expert at firing weapons with exceptional  speed." />
-    <feat type="Draconomicon page 70" name="Improved Rapidstrike" desc="You can make multiple attacks with a natural  weapon." />
-    <feat type="Races of Eberron page 119" name="Improved Resiliency" desc="You gain a construct's resistance to nonlethal  damage." />
-    <feat type="Dragonlance Campaign Setting page 86" name="Improved Resist Dragonfear" desc="You are able to demonstrate great courage in  the presence of dragons." />
-    <feat type="Races of Stone page 141" name="Improved Rock Hurling" desc="Your accuracy and effectiveness with thrown  rocks improves." />
-    <feat type="Savage Species page 36" name="Improved Scent" desc="You can detect and track creatures by smell  at greater distances than normal." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Improved Shield Bash" desc="You can push opponents back by bashing them  with your shield." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Shield Bash" desc="You can bash with a shield while retaining its  shield bonus to your Armor Class." />
-    <feat type="Miniatures Handbook page 27" name="Improved Shieldmate" desc="You have an outstanding ability to protect those  near you with your shield." />
-    <feat type="Races of Destiny page 152" name="Improved Sigil (Aesh)" desc="You tap into your aesh power sigil to  gain enhanced accuracy with your favored melee weapons." />
-    <feat type="Races of Destiny page 152" name="Improved Sigil (Hoon)" desc="You tap into your hoon power sigil to  help survive deadly conditions." />
-    <feat type="Races of Destiny page 153" name="Improved Sigil (Krau)" desc="You tap into your krau power sigil to  augment the energy of your magical utterances." />
-    <feat type="Races of Destiny page 153" name="Improved Sigil (Naen)" desc="You tap into your naen power sigil to  see through illusions and resist language-based effects." />
-    <feat type="Races of Destiny page 153" name="Improved Sigil (Uur)" desc="You tap into your uur power sigil to  gain enhanced accuracy with ranged weapons." />
-    <feat type="Races of Destiny page 153" name="Improved Sigil (Vaul)" desc="You tap into your vaul power sigil to  resist mental effects." />
-    <feat type="Complete Adventurer page 192" name="Improved Skirmish" desc="Your combat mobility improves." />
-    <feat type="Complete Divine page 82" name="Improved Smiting" desc="Your smite attacks deal more damage to specific  foes, and can damage creature with alignment-based damage reduction." />
-    <feat type="Draconomicon page 71" name="Improved Snatch" desc="You can make snatch attacks against bigger opponents  than other creatures can." />
-    <feat type="Player's Guide to Faerun page 136" name="Improved Snatch Spell" desc="When you take over a spell from another spellcaster,  you gain more control over its effect." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Sneak Attack" desc="Your sneak attacks are more deadly than normal." />
-    <feat type="Epic Level Handbook page 59" name="Improved Sneak Attack" desc="Your sneak attacks are more deadly than normal." />
-    <feat type="Draconomicon page 71" name="Improved Speed " desc="You are faster than others of your kind." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Spell Capacity" desc="You can prepare spells that exceed the normal  limits of spellcasting." />
-    <feat type="Draconomicon page 71" name="Improved Spell Capacity" desc="You can prepare spells that exceed the normal  limits of spellcasting." />
-    <feat type="Epic Level Handbook page 59" name="Improved Spell Capacity" desc="You can prepare spells that exceed the normal  limits of spellcasting." />
-    <feat type="Epic Level Handbook page 60" name="Improved Spell Resistance" desc="Your innate resistance to magical effects increases." />
-    <feat type="Player's Guide to Faerun page 136" name="Improved Spellpool Access" desc="You can use your spellpool access to call spells  of greater than normal power." />
-    <feat type="Serpent Kingdoms page 146" name="Improved Spit" desc="You can spit farther than normal." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Stunning Fist" desc="Your stunning attack is more powerful." />
-    <feat type="Epic Level Handbook page 60" name="Improved Stunning Fist" desc="Your stunning attack is more powerful." />
-    <feat type="Complete Adventurer page 192" name="Improved Sudden Strike" desc="Your ability to strike unaware foes improves." />
-    <feat type="Deities and Demigods page 51" name="Improved Sunder" desc="The deity is adept at placing its attacks precisely  where it wants them to land." />
-    <feat type="Enemies and Allies page 42" name="Improved Sunder" desc="You are adept at placing your attacks precisely  where you want them to land." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Sunder" desc="You are skilled at attacking your opponents'  weapons and shields, as well as other objects." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Improved Sunder" desc="You are adept at placing your attacks precisely  where you want them to land." />
-    <feat type="Complete Adventurer page 110" name="Improved Swimming" desc="You can swim faster than you normally could." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Improved Swimming" desc="You swim faster than you normally could." />
-    <feat type="Complete Warrior page 101" name="Improved Toughness" desc="You are significantly tougher than normal." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Toughness" desc="You are significantly tougher than normal." />
-    <feat type="Monster Manual III page 207" name="Improved Toughness" desc="A creature with this feat is significantly tougher  than normal." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Trip" desc="You are trained not only in tripping opponents  safely but also following through with an attack." />
-    <feat type="Ghostwalk page 36" name="Improved Turn Resistance" desc="You are better able to resist the channeling  of positive or negative energy by clerics and similar classes." />
-    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Turn Resistance" desc="You have a better than normal chance to resist  turning." />
-    <feat type="Savage Species page 36" name="Improved Turn Resistance" desc="You have a better than normal chance to resist  turning." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Turning" desc="Your turning or rebuking attempts are more powerful  than normal." />
-    <feat type="Complete Warrior page 101" name="Improved Two-Weapon Defense" desc="You gain a significant defensive advantage while  fighting with two weapons." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Two-Weapon Fighting" desc="You are an expert in fighting two-handed." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Improved Unarmed Strike" desc="You are skilled at fighting while unarmed." />
-    <feat type="Complete Warrior page 101" name="Improved Weapon Familiarity" desc="You are familiar with all exotic weapons common  to your people." />
-    <feat type="Races of Stone page 141" name="Improved Weapon Familiarity" desc="You are familiar with all exotic weapons common  to your people." />
-    <feat type="Savage Species page 36" name="Improved Web" desc="You gain additional utility from your webs." />
-    <feat type="Epic Level Handbook page 60" name="Improved Whirlwind Attack" desc="You become a blurry whirlwind of attacks, striking  out at all enemies near your position." />
-    <feat type="Epic Level Handbook page 60" name="Incite Rage" desc="You can incite allies into a rage." />
-    <feat type="Ghostwalk page 36" name="Incorporeal Form" desc="You can become incorporeal even when you would  otherwise be forced to manifest fully." />
-    <feat type="Ghostwalk page 36" name="Incorporeal Spell Targeting" desc="You know how to cast your spells so they're  more likely to affect incorporeal creatures." />
-    <feat type="Ghostwalk page 36" name="Incorporeal Target Fighting" desc="You know how to fight incorporeal creatures  in melee." />
-    <feat type="Unearthed Arcana page 93" name="Ineluctable Echo" desc="Those who use words of power around you hear  the sound of their own voices." />
-    <feat type="Races of Faerun page 165" name="Infernal Bargainer" desc="You are comfortable making deals with powerful  entities from the Lower Planes." />
-    <feat type="Epic Level Handbook page 61" name="Infinite Deflection" desc="You can deflect an infinite number of projectiles." />
-    <feat type="Lords of Madness page 180" name="Inhuman Reach" desc="Your arms elongate, allowing you to touch the  floor with your hands." />
-    <feat type="Lords of Madness page 180" name="Inhuman Vision" desc="You possess the inhuman eyes of some strange  creature." />
-    <feat type="Champions of Ruin page 23" name="Initiate of Ghaunadaur" desc="You have learned the dread secrets of the god  of oozes, slimes, jellies, and outcasts." />
-    <feat type="Champions of Ruin page 24" name="Initiate of Gruumsh" desc="The singular eye of the great orc god Gruumsh  watches over you." />
-    <feat type="Champions of Ruin page 24" name="Initiate of Kossuth" desc="You have faced the fierce elemental flame and  unlocked some of the secrets of Kossuth's church." />
-    <feat type="Champions of Ruin page 24" name="Initiate of Loviatar" desc="With great pain comes great power. This and  other secrets you have learned from the church of Loviatar." />
-    <feat type="Shining South page 20" name="Initiate of Loviatar" desc="You have been initiated into the greatest secrets  of Loviatar's church." />
-    <feat type="Champions of Ruin page 24" name="Initiate of Shar" desc="You have been initiated into the greatest secrets  of Shar's church." />
-    <feat type="City of Splendors: Waterdeep page 145" name="Initiate of Shar" desc="You have been initiated into the greatest secrets  of Shar's church." />
-    <feat type="Champions of Ruin page 25" name="Initiate of Varae" desc="You fervently worship Varae, the serpentine  goddess, and guard well the secrets of your faith." />
-    <feat type="Complete Arcane page 80" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
-    <feat type="Player's Guide to Faerun page 39" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
-    <feat type="Expanded Psionics Handbook page 48" name="Inquisitor" desc="You know when others lie." />
-    <feat type="Player's Guide to Faerun page 136" name="Inscribe Epic Runes" desc="You can inscribe runes of epic power." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Inscribe Rune" desc="You can create magic runes that hold spells  until triggered." />
-    <feat type="Player's Guide to Faerun page 40" name="Inscribe Rune" desc="You can create magic runes that hold spells  until triggered." />
-    <feat type="Races of Destiny page 153" name="Inside Connection" desc="Choose a specific organization. You have strong  personal connections within that organization, as well as insight into its  membership." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Insidious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to detect." />
-    <feat type="Player's Guide to Faerun page 40" name="Insidious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
-    <feat type="Complete Arcane page 80" name="Insightful" desc="You possess a magical understanding of the workings  of arcane detection." />
-    <feat type="Complete Adventurer page 110" name="Insightful Reflexes" desc="Your keen intellect allows you an uncanny knack  for evading dangerous effects." />
-    <feat type="Heroes of Battle page 98" name="Inspirational Leadership" desc="Your cohort and followers are exceptionally  faithful to your cause." />
-    <feat type="Epic Level Handbook page 61" name="Inspire Excellence" desc="You can improve the abilities of your comrades  through your performance." />
-    <feat type="Races of Stone page 141" name="Inspire Spellpower" desc="You can use your bardic music to increase the  power of your allies' spells." />
-    <feat type="Epic Level Handbook page 61" name="Instant Reload" desc="Choose one type of crossbow, such as heavy crossbow.  You can fire that type of crossbow as fast as a bow." />
-    <feat type="Complete Warrior page 102" name="Instantaneous Rage" desc="You activate your rage instantly." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Instantaneous Rage" desc="You activate your rage instantly." />
-    <feat type="Epic Level Handbook page 61" name="Intensify Spell" desc="You can cast spells with exceptionally great  effect." />
-    <feat type="Complete Warrior page 102" name="Intimidating Rage" desc="Your rage engenders fear in your opponents." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Intimidating Rage" desc="Your rage engenders fear in your opponents." />
-    <feat type="Book of Exalted Deeds page 44" name="Intuitive Attack" desc="You fight by faith more than brute strength." />
-    <feat type="Savage Species page 36" name="Inured to Energy" desc="You can resist energy attacks more efficiently  than normal." />
-    <feat type="Races of Stone page 141" name="Invest Armor" desc="You can charge your armor with additional protective  qualities." />
-    <feat type="Eberron Campaign Setting page 55" name="Investigate" desc="You can use the Search skill to find and analyze  clues at the scene of a crime or a mystery." />
-    <feat type="Player's Handbook v.3.5 page 96" name="Investigator" desc="You have a knack for finding information." />
-    <feat type="Savage Species page 36" name="Involuntary Rage" desc="Extreme pain drives you berserk." />
-    <feat type="Races of Faerun page 165" name="Iron Mind" desc="You are descended from duergar who escaped enslavement  by the illithids. The blood of these psionic-resistant former thralls runs  thick in your veins." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Iron Will" desc="You have a stronger will than normal." />
-    <feat type="Complete Adventurer page 113" name="Ironskin Chant" desc="You can channel the power of your bardic music  to enable yourself to ignore minor injuries." />
-    <feat type="Races of Eberron page 119" name="Ironwood Body" desc="Your body is crafted with a layer of hard ironwood  that cushions blows." />
-    <feat type="Serpent Kingdoms page 146" name="Irresistible Gaze" desc="Your gaze attack is more potent than normal." />
-    <feat type="Savage Species page 37" name="Irresistible Gaze" desc="Your gaze attack is more potent than normal." />
-    <feat type="Lost Empires of Faerun page 8" name="Item Reprieve" desc="You learn how to use items from a school of  magic previously prohibited to you." />
-    <feat type="Complete Adventurer page 110" name="Jack of All Trades" desc="You have picked up a smattering of even the  most obscure skills." />
-    <feat type="Deities and Demigods page 51" name="Jack of All Trades" desc="The deity has picked up a smattering of even  the most obscure skills." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Jack of All Trades" desc="You've picked up a smattering of even the most  obscure skills." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Jack of All Trades" desc="You've picked up a smattering of even the most  obscure skills." />
-    <feat type="Races of Eberron page 119" name="Jaws of Death" desc="Gnashing teeth and a powerful set of jaws allow  you to bite foes." />
-    <feat type="Lost Empires of Faerun page 8" name="Jergal's Pact" desc="You have made a bargain with Jergal, seneschal  to the god of death." />
-    <feat type="City of Splendors: Waterdeep page 145" name="Jester's Magic" desc="You are a skilled master of magical jests, capable  of inciting audiences to laughter or lulling them to sleep." />
-    <feat type="Races of Faerun page 166" name="Jotunbrud" desc="You are descended from the giants who ruled  the mountain-spanning empire of Ostoria in ages past, and possess a truly  impressive stature." />
-    <feat type="Sandstorm page 50" name="Judged by Aurifar" desc="Aurifar, the Caliph of the Sky, has judged you,  and he shows you special favor." />
-    <feat type="Races of Faerun page 166" name="Jungle Stamina" desc="You are acclimated to the disease-ridden jungles  of southwestern Faerun." />
-    <feat type="Races of Eberron page 118" name="Kalashtar Thoughtshifter" desc="You have learned to control your mind blade  for maximum impact in battle." />
-    <feat type="Oriental Adventures page 63" name="Kami's Intuition" desc="You are descended from Shinjo, the first Unicorn,  the kindest and most compassionate of the kami." />
-    <feat type="Complete Warrior page 102" name="Karmic Strike" desc="You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you." />
-    <feat type="Oriental Adventures page 63" name="Karmic Strike" desc="You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you." />
-    <feat type="Oriental Adventures page 64" name="Karmic Twin" desc="You are descended from Bayushi, the first Scorpion,  whos love for his daughter proved his final downfall." />
-    <feat type="Oriental Adventures page 64" name="Keen Intellect" desc="You are descended from Agasha, the founder of  the original Dragon shugenja school, a shugenja known for her keen intellect  and powers of observation." />
-    <feat type="Epic Level Handbook page 61" name="Keen Strike" desc="Your unarmed strikes become as sharp as blades." />
-    <feat type="Oriental Adventures page 64" name="Ki Shout" desc="You can bellow forth a ki-empowered shout  that strikes terror into your enemies." />
-    <feat type="Complete Warrior page 102" name="Kiai Shout" desc="You can bellow forth a shout that strikes terror  into your enemies." />
-    <feat type="Ghostwalk page 36" name="Kihu-Sherem Guardian" desc="You are one of the Kihu-Sherem, magically altered  in the womb to allow you to better protect the sorcerers of your homeland." />
-    <feat type="Races of the Wild page 151" name="Killoren Ancient" desc="You favor the killoren aspect of the ancient." />
-    <feat type="Races of the Wild page 151" name="Killoren Destroyer" desc="You favor the killoren aspect of the destroyer." />
-    <feat type="Races of the Wild page 151" name="Killoren Hunter" desc="You favor the killoren aspect of the hunter" />
-    <feat type="Player's Guide to Faerun page 40" name="Knifefighter" desc="You're an expert at using weapons in a grapple." />
-    <feat type="Book of Exalted Deeds page 44" name="Knight of Stars " desc="You swear allegiance to the Court of Stars,  the paragons of the eladrin, and in exchange gain power to act on their  behalf." />
-    <feat type="Eberron Campaign Setting page 56" name="Knight Training" desc="You are part of a knightly order that combines  the divine calling of the paladin class with another form of training." />
-    <feat type="Races of Stone page 142" name="Knockback" desc="By putting your bulk behind a blow, you can  push your enemy backward." />
-    <feat type="Deities and Demigods page 51" name="Knock-Down" desc="The deity's mighty blows can knock foes off  their feet." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Knock-Down" desc="Your mighty blows can knock foes off their feet." />
-    <feat type="Stronghold Builder's Guidebook page 10" name="Landlord" desc="By knowing the right nobles, making contacts  with masons and artisans, or performing great deeds for a liege-lord, you  have resources that help you build and expand your stronghold." />
-    <feat type="Races of Faerun page 166" name="Landwalker" desc="You can survive out of water for a longer period  of time than most of your kind." />
-    <feat type="Stormwrack page 92" name="Landwalker" desc="You can survive out of water for a longer period  of time than most of your kind." />
-    <feat type="Draconomicon page 71" name="Large and In Charge" desc="You can prevent opponents from closing inside  your reach." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 61" name="Large and in Charge" desc="You can prevent opponents from closing inside  your reach." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Lasting Inspiration" desc="Your songs continue to inspire allies long after  your words have faded." />
-    <feat type="Epic Level Handbook page 61" name="Lasting Inspiration" desc="Your songs continue to inspire allies long after  your words have faded." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Lasting Life" desc="You can shed negative levels with an act of  will." />
-    <feat type="Races of Destiny page 155" name="Law Inviolate" desc="Your unshakable faith in St. Cuthbert allows  you to better apprehend fugitives or overcome villains who transgress the  law." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Leadership" desc="You are the sort of person others want to follow,  and you have done some work attempting to recruit cohorts and followers." />
-    <feat type="Complete Adventurer page 110" name="Leap Attack" desc="You can combine a powerful charge and a mighty  leap into one devastating attack." />
-    <feat type="Eberron Campaign Setting page 56" name="Least Dragonmark" desc="You have a least dragonmark." />
-    <feat type="WL page 14" name="Least Legacy" desc="You awaken the basic abilities of a specific  item of legacy." />
-    <feat type="WL page 15" name="Legacy Focus" desc="Your item's legacy abilities are more potent  than normal." />
-    <feat type="Complete Adventurer page 192" name="Legendary Acrobat" desc="You can balance and tumble much more easily  than a normal person." />
-    <feat type="Eberron Campaign Setting page 56" name="Legendary Artisan" desc="You have mastered the method of creating magic  items." />
-    <feat type="Complete Adventurer page 192" name="Legendary Climber" desc="You can climb rapidly much more easily than  a normal person." />
-    <feat type="Epic Level Handbook page 61" name="Legendary Climber" desc="You can climb rapidly much more easily than  a normal person." />
-    <feat type="Epic Level Handbook page 62" name="Legendary Commander" desc="You attract and lead great armies of followers  through sheer force of personality." />
-    <feat type="Complete Adventurer page 192" name="Legendary Leaper" desc="You can cover great distances with only a brief  start." />
-    <feat type="Epic Level Handbook page 62" name="Legendary Leaper" desc="You can jump much farther than normal for your  size." />
-    <feat type="Complete Warrior page 152" name="Legendary Rider" desc="You can ride a mount in combat with ease, even  bareback." />
-    <feat type="Epic Level Handbook page 62" name="Legendary Rider" desc="You can ride any mount without penalty (even  bareback) and can control any mount in combat." />
-    <feat type="Complete Adventurer page 192" name="Legendary Tracker" desc="You can track prey across or through the water,  or even through the air." />
-    <feat type="Epic Level Handbook page 62" name="Legendary Tracker" desc="You can track prey across or through the water,  or even through the air." />
-    <feat type="Epic Level Handbook page 62" name="Legendary Wrestler" desc="You are exceptionally proficient at grappling." />
-    <feat type="Eberron Campaign Setting page 56" name="Lesser Dragonmark" desc="You have a lesser dragonmark." />
-    <feat type="WL page 15" name="Lesser Legacy" desc="You awaken more powerful abilities of a specific  item of legacy." />
-    <feat type="Book of Vile Darkness page 49" name="Lichloved" desc="By repeatedly committing perverted sex acts  with the undead, the character gains dread powers." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Life Drain" desc="You drain additional life energy from your foes." />
-    <feat type="Unearthed Arcana page 93" name="Life Leech" desc="You automatically try to steal the last bit  of life energy from anyone nearby." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Lifebond" desc="Select a specific living creature that is friendly  to you. You create a special bond with that creature." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Lifesense" desc="You see the light that all living creatures  emit." />
-    <feat type="Sandstorm page 51" name="Light of Aurifar" desc="Undead that you turn or rebuke immolate." />
-    <feat type="Races of Faerun page 166" name="Light to Daylight" desc="Your inherent ability to create light is more  powerful than normal." />
-    <feat type="Races of Faerun page 166" name="Lightbringer" desc="You can channel positive energy into your spells  so that they glow with holy power." />
-    <feat type="Races of the Wild page 151" name="Lightfeet" desc="You have an incredibly soft step, making it  difficult to track or hear you." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Lightning Fists" desc="Your skill and agility allow you to attempt  a series of blindingly fast blows." />
-    <feat type="Complete Warrior page 113" name="Lightning Mace" desc="You are a master of fighting with two maces  at the same time." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Lightning Reflexes" desc="You have faster than normal reflexes." />
-    <feat type="Draconomicon page 71" name="Lingering Breath" desc="Your breath weapon forms a lingering cloud." />
-    <feat type="Epic Level Handbook page 62" name="Lingering Damage" desc="Your sneak attacks continue to deal damage even  after you strike." />
-    <feat type="Complete Adventurer page 111" name="Lingering Song" desc="Your inspirational bardic music stays with the  listeners long after the last note has died away." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Lingering Song" desc="Your bardic music stays with the listeners long  after the last note has died away." />
-    <feat type="Champions of Ruin page 20" name="Lingering Spell" desc="Residual eldritch energy from your spell continues  to harm your enemies after the spell's main effect has expired." />
-    <feat type="Oriental Adventures page 64" name="Lion Spy" desc="Your ancestor, Akodo Shinju, was the greatest  spy of the Lion clan." />
-    <feat type="Shining South page 20" name="Lion Tribe Warrior" desc="You have learned how to pounce on your foes,  like the lion that roams your lands." />
-    <feat type="Complete Divine page 82" name="Lion's Pounce" desc="You can deliver a terrible attack at the end  of a charge." />
-    <feat type="Unearthed Arcana page 94" name="Live My Nightmare" desc="Those who magically pry into your mind become  privy to your most frightening dreams." />
-    <feat type="Player's Guide to Faerun page 176" name="Lliira's Blessing" desc="Thanks to the favor of the goddess of freedom,  you are difficult to restrain." />
-    <feat type="Races of Faerun page 166" name="Lolth's Blessing" desc="The Spider Queen has blessed you with additional  magical abilities." />
-    <feat type="Underdark page 26" name="Lolth's Meat" desc="Like all drow raised in cities that are ruled  by Lolth's priestesses, you know that you exist only to provide your goddess  with food and pleasure. This knowledge lends you a certain bloodthirsty  readiness." />
-    <feat type="UE page 44" name="Long Reach" desc="You know how to use your great stature to reach  an opponent more than 5 feet away with a spearlike weapon." />
-    <feat type="Eberron Campaign Setting page 57" name="Longstride Elite" desc="Your shifter trait improves." />
-    <feat type="Races of Eberron page 114" name="Longstride Elite" desc="Your longstride shifter trait improves." />
-    <feat type="Races of Eberron page 114" name="Longtooth Elite" desc="Your longtooth shifter trait improves." />
-    <feat type="Complete Arcane page 80" name="Lord of the Uttercold" desc="Through careful study of the Elemental Planes  and their interactions with the Negative Energy Plane, you have learned  to wield the uttercold." />
-    <feat type="Races of Faerun page 166" name="Low Blow" desc="You can get underfoot and attack creatures larger  than you." />
-    <feat type="Unearthed Arcana page 182" name="Low Profile" desc="You are less famous than others of your class  and level, or you wish to maintain a less visible presence than others of  your station." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Luck of Heroes" desc="Your land is known for producing heroes; you  receive a luck bonus on all saving throws." />
-    <feat type="Oriental Adventures page 64" name="Luck of Heroes" desc="You are descended from the quick-footed and  quick-witted Hiruma, the archetypal hunter and scout." />
-    <feat type="Player's Guide to Faerun page 40" name="Luck of Heroes" desc="Your land is known for producing heroes." />
-    <feat type="City of Splendors: Waterdeep page 146" name="Lunar Magic" desc="Your spells and spell-like abilities are tied  to the phase of the moon, rising and falling with the strength of Selune." />
-    <feat type="Faiths &amp; Pantheons page 214" name="Lycanthropic Spell" desc="You cast spells while in your lycanthropic animal  form." />
-    <feat type="Complete Adventurer page 113" name="Lyric Spell" desc="You can channel the power of your bardic music  into your magic, allowing you to expend uses of your bardic music ability  to cast spells." />
-    <feat type="Complete Arcane page 81" name="Mage Slayer" desc="You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly." />
-    <feat type="Miniatures Handbook page 27" name="Mage Slayer" desc="You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly." />
-    <feat type="Oriental Adventures page 64" name="Magic in the Blood" desc="You claim a karmic link with Iuchi, one of the  most resourceful shugenjas in early Rokugan." />
-    <feat type="Player's Guide to Faerun page 40" name="Magic in the Blood" desc="You have a knack for getting the most out of  your innate magic abilities." />
-    <feat type="Races of the Wild page 152" name="Magic of the Land" desc="Your intimate understanding of the natural world  allows you to imbue your spells with life-giving magical power from the  land itself." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Magical Aptitude" desc="You have a knack for magical endeavors." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Magical Artisan" desc="You have mastered the method of creating certain  magic items." />
-    <feat type="Oriental Adventures page 64" name="Magical Artisan" desc="You are descended from Asahina Yajinden, a shugenja  of Crane clan who became the greatest lieutenant of the dread sorcerer Iuchiban." />
-    <feat type="Player's Guide to Faerun page 41" name="Magical Artisan" desc="You have mastered the method of creating a certain  kind of magic item." />
-    <feat type="Complete Divine page 90" name="Magical Beast Wild Shape" desc="You can wild shape into magical beast form." />
-    <feat type="Epic Level Handbook page 62" name="Magical Beast Wild Shape" desc="You can wild shape into magical beast form." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Magical Training" desc="Every crafter and laborer knows a cantrip or  two to ease her work." />
-    <feat type="Player's Guide to Faerun page 41" name="Magical Training" desc="You come from a land where cantrips are taught  to all who have the aptitude to learn magic." />
-    <feat type="Oriental Adventures page 64" name="Magistrate's Mind" desc="You claim descent from Soshi Saibankan, a great  Scorpion judge who helped establish the Empire's institution of Emerald  magistrates." />
-    <feat type="Ghostwalk page 36" name="Malevolence" desc="You can possess a creature and control its actions." />
-    <feat type="Book of Vile Darkness page 49" name="Malign Spell Focus" desc="The character's spells that have the evil descriptor  are more potent than normal due to a deal she makes with an evil power." />
-    <feat type="Champions of Ruin page 20" name="Malign Spell Focus" desc="Your evil spells are more potent than normal  due to a deal forged with an evil power." />
-    <feat type="Sharn: City of Towers page 157" name="Manifest Flight" desc="You have learned to make use of the manifest  zone in Sharn to improve your natural ability to fly." />
-    <feat type="Sharn: City of Towers page 157" name="Manifest Leap" desc="You have learned to make use of the manifest  zone in Sharn to increase your ability to jump and reduce the damage you  take when you fall." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Mantis Leap" desc="You deliver a powerful attack after making a  jump." />
-    <feat type="Oriental Adventures page 64" name="Many Masks" desc="You are descended from Shosuro Furuyari, an  important Scorpion playwright." />
-    <feat type="Epic Level Handbook page 70" name="Manyshot" desc="You can fire multiple arrows as a single attack  against a nearby target." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Manyshot" desc="You can fire multiple arrows simultaneously  against a nearby target." />
-    <feat type="Frostburn page 49" name="Mark of Hleid" desc="You bear a mark that identifies you as an ally  of the church of Hleid and grants you supernatural qualities." />
-    <feat type="Races of Stone page 142" name="Markings of the Blessed" desc="Your skin markings shift into a pattern that  resists a wide array of harmful effects in times of trouble." />
-    <feat type="Races of Stone page 142" name="Markings of the Hunter" desc="Your skin markings shift into a pattern that  makes you hard to get the drop on." />
-    <feat type="Races of Stone page 142" name="Markings of the Magi" desc="Your skin markings shift into a pattern that  denotes you as having strong magical talent." />
-    <feat type="Races of Stone page 142" name="Markings of the Maker" desc="Your skin markings shift into a pattern that  gives you fate's edge when using skills." />
-    <feat type="Races of Stone page 142" name="Markings of the Warrior" desc="Your skin markings have shifted over time into  a pattern that gives you fate's deathly accuracy in times of trouble." />
-    <feat type="Miniatures Handbook page 27" name="Martial Throw" desc="You can switch positions with an opponent you  hit in melee by throwing that opponent." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Martial Weapon Proficiency" desc="Choose a type of martial weapon. You understand  how to use that type of martial weapon in combat." />
-    <feat type="WL page 15" name="Master Legacy" desc="You temporarily gain access to legacy abilities  beyond your normal reach." />
-    <feat type="Races of Eberron page 109" name="Master Linguist" desc="You have a broad knowledge of language." />
-    <feat type="Complete Arcane page 192" name="Master Staff" desc="You can activate a staff without using a charge." />
-    <feat type="Epic Level Handbook page 62" name="Master Staff" desc="You can activate a staff without using a charge." />
-    <feat type="Complete Arcane page 192" name="Master Wand" desc="You can activate a wand without using a charge." />
-    <feat type="Epic Level Handbook page 62" name="Master Wand" desc="You can activate a wand without using a charge." />
-    <feat type="Draconomicon page 71" name="Maximize Breath" desc="You can take a full-round action to use your  breath weapon to maximum effect." />
-    <feat type="Expanded Psionics Handbook page 48" name="Maximize Power" desc="You can manifest powers to maximum effect." />
-    <feat type="Player's Handbook v.3.5 page 97" name="Maximize Spell" desc="You can cast spells to maximum effect." />
-    <feat type="Complete Arcane page 81" name="Maximize Spell-Like Ability" desc="You can use a spell-like ability at its maximum  effect." />
-    <feat type="Oriental Adventures page 81" name="Meditation of War Mastery" desc="You have mastered the martial arts style of  'Meditation of War' -- a hard/soft form emphasizing weapon use and strikes  to pressure points." />
-    <feat type="Lords of Madness page 22" name="Memory Eater" desc="An aboleth with this feat is particularly adept  at extracting memories and knowledge from the bodies of those it consumes." />
-    <feat type="Races of Destiny page 155" name="Menacing Demeanor" desc="You can tap into your savage heritage to improve  your intimidation techniques." />
-    <feat type="Expanded Psionics Handbook page 48" name="Mental Leap" desc="You can make amazing jumps." />
-    <feat type="Expanded Psionics Handbook page 48" name="Mental Resistance" desc="Your mind is armored against mental intrusion." />
-    <feat type="Dungeon Master's Guide II page 176" name="Mentor" desc="A character who takes this feat has offered  his knowledge and skill to a lower-level NPC and takes that NPC on as an  apprentice." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Mercantile Background" desc="You come from a family that excels at a particular  trade and knows well the value of any kind of trade good or commodity." />
-    <feat type="Player's Guide to Faerun page 41" name="Mercantile Background" desc="You come from a wealthy family with numerous  contacts in the trading costers and craft guilds of Faerun's bustling cities." />
-    <feat type="Races of Faerun page 166" name="Metallurgy" desc="You are skilled in the act of metallurgy, creating  metal alloys both for their appearance and their properties." />
-    <feat type="Races of Stone page 142" name="Metamagic Song" desc="You can channel the power of your bardic music  into your magic, allowing you to pay the cost of metamagic feats by spending  uses of your bardic music ability." />
-    <feat type="Expanded Psionics Handbook page 48" name="Metamorphic Transfer" desc="You can gain a supernatural ability of a metamorphed  form." />
-    <feat type="Champions of Ruin page 25" name="Metanode Spell" desc="You cast metamagic spells to greater effect  in nodes to which you are attuned than elsewhere." />
-    <feat type="Underdark page 26" name="Metanode Spell" desc="You cast metamagic spells to greater effect  in earth nodes than elsewhere." />
-    <feat type="Lords of Madness page 45" name="Metaray" desc="A beholder with this feat can apply the effects  of metamagic feats to its eye rays." />
-    <feat type="Races of Faerun page 166" name="Might Makes Right" desc="Your great strength draws more followers." />
-    <feat type="Savage Species page 37" name="Mighty Leaping" desc="You have developed your leg muscles and trained  yourself to make mighty leaps." />
-    <feat type="Epic Level Handbook page 63" name="Mighty Rage" desc="Your rage becomes even more powerful than normal." />
-    <feat type="Savage Species page 37" name="Mighty Roar" desc="You unsettle opponents with a dreadful roar  as you attack." />
-    <feat type="Oriental Adventures page 80" name="Mighty Works Mastery I" desc="You have mastered the initial secrets of the  'Mighty Works' martial arts style -- a hard/soft form emphasizing locks  and hand strikes." />
-    <feat type="Oriental Adventures page 80" name="Mighty Works Mastery II" desc="You have mastered the deeper secrets of the  'Mighty Works' martial arts style." />
-    <feat type="Forgotten Realms Campaign Setting page 36" name="Militia" desc="You served in a local militia, training with  weapons suitable for use on the battlefield." />
-    <feat type="Ghostwalk page 37" name="Militia" desc="You served in a local militia, training with  weapons suitable for use on the battlefield." />
-    <feat type="Player's Guide to Faerun page 41" name="Militia" desc="Your people rely on a well-trained and well-armed  militia to defend their land." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Mind Over Body" desc="The arcane spellcasters of some lands have learned  to overcome the frailties of the body with the unyielding power of the mind." />
-    <feat type="Player's Guide to Faerun page 41" name="Mind Over Body" desc="The aesthetics and mystics of your homeland  have learned to overcome the frailties of the body with the unyielding power  of the mind." />
-    <feat type="Expanded Psionics Handbook page 48" name="Mind Over Body" desc="Your ability damage heals more rapidly." />
-    <feat type="Lords of Madness page 126" name="Mindsight" desc="A creature that has this feat possesses innate  telepathic ability that allows it to precisely pinpoint other thinking beings  within range of its telepathy." />
-    <feat type="Ghostwalk page 37" name="Minor Malevolence" desc="You can possess a creature for a short while  and control its actions." />
-    <feat type="Races of Stone page 142" name="Misleading Song" desc="You can channel the power of your bardic music  to temporarily increase the power of your illusion spells." />
-    <feat type="Eberron Campaign Setting page 57" name="Mithral Body" desc="A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness." />
-    <feat type="Monster Manual III page 192" name="Mithral Body" desc="A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness." />
-    <feat type="Races of Eberron page 119" name="Mithral Body" desc="Your warforged body can be crafted with a layer  of mithral that provides some protection without hindering speed or gracefulness." />
-    <feat type="Eberron Campaign Setting page 57" name="Mithral Fluidity" desc="Your movements are smoother and more fluid than  those of other warforged." />
-    <feat type="Monster Manual III page 192" name="Mithral Fluidity" desc="Your movements are smoother and more fluid than  those of other warforged." />
-    <feat type="Epic Level Handbook page 63" name="Mobile Defense" desc="You can adjust your position while maintaining  a defensive stance." />
-    <feat type="Complete Adventurer page 111" name="Mobile Spell-Casting" desc="Your focused concentration allows you to move  while casting a spell." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Mobility" desc="You are skilled at dodging past opponents and  avoiding blows." />
-    <feat type="Unearthed Arcana page 94" name="Momentary Alteration" desc="You can briefly transform yourself into a second  form, acquiring its physical qualities." />
-    <feat type="Eberron Campaign Setting page 57" name="Monastic Training" desc="You are part of an order that combines the monastic  discipline of the monk class with another form of training." />
-    <feat type="Complete Warrior page 103" name="Monkey Grip" desc="You are able to use a larger weapon than other  people your size." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Monkey Grip" desc="You use a wider variety of sizes of weapons." />
-    <feat type="Races of Stone page 142" name="Moradin's Smile" desc="Through the favor of Moradin, you are skilled  at interacting with others." />
-    <feat type="Book of Vile Darkness page 49" name="Mortalbane" desc="The creature can make a spell-like ability particularly  deadly to mortals." />
-    <feat type="Champions of Ruin page 20" name="Mortifying Attack" desc="Those who witness your brutal death attack are  unnerved and jarred by the experience." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Mother Cyst" desc="You gain the ability to cast necrotic cyst spells  by growing a cyst of your own." />
-    <feat type="Races of Stone page 142" name="Mountain Warrior" desc="You are adept at fighting on the uneven ground  of mountainous terrain." />
-    <feat type="Frostburn page 49" name="Mountaineer" desc="You are a particularly gifted explorer and mountain  climber." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Mounted Archery" desc="You are skilled at using ranged weapons while  mounted." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Mounted Combat" desc="You are skilled in mounted combat." />
-    <feat type="Heroes of Battle page 98" name="Mounted Mobility" desc="You are skilled at dodging past opponents while  mounted." />
-    <feat type="Miniatures Handbook page 27" name="Mounting Casting" desc="You are skilled at casting spells while riding  a mount." />
-    <feat type="Races of Eberron page 109" name="Mror Stalwart" desc="You have been trained to make devastating strikes  with the weapons of the dwarves of the Mror Holds." />
-    <feat type="Monster Manual v.3.5 page 304" name="Multiattack" desc="The creature is adept at using all its natural  weapons at once." />
-    <feat type="Monster Manual II page 18" name="Multiattack" desc="The creature is adept at using all its natural  weapons at once." />
-    <feat type="Monster Manual III page 207" name="Multiattack" desc="A creature with this feat is adept at using  all its natural weapons at once." />
-    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Multiattack" desc="The creature is adept at using all its natural  weapons at once." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Multiattack" desc="You are adept at using all your natural weapons  at once." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Multicultural" desc="You blend in well with members of another race." />
-    <feat type="Monster Manual II page 18" name="Multidexterity" desc="The creature is adept at using all its hands  in combat." />
-    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Multidexterity" desc="The creature is adept at using all its hands  in combat." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Multidexterity" desc="You are skilled at utilizing all your hands  in combat." />
-    <feat type="Serpent Kingdoms page 146" name="Multigrab" desc="You can grapple enemies more firmly than normal  with your natural attacks." />
-    <feat type="Savage Species page 37" name="Multigrab" desc="You can grapple enemies more firmly than normal  with your natural attacks." />
-    <feat type="Lost Empires of Faerun page 8" name="Multilingual" desc="You have an uncanny knack for languages." />
-    <feat type="Draconomicon page 72" name="Multisnatch" desc="You can grapple enemies more firmly with only  one of your natural attacks." />
-    <feat type="Epic Level Handbook page 63" name="Multispell" desc="You can cast an additional quickened spell in  a round." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 62" name="Multitasking" desc="You can perform different tasks with different  limbs." />
-    <feat type="Savage Species page 37" name="Multitasking" desc="You can perform different tasks with different  limbs." />
-    <feat type="Savage Species page 37" name="Multivoice" desc="If you have two or more heads, you can cast  more spells than usual in a round." />
-    <feat type="Monster Manual v.3.5 page 304" name="Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
-    <feat type="Monster Manual II page 18" name="Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
-    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
-    <feat type="Epic Level Handbook page 63" name="Multiweapon Rend" desc="You can rend opponents when fighting with more  than two limbs." />
-    <feat type="Eberron Campaign Setting page 57" name="Music of Growth" desc="Your music can enhance the power of animals  and plant creatures." />
-    <feat type="Eberron Campaign Setting page 57" name="Music of Making" desc="Echoing the music of creation, your own performance  enhances any process of creation." />
-    <feat type="Epic Level Handbook page 63" name="Music of the Gods" desc="You can use your bardic music to influence creatures  immune to mind-affecting effects." />
-    <feat type="Lords of Madness page 181" name="Music of the Outer Spheres" desc="You can use your bardic music to create discordant,  insane sounds." />
-    <feat type="Races of Eberron page 110" name="Mutable Body" desc="Your enhanced control over your shapechanging  ability grants you extra power from transmutation spells." />
-    <feat type="Champions of Ruin page 20" name="Mutilator" desc="After striking down your enemy in battle, you  can skillfully mutilate the corpse to prevent others from raising it from  the dead." />
-    <feat type="Expanded Psionics Handbook page 48" name="Narrow Mind" desc="Your ability to concentrate is as keen as an  arrowhead, allowing you to gain your psionic focus even in the most turbulent  situations." />
-    <feat type="Serpent Kingdoms page 146" name="Narrowed Gaze" desc="Your gaze attack has a limited field of effect." />
-    <feat type="Savage Species page 37" name="Narrowed Gaze" desc="Your gaze attack has a limited field of effect." />
-    <feat type="Complete Adventurer page 111" name="Natural Bond" desc="Your bond with your animal companion is exceptionally  strong." />
-    <feat type="Champions of Ruin page 21" name="Natural Bully" desc="You easily terrify weaker adversaries." />
-    <feat type="Planar Handbook page 40" name="Natural Heavyweight" desc="You are descended from creatures native to a  plane of heavy gravity." />
-    <feat type="Heroes of Battle page 98" name="Natural Leader" desc="You have a natural commanding presence." />
-    <feat type="Shining South page 21" name="Natural Scavenger" desc="You are particularly adept at finding food while  on the move." />
-    <feat type="Ghostwalk page 37" name="Natural Spell" desc="You can cast spells while in wild shape or shifted  form." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Natural Spell" desc="You cast spells while in a wild shape." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Natural Spell" desc="You can cast spells while in a wild shape." />
-    <feat type="Races of Stone page 143" name="Natural Trickster" desc="You have greater natural access to your race's  powers of illusion." />
-    <feat type="Unearthed Arcana page 94" name="Naturalized Denizen" desc="You are unusually anchored to your location." />
-    <feat type="Ghostwalk page 37" name="Nauseating Touch" desc="When you touch a living creature, you can make  it nauseated." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Necromantic Might" desc="Undead you control gain benefits when they are  near you." />
-    <feat type="Libris Mortis: The Book of the Dead page 28" name="Necromantic Presence" desc="Undead you control are harder to turn when they  are near you." />
-    <feat type="Complete Arcane page 81" name="Necropolis Born" desc="You possess a magical understanding of the essence  of mortal dread." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Necropotent" desc="Your special melee or ranged attack with one  type of weapon is especially effective against undead." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Necrotic Reserve" desc="You are not immediately destroyed when your  hit points fall to 0 or lower." />
-    <feat type="Complete Divine page 90" name="Negative Energy Burst" desc="You can use your rebuke/command undead ability  to unleash a burst of negative energy." />
-    <feat type="Epic Level Handbook page 63" name="Negative Energy Burst" desc="You can use your rebuke/command undead ability  to unleash a burst of negative energy." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Negotiator" desc="You are good at gauging and swaying attitudes." />
-    <feat type="Book of Exalted Deeds page 44" name="Nemesis" desc="You are the holy bane of creatures of a particular  type." />
-    <feat type="Planar Handbook page 40" name="Neraph Charge" desc="You master the Limbo-native neraph martial art  of motion camouflage when you charge your foe." />
-    <feat type="Planar Handbook page 40" name="Neraph Throw" desc="You master the Limbo-native neraph martial art  of motion camouflage for your thrown weapons." />
-    <feat type="Complete Warrior page 114" name="Net and Trident" desc="You are a master of fighting with the net and  the trident." />
-    <feat type="Lost Empires of Faerun page 8" name="Netherese Battle Curse" desc="You can channel your own arcane energy into  a powerful curse upon those who dare to face you in battle." />
-    <feat type="Complete Arcane page 81" name="Night Haunt" desc="You possess a magical understanding of the workings  of the unseen." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Nimble Bones" desc="Undead you raise or create are faster and more  nimble than normal." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Nimble Fingers" desc="You are adept at manipulating small, delicate  objects." />
-    <feat type="Book of Exalted Deeds page 44" name="Nimbus of Light" desc="You are cloaked in the radiant light that marks  you as a servant of the purest ideals." />
-    <feat type="Races of Faerun page 166" name="Nobody's Fool" desc="You have an uncommon streak of skepticism and  common sense, and have a knack for discerning falsehood from truth." />
-    <feat type="Champions of Ruin page 25" name="Node Defense" desc="You can use the magical power of a node to defend  yourself from harm." />
-    <feat type="Underdark page 26" name="Node Defense" desc="You can use the magical power of a node to defend  yourself from harm." />
-    <feat type="Champions of Ruin page 25" name="Node Sensitive" desc="You can perceive a node just by passing near  it." />
-    <feat type="Underdark page 26" name="Node Sensitive" desc="You can perceive an earth node just by passing  near it." />
-    <feat type="Champions of Ruin page 25" name="Node Spellcasting" desc="You have discovered the secret of the magic  of a particular type of node." />
-    <feat type="Underdark page 26" name="Node Spellcasting" desc="You have discovered the secret of node magic." />
-    <feat type="Champions of Ruin page 26" name="Node Store" desc="You can store a prepared spell in a node to  which you are attuned." />
-    <feat type="Underdark page 26" name="Node Store" desc="You can store a prepared spell in an earth node." />
-    <feat type="Shining South page 21" name="Nomadic Trekker" desc="You are particularly efficient at overland movement  across the great grasslands." />
-    <feat type="Book of Exalted Deeds page 44" name="Nonlethal Substitution" desc="You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead." />
-    <feat type="Complete Arcane page 81" name="Nonlethal Substitution" desc="You can modify an energy spell to deal nonlethal  damage." />
-    <feat type="Planar Handbook page 40" name="Nonverbal Spell" desc="You can cast spells that have verbal components  without actually verbalizing the words." />
-    <feat type="Book of Exalted Deeds page 44" name="Nymph's Kiss" desc="By maintaining an intimate relationship with  a good-aligned fey, you gain some of the characteristics of fey." />
-    <feat type="Complete Divine page 82" name="Oaken Resilience" desc="You can take on the sturdiness of the mighty  oak." />
-    <feat type="Complete Adventurer page 111" name="Obscure Lore" desc="You are a treasure trove of little-known information." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Obscure Lore" desc="You are a treasure trove of little-known information." />
-    <feat type="Complete Arcane page 81" name="Obtain Familiar" desc="You gain a familiar." />
-    <feat type="Lords of Madness page 181" name="Ocular Spell" desc="Your study of the terrible powers of the beholder  has given you insight into new ways to prepare and cast spells." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Off-Hand Parry" desc="You use your off-hand weapon to defend against  melee attacks." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Off-Hand Parry" desc="You use your off-hand weapon to defend against  melee attacks." />
-    <feat type="Stormwrack page 93" name="Old Salt" desc="You are an old hand at shipboard life, having  mastered the myriad skills that are required of the experience sailor. Additionally,  you have an eye for the weather." />
-    <feat type="Unearthed Arcana page 94" name="Omniscient Whispers" desc="A constant, barely audible muttering echoes  in your ears, usually beyond your comprehension. But if you focus all your  energy on listening, you sometimes catch a sentence or two that bears directly  on your current situation." />
-    <feat type="Oriental Adventures page 64" name="Oni's Bane" desc="Your ancestor, Isawa Akuma, was a Phoenix shugenja  who sought to understand the mystery of identity." />
-    <feat type="Expanded Psionics Handbook page 48" name="Open Minded" desc="You are naturally able to reroute your memory,  mind, and skill expertise." />
-    <feat type="Complete Adventurer page 111" name="Open Minded" desc="You are naturally able to reroute your memory  and skill expertise." />
-    <feat type="Expanded Psionics Handbook page 48" name="Opportunity Power" desc="You can make power-enhanced attacks of opportunity." />
-    <feat type="Races of Faerun page 167" name="Oral History" desc="You are well versed in the art of storytelling  and the oral history of your culture." />
-    <feat type="Player's Guide to Faerun page 41" name="Otherworldly" desc="Your folk are known for their mystic power and  seem to transcend their mortal forms." />
-    <feat type="Races of Faerun page 167" name="Outsider Wings" desc="You have sprouted wings appropriate to your  heritage, revealing the power of your supernatural bloodline." />
-    <feat type="Expanded Psionics Handbook page 49" name="Overchannel" desc="You burn your life force to strengthen your  powers." />
-    <feat type="Draconomicon page 72" name="Overcome Weakness" desc="You can overcome an innate vulnerability through  sheer willpower." />
-    <feat type="Draconomicon page 106" name="Overhead Thrust" desc="You can deal a nasty attack to anything that  tries to crush or run over you." />
-    <feat type="Complete Adventurer page 111" name="Oversized Two-Weapon Fighting" desc="You are adept at wielding larger than normal  weapons in your off hand." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Overwhelming Critical" desc="Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit." />
-    <feat type="Draconomicon page 72" name="Overwhelming Critical" desc="Choose one type of melee weapon, such as a claw  or bite. With that weapon, you deal more damage on a critical hit." />
-    <feat type="Epic Level Handbook page 63" name="Overwhelming Critical" desc="Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit." />
-    <feat type="UE page 44" name="Owlbear Berserker" desc="Your fighting style emulates the owlbear, the  totem beast of your berserker lodge." />
-    <feat type="Savage Species page 37" name="Pain Mastery" desc="Injuries send you into a fury, increasing your  physical power." />
-    <feat type="Complete Warrior page 103" name="Pain Touch" desc="You cause intense pain in an opponent with a  successful stunning attack." />
-    <feat type="Oriental Adventures page 64" name="Pain Touch" desc="You cause intense pain in an opponent with a  successful stunning attack." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Pain Touch" desc="You cause intense pain in an opponent with a  successful stunning attack." />
-    <feat type="Lords of Madness page 181" name="Parrying Shield" desc="You have studied advanced techniques for battling  foes whose attacks normally bypass armor." />
-    <feat type="Races of Eberron page 110" name="Path of Shadows" desc="You can use dancelike maneuvers to aid your  defense." />
-    <feat type="Savage Species page 37" name="Peak Hopper" desc="You are adapted to a hilly or mountainous environment." />
-    <feat type="Epic Level Handbook page 63" name="Penetrating Damage Reduction" desc="You can bypass a creature's damage reduction." />
-    <feat type="Epic Level Handbook page 63" name="Perfect Health" desc="You are immune to normal diseases and common  poisons." />
-    <feat type="Epic Level Handbook page 63" name="Perfect Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
-    <feat type="Complete Warrior page 152" name="Perfect Two-Weapon Fighting" desc="You can attack with your off-hand weapon as  frequently as with your primary weapon." />
-    <feat type="Epic Level Handbook page 64" name="Perfect Two-Weapon Fighting" desc="You can attack with your off-hand weapon as  frequently as with your primary weapon." />
-    <feat type="Epic Level Handbook page 64" name="Permanent Emanation" desc="One of your personal emanation spells becomes  permanent." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Pernicious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to counter." />
-    <feat type="Player's Guide to Faerun page 42" name="Pernicious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
-    <feat type="Complete Arcane page 81" name="Persistent Spell" desc="You can make a spell last all day." />
-    <feat type="Deities and Demigods page 51" name="Persistent Spell" desc="The deity makes one of its spells last all day." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Persistent Spell" desc="You make one of your spells last all day." />
-    <feat type="Player's Guide to Faerun page 42" name="Persistent Spell" desc="You can make a spell last all day." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Persistent Spell" desc="You make one of your spells last all day." />
-    <feat type="Races of Eberron page 110" name="Persona Immersion" desc="Your assumption of another's physical identity  grants you defenses against mental intrusion." />
-    <feat type="Planar Handbook page 41" name="Personal Touchstone" desc="You draw more power form one of the planar touchstone  locations to which you have forged a link." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Persuasive" desc="You have a way with words and body language." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Persuasive" desc="You could sell a tindertwig hat to a troll." />
-    <feat type="Serpent Kingdoms page 146" name="Pervasive Gaze" desc="Your gaze attack is more effective than normal." />
-    <feat type="Savage Species page 37" name="Pervasive Gaze" desc="Your gaze attack is more effective than normal." />
-    <feat type="Serpent Kingdoms page 147" name="Petrification Immunity" desc="You are immune to petrification effects." />
-    <feat type="Serpent Kingdoms page 147" name="Petrification Resistance" desc="You can resist petrification effects better  than you otherwise could." />
-    <feat type="Complete Warrior page 103" name="Phalanx Fighting" desc="You are trained in fighting in close formation  with your allies." />
-    <feat type="Lords of Darkness page 189" name="Phalanx Fighting" desc="You are trained in fighting in close formation  with your allies." />
-    <feat type="Sandstorm page 51" name="Pharaoh's Fist" desc="Your unarmed strikes echo with thunder, stunning  your foe and those nearby." />
-    <feat type="Unearthed Arcana page 94" name="Photosynthetic Skin" desc="Your skin toughens when it draws energy from  the sun." />
-    <feat type="Complete Arcane page 81" name="Pierce Magical Concealment" desc="You ignore the miss chance provided by certain  magical effects." />
-    <feat type="Complete Arcane page 82" name="Pierce Magical Protection" desc="You can overcome the magical protections of  your enemies." />
-    <feat type="Races of Stone page 143" name="Pierce the Darkness" desc="You can channel positive energy to temporarily  increase the range of your darkvision." />
-    <feat type="Frostburn page 49" name="Piercing Cold" desc="Your cold spells are so cold that they can damage  creatures normally resistant or immune to cold." />
-    <feat type="Serpent Kingdoms page 147" name="Piercing Gaze" desc="Your gaze attack has a greater range than normal." />
-    <feat type="Savage Species page 38" name="Piercing Gaze" desc="Your gaze attack has a greater range than normal." />
-    <feat type="Races of Stone page 143" name="Piercing Sight" desc="Your fundamental familiarity with illusion allows  you to better recognize them." />
-    <feat type="Complete Warrior page 103" name="Pin Shield" desc="You know how to get inside your opponent's guard  by pinning his shield out of the way." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Pin Shield" desc="You know how to get inside your opponent's guard  by pinning his shield out of the way." />
-    <feat type="Complete Divine page 86" name="Pious Defense" desc="Your connection to a greater power sometimes  gives you flashes of insight that keep you safe." />
-    <feat type="Complete Divine page 86" name="Pious Soul" desc="By adhering to the precepts of your religion  or philosophy, you gain an extra edge when you need it most." />
-    <feat type="Complete Divine page 87" name="Pious Spellsurge" desc="You can use the strength of your faith to augment  a spell cast at a critical juncture." />
-    <feat type="Races of Faerun page 167" name="Plague Resistant" desc="You are descended from the handful of combatants  who fought on the Fields of Nun and survived Chondath's Rotting War in 902  DR." />
-    <feat type="Planar Handbook page 41" name="Planar Familiar" desc="When you are ready and able to acquire a new  familiar, you may choose one of several nonstandard familiars." />
-    <feat type="Planar Handbook page 41" name="Planar Touchstone" desc="Forge a link between you and power-rich planar  locations, referred to as planar touchstones." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Planar Turning" desc="You can turn or rebuke outsiders." />
-    <feat type="Epic Level Handbook page 64" name="Planer Turning" desc="You can turn or rebuke outsiders." />
-    <feat type="Races of Faerun page 167" name="Planetouched Animal Affinity" desc="You have a special affinity for a kind of animal  associated with your deity ancestor." />
-    <feat type="Deities and Demigods page 51" name="Plant Control" desc="The deity can channel the power of nature to  gain mastery over plant creatures." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Plant Control" desc="You channel the power of nature to gain mastery  over plant creatures." />
-    <feat type="Deities and Demigods page 51" name="Plant Defiance" desc="The deity can channel the power of nature to  drive off or stop plant creatures." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Plant Defiance" desc="You channel the power of nature to drive off  plant creatures." />
-    <feat type="Epic Level Handbook page 65" name="Plant Wild Shape" desc="You can wild shape into plant form." />
-    <feat type="Heroes of Battle page 99" name="Plunging Shot" desc="You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you." />
-    <feat type="Races of the Wild page 152" name="Plunging Shot" desc="You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Point Blank Shot" desc="You are skilled at making well-placed shots  with ranged weapons at close range." />
-    <feat type="Book of Vile Darkness page 49" name="Poison Immunity" desc="After prolonged exposure to a poison or toxin,  the character has rendered himself immune to it." />
-    <feat type="Champions of Ruin page 21" name="Poison Immunity" desc="After prolonged exposure to a poison or toxin,  you have rendered yourself immune to it." />
-    <feat type="Serpent Kingdoms page 147" name="Poison Immunity" desc="You can ignore the effects of poison." />
-    <feat type="Savage Species page 38" name="Poison Immunity" desc="You can ignore the effects of poison." />
-    <feat type="Serpent Kingdoms page 147" name="Poison Resistance" desc="You can resist poison better than you otherwise  could." />
-    <feat type="Savage Species page 38" name="Poison Resistance" desc="You can resist poison better than you otherwise  could." />
-    <feat type="Unearthed Arcana page 94" name="Polar Chill" desc="You can call forth the cold of the arctic regions,  making movement and fighting difficult for the unprepared." />
-    <feat type="Ghostwalk page 37" name="Poltergeist Hand" desc="You can move small objects in a limited manner  at a distance when you are a ghost." />
-    <feat type="Ghostwalk page 37" name="Poltergeist Rage" desc="You can throw heavy objects with the power of  your mind." />
-    <feat type="Complete Adventurer page 192" name="Polyglot" desc="You can speak, read, and write all languages." />
-    <feat type="Epic Level Handbook page 65" name="Polyglot" desc="You can speak, read, and write all languages." />
-    <feat type="Player's Guide to Faerun page 42" name="Portal Master" desc="You are especially proficient at creating portals." />
-    <feat type="Underdark page 27" name="Portal Sensitive" desc="You can perceive a portal just by passing  near it." />
-    <feat type="Complete Divine page 90" name="Positive Energy Aura" desc="You automatically turn (or even destroy) lesser  undead." />
-    <feat type="Epic Level Handbook page 65" name="Positive Energy Aura" desc="You automatically turn (or even destroy) lesser  undead." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Positive Energy Resistance" desc="You are resistant to the damage dealt by positive  energy effects." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Power Attack" desc="You can make exceptionally powerful melee attacks." />
-    <feat type="Oriental Adventures page 64" name="Power Attack - Iaijutsu" desc="Your ancestor, Kakita Rensei, was a renowned  duelist whose strength was legendary." />
-    <feat type="Oriental Adventures page 65" name="Power Attack - Shadowlands" desc="You are descended from Kaiu Gineza, the engineer  who not only helped construct the tomb of Iuchiban, but also remained in  the tomb to set the last trap." />
-    <feat type="Draconomicon page 72" name="Power Climb" desc="If you fly in a straight line, you can gain  altitude in flight more easily than others." />
-    <feat type="Complete Warrior page 103" name="Power Critical" desc="Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts." />
-    <feat type="Deities and Demigods page 51" name="Power Critical" desc="The deity chooses one kind of weapon, such as  a longsword or greataxe. With this weapon, the deity knows how to hit where  it hurts when it counts." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Power Critical" desc="Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts." />
-    <feat type="Draconomicon page 72" name="Power Dive" desc="You can fall upon an opponent from the sky." />
-    <feat type="Savage Species page 38" name="Power Dive" desc="You can fall upon an opponent from the sky." />
-    <feat type="Expanded Psionics Handbook page 34" name="Power Knowledge" desc="You add two additional powers to your list of  powers known." />
-    <feat type="Enemies and Allies page 50" name="Power Lunge" desc="Your ferocious attack may catch an opponent  unprepared." />
-    <feat type="Ghostwalk page 37" name="Power Lunge" desc="Your ferocious attack may catch an opponent  unprepared." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Power Lunge" desc="Your ferocious attack may catch an opponent  unprepared." />
-    <feat type="Expanded Psionics Handbook page 49" name="Power Penetration" desc="Your powers are especially potent at breaking  through power resistance." />
-    <feat type="Expanded Psionics Handbook page 49" name="Power Specialization" desc="You deal more damage with your powers." />
-    <feat type="Complete Adventurer page 111" name="Power Throw" desc="You have learned how to hurl weapons to deadly  effect." />
-    <feat type="Lords of Madness page 23" name="Powerful Bite" desc="An aboleth with this feat develops jaws that  are much more muscular than normal, allowing it to bite more efficiently." />
-    <feat type="Eberron Campaign Setting page 57" name="Powerful Charge" desc="You can charge with extra force." />
-    <feat type="Miniatures Handbook page 27" name="Powerful Charge" desc="You can charge with extra force." />
-    <feat type="Monster Manual III page 207" name="Powerful Charge" desc="A creature with this feat can charge with extra  force." />
-    <feat type="Oriental Adventures page 65" name="Powerful Voice" desc="You are karmically linked to Utaku, Shinjo's  most trusted lieutenant and devoted bodyguard." />
-    <feat type="Races of Stone page 143" name="Powerful Wild Shape" desc="You retain your powerful build while in wild  shape form." />
-    <feat type="Heroes of Battle page 99" name="Practiced Cohort" desc="Your cohort works well as part of your team." />
-    <feat type="Complete Arcane page 82" name="Practiced Spellcaster" desc="Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful." />
-    <feat type="Complete Divine page 82" name="Practiced Spellcaster" desc="Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Precise Shot" desc="You are skilled at timing and aiming ranged  attacks." />
-    <feat type="Eberron Campaign Setting page 58" name="Precise Swing" desc="You can ignore most obstacles when making a  melee attack against an opponent." />
-    <feat type="Complete Arcane page 181" name="Precocious Apprentice" desc="Your master has shown you the basics of a spell  beyond the normal limits of your experience and training." />
-    <feat type="Serpent Kingdoms page 147" name="Prehensile Tail" desc="You can use your tail to manipulate objects." />
-    <feat type="Savage Species page 38" name="Prehensile Tail" desc="You can use your tail to manipulate objects." />
-    <feat type="Sandstorm page 51" name="Priest of the Waste" desc="You can swap out prepared spells for others  that aid in exploring and surviving in wastelands." />
-    <feat type="Frostburn page 49" name="Primeval Wild Shape" desc="Your wild shape forms are stronger than normal." />
-    <feat type="Frostburn page 49" name="Primitive Caster" desc="You use screeches, wild gesticulations, and  extra material components to give your spells additional power." />
-    <feat type="Races of Faerun page 167" name="Primitive Caster" desc="You use screeches, wild gesticulations, and  extra material components to give your spells additional powers." />
-    <feat type="Complete Divine page 84" name="Profane Boost" desc="You can channel negative energy to increase  the power of inflict wounds spells cast near you." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Profane Lifeleech" desc="You can channel negative energy to draw the  life force from nearby living creatures." />
-    <feat type="Champions of Ruin page 21" name="Profane Outburst" desc="With a horrendous release of divine energy,  you steel your undead allies and minions against harm." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Profane Vigor" desc="You can channel negative energy to heal nearby  undead allies of physical damage." />
-    <feat type="Complete Warrior page 103" name="Prone Attack" desc="You can attack from a prone position without  penalty." />
-    <feat type="Oriental Adventures page 65" name="Prone Attack" desc="You attack from a prone position without penalty." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Prone Attack" desc="You attack from a prone position without penalty." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Proportionate Wild Shape" desc="You use wild shape to become animals of your  own size even if your wild shape ability would normally exclude that size  category." />
-    <feat type="Races of Destiny page 153" name="Protected Destiny" desc="Your heroic destiny is guarded against the whims  of misfortune." />
-    <feat type="Expanded Psionics Handbook page 49" name="Psicrystal Affinity" desc="You have created a psicrystal." />
-    <feat type="Expanded Psionics Handbook page 49" name="Psicrystal Containment" desc="Your psicrystal has advanced enough that it  can hold a psionic focus that you store within it." />
-    <feat type="Expanded Psionics Handbook page 34" name="Psicrystal Power" desc="Your psicrystal can manifest a power." />
-    <feat type="Expanded Psionics Handbook page 49" name="Psionic Affinity" desc="You have a knack for psionic endeavors." />
-    <feat type="Expanded Psionics Handbook page 49" name="Psionic Body" desc="Your mind reinforces your body." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Charge" desc="You can charge in crooked line." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Dodge" desc="You are proficient at dodging blows." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Endowment" desc="You can endow your manifestations with more  concentrated focus." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Fist" desc="You can charge your unarmed strike or natural  weapon with additional damage potential." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Hole" desc="You are anathema to psionic creatures and characters." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Meditation" desc="You can focus your mind faster than normal,  even under duress." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Shot" desc="You can charge your ranged attacks with additional  damage potential." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Talent" desc="You gain additional power points to supplement  those you already had." />
-    <feat type="Expanded Psionics Handbook page 50" name="Psionic Weapon" desc="You can charge your melee weapon with additional  damage potential." />
-    <feat type="Serpent Kingdoms page 147" name="Puff Torso" desc="You can puff out your skin to appear larger  and more threatening." />
-    <feat type="Champions of Ruin page 21" name="Pulverize Foe" desc="You enjoy smashing your opponents into submission." />
-    <feat type="Book of Exalted Deeds page 44" name="Purify Spell" desc="You can charge your damaging spells with celestial  energy that leaves good creatures unharmed." />
-    <feat type="Book of Exalted Deeds page 45" name="Purify Spell Trigger" desc="You can channel holy power through a spell trigger  item, such as a wand or staff." />
-    <feat type="Book of Exalted Deeds page 45" name="Purify Spell-Like Ability" desc="You can charge your damaging spell-like abilities  with celestial energy that leaves good creatures unharmed." />
-    <feat type="Eberron Campaign Setting page 58" name="Pursue" desc="You have the ability to follow in an opponent's  wake." />
-    <feat type="Miniatures Handbook page 27" name="Pushback" desc="You can knock opponents back when you hit them  in melee." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Pyro" desc="You're good at lighting objects and opponents  on fire." />
-    <feat type="Book of Exalted Deeds page 45" name="Quell the Profane" desc="Your mightiest attacks weaken evil foes." />
-    <feat type="Races of Eberron page 110" name="Quick Change" desc="You can quickly alter your features and physiology." />
-    <feat type="Savage Species page 38" name="Quick Change" desc="You can shift to an alternate form faster and  more easily than you otherwise could." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Quick Draw" desc="You can draw weapons with startling speed." />
-    <feat type="Complete Adventurer page 112" name="Quick Reconnoiter" desc="You can learn a lot of information from just  a quick scan of an area or object." />
-    <feat type="Lords of Madness page 181" name="Quick Recovery" desc="It's hard to keep you down for long. You have  a talent for shaking off effects that leave others unable to act." />
-    <feat type="Complete Warrior page 114" name="Quick Staff" desc="You have mastered the style of fighting with  a quarterstaff." />
-    <feat type="Draconomicon page 73" name="Quicken Breath" desc="You can loose your breath weapon with but a  thought." />
-    <feat type="WL page 15" name="Quicken Legacy" desc="You can activate one of your item's legacy abilities  with a moment's thought." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Quicken Manifestation" desc="You can manifest from the Ethereal Plane with  a moment's thought." />
-    <feat type="Expanded Psionics Handbook page 50" name="Quicken Power" desc="You can manifest a power with a moment's thought." />
-    <feat type="Player's Handbook v.3.5 page 98" name="Quicken Spell" desc="You can cast a spell with a moment's thought." />
-    <feat type="Book of Vile Darkness page 49" name="Quicken Spell-Like Ability" desc="The creature can use a spell-like ability with  a moment's thought." />
-    <feat type="Monster Manual v.3.5 page 304" name="Quicken Spell-Like Ability" desc="The creature can employ a spell-like ability  with a moment's thought." />
-    <feat type="Monster Manual II page 18" name="Quicken Spell-like Ability" desc="The creature can use a spell-like ability with  a moment's thought." />
-    <feat type="Monster Manual III page 207" name="Quicken Spell-Like Ability" desc="A creature with this feat can employ a spell-like  ability with a moment's thought." />
-    <feat type="Savage Species page 38" name="Quicken Spell-Like Ability" desc="You can use a spell-like ability with a moment's  thought." />
-    <feat type="Complete Divine page 84" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
-    <feat type="Faiths &amp; Pantheons page 215" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
-    <feat type="Ghostwalk page 37" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Quicker Than the Eye" desc="Your hands can move so quickly that observers  don't see what you've done." />
-    <feat type="Lords of Madness page 23" name="Quickslime" desc="The slime attack of an aboleth with this feat  is particularly fast and difficult to resist." />
-    <feat type="Races of Eberron page 110" name="Racial Emulation" desc="You can emulate a humanoid more closely with  your minor change shape ability." />
-    <feat type="Races of Destiny page 155" name="Radiant Fire" desc="Pelor has ignited your faith and conviction,  making you better able to fight the creatures of darkness." />
-    <feat type="Races of Eberron page 118" name="Ragewild Fighting" desc="You have mastered a merciless form of combat  that emphasizes using brute strength to shatter your foes." />
-    <feat type="Eberron Campaign Setting page 58" name="Raging Luck" desc="When raging, you have a greater ability to alter  your luck than most others do." />
-    <feat type="Races of Stone page 143" name="Rampaging Bull Rush" desc="You can use brute force to slam into and knock  down your enemies." />
-    <feat type="Complete Warrior page 103" name="Ranged Disarm" desc="You can disarm a foe from a distance." />
-    <feat type="Epic Level Handbook page 65" name="Ranged Inspiration" desc="You can use your bardic music at a greater range  than normal." />
-    <feat type="Complete Warrior page 104" name="Ranged Pin" desc="You can perform a ranged grapple attempt against  an opponent not adjacent to you." />
-    <feat type="Book of Exalted Deeds page 45" name="Ranged Smite Evil" desc="You smite ability can be channeled through your  ranged weapon." />
-    <feat type="Complete Arcane page 82" name="Ranged Spell Specialization" desc="You deal more damage with ranged touch attack  spells." />
-    <feat type="Complete Warrior page 104" name="Ranged Sunder" desc="You can attack an opponent's weapon from a distance." />
-    <feat type="Savage Species page 39" name="Rapid Breath" desc="You do not have to wait as long to reuse your  breath weapons as you normally would." />
-    <feat type="Epic Level Handbook page 66" name="Rapid Inspiration" desc="You can inspire your allies with bardic music  more quickly than normal." />
-    <feat type="Expanded Psionics Handbook page 50" name="Rapid Metabolism" desc="Your wounds heal rapidly." />
-    <feat type="Epic Level Handbook page 70" name="Rapid Reload" desc="You reload a crossbow more quickly than normal." />
-    <feat type="Player's Handbook v.3.5 page 99" name="Rapid Reload" desc="Choose a type of crossbow. You can reload a  crossbow of that type more quickly than normal." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Rapid Reload" desc="You reload a crossbow more quickly than normal." />
-    <feat type="Player's Handbook v.3.5 page 99" name="Rapid Shot" desc="You can use ranged weapons with exceptional  speed." />
-    <feat type="Complete Divine page 84" name="Rapid Spell" desc="You can cast spells with long casting times  more quickly." />
-    <feat type="Complete Warrior page 104" name="Rapid Stunning" desc="You can use your stunning attacks in rapid succession." />
-    <feat type="Races of Faerun page 167" name="Rapid Swimming" desc="You are one with the water." />
-    <feat type="Stormwrack page 93" name="Rapid Swimming" desc="You are one with the water." />
-    <feat type="Draconomicon page 73" name="Rapidstrike" desc="You can attack more than once with a natural  weapon." />
-    <feat type="Complete Warrior page 111" name="Raptor School" desc="You know martial arts techniques inspired by  hunting birds." />
-    <feat type="UE page 45" name="Rashemi Elemental Summoning" desc="You may summon Rashemen's native elementals  in any situation where you could summon an air or earth elemental." />
-    <feat type="Sandstorm page 51" name="Rattlesnake Strike" desc="Having observed the ways of a desert viper,  you have learned to use ki in a fashion similar to poison." />
-    <feat type="Complete Adventurer page 112" name="Razing Strike" desc="You have mastered the art of delivering precise  strikes against nonliving creatures while channeling spell energy through  your melee attacks." />
-    <feat type="Races of Eberron page 114" name="Razorclaw Elite" desc="Your razorclaw shifter trait improves." />
-    <feat type="Lords of Madness page 23" name="Reach Bite" desc="An aboleth with this feat can extend its jaws  and esophagus out from its body to make attacks beyond its normal reach." />
-    <feat type="Complete Divine page 84" name="Reach Spell" desc="You can cast touch spells without touching the  spell recipient." />
-    <feat type="Deities and Demigods page 51" name="Reach Spell" desc="The deity can cast touch spells without touching  the spell recipient." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Reach Spell" desc="You can cast touch spells without touching the  spell recipient." />
-    <feat type="Faiths &amp; Pantheons page 215" name="Reach Spell" desc="You can cast touch spells without touching the  spell recipient." />
-    <feat type="Epic Level Handbook page 66" name="Reactive Countersong" desc="You can use countersong as a reaction to a sonic  or language-dependent magical attack." />
-    <feat type="Magic of Faerun page 22" name="Reactive Counterspell" desc="You can react quickly to counterspells cast  by opponents." />
-    <feat type="Player's Guide to Faerun page 42" name="Reactive Counterspell" desc="You can react quickly to counter  spells cast by opponents." />
-    <feat type="Races of Eberron page 115" name="Reactive Shifting" desc="You can shift with a mere thought." />
-    <feat type="Heroes of Battle page 99" name="Ready Shot" desc="You can make devastating attacks with ranged  weapons against charging opponents." />
-    <feat type="Champions of Ruin page 21" name="Reaping Spell" desc="The dark energy of your spell devours the soul  of any creature killed by it." />
-    <feat type="Miniatures Handbook page 27" name="Reckless Charge" desc="You can charge with wild abandon." />
-    <feat type="Expanded Psionics Handbook page 51" name="Reckless Offense" desc="You can shift your focus from defense to offense." />
-    <feat type="Enemies and Allies page 41" name="Reckless Offensive" desc="You lower your guard in order to make a telling  attack." />
-    <feat type="Races of Faerun page 167" name="Reckless Offensive" desc="You lower your guard in order to make a telling  attack." />
-    <feat type="Races of Stone page 143" name="Reckless Rage" desc="You are considered extreme even among other  barbaric warriors, and you enter a deeper state of rage than others." />
-    <feat type="Complete Arcane page 82" name="Reckless Wand Wielder" desc="You can increase the effectiveness of spells  cast from a wand." />
-    <feat type="Eberron Campaign Setting page 58" name="Recognize Impostor" desc="You are extremely skilled at spotting imposters." />
-    <feat type="Draconomicon page 73" name="Recover Breath" desc="You wait less time before being able to use  your breath weapon again." />
-    <feat type="Epic Level Handbook page 66" name="Reflect Arrows" desc="You reflect ranged attacks back upon the attacker." />
-    <feat type="Races of Eberron page 111" name="Relic Hunter" desc="You possess great knowledge of the relics and  crafts of the ancient cultures of Eberron." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Remain Conscious" desc="You have the tenacity of will that supports  you even when things look bleak." />
-    <feat type="Oriental Adventures page 65" name="Remain Conscious" desc="You have a tenacity of will that supports you  even when you are disabled or dying." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Remain Conscious" desc="You have a tenacity of will that supports you  even when things look bleak." />
-    <feat type="Draconomicon page 73" name="Rend" desc="You can rend opponents with your claws." />
-    <feat type="Ghostwalk page 37" name="Rend Ghost" desc="Your touch can maul the ectoplasm of another  ghost." />
-    <feat type="Serpent Kingdoms page 147" name="Rending Constriction" desc="You can pull grappled enemies apart." />
-    <feat type="Savage Species page 39" name="Rending Constriction" desc="You can pull grappled enemies apart." />
-    <feat type="Unearthed Arcana page 182" name="Renown" desc="You have a better chance of being recognized." />
-    <feat type="Complete Arcane page 82" name="Repeat Spell" desc="You can cast a spell that repeats on the following  round." />
-    <feat type="Deities and Demigods page 51" name="Repeat Spell" desc="The deity can cast a spell that repeats the  following round." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Repeat Spell" desc="You can cast a spell that repeats on the following  round." />
-    <feat type="Eberron Campaign Setting page 58" name="Repel Aberration" desc="Your Gatekeeper training allows you to keep  aberrations at bay." />
-    <feat type="Libris Mortis: The Book of the Dead page 29" name="Requiem" desc="Your bardic music affects undead creatures." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Requiem" desc="Your bardic music affects undead creatures." />
-    <feat type="Eberron Campaign Setting page 59" name="Research" desc="You can use your Knowledge skills to extract  information from books, scrolls, and other repositories of facts and figures." />
-    <feat type="Dragonlance Campaign Setting page 86" name="Reserves of Strength" desc="When you cast a spell, you can choose to increase  its effective caster level at the cost of exhausting yourself." />
-    <feat type="Unearthed Arcana page 94" name="Residual Rebound" desc="Sometimes spells cast at you rebound on the  caster instead." />
-    <feat type="Epic Level Handbook page 111" name="Resist Death" desc="You are capable of withstanding tremendous amounts  of damage without risk of instant death." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Resist Disease" desc="You have developed a natural resistance to diseases." />
-    <feat type="Shining South page 21" name="Resist Disease" desc="You have developed a natural resistance to diseases." />
-    <feat type="Dragonlance Campaign Setting page 86" name="Resist Dragonfear" desc="You are able to show courage in the presence  of dragons." />
-    <feat type="Ghostwalk page 37" name="Resist Ghost" desc="You are resistant to the effects of ghost powers." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Resist Poison" desc="Over years, some among your people carefully  expose themselves to poisons in controlled dosages in order to build up  immunity to their effects." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Resist Poison" desc="You have built up an immunity to the effects  of poisons by exposing yourself to controlled doses of them." />
-    <feat type="Oriental Adventures page 65" name="Resist Poison" desc="Your ancestor, Agasha Kitsuki, founded the fourth  family of the Dragon clan and a school for magistrates renowned for teaching  skills of investigation and deduction." />
-    <feat type="Player's Guide to Faerun page 43" name="Resist Poison" desc="Your people have become inured to many deadly  substances through controlled exposure or the simple hostility of your home  environment." />
-    <feat type="Oriental Adventures page 65" name="Resist Taint" desc="You are descended from Kuni, the founder of  the Kuni family, a scholar of -- and mighty warrior against -- the Shadowlands." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Resistance to Energy" desc="You channel the power of nature to resist a  particular energy type." />
-    <feat type="Book of Exalted Deeds page 45" name="Resounding Blow" desc="Your mightiest attacks cause your foes to tremble  before you." />
-    <feat type="Races of Destiny page 153" name="Resourceful Buyer" desc="You know where to look in a community for anything  you need." />
-    <feat type="Expanded Psionics Handbook page 51" name="Return Shot" desc="You can return incoming arrows, as well as crossbow  bolts, spears, and other projectile thrown weapons." />
-    <feat type="Savage Species page 39" name="Reverberation" desc="Your sonic attack is more potent than normal." />
-    <feat type="Shining South page 21" name="Rhinoceros Tribe Charge" desc="You use the power of the rhinoceros's charge  in battle." />
-    <feat type="Player's Handbook v.3.5 page 99" name="Ride-By Attack" desc="You are skilled at making fast attacks from  your mount." />
-    <feat type="Eberron Campaign Setting page 59" name="Right of Counsel" desc="You have the legal and sacral right to seek  advice from one of your ancestors, a deathless elf in Aerenal's City of  the Dead." />
-    <feat type="Epic Level Handbook page 66" name="Righteous Strike" desc="Your unarmed strikes are particularly damaging  to chaotic creatures." />
-    <feat type="Book of Exalted Deeds page 45" name="Righteous Wrath" desc="Your rage is empowered with divine fury." />
-    <feat type="Races of Faerun page 167" name="Rock Gnome Trickster" desc="Your glamers are particularly likely to fool  the senses of your target." />
-    <feat type="Races of Stone page 143" name="Rock Hurling" desc="You can throw rocks like a giant can." />
-    <feat type="Savage Species page 39" name="Roll With It" desc="You are adept at lessening the effects of blows." />
-    <feat type="Races of Destiny page 156" name="Roofwalker" desc="You are adept at moving and fighting on rooftops  and ledges." />
-    <feat type="Races of Stone page 143" name="Roots of the Mountain" desc="You can channel energy to make yourself immovable." />
-    <feat type="Complete Warrior page 105" name="Roundabout Kick" desc="You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick." />
-    <feat type="Oriental Adventures page 65" name="Roundabout Kick" desc="You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick." />
-    <feat type="Epic Level Handbook page 66" name="Ruinous Rage" desc="While in a rage, you can deal tremendous damage  to objects." />
-    <feat type="Player's Handbook v.3.5 page 99" name="Run" desc="You are fleet of foot." />
-    <feat type="Races of Faerun page 167" name="Runesmith" desc="You can fashion runes that take the place of  material components for your spells." />
-    <feat type="Complete Divine page 84" name="Sacred Boost" desc="You can channel positive energy to increase  the power of cure wounds spells cast near you." />
-    <feat type="Complete Divine page 84" name="Sacred Healing" desc="You can channel positive energy to grant nearby  living creatures the ability to recover form their wounds quickly." />
-    <feat type="Deities and Demigods page 51" name="Sacred Spell" desc="The deity's damaging spells are imbued with  divine power." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Sacred Spell" desc="Your damaging spells are imbued with divine  power." />
-    <feat type="Faiths &amp; Pantheons page 215" name="Sacred Spell" desc="Your damaging spells are imbued with divine  power." />
-    <feat type="Book of Exalted Deeds page 45" name="Sacred Strike" desc="Your sneak attack is enhanced by your unshakable  faith in a good-aligned deity." />
-    <feat type="Races of Faerun page 168" name="Sacred Tattoo" desc="You have been spiritually touched by one of  the god-kings of the Old Empires and bear his or her symbol in the form  of a tattoo in the shape of a holy symbol." />
-    <feat type="Complete Warrior page 108" name="Sacred Vengeance" desc="You can channel energy to deal extra damage  against undead in melee." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Sacred Vengeance" desc="You can channel energy to deal extra damage  against undead in melee." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Sacred Vitality" desc="You can channel positive energy to gain protection  from damage to your abilities or your life force." />
-    <feat type="Book of Exalted Deeds page 45" name="Sacred Vow" desc="You have willingly given yourself to the service  of a good deity or cause, denying yourself an ordinary life to better serve  you highest ideals." />
-    <feat type="Book of Vile Darkness page 50" name="Sacrificial Mastery" desc="The character is skilled at offering living  sacrifices to evil gods or fiends." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Saddleback" desc="Your people are as comfortable riding as walking." />
-    <feat type="Ghostwalk page 38" name="Saddleback" desc="You were raised among people who are as comfortable  riding as walking." />
-    <feat type="Oriental Adventures page 65" name="Saddleback" desc="You have a unique karmic tie to Moto Chai, one  of the greatest riders ever to live, even by Unicorn standards." />
-    <feat type="Player's Guide to Faerun page 43" name="Saddleback" desc="You've spent endless hours learning how to handle  a mount in a fight." />
-    <feat type="Stormwrack page 93" name="Sahuagin Flip" desc="You can safely attack and withdraw underwater." />
-    <feat type="Stormwrack page 93" name="Sailor's Balance" desc="You are experienced with the rolling decks of  the ship and maintain strong footing, even in a terrible storm." />
-    <feat type="Book of Exalted Deeds page 46" name="Sanctify Ki Strike" desc="Sacred power suffuses your unarmed strikes." />
-    <feat type="Book of Exalted Deeds page 46" name="Sanctify Martial Strike" desc="Sacred power suffuses your attacks with a certain  kind of weapon." />
-    <feat type="Book of Exalted Deeds page 46" name="Sanctify Natural Attack" desc="You can focus holy power into your natural attacks." />
-    <feat type="Complete Divine page 84" name="Sanctify Relic" desc="You can create magic items that are imbued with  a connection to your deity." />
-    <feat type="Stormwrack page 93" name="Sanctify Water" desc="You can call upon positive energy to momentarily  transform normal water around you into holy water." />
-    <feat type="Book of Exalted Deeds page 46" name="Sanctify Weapon" desc="You can focus holy power into your weapon." />
-    <feat type="Complete Arcane page 82" name="Sanctum Spell" desc="Your spells are especially potent on home ground." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Sanctum Spell" desc="Your spells have a home ground advantage." />
-    <feat type="Sandstorm page 51" name="Sand Camouflage" desc="You can hide yourself in sand with a moment's  notice." />
-    <feat type="Sandstorm page 52" name="Sand Dancer" desc="While making another attack, you attempt to  blind a foe with thrown sand." />
-    <feat type="Sandstorm page 52" name="Sand Snare" desc="When you knock your foes into the sand, they  have a hard time regaining their feet." />
-    <feat type="Sandstorm page 52" name="Sand Spinner" desc="You spray sand with your acrobatic maneuvers." />
-    <feat type="Sandstorm page 52" name="Sandskimmer" desc="You are particularly adept at moving over sand." />
-    <feat type="Complete Adventurer page 114" name="Savage Grapple" desc="While transformed into the shape of a wild animal,  you can savagely tear at any creature that you manage to grapple." />
-    <feat type="Lords of Madness page 181" name="Scavenging Gullet" desc="The taint of the aberration in your blood has  gifted you with the ability to gain nourishment from things that others  would never consider as food." />
-    <feat type="Complete Adventurer page 114" name="Scent" desc="You can sharpen your sense of smell." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Scent" desc="Your olfactory senses are as sharp as the wolf's." />
-    <feat type="Oriental Adventures page 65" name="Scholar of Nature" desc="You are descended from Asako Hanasku, a great  scholar who threw himself into the study of medicine, herbs, and poison." />
-    <feat type="Champions of Ruin page 23" name="Scion of Sorrow" desc="You formally supplicate yourself to a powerful  yugoloth lord." />
-    <feat type="Sandstorm page 52" name="Scorpion's Grasp" desc="Like the scorpion, you can grab and hold your  prey." />
-    <feat type="Sandstorm page 53" name="Scorpion's Instincts" desc="You are hard to find in the waste." />
-    <feat type="Sandstorm page 53" name="Scorpion's Resolve" desc="Like the scorpion, you are not easily distracted." />
-    <feat type="Sandstorm page 53" name="Scorpion's Sense" desc="Like the scorpion, you sense other creatures  simply by perceiving their contact with the sand." />
-    <feat type="Stormwrack page 93" name="Scourge of the Seas" desc="You have a sinister reputation as a pirate and  can intimidate enemy captains by your mere presence." />
-    <feat type="Savage Species page 39" name="Scramble" desc="Your slippery ways allow you to evade a damaging  blow." />
-    <feat type="Epic Level Handbook page 66" name="Scribe Epic Scroll" desc="You can scribe scrolls of epic power." />
-    <feat type="Player's Handbook v.3.5 page 99" name="Scribe Scroll" desc="You can create scrolls, from which you or another  spellcaster can cast the scribed spells." />
-    <feat type="Expanded Psionics Handbook page 51" name="Scribe Tattoo" desc="You can create psionic tattoos, which store  powers within their designs." />
-    <feat type="Ghostwalk page 38" name="Sculpt Ghost Body" desc="You can reshape your ghost body's ectoplasm  to enhance one physical ability score at the expense of another." />
-    <feat type="Complete Arcane page 83" name="Sculpt Spell" desc="You can alter the area of your spells." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Sculpt Spell" desc="You can alter the shape of a spell's area." />
-    <feat type="Frostburn page 49" name="Sea Legs" desc="You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage." />
-    <feat type="Oriental Adventures page 65" name="Sea Legs" desc="You are descended from Yasuki Fumoki, a notorious  pirate who preyed on Crane merchant ships off the coast." />
-    <feat type="Stormwrack page 93" name="Sea Legs" desc="You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage." />
-    <feat type="Sandstorm page 53" name="Searing Spell" desc="Your fire spells are so hot that they can damage  creatures that normally have resistance or immunity to fire." />
-    <feat type="Races of Eberron page 120" name="Second Slam" desc="You have learned to use your form to the utmost  and can make two slam attacks." />
-    <feat type="Miniatures Handbook page 28" name="Second Wind" desc="You can shrug off minor wounds with ease." />
-    <feat type="Shining South page 21" name="Selective Spell" desc="You can screen allies from the effects of your  area spells." />
-    <feat type="Epic Level Handbook page 66" name="Self-Concealment" desc="When in combat, your form becomes blurry and  indistinct, making it difficult to land a blow against you." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Self-Sufficient" desc="You can take care of yourself in harsh environments  and situations." />
-    <feat type="Draconomicon page 106" name="Sense Weakness" desc="You can take advantage of subtle weaknesses  in your opponents' defenses." />
-    <feat type="Sandstorm page 53" name="Serpent Fang" desc="You are able to project your ki to strike  foes as though you had extended reach." />
-    <feat type="Eberron Campaign Setting page 60" name="Serpent Strike" desc="Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longspear." />
-    <feat type="Complete Divine page 84" name="Serpent's Venom" desc="You can deliver a toxic bite attack reminiscent  of the viper." />
-    <feat type="Lost Empires of Faerun page 9" name="Servant of the Fallen" desc="You keep alive the worship of a deity who has  died or vanished." />
-    <feat type="Book of Exalted Deeds page 46" name="Servant of the Heavens" desc="You swear allegiance to one of the Tome Archons  who rules the Seven Heavens, and in exchange gain power to act on their  behalf." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Shadow" desc="You have a better chance than most to trail  someone unnoticed." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Shadow" desc="You are good at following someone surreptitiously." />
-    <feat type="Planar Handbook page 42" name="Shadow Heritage" desc="You are descended from creatures native to the  Plane of Shadow." />
-    <feat type="Races of Eberron page 111" name="Shadow Marches Warmonger" desc="The ancient martial pride of your people grants  you mastery of their style of battle." />
-    <feat type="Races of Faerun page 168" name="Shadow Shield" desc="Your ancestors long battled the insidious influence  of shadow magic, and some of their descendants (including you) have a greater  resistance to its effects." />
-    <feat type="Races of Faerun page 168" name="Shadow Song" desc="A dark legacy of the Shadowking's ambitions  is the shadow of sorrow that cloaks many Tethyrian songs and ballads. Some  bards have learned to infuse their performances with the sense of loss and  suffering that suffuses the Shadow Weave." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Shadow Weave Magic" desc="You have discovered the dark and dangerous secret  of the Shadow Weave." />
-    <feat type="Player's Guide to Faerun page 43" name="Shadow Weave Magic" desc="You have discovered the dangerous secret of  the Shadow Weave." />
-    <feat type="Champions of Ruin page 22" name="Shadowform Familiar" desc="You can summon a familiar from the Plane of  Shadow." />
-    <feat type="Champions of Ruin page 22" name="Shadowstrike" desc="Due to your ties to the Plane of Shadow, you  strike more effectively in areas of dim illumination." />
-    <feat type="Draconomicon page 73" name="Shape Breath" desc="You can make the area of your breath weapon  a cone or a line, as you see fit." />
-    <feat type="Ghostwalk page 38" name="Shape Ectoplasm" desc="You can make equipment out of ectoplasm." />
-    <feat type="Races of Eberron page 111" name="Shaped Splash" desc="Your expertise with thrown weapons enables you  to use splash weapons more effectively." />
-    <feat type="Races of the Wild page 152" name="Shared Fury" desc="Your fearsome rage spurs your animal companion  to greater heights." />
-    <feat type="Complete Warrior page 105" name="Sharp-Shooting" desc="Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover." />
-    <feat type="Deities and Demigods page 52" name="Sharp-Shooting" desc="The deity's skill with ranged weapons lets it  score hits others would miss due to an opponent's cover." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Sharp-Shooting" desc="Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover." />
-    <feat type="Epic Level Handbook page 66" name="Shattering Strike" desc="You can shatter objects with your unarmed strike." />
-    <feat type="Ghostwalk page 38" name="Sherem-Lar Sorcery" desc="You are one of the Sherem-Lar, magically altered  in the womb to enhance your potential as a sorcerer." />
-    <feat type="Ghostwalk page 38" name="Sherezem-Lar Sorcery" desc="You are one of the Sherezem-Lar, an elite group  within the Sherem-Lar, head and shoulders above the others in power." />
-    <feat type="Complete Warrior page 105" name="Shield Charge" desc="You deal extra damage if you use your shield  as a weapon when charging." />
-    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Shield Charge" desc="You deal extra damage if you use your shield  as a weapon when charging." />
-    <feat type="Races of Faerun page 168" name="Shield Dwarf Warder" desc="You are a student of the protective magics of  the shield dwarves, learned at great cost during centuries of warfare and  wandering." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Shield Expert" desc="You use a shield as an off-hand weapon while  retaining its armor bonus." />
-    <feat type="Races of Eberron page 113" name="Shield of Thought" desc="You wield your spirit as both weapon and shield." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Shield Proficiency" desc="You are proficient with bucklers, small shields,  and large shields." />
-    <feat type="Complete Warrior page 105" name="Shield Slam" desc="You can use your shield to daze your opponent." />
-    <feat type="Heroes of Battle page 99" name="Shield Wall" desc="You are skilled in using shields when in formation  with other shield-bearers." />
-    <feat type="Races of Stone page 144" name="Shielded Axe" desc="You have mastered the style of fighting with  a dwarven waraxe and a handaxe while keeping a buckler strapped to your  offhand, and you have learned to use this unusual combination of weapons  and buckler to protect yourself while wielding both axes effectively." />
-    <feat type="Races of Stone page 144" name="Shielded Casting" desc="You are skilled at covering yourself with your  shield when casting spells in combat." />
-    <feat type="Races of Stone page 144" name="Shielded Manifesting" desc="You are skilled at covering yourself with your  shield when manifesting psionic powers in combat." />
-    <feat type="Miniatures Handbook page 28" name="Shieldmate" desc="You can protect those near you with your shield." />
-    <feat type="Races of Eberron page 115" name="Shifter Agility" desc="Your heritage of speed and ferocity has honed  your reflexes, allowing you to avoid attacks." />
-    <feat type="Eberron Campaign Setting page 60" name="Shifter Defense" desc="By delving deeper into your shifter heritage,  you have developed the ability to ignore a little damage from every attack." />
-    <feat type="Monster Manual III page 150" name="Shifter Defense" desc="By delving into your shifter heritage, you have  developed the ability to ignore a little damage from every attack." />
-    <feat type="Eberron Campaign Setting page 60" name="Shifter Ferocity" desc="You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury." />
-    <feat type="Races of Eberron page 115" name="Shifter Ferocity" desc="You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury." />
-    <feat type="Monster Manual III page 150" name="Shifter Instincts" desc="Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts." />
-    <feat type="Races of Eberron page 115" name="Shifter Instincts" desc="Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts." />
-    <feat type="Eberron Campaign Setting page 60" name="Shifter Multiattack" desc="You are adept at using your natural attack in  conjunction with another weapon." />
-    <feat type="Races of Eberron page 115" name="Shifter Savagery" desc="The bestial fury of your lycanthrope ancestors  allows you to deal devastating strikes with your natural weapons." />
-    <feat type="Races of Eberron page 115" name="Shifter Stamina" desc="Yours is a heritage of endurance and tenacity,  and you can shrug off bruises and fatigue." />
-    <feat type="Races of Eberron page 112" name="Ship Savvy" desc="Your heritage among the sailors and shipwrights  of Zilargo gives you an edge in shipboard combat." />
-    <feat type="Stormwrack page 93" name="Ship's Mage" desc="You form a potent supernatural bond with a ship.  Your spells have a more potent effect when cast aboard this ship." />
-    <feat type="Complete Warrior page 112" name="Shock Trooper" desc="You are adept at breaking up formations of soldiers  when you rush into battle." />
-    <feat type="Draconomicon page 73" name="Shock Wave" desc="You can strike the ground with your tail so  hard it knocks other creatures down." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Shot on the Run" desc="You are highly trained in skirmish ranged weapons  tactics." />
-    <feat type="Ghostwalk page 38" name="Shriveling Touch" desc="Choose one physical ability score. When you  touch a creature, you can cause permanent drain to this ability score." />
-    <feat type="Miniatures Handbook page 28" name="Sidestep" desc="You can move nimbly around the battlefield." />
-    <feat type="Expanded Psionics Handbook page 51" name="Sidestep Charge" desc="You are skilled at dodging past charging opponents  and taking advantage when they miss." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Signature Spell" desc="You are so familiar with a mastered spell that  you can convert other prepared spells into that spell." />
-    <feat type="Player's Guide to Faerun page 43" name="Signature Spell" desc="You are so familiar with a mastered spell that  you can convert other prepared spells into that spell." />
-    <feat type="Races of Stone page 144" name="Silencing Strike" desc="You can infuse your sneak attacks with the magical  essence of silence." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Silent Spell" desc="You can cast spells silently." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Silver Palm" desc="Your culture is based on haggling and the art  of the deal." />
-    <feat type="Player's Guide to Faerun page 43" name="Silver Palm" desc="Your culture is based on haggling and the art  of the deal." />
-    <feat type="Eberron Campaign Setting page 60" name="Silver Smite" desc="You wield the power of the Silver Flame to smite  evil." />
-    <feat type="Oriental Adventures page 65" name="Silver Tongue" desc="Your ancestor, Mirumoto Kaijuko, was the first  woman to become daimyo of the Mirumoto family." />
-    <feat type="Races of Eberron page 120" name="Silver Tracery" desc="Alchemical silver tracery covers your body,  allowing you to overcome the supernatural defenses of certain creatures  and protecting against some magical attacks." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Simple Weapon Proficiency" desc="You understand how to use all types of simple  weapons in combat." />
-    <feat type="Champions of Ruin page 22" name="Skewer Foe" desc="A ruthless combatant, you like to impale enemies  on spears and similar piercing weapons." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Skill Focus" desc="Choose a skill. You have a special knack with  that skill." />
-    <feat type="Lords of Madness page 45" name="Skilled Telekinetic" desc="A creature with this feat becomes so skilled  with its telekinesis ability that it can manipulate and use magic  items via telekinesis." />
-    <feat type="Races of Faerun page 168" name="Skyrider" desc="You have trained and served with the hippogriff  cavalry that guards the Great Rift." />
-    <feat type="Races of Destiny page 153" name="Smatterings" desc="You have a talent for acquiring languages --  at least enough of each one to get by." />
-    <feat type="Frostburn page 50" name="Smite Fiery Foe" desc="You can smite creatures with the fire subtype." />
-    <feat type="Forgotten Realms Campaign Setting page 37" name="Smooth Talk" desc="Your people are accustomed to dealing with strangers  and foreigners without needing to draw weapons to make their point." />
-    <feat type="Oriental Adventures page 66" name="Smooth Talk" desc="You are descended from Doji Taehime, a Crane  ambassador to the Scorpion court -- a courtier skilled at discovering falsehoods  and uncovering plots." />
-    <feat type="Player's Guide to Faerun page 43" name="Smooth Talk" desc="Your people rarely have to draw their weapons  to deal with potential adversaries." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Snake Blood" desc="The taint of the yuan-ti runs in your veins." />
-    <feat type="Player's Guide to Faerun page 43" name="Snake Blood" desc="The taint of the yuan-ti runs in your veins." />
-    <feat type="Monster Manual II page 18" name="Snatch" desc="The creature can grapple more easily with its  claws or bite." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Snatch" desc="You can grapple more easily with your claws  or bite." />
-    <feat type="Draconomicon page 73" name="Snatch and Swallow" desc="You can swallow creatures you have grabbed with  your bite attack." />
-    <feat type="Monster Manual v.3.5 page 304" name="Snatch Arrows" desc="The creature can grab opponents much smaller  than itself and hold them in its mouth or claw." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Snatch Arrows" desc="You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Snatch Arrows" desc="You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons." />
-    <feat type="Champions of Ruin page 22" name="Snatch Trophy" desc="You can quickly and skillfully collect a trophy  of your victory over a fallen foe." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Snatch Weapon" desc="You can disarm an opponent, then pluck the weapon  from midair." />
-    <feat type="Epic Level Handbook page 66" name="Sneak Attack of Opportunity" desc="Whenever your opponent lets his guard down,  you can make a sneak attack." />
-    <feat type="UE page 45" name="Snow Tiger Berserker" desc="You have learned how to pounce on your foes,  much like your totem spirit." />
-    <feat type="Frostburn page 50" name="Snowcasting" desc="You add ice or snow to your spell's components  to make them more powerful." />
-    <feat type="Frostburn page 50" name="Snowflake Wardance" desc="You are particularly adept at moving through  snow and over ice." />
-    <feat type="Frostburn page 50" name="Snowrunner" desc="You have mastered the snowflake wardance, a  mystical style of fighting with slashing weapons that allows you to leap  and almost seem to float haphazardly across the battlefield like a whirling,  razor-edged snowflake." />
-    <feat type="Races of Destiny page 153" name="Sociable Personality" desc="You are adroit at avoiding social gaffes." />
-    <feat type="Ghostwalk page 39" name="Solid Visage" desc="Your ghost body appears solid and alive." />
-    <feat type="Eberron Campaign Setting page 60" name="Song of the Heart" desc="Your bardic music reaches the depths of its  listeners' hearts." />
-    <feat type="Eberron Campaign Setting page 60" name="Soothe the Beast" desc="Echoing the music of creation, your music has  powers to calm animals." />
-    <feat type="Oriental Adventures page 66" name="Soul of Honor" desc="Your ancestor Shinjo Martera, the firstborn  son of Shinjo, was the living incarnation of bushido for the Unicorn,  utterly without fault or failing." />
-    <feat type="Oriental Adventures page 66" name="Soul of Loyalty" desc="Your ancestor, Mirumoto Tokeru, was renowned  for his loyalty to his twin brother, Ryudumu." />
-    <feat type="Oriental Adventures page 66" name="Soul of Sincerity" desc="You are descended from the famous Scorpion daimyo  Bayushi Tangen, author of Lies and Little Truths." />
-    <feat type="Complete Arcane page 83" name="Soul of the North" desc="You possess a magical understanding of the nature  of cold." />
-    <feat type="Races of Eberron page 120" name="Soulblade Warrior" desc="The spirit of a quori warrior grants you deadly  speed and combat prowess with your mind blade." />
-    <feat type="Races of Faerun page 168" name="Southern Magician" desc="Your magical studies in Mulan lands have taught  you spellcasting techniques unknown in the north that blur the line between  arcane and divine magic." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Speaking Wild Shape" desc="While in wild shape, you can communicate with  animals or elementals of the same kind as your current form." />
-    <feat type="Dragonlance Campaign Setting page 87" name="Spear of Doom" desc="Few can avoid death on your spearpoint when  you brace yourself for their attack." />
-    <feat type="Dragonlance Campaign Setting page 87" name="Spectacular Death Throes" desc="Your body seethes with unchecked power, promising  dire consequences to your killer." />
-    <feat type="Complete Divine page 90" name="Spectral Strike" desc="You can strike incorporeal creatures as if they  were solid." />
-    <feat type="Epic Level Handbook page 66" name="Spectral Strike" desc="You can strike incorporeal creatures as if they  were solid." />
-    <feat type="Expanded Psionics Handbook page 51" name="Speed of Thought" desc="The energy of your mind energizes the alacrity  of your body." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Spell Drain" desc="You can cast any spell that you drain from a  creature's mind." />
-    <feat type="Complete Divine page 84" name="Spell Focus" desc="Your spells with an alignment descriptor are  more potent than normal." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Spell Focus" desc="Choose a school of magic. Your spells of that  school are more potent than normal." />
-    <feat type="Book of Exalted Deeds page 46" name="Spell Focus (Good)" desc="Your spells with the good descriptor are more  potent than normal due to your relationship with the powers of good." />
-    <feat type="Magic of Faerun page 22" name="Spell Girding" desc="Your spells are particularly hardy, resisting  dispel checks more readily than normal." />
-    <feat type="Complete Arcane page 83" name="Spell Hand" desc="You possess a magical understanding of the manipulation  of force." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Spell Knowledge" desc="You add two additional arcane spells to your  repertoire." />
-    <feat type="Epic Level Handbook page 67" name="Spell Knowledge" desc="You add two additional arcane spells to your  repertoire." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Spell Mastery" desc="You are so intimately familiar with certain  spells that you don't need a spellbook to prepare them anymore." />
-    <feat type="Epic Level Handbook page 67" name="Spell Opportunity" desc="You can cast a touch spell as an attack of opportunity." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Spell Penetration" desc="Your spells are especially potent, breaking  through spell resistance more readily than normal." />
-    <feat type="Oriental Adventures page 66" name="Spell Power" desc="Your lineage traces back to the young shugenja  Kuni Osaku, who single-handedly held off a massive army of oni at the Battle  of the Cresting Wave." />
-    <feat type="Lost Empires of Faerun page 9" name="Spell Reprieve" desc="Your studies of the less restrictive arcane  traditions of old allow you to cast one spell from a prohibited school." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Spell Specialization" desc="You deal more damage with ray or energy missile  spells." />
-    <feat type="Epic Level Handbook page 67" name="Spell Stowaway" desc="Choose a spell-like ability you possess or a  spell you can cast. You gain the benefits of this magic whenever it is used  near you." />
-    <feat type="Magic of Faerun page 22" name="Spell Thematics" desc="Your spells have a distinct visual or auditory  effect in their manifestation." />
-    <feat type="Player's Guide to Faerun page 44" name="Spell Thematics" desc="Your spells manifest with a distinct theme or  appearance." />
-    <feat type="Oriental Adventures page 66" name="Spellcaster Support" desc="Your ancestor, Shiba Kaigen, was a samurai who  used his knowledge of spellcraft to help defend a mountain pass from a Lion  invasion." />
-    <feat type="Draconomicon page 74" name="Spellcasting Harrier" desc="Spellcasters you threaten find it difficult  to cast defensively." />
-    <feat type="Epic Level Handbook page 67" name="Spellcasting Harrier" desc="Spellcasters you threaten find it difficult  to cast defensively." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Spellcasting Prodigy" desc="You have an exceptional gift for magic." />
-    <feat type="Player's Guide to Faerun page 44" name="Spellcasting Prodigy" desc="You have an exceptional gift for magic." />
-    <feat type="Magic of Faerun page 23" name="Spellfire Wielder" desc="You are one of the rare people who have the  innate talent to control raw magic in the form of spellfire." />
-    <feat type="Races of Faerun page 168" name="Spell-Like Ability Focus" desc="Choose one of your spell-like abilities. This  attack becomes much more potent than normal." />
-    <feat type="Races of Stone page 144" name="Spellrazor" desc="You have mastered the style of combining a gnome  quickrazor with spellcasting." />
-    <feat type="Player's Guide to Faerun page 44" name="Spellwise" desc="You were raised in a land where mighty wizards  are common." />
-    <feat type="Player's Guide to Faerun page 176" name="Spider Bite" desc="You gain a poisonous bite like that of a spider." />
-    <feat type="Races of Eberron page 120" name="Spiked Body" desc="Your body is overlaid with hundreds of protruding  spikes that can deal great damage to foes." />
-    <feat type="Complete Warrior page 114" name="Spinning Halberd" desc="You have mastered the style of fighting with  a halberd." />
-    <feat type="Races of Faerun page 168" name="Spire Walking" desc="Iriaebor is justly known as the City of a Thousand  Spires, for fantastically bizarre, many-storied towers rise from all quarters  of the city and are tightly packed together. As a result, it is possible  to navigate Iriaebor via a network of arches, bridges, stairs, and leapable  gulfs far above the city streets. You are well versed in the skill of navigating  the skyroads of Iriaebor." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Spirited Charge" desc="You are trained at making a devastating mounted  charge." />
-    <feat type="Races of Eberron page 113" name="Spiritual Force" desc="Your forceful inner spirit allows you to deal  more damage with your mind blade." />
-    <feat type="Lords of Madness page 94" name="Spit Poison" desc="A creature with this feat can spit its poison  as a ranged touch attack." />
-    <feat type="Serpent Kingdoms page 147" name="Spit Venom" desc="You can spit venom in the manner of a spitting  cobra." />
-    <feat type="Draconomicon page 74" name="Split Breath" desc="You can split your breath weapon into a pair  of weaker effects." />
-    <feat type="Expanded Psionics Handbook page 51" name="Split Psionic Ray" desc="You can affect two targets with a single ray." />
-    <feat type="Complete Arcane page 83" name="Split Ray" desc="Your ray spells can affect an additional target." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Split Ray" desc="You can affect two targets with a single ray." />
-    <feat type="Eberron Campaign Setting page 61" name="Spontaneous Casting" desc="You can swap a prepared spell on the fly." />
-    <feat type="Epic Level Handbook page 67" name="Spontaneous Domain Access" desc="Select a domain of spells you have access to.  You can spontaneously convert spells into spells of this domain." />
-    <feat type="Complete Divine page 84" name="Spontaneous Healer" desc="You can use your spellcasting ability to spontaneously  cast cure spells." />
-    <feat type="Epic Level Handbook page 67" name="Spontaneous Spell" desc="Select a spell you can cast. You can spontaneously  convert spells of that spell's level into that spell." />
-    <feat type="Complete Divine page 85" name="Spontaneous Summoner" desc="You can spontaneously cast summon nature's  ally spells." />
-    <feat type="Complete Divine page 85" name="Spontaneous Wounder" desc="You can use your spellcasting ability to spontaneously  cast inflict spells." />
-    <feat type="Draconomicon page 74" name="Spreading Breath" desc="You can convert your breath weapon into a spread  effect." />
-    <feat type="Player's Handbook v.3.5 page 100" name="Spring Attack" desc="You are trained in fast melee attacks and fancy  footwork." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Spurn Death's Touch" desc="You can channel divine energy to remove some  of the harmful effects of attacks made by undead creatures." />
-    <feat type="Races of Eberron page 112" name="Stable Footing" desc="Because of your training and wariness, you are  skilled at keeping your feet in combat and able to move over difficult terrain  with ease." />
-    <feat type="Complete Adventurer page 112" name="Staggering Strike" desc="You can deliver a wound that hampers an opponent's  movement." />
-    <feat type="Races of Faerun page 169" name="Staggering Strike" desc="You are particularly adept at making cruel and  demoralizing sneak attacks." />
-    <feat type="Planar Handbook page 42" name="Stalwart Planar Ally" desc="The allies you summon from a specific plane  are tougher than normal." />
-    <feat type="Savage Species page 39" name="Stamp" desc="You can stamp the ground to crush and disrupt  opponents." />
-    <feat type="Expanded Psionics Handbook page 51" name="Stand Still" desc="You can prevent foes from fleeing or closing." />
-    <feat type="Lords of Madness page 181" name="Starspawn" desc="Your abnormal body and heritage has become more  pronounced. You grow membranous wings and are comfortable in extreme elevations." />
-    <feat type="Races of Stone page 144" name="Steady Concentration" desc="You are an expert at avoiding distractions and  focusing your mind, and you can concentrate clearly even in the most stressful  conditions." />
-    <feat type="Races of Stone page 144" name="Steady Mountaineer" desc="You are so good at climbing cliffs and leaping  across crevasses that distractions don't affect you." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Stealthy" desc="Your people are known for their stealthiness." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Stealthy" desc="You are particularly good at avoiding notice." />
-    <feat type="Stormwrack page 93" name="Steam Magic" desc="You are skilled at casting fiery spells into  the water, causing terrible gouts of scalding steam." />
-    <feat type="Unearthed Arcana page 94" name="Stench of the Dead" desc="The odor of decay hangs heavy on you, causing  others to gasp and retch." />
-    <feat type="Book of Exalted Deeds page 46" name="Stigmata" desc="You bear the marks of wounds on your body, as  sort of a living martyrdom." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Still Spell" desc="You can cast spells without gestures." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Stitched Flesh Familiar" desc="When you are ready and able to acquire a new  familiar, you may choose to gain a stitched flesh familiar." />
-    <feat type="Races of Faerun page 169" name="Stone Colossus" desc="You can focus a part of your power to increase  the toughness of your skin." />
-    <feat type="Races of Stone page 144" name="Stone Form" desc="You can use wild shape to assume a rocklike  form." />
-    <feat type="Races of Stone page 144" name="Stone Rage" desc="Your bond with the earth and tough hide makes  it easier for you to shrug off blows while you are raging." />
-    <feat type="Races of Faerun page 169" name="Stone Slide" desc="You have attuned yourself to stone to such an  extent that you can merge with it for a short time." />
-    <feat type="Underdark page 27" name="Stone Soul" desc="You were born with a dwarflike, innate sense  about rock, stone, and construction." />
-    <feat type="Races of Stone page 144" name="Stoneback" desc="You have studied the techniques of fighting  underground, and you can protect yourself from the dangers of multiple attackers  whenever you can put your back to a solid wall." />
-    <feat type="Races of Faerun page 169" name="Stoneblood" desc="Your blood is thick like cooling lava, making  it difficult for you to die after falling from injuries." />
-    <feat type="Races of Faerun page 169" name="Stoneshaper" desc="You have a deep and abiding tie to earth and  stone." />
-    <feat type="Races of Faerun page 169" name="Stonewalker Fist" desc="You are trained in an unarmed fighting style  that draws on your ability to pass through minerals as if they were air." />
-    <feat type="Frostburn page 50" name="Storm Magic" desc="You gain a boost in spellcasting power during  storms." />
-    <feat type="Stormwrack page 94" name="Storm Magic" desc="You gain a boost in spellcasting power during  storms." />
-    <feat type="Epic Level Handbook page 67" name="Storm of Throws" desc="You become a flurry of thrown weapons, targeting  all nearby opponents." />
-    <feat type="Player's Guide to Faerun page 44" name="Stormheart" desc="The sea is in your blood." />
-    <feat type="Dragonlance Campaign Setting page 87" name="Strafing Breath" desc="You can sustain your breath weapon when you  use it on the wing, covering a larger ground area in its effect." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Street Smart" desc="You have learned how to keep informed, ask questions,  and interact with the underworld without raising suspicion." />
-    <feat type="Player's Guide to Faerun page 44" name="Street Smart" desc="You know how to keep informed, ask questions,  and interact with the underworld without raising suspicions." />
-    <feat type="Oriental Adventures page 66" name="Strength of the Charger" desc="You share the spirit of Utaku Shiko, the founder  of the Utaku Battle Maiden tradition." />
-    <feat type="Oriental Adventures page 87" name="Strength of the Crab" desc="You claim descent from Hida, the first Crab." />
-    <feat type="Races of Eberron page 113" name="Strength of Two" desc="Your quori spirit gives you unmatched willpower." />
-    <feat type="Eberron Campaign Setting page 61" name="Strong Mind" desc="You are unusually hard to affect with psionic  powers and mind attacks." />
-    <feat type="Underdark page 27" name="Strong Mind" desc="You are unusually difficult to affect with psionic  powers and mind attacks." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Strong Soul" desc="The souls of your people are hard to separate  from their bodies." />
-    <feat type="Oriental Adventures page 66" name="Strong Soul" desc="You claim descent from Moto Soro, the simple  peasant who earned his place among samurai and founded the Moto family." />
-    <feat type="Player's Guide to Faerun page 44" name="Strong Soul" desc="You possess an innate resistance to fell magic  and supernatural attacks." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Stunning Fist" desc="You know how to strike opponents in vulnerable  areas." />
-    <feat type="Deities and Demigods page 52" name="Subdual Substitution" desc="The deity can modify a spell that uses energy  to deal damage to deal subdual damage instead." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Subdual Substitution" desc="You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead." />
-    <feat type="Book of Exalted Deeds page 46" name="Subduing Strike" desc="You are adept at striking to deal nonlethal  damage even with normal weapons." />
-    <feat type="Complete Adventurer page 112" name="Subsonics" desc="Your music can affect even those who do not  consciously hear it." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Subsonics" desc="Your music can affect even those who do not  consciously hear it." />
-    <feat type="Races of Destiny page 154" name="Subtle Sigil" desc="You are able to fade your sigils into invisibility,  but still tap into their magical energy." />
-    <feat type="Complete Arcane page 83" name="Sudden Empower" desc="You can cast a spell to greater effect without  special preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Empower" desc="You can cast one spell per day to greater effect  without special preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Energy Affinity" desc="You can modify a spell's energy type once per  day without special preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Enlarge" desc="You may cast one spell per day with a greater  range than normal without special preparation." />
-    <feat type="Complete Arcane page 83" name="Sudden Extend" desc="You can make a spell last longer than normal  without special preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Extend" desc="You can cast one spell per day with a longer  duration than normal without special preparation." />
-    <feat type="Complete Arcane page 83" name="Sudden Maximize" desc="You can cast a spell to maximum effect without  special preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Maximize" desc="Once per day you can cast a spell to maximum  effect without special preparation." />
-    <feat type="Complete Arcane page 83" name="Sudden Quicken" desc="You can cast a spell with a moment's thought  without special preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Quicken" desc="Once per day you can cast a spell with a moment's  thought without special preparation." />
-    <feat type="Complete Arcane page 83" name="Sudden Silent" desc="You can cast a spell silently without special  preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Silent" desc="Once per day you can cast a spell silently without  special preparation." />
-    <feat type="Complete Arcane page 83" name="Sudden Still" desc="You can cast a spell without gestures or special  preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Still" desc="Once per day you can cast a spell without gestures  without special preparation." />
-    <feat type="Complete Arcane page 83" name="Sudden Widen" desc="You can increase a spell's area without special  preparation." />
-    <feat type="Miniatures Handbook page 28" name="Sudden Widen" desc="Once per day you can increase the area of a  spell without special preparation." />
-    <feat type="Frostburn page 50" name="Sugliin Mastery" desc="You are a master at fighting with the massive  sugliin." />
-    <feat type="Races of Faerun page 169" name="Summon Earth Elemental" desc="Like many experienced deep gnomes, you have  developed the ability to summon earth elementals to help you with tasks." />
-    <feat type="Complete Warrior page 112" name="Sun School" desc="You have learned a number of esoteric martial  arts techniques inspired by the sun." />
-    <feat type="Stormwrack page 94" name="Sunken Song" desc="You can project your voice underwater." />
-    <feat type="Deities and Demigods page 52" name="Superior Expertise" desc="The deity has mastered the art of defense in  combat." />
-    <feat type="Faiths &amp; Pantheons page 215" name="Superior Expertise" desc="You have mastered the art of defense in combat." />
-    <feat type="Oriental Adventures page 66" name="Superior Expertise" desc="You have mastered the art of defense in combat." />
-    <feat type="Epic Level Handbook page 67" name="Superior Initiative" desc="You can react even more quickly than normal  in a fight." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Supernatural Blow" desc="Choose one favored enemy that is immune to critical  hits. You know how to place blows against this opponent for best effect." />
-    <feat type="Savage Species page 39" name="Supernatural Transformation" desc="You convert a spell-like ability to a supernatural  ability." />
-    <feat type="Draconomicon page 74" name="Suppress Weakness " desc="Your vulnerability to an energy type is reduced." />
-    <feat type="Player's Guide to Faerun page 45" name="Surefooted" desc="You are used to fighting on steep slopes and  treacherous surfaces." />
-    <feat type="Savage Species page 39" name="Surrogate Spellcasting" desc="You use substitute verbal and somatic components  when casting spells." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Survivor" desc="Your people thrive in regions that others find  uninhabitable, and excel at uncovering the secrets of the wilderness and  surviving to tell the tale." />
-    <feat type="Ghostwalk page 39" name="Survivor" desc="Your people thrive in a region that others find  uninhabitable, and you excel at uncovering the secrets of the wilderness  and surviving to tell the tale." />
-    <feat type="Player's Guide to Faerun page 45" name="Survivor" desc="Your people thrive in places that others find  almost uninhabitable, and you know many of the secrets of the wilderness." />
-    <feat type="Races of Faerun page 169" name="Svirfneblin Figment" desc="Your time underground has made you acutely aware  of even slight differences in sound and vision in caves that have never  seen the sun. Accordingly, your illusions are finely tuned and ultra-realistic." />
-    <feat type="Savage Species page 40" name="Swamp Stalker" desc="You are adapted to a marshy environment." />
-    <feat type="Epic Level Handbook page 67" name="Swarm of Arrows" desc="You can fire a veritable storm of arrows at  nearby opponents." />
-    <feat type="Complete Warrior page 105" name="Swarmfighting" desc="You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters." />
-    <feat type="Races of Faerun page 169" name="Swarmfighting" desc="You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters." />
-    <feat type="Sharn: City of Towers page 158" name="Swarm's Embrace" desc="You have a natural affinity for swarms and can  stand in the midst of a swarm with few harmful effects." />
-    <feat type="Player's Guide to Faerun page 45" name="Swift and Silent" desc="The shadows are your friends, and your footfalls  are whispers of death." />
-    <feat type="Races of Eberron page 116" name="Swiftwing Elite" desc="Your swiftwing shifter trait improves." />
-    <feat type="Complete Divine page 85" name="Swim Like a Fish" desc="You can breathe and swim underwater with grace." />
-    <feat type="Stormwrack page 94" name="Swim-By Attack" desc="You can attack in the middle of a fast pass  by your opponent." />
-    <feat type="Complete Adventurer page 112" name="Tactile Trapsmith" desc="You can rely on your rapid reflexes and nimble  fingers instead of your intellect when searching a room or when disabling  a trap." />
-    <feat type="Draconomicon page 74" name="Tail Constrict" desc="You can make constriction attacks with your  tail." />
-    <feat type="Serpent Kingdoms page 147" name="Tail Rattle" desc="Your tail gains a rattle like that of a serpent." />
-    <feat type="Draconomicon page 74" name="Tail Sweep Knockdown" desc="Your tail sweep attack knocks opponents prone." />
-    <feat type="Races of Eberron page 112" name="Talenta Warrior" desc="You have trained with the ancestral weapons  of the Talenta halflings and are particularly adept at striking from the  back of a dinosaur mount." />
-    <feat type="Expanded Psionics Handbook page 51" name="Talented" desc="You can overchannel powers with less cost to  yourself." />
-    <feat type="Races of Faerun page 170" name="Talfirian Song" desc="You can use the power of your bardic music to  enhance your illusion spells." />
-    <feat type="Shining South page 21" name="Tall Mouther Hunter" desc="Because of your cultural hatred for tall mouthers,  you have had specific training in how best to fight them." />
-    <feat type="Dungeon Master's Guide v.3.5 page 194" name="Tattoo Focus" desc="You bear the powerful magical tattoos of a Red  Wizard of Thay." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Tattoo Focus" desc="You bear the powerful magic tattoos of a Red  Wizard of Thay." />
-    <feat type="Player's Guide to Faerun page 45" name="Tattoo Focus" desc="You bear the powerful magical tattoos of a Red  Wizard of Thay." />
-    <feat type="Lords of Darkness page 189" name="Tattoo Magic" desc="You can create tattoos that store spells." />
-    <feat type="Races of Faerun page 170" name="Tattoo Magic" desc="You can create tattoos that store spells." />
-    <feat type="Ghostwalk page 39" name="Temper Ectoplasm" desc="You can make durable equipment out of ectoplasm." />
-    <feat type="Draconomicon page 74" name="Tempest Breath" desc="You can make your breath weapon strike with  the force of a windstorm." />
-    <feat type="Epic Level Handbook page 68" name="Tenacious Magic" desc="Choose one of your spells or spell-like abilities.  That magic cannot be dispelled, only suppressed." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Tenacious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
-    <feat type="Player's Guide to Faerun page 45" name="Tenacious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
-    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Terrifying Rage" desc="While in a rage, you panic your opponents." />
-    <feat type="Epic Level Handbook page 68" name="Terrifying Rage" desc="While in a rage, you panic your opponents." />
-    <feat type="Oriental Adventures page 81" name="The Gentle Way Mastery" desc="You have mastered the martial arts style of  'The Gentle Way' -- a soft form emphasizing throws and movement." />
-    <feat type="Races of Faerun page 170" name="Theocrat" desc="You have the delicate touch needed to maintain  the favor of your patron deity and the political skills needed to survive  in the trenches of bureaucratic warfare common in the lands ruled by agents  of the Mulhorandi pantheon." />
-    <feat type="Lords of Madness page 23" name="Thicken Mucus" desc="An aboleth with this feat can produce mucus  that is thicker than normal, and other creatures find it difficult to swim  through." />
-    <feat type="Savage Species page 40" name="Thick-Skinned" desc="Your tough hide grants improved damage reduction." />
-    <feat type="Lords of Madness page 182" name="Thrall Bred" desc="Spawned in the breeding pits of the mind flayers  or the beholders, you have unusual strength and hardiness, as well as loyalty." />
-    <feat type="Book of Vile Darkness page 50" name="Thrall to Demon" desc="The character formally supplicates himself to  a demon prince." />
-    <feat type="Champions of Ruin page 23" name="Thrall to Demon" desc="You formally supplicate yourself to a demon  prince." />
-    <feat type="Complete Warrior page 114" name="Three Mountains" desc="You are a master of fighting with powerful bludgeoning  weapons." />
-    <feat type="Complete Warrior page 105" name="Throw Anything" desc="In your hands, any weapon becomes a deadly ranged  weapon." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Throw Anything" desc="In your hands, any weapon becomes a deadly ranged  weapon." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Thug" desc="Your people know how to get the jump on the  competition and push other people around." />
-    <feat type="Player's Guide to Faerun page 45" name="Thug" desc="You have a knack for getting the jump on the  competition and pushing other people around." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Thunder Twin" desc="You are one of the dwarven generation of twins  born after Moradin's Thunder Blessing in the Year of Thunder (1306 DC)." />
-    <feat type="Player's Guide to Faerun page 46" name="Thunder Twin" desc="You are one of the generation of dwarf twins  born after Moradin's Thunder Blessing in the Year of Thunder." />
-    <feat type="Savage Species page 40" name="Thunderclap" desc="You create a cone of deafening sound by clapping  two limbs together." />
-    <feat type="Epic Level Handbook page 68" name="Thundering Rage" desc="Your rage attacks can cause thunderous roars  that can deafen opponents." />
-    <feat type="Player's Guide to Faerun page 46" name="Tireless" desc="You don't know the meaning of the word 'quit.'" />
-    <feat type="Races of Stone page 145" name="Titan Fighting" desc="You have been trained to fight larger creatures,  and you are adept at dodging their attacks." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Tomb-Born Fortitude" desc="The power of undeath taints you, body and soul.  Its power has hardened your flesh and given it the foul look of the grave." />
-    <feat type="Libris Mortis: The Book of the Dead page 30" name="Tomb-Born Resilience" desc="The power of undeath taints you, deadening your  mind and body to the effects of mind-controlling magic, poison, and disease." />
-    <feat type="Libris Mortis: The Book of the Dead page 31" name="Tomb-Born Vitality" desc="The power of undeath taints you, body and soul.  Its power has removed your need to sleep and eat." />
-    <feat type="Libris Mortis: The Book of the Dead page 31" name="Tomb-Tainted Soul" desc="Your soul is tainted by the foul touch of undeath." />
-    <feat type="Stormwrack page 94" name="Toothed Blow" desc="You are able to hammer your foes more effectively  underwater." />
-    <feat type="Champions of Ruin page 23" name="Tormented Knight" desc="You are inexorably bound to the loathsome yugoloths  that lurk in the Barrens of Doom and Despair, and you strive to bring misery  and pain to all creatures that oppose them." />
-    <feat type="Eberron Campaign Setting page 61" name="Totem Companion" desc="Instead of an animal companion, you have your  totem magical beast as a companion." />
-    <feat type="Ghostwalk page 39" name="Touch Attack Specialization" desc="Choose one of your ghost touch attacks that  deals hit point damage, ability damage, or ability drain, such as Corrupting  Touch. You are especially good at using this touch attack." />
-    <feat type="Champions of Ruin page 22" name="Touch of Benevolence" desc="Despite your evil alignment, you are prone to  moments of benevolence and mercy." />
-    <feat type="Book of Exalted Deeds page 47" name="Touch of Golden Ice" desc="Your touch is poisonous to evil creatures." />
-    <feat type="Player's Guide to Faerun page 177" name="Touch of Hate" desc="Because you are favored by Bane, you can transform  animals into evil minions." />
-    <feat type="Complete Arcane page 83" name="Touch Spell Specialization" desc="You deal extra damage with touch spells." />
-    <feat type="Sandstorm page 53" name="Touchstone" desc="You forge a link with a power-rich location,  referred to as a touchstone site." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Toughness" desc="You are tougher than normal." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Tower Shield Proficiency" desc="You are proficient with tower shields." />
-    <feat type="Lords of Madness page 23" name="Toxic Mucus" desc="An aboleth with this feat can produce mucus  that is poisonous to other creatures." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Track" desc="You can follow the trails of creatures and characters  across most types of terrain." />
-    <feat type="Player's Handbook v.3.5 page 101" name="Trample" desc="You are trained in using your mount to knock  down opponents." />
-    <feat type="Complete Arcane page 84" name="Transdimensional Spell" desc="You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area." />
-    <feat type="Complete Divine page 85" name="Transdimensional Spell" desc="You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area." />
-    <feat type="UE page 45" name="Transdimensional Spell" desc="You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area." />
-    <feat type="WL page 16" name="Transfer Legacy" desc="You can temporarily transfer one of your legacy  item's abilities to another magic item." />
-    <feat type="Epic Level Handbook page 68" name="Trap Sense" desc="You can sense nearby traps even if not actively  searching for them." />
-    <feat type="Lost Empires of Faerun page 9" name="Trapmaster" desc="You have studied the funereal architecture and  lethal traps of a dozen long-dead cultures, which gives you an uncanny knack  for avoiding traps." />
-    <feat type="Savage Species page 40" name="Treefriend" desc="You are adapted to a forest environment." />
-    <feat type="Forgotten Realms Campaign Setting page 38" name="Treetopper" desc="Your people are at home in the trees and high  places, daring falls that paralyze most other folk in abject terror." />
-    <feat type="Player's Guide to Faerun page 46" name="Treetopper" desc="Your people are at home in the trees and high  places." />
-    <feat type="Dragonlance Campaign Setting page 87" name="Tremendous Charge" desc="You know how to use your mount's power to make  your lance attacks even more deadly." />
-    <feat type="Races of Stone page 145" name="Trivial Knowledge" desc="You have the ability to dredge up obscure knowledge  in appropriate situations." />
-    <feat type="Complete Divine page 86" name="True Believer" desc="Your deity rewards your unquestioning faith  and dedication." />
-    <feat type="Dungeon Master's Guide II page 232" name="Truebond" desc="Your bond to your chosen item becomes stronger." />
-    <feat type="Races of Eberron page 116" name="Truedive Elite" desc="Your truedive shifter trait improves." />
-    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Trustworthy" desc="Others feel comfortable telling you their secrets." />
-    <feat type="Races of Stone page 145" name="Tunnel Fighting" desc="You are adept at maneuvering and fighting in  tight spaces and underground passages." />
-    <feat type="Races of Stone page 145" name="Tunnel Riding" desc="You are particularly adept at maneuvering mounts  through tight spaces and underground passages." />
-    <feat type="Underdark page 27" name="Tunnelfighter" desc="You can fight more naturally in the cramped  and close quarters of caves and tunnels than usual." />
-    <feat type="Underdark page 27" name="Tunnelrunner" desc="You can move naturally in the cramped quarters  of caves and tunnels." />
-    <feat type="Races of Stone page 145" name="Turtle Dart" desc="You have mastered the style of fighting with  a short sword while wearing extremely heavy armor and carrying a large shield." />
-    <feat type="Expanded Psionics Handbook page 51" name="Twin Power" desc="You can manifest a power simultaneously with  another power just like it." />
-    <feat type="Complete Arcane page 84" name="Twin Spell" desc="You can simultaneously cast a single spell twice." />
-    <feat type="Forgotten Realms Campaign Setting page 39" name="Twin Spell" desc="You can cast a spell simultaneously with another  spell just like it." />
-    <feat type="Player's Guide to Faerun page 46" name="Twin Spell" desc="You can cast a spell simultaneously with another  spell just like it." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Twin Spell" desc="You can cast a spell simultaneously with another  spell just like it." />
-    <feat type="Forgotten Realms Campaign Setting page 39" name="Twin Sword Style" desc="You have mastered a style of defense that others  find frustrating." />
-    <feat type="Ghostwalk page 39" name="Twin Sword Style" desc="You have mastered a style of defense that others  find frustrating." />
-    <feat type="Player's Guide to Faerun page 46" name="Twin Sword Style" desc="You have mastered a defensive style based on  wielding a blade in each hand." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Two-Weapon Defense" desc="Your two-weapon fighting style bolsters your  defense as well as your offense." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Two-Weapon Fighting" desc="You can fight with a weapon in each hand. You  can make one extra attack each round with the second weapon." />
-    <feat type="Epic Level Handbook page 68" name="Two-Weapon Rend" desc="You can rend opponents when fighting with two  weapons." />
-    <feat type="Races of Eberron page 120" name="Unarmored Body" desc="Your body is crafted without its normal layer  of armor, trading off physical strength for magical potential." />
-    <feat type="Expanded Psionics Handbook page 52" name="Unavoidable Strike" desc="You can make an unarmed strike or use a natural  weapon against your foe as if delivering a touch attack." />
-    <feat type="Oriental Adventures page 66" name="Unbalancing Strike" desc="You can strike a humanoid opponent's joints  to knock him off balance." />
-    <feat type="Epic Level Handbook page 68" name="Uncanny Accuracy" desc="You can ignore anything less than total cover  or total concealment when using ranged weapons." />
-    <feat type="Savage Species page 40" name="Uncanny Scent" desc="You can pinpoint scents at a greater distance." />
-    <feat type="Expanded Psionics Handbook page 52" name="Unconditional Power" desc="Disabling conditions do not hold you back." />
-    <feat type="Eberron Campaign Setting page 61" name="Undead Empathy" desc="You are adept at communicating with and influencing  the undead." />
-    <feat type="Libris Mortis: The Book of the Dead page 31" name="Undead Leadership" desc="You gain the service of loyal undead followers." />
-    <feat type="Complete Divine page 90" name="Undead Mastery" desc="You can command a greater number of undead than  normal." />
-    <feat type="Epic Level Handbook page 68" name="Undead Mastery" desc="You can command a greater number of undead than  normal." />
-    <feat type="Races of the Wild page 152" name="Underfoot Combat" desc="You can enter the space that a foe at least  two size categories bigger than you occupies." />
-    <feat type="Races of Destiny page 155" name="Undying Fate" desc="You have pledged your unswerving obedience to  Wee Jas, and she in turn has granted you special insight into life and death." />
-    <feat type="Complete Divine page 90" name="Unholy Strike" desc="Your attacks deal great damage to good creatures." />
-    <feat type="Epic Level Handbook page 68" name="Unholy Strike" desc="Your attacks deal great damage to good creatures." />
-    <feat type="Libris Mortis: The Book of the Dead page 31" name="Unquenchable Flame of Life" desc="You are hardened to the attacks of the undead." />
-    <feat type="Expanded Psionics Handbook page 52" name="Up the Walls" desc="You can run on walls for brief distances." />
-    <feat type="Races of Destiny page 154" name="Urban Stealth" desc="You are particularly adept at moving quietly  and unnoticed through the city." />
-    <feat type="Eberron Campaign Setting page 61" name="Urban Tracking" desc="You can track the location of missing persons  or wanted individuals within communities." />
-    <feat type="Races of Destiny page 154" name="Urban Tracking" desc="You can track down the location of missing persons  or wanted individuals within communities." />
-    <feat type="Libris Mortis: The Book of the Dead page 31" name="Vampire Hunter" desc="Your knowledge of vampires has given you the  extraordinary ability to detect subtle signs of their presence and to resist  their dominating gaze ability." />
-    <feat type="City of Splendors: Waterdeep page 146" name="Veil of Cyric" desc="You have reconciled yourself to the unfortunate  truth that hard decisions and regrettable actions are necessary in the service  of your deity." />
-    <feat type="Eberron Campaign Setting page 62" name="Vermin Companion" desc="Instead of an animal companion, you have a vermin  creature as a companion." />
-    <feat type="Eberron Campaign Setting page 62" name="Vermin Shape" desc="You can use your wild shape ability to assume  vermin forms instead of animal forms." />
-    <feat type="Epic Level Handbook page 68" name="Vermin Wild Shape" desc="You can wild shape into vermin form." />
-    <feat type="Book of Vile Darkness page 50" name="Verminfriend" desc="Vermin regard the character better than they  would normally." />
-    <feat type="Complete Adventurer page 112" name="Versatile Performer" desc="You are skilled at many kinds of performances." />
-    <feat type="Heroes of Battle page 99" name="Veteran Knowledge" desc="You are capable of seeing potential battlefield  advantages where others cannot." />
-    <feat type="Champions of Ruin page 22" name="Via Negativa" desc="You can channel greater amounts of negative  energy into your inflict spells." />
-    <feat type="Savage Species page 40" name="Vicious Wound" desc="Damage you deal causes wounds that bleed excessively." />
-    <feat type="Book of Vile Darkness page 50" name="Vile Ki Strike" desc="The character can focus evil power into his  unarmed strike." />
-    <feat type="Book of Vile Darkness page 50" name="Vile Martial Strike" desc="The character can focus evil power in her weapon  blows." />
-    <feat type="Book of Vile Darkness page 50" name="Vile Natural Attack" desc="The character can focus evil power into his  natural attacks." />
-    <feat type="Book of Vile Darkness page 50" name="Violate Spell" desc="The character can transform one of his spells  into an evil spell, and the wounds the spell inflicts are tainted with the  foulest evil." />
-    <feat type="Book of Vile Darkness page 50" name="Violate Spell-Like Ability" desc="The creature's spell-like abilities are particularly  tainted with evil." />
-    <feat type="Savage Species page 40" name="Virulent Poison" desc="Your poison attack is more effective." />
-    <feat type="Epic Level Handbook page 68" name="Vorpal Strike" desc="Your unarmed strikes can behead your opponents." />
-    <feat type="Book of Exalted Deeds page 47" name="Vow of Abstinence" desc="You have taken a sacred vow to abstain from  alcoholic beverages, drugs, stimulants such as caffeine, and intoxication." />
-    <feat type="Book of Exalted Deeds page 47" name="Vow of Chastity" desc="You have taken a sacred vow to refrain from  marriage and sexual intercourse." />
-    <feat type="Book of Exalted Deeds page 47" name="Vow of Nonviolence" desc="You have taken a sacred vow to avoid violence  against humanoids." />
-    <feat type="Book of Exalted Deeds page 48" name="Vow of Obedience" desc="You have taken a sacred vow to live according  to the dictates of another, generally your superior in a religious order  or similar organization." />
-    <feat type="Book of Exalted Deeds page 48" name="Vow of Peace" desc="You have taken a sacred vow to abstain from  harming any living creature." />
-    <feat type="Book of Exalted Deeds page 48" name="Vow of Poverty" desc="You have taken a sacred vow to forswear material  possessions." />
-    <feat type="Book of Exalted Deeds page 48" name="Vow of Purity" desc="You have taken a sacred vow to avoid contact  with dead flesh." />
-    <feat type="UE page 45" name="Vremyonni Training" desc="You have had more than the typical amount of  training with the vremyonni, the Old Ones who research spells and  craft magic items for the Witches of Rashemen." />
-    <feat type="Eberron Campaign Setting page 62" name="Wand Mastery" desc="Wands are far more potent in your hands." />
-    <feat type="Complete Arcane page 84" name="Wandstrike" desc="You can channel the magical energy of a wand  through your melee attacks." />
-    <feat type="Eberron Campaign Setting page 62" name="Warden Initiate" desc="You have been trained in the ancient druidic  tradition of the Wardens of the Wood, a sect dedicated to protecting the  eastern plain and the great woods of the Eldeen Reaches." />
-    <feat type="Lords of Madness page 182" name="Warped Mind" desc="Your tainted form has altered the physical nature  of your brain, making you resistant to mental effects and more capable of  unleashing the power of your mind on others." />
-    <feat type="Oriental Adventures page 66" name="Warrior Instinct" desc="Your ancestor, Matsu Hitomi, was the most famous  female samurai of the early Empire." />
-    <feat type="Oriental Adventures page 66" name="Warrior Shugenja" desc="Your ancestor, Agasha Nodotai, was a shugenja  well versed in the code of bushido and the way of war." />
-    <feat type="Races of Faerun page 170" name="Water Adaptation" desc="You favor your aquatic elven parent and have  developed the ability to breathe and move about in water easily." />
-    <feat type="Stormwrack page 94" name="Water Adaptation" desc="You favor your aquatic elf parent and have developed  the ability to breathe and move about in water easily." />
-    <feat type="Planar Handbook page 42" name="Water Heritage" desc="You are descended from creatures native to the  Plane of Water." />
-    <feat type="Lords of Madness page 182" name="Waterspawn" desc="Your abnormal body and heritage has become more  pronounced. You have prominent fins and are supremely well adapted to the  icy deeps." />
-    <feat type="Complete Warrior page 106" name="Weakening Touch" desc="You can temporarily weaken an opponent with  your unarmed strike." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Weapon Finesse" desc="You are especially skilled at using weapons  that can benefit as much from Dexterity as from Strength." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Weapon Focus" desc="Choose one type of weapon. You can also choose  unarmed strike or grapple (or ray, if you are a spellcaster) as a weapon  for purposes of this feat. You are especially good with this weapon." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Axes)" desc="You understand how to use axes and axelike weapons." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Basic Weapons)" desc="You understand how to use a few basic weapons." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Bows)" desc="You understand how to use bows." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Claw Weapons)" desc="You understand how to use weapons strapped to  the hands." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Crossbows)" desc="You understand how to use crossbows." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Druid Weapons)" desc="You understand how to use weapons favored by  druids." />
-    <feat type="Unearthed Arcana page 95" name="Weapon Group (Exotic Double Weapon)" desc="You understand how to use the exotic double  weapons associated with the weapon groups that you have mastered." />
-    <feat type="Unearthed Arcana page 96" name="Weapon Group (Exotic Weapons)" desc="You understand how to use the exotic weapons  associated with the weapon groups that you have mastered." />
-    <feat type="Unearthed Arcana page 96" name="Weapon Group (Flails and Chains)" desc="You understand how to use flails and chain weapons." />
-    <feat type="Unearthed Arcana page 96" name="Weapon Group (Heavy Blades)" desc="You understand how to use large bladed weapons." />
-    <feat type="Unearthed Arcana page 96" name="Weapon Group (Light Blades)" desc="You understand how to use light bladed weapons." />
-    <feat type="Unearthed Arcana page 96" name="Weapon Group (Maces and Clubs)" desc="You understand how to use maces and clubs." />
-    <feat type="Unearthed Arcana page 97" name="Weapon Group (Monk Weapons)" desc="You understand how to use weapons normally favored  by monks." />
-    <feat type="Unearthed Arcana page 97" name="Weapon Group (Picks and Hammers)" desc="You understand how to use picks and hammers." />
-    <feat type="Unearthed Arcana page 97" name="Weapon Group (Polearms)" desc="You understand how to use polearms." />
-    <feat type="Unearthed Arcana page 97" name="Weapon Group (Slings and Thrown Weapons)" desc="You understand how to use slings and handheld  thrown weapons." />
-    <feat type="Unearthed Arcana page 97" name="Weapon Group (Spears and Lances)" desc="You understand how to use spears and javelins." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Weapon Specialization" desc="Choose one type of weapon for which you have  already selected the Weapon Focus feat. You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon." />
-    <feat type="Eberron Campaign Setting page 62" name="Whirling Steel Strike" desc="Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longsword." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Whirlwind Attack" desc="You can strike nearby opponents in an amazing,  spinning attack" />
-    <feat type="Draconomicon page 75" name="Whirlwind Tail Sweep" desc="You can sweep your tail in a circular arc." />
-    <feat type="Races of Destiny page 155" name="Whispered Secrets" desc="You revere the Maimed Lord and have devoted  your miserable, worthless life to learning but a few of the Whispered One's  secrets." />
-    <feat type="Races of Eberron page 112" name="White Scorpion Strike" desc="Your fists and feet sting like the dread white  scorpion and are particularly effective against undead." />
-    <feat type="Epic Level Handbook page 69" name="Widen Aura of Courage" desc="Your aura of courage is wider than normal." />
-    <feat type="Epic Level Handbook page 69" name="Widen Aura of Despair" desc="Your aura of despair is wider than normal." />
-    <feat type="Expanded Psionics Handbook page 52" name="Widen Power" desc="You can increase the area of your powers." />
-    <feat type="Deities and Demigods page 52" name="Widen Spell " desc="The deity can increase the area of its spells." />
-    <feat type="Magic of Faerun page 23" name="Widen Spell" desc="You can increase the area of your spells." />
-    <feat type="Player's Handbook v.3.5 page 102" name="Widen Spell" desc="You can increase the area of your spells." />
-    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Widen Spell" desc="You can increase the area of your spells." />
-    <feat type="Complete Warrior page 153" name="Wield Oversized Weapon" desc="You can use larger than normal weapons with  ease." />
-    <feat type="Lords of Madness page 182" name="Wild Talent" desc="Your mind wakes to a previously unrealized talent  for psionics." />
-    <feat type="Expanded Psionics Handbook page 52" name="Wild Talent" desc="Your mind wakes to a previously unrealized talent  for psionics." />
-    <feat type="Races of Eberron page 116" name="Wildhunt Elite" desc="Your shifter-enhanced instincts and senses allow  you to detect concealed and invisible creatures." />
-    <feat type="Book of Vile Darkness page 50" name="Willing Deformity" desc="Through scarification, self-mutilation, and  supplication to dark power, the character intentionally mars her own body." />
-    <feat type="Races of the Wild page 153" name="Winged Warrior" desc="You use your wings for more than just flying." />
-    <feat type="Monster Manual v.3.5 page 304" name="Wingover" desc="The creature can change direction quickly while  flying." />
-    <feat type="Monster Manual II page 18" name="Wingover" desc="The creature can change direction quickly while  flying." />
-    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Wingover" desc="You change direction quickly once per round  while airborne." />
-    <feat type="Stormwrack page 94" name="Wingsinger" desc="You can use song or a wind instrument to compel  the winds to obey you." />
-    <feat type="Draconomicon page 75" name="Wingstorm" desc="You can flatten targets with blasts of air from  your wings." />
-    <feat type="Savage Species page 40" name="Wingstorm" desc="You can flatten targets with blasts of air from  your wings." />
-    <feat type="Frostburn page 50" name="Winter's Champion" desc="Your paladin spell list is enhanced." />
-    <feat type="Savage Species page 40" name="Winter's Child" desc="You are adapted to a cold environment." />
-    <feat type="Frostburn page 50" name="Winter's Mount" desc="Your special mount is native to the frostfell." />
-    <feat type="Underdark page 27" name="Wisdom Breeds Caution" desc="Not getting into a dangerous situation is generally  the wisest course, but if danger is unavoidable, you're prepared. You rely  more on caution and forethought than you do on physical prowess." />
-    <feat type="Ghostwalk page 39" name="Wise to Your Ways" desc="You are particularly resistant to the unusual  attacks of your favored enemy." />
-    <feat type="Ghostwalk page 39" name="Witchlight" desc="You can create witchlight, a harmless faint  light, on yourself or an object." />
-    <feat type="UE page 45" name="Wolf Berserker" desc="You have studied the fighting style of the wolf  and employ its tactics in combat." />
-    <feat type="Races of the Wild page 153" name="Wolfpack" desc="You can gain an extra advantage when you and  your allies can gang up on a foe." />
-    <feat type="Complete Divine page 86" name="Wolverine's Rage" desc="You can fly into a berserk rage when injured." />
-    <feat type="Races of the Wild page 154" name="Woodland Archer" desc="You have honed your archery ability in the wilds  of the forest." />
-    <feat type="Shining South page 21" name="Woodwise" desc="You are trained in fighting in woodlands and  know how to use the terrain to best advantage." />
-    <feat type="UE page 45" name="Woodwise" desc="You are trained in fighting in woodlands and  know how to use the terrain to best advantage." />
-    <feat type="Book of Exalted Deeds page 48" name="Words of Creation" desc="You have learned a few of the words that were  spoken to create the world." />
-    <feat type="Expanded Psionics Handbook page 52" name="Wounding Attack" desc="Your vicious attacks wound your foe." />
-    <feat type="Lost Empires of Faerun page 9" name="Wounding Spell" desc="Because you have studied the cruel arts of the  Athalantan magelords of old, you know how to cast spells that cause terrible,  bleeding wounds." />
-    <feat type="Races of the Wild page 152" name="Yondalla's Sense" desc="You display a shrewd perception of danger. Other  halflings say the blessing of Yondalla is upon you." />
-    <feat type="Complete Warrior page 106" name="Zen Archery" desc="Your intuition guides your hand when you use  a ranged weapon." />
-    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Zen Archery" desc="Your intuition guides your hand when you use  a ranged weapon." />
-    <feat type="Complete Divine page 90" name="Zone of Animation" desc="You can channel negative energy to animate  undead." />
-    <feat type="Epic Level Handbook page 69" name="Zone of Animation" desc="You can channel negative energy to animate  undead." />
-    <feat type="Champions of Valor page 28" name="Broken One's Sacrifice" desc="Your dedication to Ilmater's philosophy has given you the power to take attacks directed at others." />
-    <feat type="Champions of Valor page 28" name="Carmendine Monk" desc="You have learned that study is just as important as insight to finding enlightenment." />
-    <feat type="Champions of Valor page 28" name="Defender of the Homeland" desc="You have sworn a sacred oath to protect your country from evil." />
-    <feat type="Champions of Valor page 28" name="Detect Shadow Weave User" desc="You can determine if a magic item or spellcaster is using the Weave or the Shadow Weave." />
-    <feat type="Champions of Valor page 29" name="Druuth Slayer" desc="You have studied the lore of the druuth (a cabal of doppelgangers led by a mind flayer) and know how to recognize and resist their powers." />
-    <feat type="Champions of Valor page 29" name="Duerran Metaform Training" desc="Your studies have shown you the way to link your psionics and your enlarge person spell-like ability." />
-    <feat type="Champions of Valor page 29" name="Duerran Stealth Training" desc="Your studies have shown you the way to link your psionics and your invisibility spell-like ability." />
-    <feat type="Champions of Valor page 29" name="From Smite to Song" desc="You can channel your destructive holy energy into powerful song magic for the glory of Milil." />
-    <feat type="Champions of Valor page 30" name="Initiate of Anhur" desc="You have been initiated into the greatest secrets of Anhur's church." />
-    <feat type="Champions of Valor page 30" name="Initiate of Arvoreen" desc="You have been initiated into the greatest secrets of Arvoreen's church." />
-    <feat type="Champions of Valor page 30" name="Initiate of Baravar Cloakshadow" desc="You have been initiated into the greatest secrets of Baravar Cloakshadow's church." />
-    <feat type="Champions of Valor page 30" name="Initiate of Eilistraee" desc="You have been initiated into the greatest secrets of Eilistraee's church." />
-    <feat type="Champions of Valor page 30" name="Initiate of the Holy Realm" desc="You have been initiated into the greatest secrets of one of the faiths of the Holy Realm (Chauntea, Helm, Lathander, Selune, or Sune)." />
-    <feat type="Champions of Valor page 30" name="Initiate of Horus-Re" desc="You have been initiated into the greatest secrets of Horus-Re's church." />
-    <feat type="Champions of Valor page 31" name="Initiate of Milil" desc="You have been initiated into the greatest secrets of Milil's church." />
-    <feat type="Champions of Valor page 31" name="Initiate of Nobanion" desc="You have been initiated into the greatest secrets of Nobanion's church." />
-    <feat type="Champions of Valor page 31" name="Initiate of Torm" desc="You have been initiated into the greatest secrets of Torm's church." />
-    <feat type="Champions of Valor page 32" name="Initiate of Tymora" desc="You have been initiated into the greatest secrets of Tymora's church." />
-    <feat type="Champions of Valor page 32" name="Knight of the Red Falcon" desc="Your military order has a legendary ability to survive against overwhelming odds." />
-    <feat type="Champions of Valor page 32" name="Knight of the Risen Scepter" desc="Your military order is dedicated to fighting Set and his minions, and even death cannot stop you from this task." />
-    <feat type="Champions of Valor page 32" name="Knight of Tyr's Holy Judgment" desc="You can draw upon the power of Tyr to sense and understand the law and to locate devils." />
-    <feat type="Champions of Valor page 33" name="Knight ot Tyr's Merciful Sword" desc="You can draw upon the power of Tyr to sense where you are needed." />
-    <feat type="Champions of Valor page 33" name="Mark of the Triad" desc="You have been initiated into the greatest secrets of the Triad, the godly triumvirate of Tyr, Torm, and Ilmater." />
-    <feat type="Champions of Valor page 33" name="Overcome Shadow Weave" desc="You understand the strengths and weaknesses of the Shadow Weave and are more resistant to its tricks." />
-    <feat type="Champions of Valor page 33" name="Paladin of the Noble Heart" desc="You are tasked by Ilmater to eliminate cruelty from the world, particularly that of Loviatar." />
-    <feat type="Champions of Valor page 33" name="Silver Blood" desc="You have magically or alchemically imbued your flesh and blood with silver, making you resistant to lycanthrope attacks." />
-    <feat type="Champions of Valor page 33" name="Silver Fang" desc="By following a ritual taught by the Fangshields, your natural attacks are suffused with the power of silver and are fully effective against lycanthropes." />
-    <feat type="Champions of Valor page 33" name="Smiting Power" desc="You use your smite ability to augment other combat maneuvers." />
-    <feat type="Champions of Valor page 34" name="Sword of the Arcane Order" desc="Members of your military order have a special connection with arcane magic." />
-    <feat type="Champions of Valor page 34" name="Sun Soul Monk" desc="Your training with this monk order gives you special powers depending on which sect you follow." />
-    <feat type="Heroes of Horror page 119" name="Archivist of Nature" desc="In addition to your studies of the darkness, you have spent time studying giants and fey." />
-    <feat type="Heroes of Horror page 119" name="Bane Magic" desc="Your spells deal extra damage to a particular type of creature." />
-    <feat type="Heroes of Horror page 120" name="Blood Calls to Blood" desc="Exploring the latent potential in your blood due to your fiendish descent, you learn how to better adapt to the mystical attacks of your forebears." />
-    <feat type="Heroes of Horror page 120" name="Corrupt Arcana" desc="You can prepare and cast corrupt spells." />
-    <feat type="Heroes of Horror page 120" name="Corrupt Spell Focus" desc="All spells you cast that have a corrupt component (such as call forth the beast, master's lament, or chain of sorrow) are more potent than normal." />
-    <feat type="Heroes of Horror page 120" name="Debilitating Spell" desc="By calling upon the taint within, you add a malign power to your offensive spells." />
-    <feat type="Heroes of Horror page 120" name="Debilitating Strike" desc="By calling upon the taint within, you add a malign power to your melee attacks." />
-    <feat type="Heroes of Horror page 121" name="Deformity (Skin)" desc="Due to a regimen of deliberate abuse, you have roughened your skin until it has grown as coarse and tough as rhino hide." />
-    <feat type="Heroes of Horror page 121" name="Deformity (Tall)" desc="Through long and painful stints on the rack, bolstered by the surgical implantation of various splints and struts, you have stretched yourself to well over 7 feet in height." />
-    <feat type="Heroes of Horror page 121" name="Deformity (Teeth)" desc="By filing your teeth to points and brutalizing your gums, you gain a hideous smile full of razor-sharp teeth that enable you to make a grisly bite attack." />
-    <feat type="Heroes of Horror page 121" name="Deformity (Tongue)" desc="Through protracted self-mutilation that involves frequently piercing your tongue and dipping it in acid, your tongue becomes hideous to behold but oddly sensitive to the environment." />
-    <feat type="Heroes of Horror page 121" name="Disease Immunity" desc="Whether due to prolonged exposure or natural hardiness, you have grown immune to some diseases and resistant to all others." />
-    <feat type="Heroes of Horror page 122" name="Draconic Archivist" desc="In addition to your studies of the darkness, you have spent time studying dragons and constructs." />
-    <feat type="Heroes of Horror page 122" name="Dreamtelling" desc="You can use your Knowledge (the planes) skill to interpret your dreams or the dreams of others, thus gleaning useful information and insights." />
-    <feat type="Heroes of Horror page 122" name="Eldritch Corruption" desc="You can add power to your spells or spell-like abilities at the expense of your companions' health." />
-    <feat type="Heroes of Horror page 122" name="Font of Life" desc="Your life-force is strong enough to make you highly resistant to all forms of energy drain and level loss." />
-    <feat type="Heroes of Horror page 123" name="Forbidden Lore" desc="You gain hideous insights into subjects not meant to be understood by mortal minds." />
-    <feat type="Heroes of Horror page 123" name="Greater Corrupt Spell Focus" desc="Your corrupt spells are now even more potent than they were before." />
-    <feat type="Heroes of Horror page 123" name="Haunting Melody" desc="You can use your music to inspire fear." />
-    <feat type="Heroes of Horror page 123" name="Improved Oneiromancy" desc="With the Improved Oneiromancy feat, you gain additional dream-related spellcasting abilities." />
-    <feat type="Heroes of Horror page 123" name="Lunatic Insight" desc="Your madness grants you insight and knowledge." />
-    <feat type="Heroes of Horror page 123" name="Mad Faith" desc="Your depravity has twisted the connection between you and your patron deity. You suffer flashes of insight interrupted by flashes of madness." />
-    <feat type="Heroes of Horror page 123" name="Master of Knowledge" desc="You have spent most of your life in study, and it comes naturally to you now." />
-    <feat type="Heroes of Horror page 123" name="Oneiromancy" desc="You gain a number of abilities and advantages related to dreams and magic." />
-    <feat type="Heroes of Horror page 124" name="Pure Soul" desc="Your faith or purity of mind overrides the evils within you. You are immune to taint." />
-    <feat type="Heroes of Horror page 124" name="Spirit Sense" desc="You can see and communicate with the souls of the recently departed." />
-    <feat type="Heroes of Horror page 124" name="Surge of Malevolence" desc="You empower yourself by drawing on the taint within." />
-    <feat type="Heroes of Horror page 124" name="Tainted Fury" desc="You can channel your physical corruption into a state of fury." />
-    <feat type="Heroes of Horror page 124" name="Touch of Taint" desc="One of your attack forms that normally deals ability damage, ability drain, or energy drain can also deal corruption or depravity." />
-    <feat type="Heroes of Horror page 124" name="Unnatural Will" desc="You have learned to focus your force of personality and inner strength to stand against fearful circumstances." />
-    <feat type="Heroes of Horror page 125" name="Willing Deformity" desc="Through scarification, self-mutilation, or supplication to dark powers, you intentionally mar your own body." />
-    <feat type="Magic of Eberron page 46" name="Augment Elemental" desc="Your knowledge of planar magic allows you to imbue your summoned elementals with extraordinary combat prowess and durability." />
-    <feat type="Magic of Eberron page 46" name="Cull Wand Essence" desc="You can focus the raw magical energy of a wand or staff into a beam of energy." />
-    <feat type="Magic of Eberron page 46" name="Deathless Fleshgrafter" desc="You can grow and graft the tissues and body parts of deathless creatures onto others, granting the recipients of your grafts new, potent abilities." />
-    <feat type="Magic of Eberron page 46" name="Dorje Mastery" desc="Psionic dorjes are more potent in your hands." />
-    <feat type="Magic of Eberron page 46" name="Dragon Prophesier" desc="Like the dragons, you seek to untangle and perceive the record of everything that has been, and more important, what will be." />
-    <feat type="Magic of Eberron page 46" name="Dragon Totem Focus" desc="Your focus allows you to enjoy the benefit of a dragon totem ritual longer than normal." />
-    <feat type="Magic of Eberron page 47" name="Dragon Totem Lorekeeper" desc="You have been instructed in how to perform the rituals of dragon totem magic." />
-    <feat type="Magic of Eberron page 47" name="Dragon Totem Scion" desc="You are naturally attuned to the magic of the dragon totem ritual." />
-    <feat type="Magic of Eberron page 47" name="Eldeen Plantgrafter" desc="You can create and apply plant grafts onto others, granting the recipients of your grafts new, potent abilities." />
-    <feat type="Magic of Eberron page 47" name="Elemental Grafter" desc="You can create and apply elemental grafts onto others, granting the recipients of your grafts new, potent abilities." />
-    <feat type="Magic of Eberron page 47" name="Elemental Helmsman" desc="You are more capable of piloting an elemental vessel." />
-    <feat type="Magic of Eberron page 47" name="Elemental Smite" desc="You can channel the energy associated with one of your elemental grafts into your melee attacks." />
-    <feat type="Magic of Eberron page 47" name="Etch Schema" desc="You can create a minor schema." />
-    <feat type="Magic of Eberron page 48" name="Heroic Companion" desc="Your luck extends to your companion creature." />
-    <feat type="Magic of Eberron page 48" name="Heroic Focus" desc="Despite the dangers all around, you can quickly regain your psionic focus." />
-    <feat type="Magic of Eberron page 49" name="Improved Homunculus" desc="You are adept at improving and modifying your homunculus. Whenever you advance your homunculus's Hit Dice, you can also imbue it with special supernatural abilities." />
-    <feat type="Magic of Eberron page 50" name="Prophecy's Artifex" desc="Your perception of the draconic Prophecy gives you insights that allow you to transcend the normal limits of magic item use." />
-    <feat type="Magic of Eberron page 50" name="Prophecy's Explorer" desc="Your perception of the draconic Prophecy imbues you with a preternatural sense of your surroundings, enabling you to move easily and quickly through dangerous areas." />
-    <feat type="Magic of Eberron page 50" name="Prophecy's Hero" desc="Your perception of the draconic Prophecy charges you with the will to prevail, providing you with the opportunity to see a way to victory even when the odds are stacked against you." />
-    <feat type="Magic of Eberron page 50" name="Prophecy's Mind" desc="You meld your perception of the draconic Prophecy with a mental focus that provides you with momentary warning when death is at hand." />
-    <feat type="Magic of Eberron page 50" name="Prophecy's Shaper" desc="Your perception of the draconic Prophecy is such that you can disrupt reality and make your spells more powerful than reality would normally allow." />
-    <feat type="Magic of Eberron page 50" name="Prophecy's Shepherd" desc="Your perception of the draconic Prophecy is such that you can alter the natural flow of the world by connecting your knowledge of life-force with the world around you." />
-    <feat type="Magic of Eberron page 51" name="Prophecy's Slayer" desc="Your perception of the draconic Prophecy includes a keen appreciation of life. You recognize how fragile and tenuous life truly is when balanced against your lethal foreknowledge." />
-    <feat type="Magic of Eberron page 51" name="Psiforged Body" desc="As a warforged, your body can be crafted using trace amounts of psionically resonant deep crystal, providing you with increased psionic power and the ability to store psionic energy in your body. If you take this feat, you will often be referred to as a psiforged." />
-    <feat type="Magic of Eberron page 51" name="Psionic Luck" desc="Your psionic focus improves your luck." />
-    <feat type="Magic of Eberron page 51" name="Psychic Rush" desc="You can occasionally manifest a psionic power with less effort." />
-    <feat type="Magic of Eberron page 51" name="Quicken Dragonmark" desc="You can use your dragonmark abilities more quickly." />
-    <feat type="Magic of Eberron page 51" name="Rapid Infusion" desc="You can imbue an item with an infusion more quickly than normal." />
-    <feat type="Magic of Eberron page 51" name="Symbiont Mastery" desc="You have stronger control over an attached symbiont than regular creatures, and you gain vitality for each symbiont attached to you." />
-    <feat type="Magic of Eberron page 51" name="Wand Surge" desc="You can squeeze more magic out of charged items." />
-    <feat type="Magic of Incarnum page 34" name="Azure Enmity" desc="You can channel incarnum to enhance your ability to deal damage to your favored enemies." />
-    <feat type="Magic of Incarnum page 34" name="Azure Talent" desc="The soul energy of incarnum increases your mental capacity." />
-    <feat type="Magic of Incarnum page 34" name="Azure Touch" desc="You can channel incarnum to enhance your abilit to heal." />
-    <feat type="Magic of Incarnum page 35" name="Azure Toughness" desc="You can use incarnumto boost your physical vigor." />
-    <feat type="Magic of Incarnum page 35" name="Azure Turning" desc="You can blast ndead with incarnum-purified positive energy." />
-    <feat type="Magic of Incarnum page 35" name="Azure Wild Shape" desc="You can channel incarnum to enhance your combat prowess while wild shaped." />
-    <feat type="Magic of Incarnum page 35" name="Bonus Essentia" desc="You are better able to harness your personal store of incarnum." />
-    <feat type="Magic of Incarnum page 35" name="Cerulean Fortitude" desc="You can use incarnum to boost your ability to resist effects that would adversely affect your health." />
-    <feat type="Magic of Incarnum page 35" name="Cerulean Reflexes" desc="You can use incarnum to boost your ability to avoid harm." />
-    <feat type="Magic of Incarnum page 35" name="Cerulean Will" desc="You can use incarnum to boost your willpower." />
-    <feat type="Magic of Incarnum page 35" name="Cobalt Charge" desc="You can channel incarnum to deal devastating strikes when charging." />
-    <feat type="Magic of Incarnum page 35" name="Cobalt Critical" desc="You can focus your spirit into your melee weapon attacks, dealing more damage with successful critical strikes." />
-    <feat type="Magic of Incarnum page 35" name="Cobalt Expertise" desc="By channeling the soul energy of weapon masters past, present, and future, you become more adept at maneuvers of skill and expertise." />
-    <feat type="Magic of Incarnum page 37" name="Cobalt Power" desc="By channeling the soul energy of brutal warriors past, present, and future, you become more capable of overcoming your enemies through sheer strength." />
-    <feat type="Magic of Incarnum page 37" name="Cobalt Precision" desc="You can focus your soul energy into your ranged attacks, dealing more damage with successful critical hits." />
-    <feat type="Magic of Incarnum page 37" name="Cobalt Rage" desc="You can channel incarnum to enhance your rage. When you do so, your eyes turn deep blue in color." />
-    <feat type="Magic of Incarnum page 37" name="Divine Soultouch" desc="You can channel positive or negative energy to imbue yourself with incarnum." />
-    <feat type="Magic of Incarnum page 38" name="Double Chakra" desc="One of your chakras becomes capable of holding more incarnum than it is normally capable of containing." />
-    <feat type="Magic of Incarnum page 38" name="Expanded Soulmeld Capacity" desc="Your soul's tie to incarnum allows you to maintain more essentia in a single soulmeld." />
-    <feat type="Magic of Incarnum page 38" name="Healing Soul" desc="You can draw upon the soul energy of incarnum to heal your wounds." />
-    <feat type="Magic of Incarnum page 38" name="Heart of Incarnum" desc="You tap into the power of your heart chakra to gain resilience." />
-    <feat type="Magic of Incarnum page 38" name="Improved Essentia Capacity" desc="Your capability of investing essentia improves." />
-    <feat type="Magic of Incarnum page 38" name="Incarnum-Fortified Body" desc="The incarnum within you strengthens your body's toughness, enabling you to withstand greater injury." />
-    <feat type="Magic of Incarnum page 38" name="Incarnum Resistance" desc="Your body, untainted by incarnum, is not easily affected by the power of soul energy." />
-    <feat type="Magic of Incarnum page 38" name="Incarnum Spellshaping" desc="You gain the ability to invest incarnum into your spellcasting." />
-    <feat type="Magic of Incarnum page 38" name="Indigo Strike" desc="You can channel incarnum to enhance your ability to deal damage with your skirmish attack, sneak attack or sudden strike." />
-    <feat type="Magic of Incarnum page 38" name="Midnight Augmentation" desc="You can augment a psionic power with your personal soul energy rather than mental energy." />
-    <feat type="Magic of Incarnum page 39" name="Midnight Dodge" desc="You can channel incarnum to enhance your ability to avoid attacks against you." />
-    <feat type="Magic of Incarnum page 39" name="Midnight Metamagic" desc="You can channel incarnum to alter your prepared spells." />
-    <feat type="Magic of Incarnum page 39" name="Necrocarnum Acolyte" desc="You have experienced the power of necrocarnum, a dark and twisted form of incarnum." />
-    <feat type="Magic of Incarnum page 39" name="Open Greater Chakra" desc="You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra." />
-    <feat type="Magic of Incarnum page 39" name="Open Least Chakra" desc="You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra." />
-    <feat type="Magic of Incarnum page 40" name="Open Lesser Chakra" desc="You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra." />
-    <feat type="Magic of Incarnum page 40" name="Psycarnum Blade" desc="You can forge your mind blade from a mixture of mental and soul energy, enabling you to deal devastating strikes with the weapon." />
-    <feat type="Magic of Incarnum page 40" name="Psycarnum Crystal" desc="Your psycrystal taps into the natural ebb and flow of incarnum, turning it into a small reservoir of soul energy." />
-    <feat type="Magic of Incarnum page 40" name="Psycarnum Infusion" desc="You transform your mental focus into a brief burst of soul energy." />
-    <feat type="Magic of Incarnum page 40" name="Sapphire Fist" desc="You can channel incarnum to enhance your ability to deliver stunning attacks." />
-    <feat type="Magic of Incarnum page 40" name="Sapphire Smite" desc="You can channel incarnum to enhance your ability to deal mighty blows." />
-    <feat type="Magic of Incarnum page 40" name="Sapphire Sprint" desc="Drawing on the soul energy of great runners of history, you infuse your body with incarnum to speed your steps." />
-    <feat type="Magic of Incarnum page 40" name="Shape Soulmeld" desc="You gain the ability to shape a single soulmeld." />
-    <feat type="Magic of Incarnum page 41" name="Share Soulmeld" desc="You can share a soulmeld with an ally with which you have a special bond." />
-    <feat type="Magic of Incarnum page 41" name="Soulsight" desc="You can attune your soul to sense living creatures near you." />
-    <feat type="Magic of Incarnum page 41" name="Soultouched Spellcasting" desc="By fusing your spells with incarnum, they become more capable of overcoming enemy magic and spell resistance." />
-    <feat type="Magic of Incarnum page 41" name="Split Chakra" desc="One of your chakras becomes capable of holding both a bound soulmeld and a magic item." />
-    <feat type="Magic of Incarnum page 41" name="Undead Meldshaper" desc="Despite having no soul of your own, you maintain the ability to channel incarnum through force of will alone." />
-    <feat type="Player's Guide to Eberron page 20" name="Aereni Focus" desc="From childhood you have studied one particular path, and these decades of devotion result in remarkable skill." />
-    <feat type="Player's Guide to Eberron page 20" name="Aerenal Arcanist" desc="Your family has studied wizardry for thousands of years." />
-    <feat type="Player's Guide to Eberron page 20" name="Aerenal Half-Life" desc="The Priests of Transition have guided you through strange rituals that left you poised between the world of the living and the dead." />
-    <feat type="Player's Guide to Eberron page 25" name="Perfect Reflection" desc="You are particularly skilled at mimicking the forms and mannerisms of others." />
-    <feat type="Player's Guide to Eberron page 35" name="Touch of Captivation" desc="You are sakah, and your fiendish gift allows you to captivate people around you." />
-    <feat type="Player's Guide to Eberron page 35" name="Touch of Deception" desc="You are sakah, and your fiend gift allows you to alter your appearance and trick others." />
-    <feat type="Player's Guide to Eberron page 35" name="Touch of Summoning" desc="You are sakah, and your fiendish gift allows you to summon fell creatures to do your bidding." />
-    <feat type="Player's Guide to Eberron page 36" name="Binding Brand" desc="You carry the brand of the binding flame, marking you as a warrior of the Ghaash'kala clans." />
-    <feat type="Player's Guide to Eberron page 48" name="Dragon's Insight" desc="You can call on the power of your dragonmark to enhance your natural abilities." />
-    <feat type="Player's Guide to Eberron page 48" name="Shield of Deneith" desc="You can channel the power of your Deneith dragonmark to defend yourself in battle." />
-    <feat type="Player's Guide to Eberron page 48" name="Swiftness of Orien" desc="You can draw on the power of your Mark of Passage to temporarily enhance your speed or the speed of your mount." />
-    <feat type="Player's Guide to Eberron page 49" name="Aberrant Dragonmark Gift" desc="Your aberrant dragonmark is especially potent." />
-    <feat type="Player's Guide to Eberron page 49" name="Aberrant Dragonmark Mystery" desc="You can use the power of your aberrant mark to enhance your magical abilities." />
-    <feat type="Player's Guide to Eberron page 49" name="Aberrant Dragonmark Vigor" desc="You can channel the energy of your aberrant mark to enhance your health." />
-    <feat type="Player's Guide to Eberron page 60" name="Ritual of Arcane Opposition" desc="You have been inured against the effects of arcane magic by a ritual of the Ashbound set." />
-    <feat type="Player's Guide to Eberron page 60" name="Ritual of Blight's Embrace" desc="You have been warded from the effects of poison and disease by a ritual of the Children of Winter, solidifying your bond with vermin." />
-    <feat type="Player's Guide to Eberron page 60" name="Ritual of the Timeless Soul" desc="You have been blessed by the faerie lords of Thelanis in a ritual of the Greensinger sect, and you temporarily slip from time's grasp." />
-    <feat type="Player's Guide to Eberron page 60" name="Ritual of the Woodland Bond" desc="You have formed a bond with the growth of the woods through a ritual of the Wardens of the Wood." />
-    <feat type="Player's Guide to Eberron page 75" name="Friends of the Tribes" desc="You are deeply familiar with the tribes of the Talenta Plains." />
-    <feat type="Player's Guide to Eberron page 75" name="Talenta Dinosaur Bond" desc="You have undergone grueling training on the dinosaur back and are skilled in the halfling techniques of fighting while mounted." />
-    <feat type="Player's Guide to Eberron page 75" name="Talenta Drifter" desc="Your extensive travels on the Talenta Plains give you an advantage while in that region." />
-    <feat type="Player's Guide to Eberron page 77" name="Galifaran Scholar" desc="You have made an exhaustive study of the history of Galifar, from the earliest roots of the Five Nations, through the formation of the united Kingdom of Galifar, and on to the Last War and the dissolution of the kingdom." />
-    <feat type="Player's Guide to Eberron page 83" name="Du'ulora Ancestor" desc="The tsucora are the most common of the quori, but they are not the only spirits in Dal Quor." />
-    <feat type="Player's Guide to Eberron page 83" name="Hashalaq Ancestor" desc="The hashalaq quori essence within you allows you to sense the emotions of others." />
-    <feat type="Player's Guide to Eberron page 86" name="Aberration Banemagic" desc="You can cast spells that do extra damage to aberrations." />
-    <feat type="Player's Guide to Eberron page 86" name="Indomitable Discipline" desc="Your strict mental discipline allows you to resist attempts to manipulate your thoughts." />
-    <feat type="Player's Guide to Eberron page 86" name="Unnatural Enemy" desc="You have been trained in the ways of aberrations, and you know how to recognize them and spot their weaknesses." />
-    <feat type="Player's Guide to Eberron page 109" name="Sudden Willow Strike" desc="Your monastic training allows great precision with your quarterstaff." />
-    <feat type="Player's Guide to Eberron page 119" name="Child of the Swamps" desc="You can find food and shelter in the deep swamps, and you can move more freely through the difficult terrain." />
-    <feat type="Player's Guide to Eberron page 122" name="Battlebred" desc="Due to traumatic experiences in past battles, the plane of Shavarath with its endless war seems never far from you." />
-    <feat type="Player's Guide to Eberron page 122" name="Chosen of the Deathless" desc="You carry with you an intimate familiarity with the positive energy that suffuses the City of the Dead." />
-    <feat type="Player's Guide to Eberron page 122" name="Manifest Druid" desc="You have a familiarity with the three manifest zones of the Eldeen Reaches and the powers of the planes to which they are linked." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of the Azure Sky" desc="You have learned to calculate the precise location of Syrania at any given time, and to use that knowledge to enhance spells you cast to grant flight." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of the Battleground" desc="You have learned to calculate the precise location of Shavarath at any given time, and to use that knowledge to enhance spells of battle that you cast." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of Chaos and Order" desc="You have learned to calculate the precise locations of Daanvi and Kythri at any given time, and to use that knowledge to imbue your spells with unusual regularity or strinking unpredictability -- or both." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of Day and Night" desc="You have learned to calculate the precise locations of Irian and Mabar at any given time, and to use that knowledge to enhance your manipulation of positive and negative energy." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of the Dead" desc="You have learned to calculate the precise location of Dolurrh at any given time, and to use that knowledge to capture the souls of creatures slain with your death spells." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of Dreams" desc="By physically exploring the realm of Dal Quor, you have learned to instill your spells with the stuff of dreams . . . and nightmares." />
-    <feat type="Player's Guide to Eberron page 125" name="Mastery of Faerie Enchantment" desc="You have learned to calculate the precise location of Thelanis at any given time, and to use that knowledge to improve your ability to control the minds of other creatures." />
-    <feat type="Player's Guide to Eberron page 126" name="Mastery of Ice and Fire" desc="You have learned to caclulate the precies locations of Fernia and Risia at any given time, and to use that knowledge to enhance cold and fire spells that you use." />
-    <feat type="Player's Guide to Eberron page 126" name="Mastery of Madness" desc="You have learned to reach magically to the ever-distant plane of Xoriat and draw some element of its madness into the world -- but these techniques come with some risk." />
-    <feat type="Player's Guide to Eberron page 126" name="Mastery of the Mists" desc="By learning of the intricate relationship between the Ethereal Plane and the Material Plane, you gain the ability to see and sometimes reach through the barrier between these two planes." />
-    <feat type="Player's Guide to Eberron page 126" name="Mastery of the Silver Void" desc="You have gained a deeper understanding of the Astral Plane and its relationship to the other planes of the cosmos. You can use that knowledge to more quickly access that plane." />
-    <feat type="Player's Guide to Eberron page 126" name="Mastery of Twilight Denizens" desc="You have learned to calculate the precise location of Lamannia at any given time, and to use that knowledge to summon more powerful creatures from that plane." />
-    <feat type="Player's Guide to Eberron page 126" name="Mastery of Twisted Shadow" desc="You gain the ability to reach into the Plane of Shadow when casting an illusion, concealing yourself in the raw shadowstuff drawn forth." />
-    <feat type="Player's Guide to Eberron page 135" name="Shifter Acrobatics" desc="Your heritage makes you agile and light-footed." />
-    <feat type="Player's Guide to Eberron page 135" name="Shifter Magnetism" desc="Your heritage gives you a strong animal presence." />
-    <feat type="Player's Guide to Eberron page 135" name="Shifter Stealth" desc="You can call upon your bestial heritage to increase your stealth." />
-    <feat type="Player's Guide to Eberron page 141" name="Bladebearer of the Valenar" desc="You have trained extensively with scimitars, including the Valenar double scimitar. You are adept at striking from horseback with the curved blades of the Valenar." />
-    <feat type="Player's Guide to Eberron page 141" name="Shield of Blades" desc="As a master of the double scimitar, you can weave a web of steel to protect yourself from attack." />
-    <feat type="Player's Guide to Eberron page 141" name="Spirit of the Stallion" desc="Your patron ancestor was a legendary cavalry soldier, and her spirit guides you and your mount." />
-    <feat type="Player's Guide to Eberron page 141" name="Valenar Trample" desc="You are trained in Valenar cavalry techniques emphasizing trampling your opponents into the ground." />
-    <feat type="Player's Guide to Eberron page 151" name="Shocking Fist" desc="Your slam attack can deal a shock." />
-    <feat type="Player's Guide to Eberron page 151" name="Overload Metabolism" desc="You can heal damage at a cost to your other physical attributes." />
-    <feat type="Power of Faerun page 46" name="Heretic of the Faith" desc="You stray significantly from the teachings of your faith." />
-    <feat type="Power of Faerun page 49" name="Prophet of the Divine" desc="Your communications with the divine manifest in a public fashion." />
-    <feat type="Power of Faerun page 53" name="Bane of Infidels" desc="In a church locked in eternal conflict with followers of another faith, you have learned to fight effectively against the infidels. You know their ways and how to beat them." />
-    <feat type="Power of Faerun page 58" name="Initiate of Amaunator" desc="You have been initiated into the greatest secrets of Amaunator's faith." />
-    <feat type="Power of Faerun page 158" name="Rulership" desc="You are a ruler of an economic, frontier, governmental, military, religious, transport, or other community." />
-    <feat type="Races of the Dragon page 98" name="Accelerate Metamagic" desc="You can apply a selected metamagic feat to your spells more quickly than normal." />
-    <feat type="Races of the Dragon page 98" name="Dragon Breath" desc="You can use your breath weapon as often as a normal dragon." />
-    <feat type="Races of the Dragon page 98" name="Dragon Tail" desc="Your draconic ancestry manifests as a muscular tail you can use in combat." />
-    <feat type="Races of the Dragon page 98" name="Dragon Trainer" desc="Your draconic nature gives you special insight into training dragons and draconic creatures." />
-    <feat type="Races of the Dragon page 100" name="Dragon Wings" desc="Your draconic ancestry manifests as a pair of wings that aid your jumps and allow you to glide." />
-    <feat type="Races of the Dragon page 100" name="Dragonwrought" desc="You were born a dragonwrought kobold, proof of your race's innate connection to dragons." />
-    <feat type="Races of the Dragon page 100" name="Extraordinary Trapsmith" desc="You are an expert at constructing mechanical traps." />
-    <feat type="Races of the Dragon page 100" name="Heavyweight Wings" desc="Your superior strength allows you to fly while heavily burdened." />
-    <feat type="Races of the Dragon page 100" name="Improved Dragon Wings" desc="Your draconic wings now grant you flight." />
-    <feat type="Races of the Dragon page 101" name="Kobold Endurance" desc="Thanks to your race's determination, you are capable of amazing feats of strength and stamina." />
-    <feat type="Races of the Dragon page 101" name="Kobold Foe Strike" desc="You are more effective in combat against your racial enemies." />
-    <feat type="Races of the Dragon page 101" name="Practical Metamagic" desc="You can apply a selected metamagic feat to your spells more easily." />
-    <feat type="Races of the Dragon page 101" name="Reinforced Wings" desc="You have strengthened the muscles of your wings." />
-    <feat type="Races of the Dragon page 101" name="Versatile Spellcaster" desc="You can use two lower-level spell slots to cast a spell one level higher." />
-    <feat type="Races of the Dragon page 101" name="Wyrmgrafter" desc="You can apply draconic grafts to other living creatures or to yourself." />
-    <feat type="Races of the Dragon page 101" name="Entangling Exhalation" desc="You can use your breath weapon to create an entangling mesh of energy." />
-    <feat type="Races of the Dragon page 101" name="Exhaled Barrier" desc="You can use your breath weapon to create a wall of energy." />
-    <feat type="Races of the Dragon page 102" name="Exhaled Immunity" desc="You can use your breath weapon to grant a willing creature immunity to energy." />
-    <feat type="Races of the Dragon page 102" name="Extra Exhalation" desc="You can use your breath weapon one more time per day than normal." />
-    <feat type="Races of the Dragon page 102" name="Furious Inhalation" desc="While raging, you can use your breath weapon to deal energy damage with your bite attacks." />
-    <feat type="Races of the Dragon page 102" name="Draconic Arcane Grace" desc="You can convert some of your arcane spell energy into a saving throw bonus." />
-    <feat type="Races of the Dragon page 102" name="Draconic Breath" desc="You can convert some of your arcane spell energy into a breath weapon." />
-    <feat type="Races of the Dragon page 102" name="Draconic Claw" desc="You develop natural weapons like those of your draconic ancestors." />
-    <feat type="Races of the Dragon page 102" name="Draconic Flight" desc="The secret of draconic flight has been revealed to you, granting you the ability to fly occasionally." />
-    <feat type="Races of the Dragon page 102" name="Draconic Heritage" desc="You have a greater connection with your draconic bloodline than others of your kind." />
-    <feat type="Races of the Dragon page 104" name="Draconic Legacy" desc="You have realized greater arcane power through your draconic heritage." />
-    <feat type="Races of the Dragon page 104" name="Draconic Persuasion" desc="Your arcane talents lend you a great deal of allure." />
-    <feat type="Races of the Dragon page 104" name="Draconic Power" desc="You have greater power when manipulating the energies of your heritage." />
-    <feat type="Races of the Dragon page 104" name="Draconic Presence" desc="When you use your magic, your mere presence can terrify those around you." />
-    <feat type="Races of the Dragon page 105" name="Draconic Resistance" desc="Your bloodline hardens your body against effects related to the nature of your progenitor." />
-    <feat type="Races of the Dragon page 105" name="Draconic Skin" desc="Your skin takes on a sheen, luster, and hardness related to your draconic ancestor." />
-    <feat type="Races of the Dragon page 105" name="Draconic Toughness" desc="Your draconic nature reinforces your body as you embrace your heritage." />
-    <feat type="Races of the Dragon page 105" name="Spell Rehearsal" desc="Casting the same spell several times in a row or at the same target enables you to perfect it." />
-    <feat type="Races of the Dragon page 105" name="Wing Expert" desc="You can use your wings to create a variety of effects." />
-    <feat type="Red Hand of Doom page 126" name="Divine Vigor" desc="You can channel energy to increase your speed and durability." />
-    <feat type="Red Hand of Doom page 126" name="Dragonthrall" desc="You have pledged your life to the service of evil dragonkind." />
-    <feat type="Tome of Magic page 72" name="Bind Vestige" desc="You know how to make pacts with otherworldly spirits called vestiges." />
-    <feat type="Tome of Magic page 73" name="Bind Vestige, Improved" desc="You can bind a wider range of vestiges." />
-    <feat type="Tome of Magic page 73" name="Defense against the Supernatural" desc="Your in-depth knowledge of supernatural forces grants you greater ability to resist their effects." />
-    <feat type="Tome of Magic page 73" name="Empower Supernatural Ability" desc="You can use a supernatural ability with greater effect than normal." />
-    <feat type="Tome of Magic page 73" name="Enlarge Supenatural Ability" desc="You can increase the range of a supernatural attack." />
-    <feat type="Tome of Magic page 73" name="Expel Vestige" desc="You can expel a vestige to which you are bound before the duration of its pact with you has expired." />
-    <feat type="Tome of Magic page 73" name="Extend Supernatural Ability" desc="You can cause a supernatural ability with a duration to last longer than normal." />
-    <feat type="Tome of Magic page 74" name="Favored Vestige" desc="Choose one vestige to which you have access. You establish a close, mystical affinity with that spirit." />
-    <feat type="Tome of Magic page 74" name="Favored Vestige Focus" desc="The supernatural abilities of your favored vestige are more potent than normal." />
-    <feat type="Tome of Magic page 74" name="Ignore Special Requirements" desc="The strange constraints that vestiges place on their summoning are meaningless to you." />
-    <feat type="Tome of Magic page 74" name="Improved Binding" desc="You are so adept at binding vestiges that you can contact powerful ones more easily than other soul binders can." />
-    <feat type="Tome of Magic page 74" name="Practiced Binder" desc="When you bind a vestige, you gain an additional power associated with it." />
-    <feat type="Tome of Magic page 74" name="Rapid Pact Making" desc="Your skill with pact magic lets you bind a vestige extremely quickly, even in the heat of combat." />
-    <feat type="Tome of Magic page 74" name="Rapid Recovery" desc="You can use the abilities of your favored vestige more frequently." />
-    <feat type="Tome of Magic page 74" name="Skilled Pact Making" desc="Your strong will serves you well when making pacts with vestiges." />
-    <feat type="Tome of Magic page 74" name="Sudden Ability Focus" desc="One of your special attacks becomes more potent than usual." />
-    <feat type="Tome of Magic page 75" name="Supernatural Crusader" desc="You are adept at fighting supernatural creatures." />
-    <feat type="Tome of Magic page 75" name="Supernatural Opportunist" desc="You are adept at exploiting a creature's momentary distraction while it activates its supernatural abilities." />
-    <feat type="Tome of Magic page 75" name="Widen Supernatural Ability" desc="You can increase the area of your supernatural abilities." />
-    <feat type="Tome of Magic page 136" name="Empower Mystery" desc="You can cast mysteries to greater effect." />
-    <feat type="Tome of Magic page 136" name="Enlarge Mystery" desc="You can cast mysteries farther than normal." />
-    <feat type="Tome of Magic page 136" name="Extend Mystery" desc="You can cast mysteries that last longer than normal." />
-    <feat type="Tome of Magic page 136" name="Favored Mystery" desc="The mystery you choose becomes easier to cast." />
-    <feat type="Tome of Magic page 136" name="Greater Path Focus" desc="Choose a path of shadow magic to which you have already applied the Path Focus feat. Your mysteries of that path are now even more potent." />
-    <feat type="Tome of Magic page 136" name="Line of Shadow" desc="You can cast a mystery without line of sight or line of effect to the target." />
-    <feat type="Tome of Magic page 136" name="Maximize Mystery" desc="You can cast mysteries to maximum effect." />
-    <feat type="Tome of Magic page 137" name="Nocturnal Caster" desc="You are empowered by darkness, making your abilities stronger at night." />
-    <feat type="Tome of Magic page 137" name="Path Focus" desc="Choose a path of shadow magic, such as Touch of Twilight. Your mysteries of that path are more potent than normal." />
-    <feat type="Tome of Magic page 137" name="Quicken Mystery" desc="You can cast a mystery with a moment's thought." />
-    <feat type="Tome of Magic page 137" name="Reach Mystery" desc="You can cast touch-range mysteries without touching the target." />
-    <feat type="Tome of Magic page 137" name="Shadow Cast" desc="Your shadow shimmers as you cast a spell and you seem to cast your mysteries from elsewhere." />
-    <feat type="Tome of Magic page 138" name="Shadow Familiar" desc="Noctumancers developed this feat in order to gain a mystical companion." />
-    <feat type="Tome of Magic page 138" name="Shadow Reflection" desc="Your shadow flickers and moves in an aggressive, independent manner, enabling you to avoid some attacks of opportunity." />
-    <feat type="Tome of Magic page 138" name="Shadow Vision" desc="Your senses grow so attuned with shadow that you gain a limited ability to see in natural and magical darkness." />
-    <feat type="Tome of Magic page 138" name="Still Mystery" desc="You can cast mysteries without gestures." />
-    <feat type="Tome of Magic page 138" name="Unseen Arrow" desc="Developed by shadowblades, this feat allows a member of that class to apply his unseen weapon abilities to thrown or projectile weapons." />
-    <feat type="Tome of Magic page 228" name="Empower Utterance" desc="Your utterances have more powerful effects." />
-    <feat type="Tome of Magic page 229" name="Enlarge Utterance" desc="You can project the power of an utterance to a greater distance." />
-    <feat type="Tome of Magic page 229" name="Extend Utterance" desc="Your utterances have a more lasting effect on the universe." />
-    <feat type="Tome of Magic page 229" name="Focused Lexicon" desc="Your utterances have greater effect against a certain type of creature." />
-    <feat type="Tome of Magic page 229" name="Minor Utterance of the Evolving Mind" desc="Your mastery of Truespeech has led you to the understanding necessary to perform a simple utterance from the Lexicon of the Evolving Mind." />
-    <feat type="Tome of Magic page 229" name="Obscure Personal Truename" desc="Truenames are notoriously difficult to pronounce, but yours is harder than most." />
-    <feat type="Tome of Magic page 229" name="Personal Truename Backlash" desc="Your personal truename is so charged with magic power that those who fail to speak it properly are warped by reality run amok." />
-    <feat type="Tome of Magic page 229" name="Truename Rebuttal" desc="You are particularly good at negating other truenamers' power with well-chosen truenames." />
-    <feat type="Tome of Magic page 229" name="Truename Research" desc="You have a knack for uncovering the personal truenames of friends and foes alike through study and investigation." />
-    <feat type="Tome of Magic page 229" name="Truename Training" desc="Unlike most of your peers, you have discovered the secret power of truenames." />
-    <feat type="Tome of Magic page 230" name="Utterance of the Evolving Mind" desc="Your further mastery of Truespeech allows you to wield its power more effectively against creatures." />
-    <feat type="Tome of Magic page 230" name="Utterance of the Crafted Tool" desc="As you strive for ever more mastery of Truespeech, you gain more power over the universe around you. You can now use the power of Truespeech to affect objects." />
-    <feat type="Tome of Magic page 230" name="Utterance of the Perfected Map" desc="The power of the Truespeech can alter the state of reality itself. Reaching toward this great power, you have mastered an utterance from the Lexicon of the Perfected Map." />
-    <feat type="Tome of Magic page 230" name="Utterance Focus" desc="You have a particular utterance you favor above others, and your enemies are less able to resist the power of your words." />
-    <feat type="Tome of Magic page 231" name="Quicken Utterance" desc="You can speak an utterance with just a moment's thought." />
-    <feat type="Tome of Magic page 231" name="Recitation of the Fortified State" desc="This recitation allows you to stand unyielding against the blows of your enemies." />
-    <feat type="Tome of Magic page 232" name="Recitation of the Meditative State" desc="This recitation gives you an unparalleled sense of serene calm." />
-    <feat type="Tome of Magic page 232" name="Recitation of Mindful State" desc="This recitation narrows and focuses your perception so you can concentrate on a delicate task at hand." />
-    <feat type="Tome of Magic page 232" name="Recitation of the Sanguine State" desc="This recitation purges all poisons from your body." />
-    <feat type="Tome of Magic page 232" name="Recitation of Vital State" desc="This recitation frees your body of disease and sickness." />
-    <feat type="Complete Psionic page 49" name="Dazzling Energy" desc="Your facility with energy is such that enemies are shaken by your prowess." />
-    <feat type="Complete Psionic page 49" name="Deep Vision" desc="Your mental focus helps you see farther with darkvision" />
-    <feat type="Complete Psionic page 49" name="Dire Flail Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: a dire flail." />
-    <feat type="Complete Psionic page 49" name="Dire Stun" desc="When you choose to stun your foe with your lurk augment ability, your foe might be stunned for a long time." />
-    <feat type="Complete Psionic page 49" name="Don  Mantle" desc="You gain the granted ability of a mantle you have tapped." />
-    <feat type="Complete Psionic page 49" name="Dromite Barrier" desc="You can convert uses of yourenergy ray psi-like ability into walls of energy." />
-    <feat type="Complete Psionic page 49" name="Dromite Ray" desc="You an use yourenergy ray psi-like ability more often." />
-    <feat type="Complete Psionic page 49" name="Duergar Expansion" desc="You can use yourexpansion psi-like ability more often." />
-    <feat type="Complete Psionic page 49" name="Duergar Invisibility" desc="You can use yourinvisibility psi-like ability more often." />
-    <feat type="Complete Psionic page 49" name="Dwarven Urgrosh Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: a dwarven urgrosh." />
-    <feat type="Complete Psionic page 50" name="Ectopic Form" desc="This feat allows you to create astral constructs with distinct appearances and specialties." />
-    <feat type="Complete Psionic page 52" name="Elan Repletion" desc="As an elan, you can sustain yourself with repletion longer than other members of your race." />
-    <feat type="Complete Psionic page 52" name="Elan Resilience" desc="As an elan, you can prevent greater amounts of damage than other members of your race." />
-    <feat type="Complete Psionic page 52" name="Elan Resistance, Enhanced" desc="As an elan, you can resist harmful effects more readily than other members of your race." />
-    <feat type="Complete Psionic page 52" name="Elan Retainment" desc="You can use your psionic metabolism to aid your ability to retain your psionic focus when you would otherwise expend it." />
-    <feat type="Complete Psionic page 52" name="Elemental Envoy" desc="This feat allows you to acquire an elemental steward." />
-    <feat type="Complete Psionic page 53" name="Energize Armor" desc="You can charge your armor with psionic energy, making it resistant to energy damage." />
-    <feat type="Complete Psionic page 53" name="Enervation Endurance" desc="When facing the aftermath of a wild surge, enervation doesn't sap your power points." />
-    <feat type="Complete Psionic page 53" name="Enhanced Beneficence" desc="Your psychic aura is larger than normal, reflecting your devotion to your deity." />
-    <feat type="Complete Psionic page 53" name="Envoy Cognizance" desc="When your elemental envoy is nearby, its associated energy enhances your ability to manifest energy powers." />
-    <feat type="Complete Psionic page 53" name="Euphoric Reduction" desc="Channel your euphoric surge into a boost for one of your skills." />
-    <feat type="Complete Psionic page 54" name="Extra Aura" desc="You gain the aura ability of a mantle you have donned." />
-    <feat type="Complete Psionic page 54" name="Focused Perception" desc="When you concentrate your faculties, your power of sight pierces the darkness." />
-    <feat type="Complete Psionic page 54" name="Focused Shield" desc="Your mental focus makes you more adept at using your shield." />
-    <feat type="Complete Psionic page 54" name="Focused Skill User" desc="You can take advantage of your psionic focus in new ways." />
-    <feat type="Complete Psionic page 54" name="Gestalt Anchor" desc="You have a strong bond to the psionic entity you host." />
-    <feat type="Complete Psionic page 54" name="Githyanki Charm" desc="You can leverage yourpsionic daze psi-like ability to gain greater control over subjects." />
-    <feat type="Complete Psionic page 54" name="Githyanki Control" desc="You can leverage yourfar hand psi-like ability to gain greater control over objects." />
-    <feat type="Complete Psionic page 54" name="Githyanki Dismissal" desc="You can leverage yourdimension door psi-like ability to gain greater control over other creatures' locations." />
-    <feat type="Complete Psionic page 54" name="Githyanki Ectoform" desc="You can leverage yourconcealing amorpha psi-like ability to gain greater control over your own body." />
-    <feat type="Complete Psionic page 54" name="Githzerai Burst" desc="You can leverage yourcat fall psi-like ability to gain greater control over yourself in your environment." />
-    <feat type="Complete Psionic page 54" name="Githzerai Feedback" desc="You can leverage yourinertial armor psi-like ability to further insulate yourself from harm." />
-    <feat type="Complete Psionic page 54" name="Githzerai Knock" desc="You can leverage yourconcussion blast psi-like ability to gain such fine control over manipulating force that you can open locks or sealed doors." />
-    <feat type="Complete Psionic page 55" name="Githzerai Link" desc="You can leverage yourpsionic daze psi-like ability to forge direct mental contact with another creature." />
-    <feat type="Complete Psionic page 55" name="Half-Giant Stomp" desc="You can use yourstomp psi-like ability more often." />
-    <feat type="Complete Psionic page 55" name="Half-Giant Thunderer" desc="You can use yourstomp psi-like ability to far greater effect." />
-    <feat type="Complete Psionic page 55" name="Instinctive Consummator" desc="You always make good on your threats." />
-    <feat type="Complete Psionic page 55" name="Invest Armor" desc="You can charge your armor with additional protective qualities." />
-    <feat type="Complete Psionic page 55" name="Lurk Augment, Extra" desc="You can use your lurk augment more often than normal." />
-    <feat type="Complete Psionic page 55" name="Lurk Augment, Ranged" desc="You can use some of your lurk augments in conjunction with a ranged attack." />
-    <feat type="Complete Psionic page 55" name="Lurk Master" desc="You are more skilled in augmenting your attack than your training would indicate." />
-    <feat type="Complete Psionic page 55" name="Maenad Fury" desc="You can use your outburst racial trait more often." />
-    <feat type="Complete Psionic page 55" name="Maenad Scream" desc="You can use yourenergy ray (sonic) psi-like ability more often." />
-    <feat type="Complete Psionic page 55" name="Maenad Deafening Scream" desc="You can use yourenergy ray (sonic) psi-like ability to better effect." />
-    <feat type="Complete Psionic page 55" name="Mantle Focus" desc="The powers from one of your mantles become more potent." />
-    <feat type="Complete Psionic page 56" name="Mental Juggernaut" desc="You are adroit at avoiding the mind blasting effects of certain psionic abilities and powers." />
-    <feat type="Complete Psionic page 56" name="Mind Cleave" desc="When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade." />
-    <feat type="Complete Psionic page 56" name="Mind Empowerment" desc="When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade." />
-    <feat type="Complete Psionic page 56" name="Mind Strike" desc="When you use your psychic strike ability, you deal more damage." />
-    <feat type="Complete Psionic page 57" name="Mind Strike, Swift" desc="You possess a deadly speed when charging your mind blade with psychic energy." />
-    <feat type="Complete Psionic page 57" name="Orc Double Axe Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: an orc double axe." />
-    <feat type="Complete Psionic page 57" name="Postpone Enervation" desc="You can postpone the onset of your psychic enervation." />
-    <feat type="Complete Psionic page 57" name="Practiced Manifester" desc="Choose a manifesting class that you possess. The powers you manifest from that class are more powerful." />
-    <feat type="Complete Psionic page 57" name="Privileged Energy" desc="You favor one specific energy type over all others." />
-    <feat type="Complete Psionic page 57" name="Psymbiot" desc="You gain benefits when you are near other psionic characters or creatures." />
-    <feat type="Complete Psionic page 57" name="Skin of the Construct" desc="You can wear an astral construct as if it were a second skin." />
-    <feat type="Complete Psionic page 57" name="Stygian Archon" desc="You sear the synapses of your mind with a scar of void and emptiness." />
-    <feat type="Complete Psionic page 58" name="Synad Multitask, Enhanced" desc="As a synad, your threefold mind grants you an additional opportunity to multitask." />
-    <feat type="Complete Psionic page 58" name="Tap Mantle" desc="You gain the ability to access the powers in a new mantle." />
-    <feat type="Complete Psionic page 58" name="Thri-Kreen Carapace" desc="Your carapace is harder than average." />
-    <feat type="Complete Psionic page 58" name="Thri-Kreen Claw" desc="You can use yourmetaphysical claw psi-like ability more often." />
-    <feat type="Complete Psionic page 58" name="Thri-Kreen Displacement" desc="You can use yourpsionic displacement psi-like ability more often." />
-    <feat type="Complete Psionic page 58" name="Thri-Kreen Poison" desc="You can use your poison bite more often." />
-    <feat type="Complete Psionic page 58" name="Two-Bladed Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: a two-bladed sword." />
-    <feat type="Complete Psionic page 58" name="Volatile Escalation" desc="When you are attacked with a telepathic power, your innate wildness forces a higher mental price on your attacker." />
-    <feat type="Complete Psionic page 58" name="Volatile Leech" desc="You gain the power points your attacker wastes attacking you with a telepathic power." />
-    <feat type="Complete Psionic page 59" name="Xeph Burst, Extra" desc="You can use your burst racial trait more often." />
-    <feat type="Complete Psionic page 59" name="Xeph Celerity" desc="You can use your burst racial trait to gain an extra attack." />
-    <feat type="Complete Psionic page 59" name="Dorje Mastery" desc="Psionic dorjes are more potent in your hands." />
-    <feat type="Complete Psionic page 59" name="Dual Dorje" desc="You can fight with two dorjes at the same time." />
-    <feat type="Complete Psionic page 59" name="Hostile Mind, Improved" desc="You have mental defenses erected  against telepathic attacks." />
-    <feat type="Complete Psionic page 59" name="Psionic Mastery" desc="You are quick and certain in your efforts to defeat the psionic defenses and powers of others." />
-    <feat type="Complete Psionic page 60" name="Aggressive Mind" desc="The psionic entity you host gives you access to psi-like abilities capable of disrupting the mind of your enemy." />
-    <feat type="Complete Psionic page 60" name="Antagonist" desc="The psionic entity you host seeks to cause damage and mayhem, and you have powers to further that end." />
-    <feat type="Complete Psionic page 60" name="Defensive Shell" desc="The psionic entity living in your mind enables you to better resist attacks." />
-    <feat type="Complete Psionic page 60" name="Host Focus" desc="You can use a psi-like ability granted by a host feat an extra time each day." />
-    <feat type="Complete Psionic page 60" name="Pacifist" desc="You host a psionic entity that dislikes combat and provides you psi-like abilities to help you avoid a fight." />
-    <feat type="Complete Psionic page 60" name="Spiritual Force" desc="Your mind blade is an expression of your inner spirit." />
-    <feat type="Complete Psionic page 60" name="Strength of Two" desc="As the host of a formless psionic entity, you possess immense willpower." />
-    <feat type="Complete Psionic page 60" name="Telepathic Affinity" desc="The entity you host gives you the ability to better communicate with other creatures." />
-    <feat type="Complete Psionic page 61" name="Illithid Blast" desc="You can convert your pisonic energy into amind blast." />
-    <feat type="Complete Psionic page 61" name="Illithid Compulsion" desc="You can call upon your heritage and enhance your ability to manipulate the minds of other creatures." />
-    <feat type="Complete Psionic page 61" name="Illithid Enthusiast" desc="When you manipulate the minds of other creatures, you are heartened and emboldened by your success." />
-    <feat type="Complete Psionic page 61" name="Illithid Extraction" desc="Your acceptance of your illithid heritage is so encompassing that you have learned how to extract the brain of a helpless victim." />
-    <feat type="Complete Psionic page 61" name="Illithid Grapple" desc="You embrace more of your illithid heritage, and grow at least one long purplish tentacle that you can reveal and unfurl when you open your mouth." />
-    <feat type="Complete Psionic page 62" name="Illithid Heritage" desc="Somewhere in the deeps of time, your bloodline was polluted with illithid influence." />
-    <feat type="Complete Psionic page 62" name="Illithid Legacy" desc="You have realized greater psionic power through your illithid heritage." />
-    <feat type="Complete Psionic page 62" name="Illithid Legacy, Greater" desc="Your knowledge of psionic power has grown even further due to your illithid heritage." />
-    <feat type="Complete Psionic page 62" name="Illithid Skin" desc="Your skin takes on the glistening, rubbery, green-mauve consistency of your illithid parentage." />
-    <feat type="Complete Psionic page 62" name="Knockdown Power" desc="You can manifest powers that knock creatures off their feet." />
-    <feat type="Complete Psionic page 62" name="Linked Power" desc="You can link a power to the power you manifest in this round so that it goes off next round." />
-    <feat type="Complete Psionic page 63" name="Metapower" desc="You can permanently modify a psionic power you know with a metapsionic feat." />
-    <feat type="Complete Psionic page 63" name="Paraelemental Power" desc="When using a power that allows you to choose a type of energy, you have a wider range of possible choices owing to your ability to mix energy with matter." />
-    <feat type="Complete Psionic page 63" name="Phrenic Leech" desc="Psionic foes damaged by your power are also mentally drained." />
-    <feat type="Complete Psionic page 64" name="Stygian Power" desc="Psionic powers you manifest that utilize negative energy are branded with an imprint of fear." />
-    <feat type="Complete Psionic page 64" name="Transdimensional Power" desc="You can manifest powers that affect targets lurking in coexistent planes and extradimensional spaces whose entrances fall within the power's area." />
-    <feat type="Player's Handbook II page 71" name="Acrobatic Strike" desc="Your dexterous maneuvers and skilled acrobatics allow you to slip past a foe's defenses and deliver an accurate strike against him." />
-    <feat type="Player's Handbook II page 71" name="Active Shield Defense" desc="Your expert use of your shield allows you to strike at vulnerable foes even when you forgo your own attacks in favor of defense." />
-    <feat type="Player's Handbook II page 71" name="Adaptable Flanker" desc="When you and an ally team up against a foe, you know how to maximize the threat your ally poses to ruin your target's defenses." />
-    <feat type="Player's Handbook II page 74" name="Agile Shield Fighter" desc="You are skilled in combining your shield bash attack with an armed strike. When you use your shield in unison with a weapon, your training allows you to score telling blows with both." />
-    <feat type="Player's Handbook II page 74" name="Arcane Accompaniment" desc="You infuse your performance with magical energy, allowing its effects to continue even as you attend to other tasks." />
-    <feat type="Player's Handbook II page 74" name="Arcane Consumption" desc="You can sacrifice your physical health to strengthen a spell. This process leaves you wracked with pain, but the enhanced energy you draw from the spell might provide the margin between victory and defeat." />
-    <feat type="Player's Handbook II page 74" name="Arcane Flourish" desc="You use your magical abilities to improve your performance talents." />
-    <feat type="Player's Handbook II page 74" name="Arcane Thesis" desc="You have studied a single spell in-depth." />
-    <feat type="Player's Handbook II page 75" name="Arcane Toughness" desc="You draw upon the power of your magic to sustain yourself, allowing you to continue fighting long after your physical body has failed you." />
-    <feat type="Player's Handbook II page 75" name="Armor Specialization" desc="Through long wear and hours of combat, you have trained your body to believe in its armor." />
-    <feat type="Player's Handbook II page 75" name="Battle Dancer" desc="You strike at your foes in time with the music you sing or in cadence with an oration you deliver." />
-    <feat type="Player's Handbook II page 75" name="Bonded Familiar" desc="You enjoy a stronger than normal magical bond with your familiar, granting you access to two special abilities." />
-    <feat type="Player's Handbook II page 75" name="Bounding Assault" desc="You can move and attack with superior speed and power." />
-    <feat type="Player's Handbook II page 76" name="Brutal Strike" desc="You can batter foes senseless with your mace, morningstar, quarterstaff, or flail." />
-    <feat type="Player's Handbook II page 76" name="Combat Acrobat" desc="Your acrobatics and agility in combat allow you to maneuver across the battlefield with ease." />
-    <feat type="Player's Handbook II page 76" name="Combat Familiar" desc="Your familiar is skilled in delivering attack spells againstyour foes." />
-    <feat type="Player's Handbook II page 77" name="Combat Tactician" desc="You excel at approaching an opponent from an unexpected direction to deliver deadly attacks." />
-    <feat type="Player's Handbook II page 77" name="Cometary Collision" desc="You are a thunderbolt of destruction on the battlefield." />
-    <feat type="Player's Handbook II page 77" name="Companion Spellbond" desc="You form a special magical link with your animal companion, allowing you to share spells with it over a greater distance." />
-    <feat type="Player's Handbook II page 77" name="Crossbow Sniper" desc="You are skilled in lining up accurate, deadly shots with your crossbow." />
-    <feat type="Player's Handbook II page 78" name="Crushing Strike" desc="You wield a bludgeoning weapon with superior power, allowing you to batter aside an opponent's defenses." />
-    <feat type="Player's Handbook II page 78" name="Cunning Evasion" desc="When an area attack detonates around you, you use the chaos and flash of energy to duck out of sight." />
-    <feat type="Player's Handbook II page 78" name="Dampen Spell" desc="From the lowliest prestidigitator to the most august hierophant, spellcasters both arcane and divine recognize the power of counterspelling." />
-    <feat type="Player's Handbook II page 78" name="Deadeye Shot" desc="You carefully line up a ranged attack, timing it precisely so that you hit your opponent when his guard is down." />
-    <feat type="Player's Handbook II page 78" name="Defensive Sweep" desc="You sweep your weapon through the area you threaten, warding away opponents and forcing them to move away or suffer a fearsome blow." />
-    <feat type="Player's Handbook II page 78" name="Driving Attack" desc="When you strike an opponent with a piercing weapon, the brutal impact of your strike sends him sprawling." />
-    <feat type="Player's Handbook II page 78" name="Elven Spell Lore" desc="You have studied the mighty arcane traditions of the elven, granting you insight into the intricate workings of magic and the theoretical structures behind spells." />
-    <feat type="Player's Handbook II page 79" name="Fade into Violence" desc="While the chaos of battle swirls around you, you rely on your ability to slip into the background to avoid your enemy's notice." />
-    <feat type="Player's Handbook II page 79" name="Fiery Fist" desc="By channeling your kienergy, you sheathe your limbs in magical fire." />
-    <feat type="Player's Handbook II page 79" name="Fiery KiDefense" desc="You channel your kienergy into a cloak of flame that injures any who attempt to strike you." />
-    <feat type="Player's Handbook II page 79" name="Flay" desc="When fighting unarmored opponents, you excel at twisting your weapon just before impact." />
-    <feat type="Player's Handbook II page 79" name="Grenadier" desc="You are skilled in using grenadelike weapons." />
-    <feat type="Player's Handbook II page 79" name="Hindering Opportunist" desc="When you have a chance to strike a distracted foe, you instead use that opportunity to aid or protect an ally against him." />
-    <feat type="Player's Handbook II page 79" name="Intimidating Strike" desc="You make a display of your combat prowess designed to strike terror in your foe." />
-    <feat type="Player's Handbook II page 80" name="Indomitable Soul" desc="Your physical toughness translates into greater mental resiliency." />
-    <feat type="Player's Handbook II page 80" name="Keen-Eared Scout" desc="Your sharp sense of hearing allows you to determine much more about your surroundings." />
-    <feat type="Player's Handbook II page 80" name="KiBlast" desc="You focus your kiinto a ball of energy that you can hurl at an opponent." />
-    <feat type="Player's Handbook II page 80" name="Leap of the Heavens" desc="Your excellent athletic ability and superior conditioning allow you to make near-superhuman leaps." />
-    <feat type="Player's Handbook II page 80" name="Lunging Strike" desc="You make a single attack against a foe who stands just beyond your reach." />
-    <feat type="Player's Handbook II page 80" name="Lurking Familiar" desc="Your familiar hides within the folds of your robe or takes cover behind you as your opponents close in." />
-    <feat type="Player's Handbook II page 80" name="Mad Foam Rager" desc="You fight with the rage that only a rabid badger or a beer-addled dwarf can bring to bear." />
-    <feat type="Player's Handbook II page 80" name="Master Manipulator" desc="Your words are your weapons." />
-    <feat type="Player's Handbook II page 81" name="Melee Evasion" desc="Your speed, agility, and talent for intelligent fighting allow you to avoid your opponent's blows." />
-    <feat type="Player's Handbook II page 81" name="Melee Weapon Mastery" desc="You have mastered a wide range of weapons." />
-    <feat type="Player's Handbook II page 81" name="Overwhelming Assault" desc="If you attack a foe who does nothing to turn aside your attack, you press forward with an indomitable strike." />
-    <feat type="Player's Handbook II page 81" name="Penetrating Shot" desc="You send a powerful shot cleaving through your enemies." />
-    <feat type="Player's Handbook II page 82" name="Ranged Weapon Mastery" desc="You have mastered a wide range of weapons." />
-    <feat type="Player's Handbook II page 82" name="Rapid Blitz" desc="You charge across the battlefield, combining your speed and fighting ability to move and attack with unmatched skill." />
-    <feat type="Player's Handbook II page 82" name="Robilar's Gambit" desc="By offering Robilar's Gambit, you absorb damage to place yourself in an advantageous position." />
-    <feat type="Player's Handbook II page 82" name="Shield Sling" desc="You can hurl your shield as a deadly missile, turning it from a defensive item to a crushing, thrown weapon." />
-    <feat type="Player's Handbook II page 82" name="Shield Specialization" desc="You are skilled in using a shield, allowing you to gain greater defensive benefits from it." />
-    <feat type="Player's Handbook II page 82" name="Shield Ward" desc="You use your shield like a wall of steel and wood." />
-    <feat type="Player's Handbook II page 82" name="Short Haft" desc="You have trained in polearm fighting alongside your comrades in arms, sometimes reaching past them while they shield you, and sometimes shielding them while they attack from behind you." />
-    <feat type="Player's Handbook II page 82" name="Slashing Flurry" desc="You swing your weapon with uncanny speed, slicing apart a foe in the blink of an eye." />
-    <feat type="Player's Handbook II page 83" name="Spectral Skirmisher" desc="You have trained extensively in the use of magic that renders you invisible." />
-    <feat type="Player's Handbook II page 83" name="Spell-Linked Familiar" desc="You and your familiar can share spell energy, allowing your familir to cast a limited number of spells each day." />
-    <feat type="Player's Handbook II page 83" name="Stalwart Defense" desc="You excel at aiding your allies in battle. When an opponent attempts to strike one of them, you make a quick, distracting motion to ruin the foe's efforts." />
-    <feat type="Player's Handbook II page 83" name="Steadfast Determination" desc="Your physical durability allows you to shrug off attacks that would cripple a lesser person." />
-    <feat type="Player's Handbook II page 83" name="Telling Blow" desc="When you strike an opponent's vital areas, you draw on your ability to land crippling blows to make the most of your attack." />
-    <feat type="Player's Handbook II page 83" name="Trophy Collector" desc="A belt of minotaur fur, a hood of cloaker wing-skin, and an amulet fashioned from a petrified dragon's eye -- these are the intimidating symbols of your trade." />
-    <feat type="Player's Handbook II page 84" name="Tumbling Feint" desc="When you move near an opponent, your acrobatic maneuvers leave him confused and unable to properly defend himself." />
-    <feat type="Player's Handbook II page 84" name="Two-Weapon Pounce" desc="When you charge an opponent while wielding two weapons, you can make two quick attacks." />
-    <feat type="Player's Handbook II page 84" name="Two-Weapon Rend" desc="You wield two weapons with an artisan's precision." />
-    <feat type="Player's Handbook II page 85" name="Vatic Gaze" desc="Your arcane studies have brought forth your nascent talent to sense magical auras and the power that others are capable of wielding." />
-    <feat type="Player's Handbook II page 85" name="Versatile Unarmed Strike" desc="You employ a variety of unarmed fighting styles, allowing you to alter the type of damage your attacks deal." />
-    <feat type="Player's Handbook II page 85" name="Vexing Flanker" desc="You excel at picking apart an opponent's defenses when your allies also threaten them." />
-    <feat type="Player's Handbook II page 85" name="Wanderer's Diplomacy" desc="Many halflings journey far and wide across the world, spending no more than a few months in one place." />
-    <feat type="Player's Handbook II page 85" name="Water Splitting Stone" desc="You channel your kienergy to splinter the defenses of creatures whose tough hides or magical natures normally allow them to shrug off your blows." />
-    <feat type="Player's Handbook II page 85" name="Weapon Supremacy" desc="You are a grandmaster in the use of your chosen weapon." />
-    <feat type="Player's Handbook II page 86" name="Ritual Blessing" desc="You call upon the powers of goodness and light to bless your allies." />
-    <feat type="Player's Handbook II page 86" name="Ritual Blood Bonds" desc="You invest your allies with the mighty power of your toten, god, or similar divine entity." />
-    <feat type="Player's Handbook II page 86" name="Combat Awareness" desc="When you maintain your combat focus, you have an uncanny ability to sense the ebb and flow of your opponents' vitality." />
-    <feat type="Player's Handbook II page 87" name="Combat Defense" desc="The state of keen focus and mental discipline you attain in combat allows you to shift the focus of yoru defense from one opponent to another with careful, precise maneuvers." />
-    <feat type="Player's Handbook II page 87" name="Combat Focus" desc="The way of the warrior requires more than simple, brute strength." />
-    <feat type="Player's Handbook II page 87" name="Combat Stability" desc="When you maintain your combat focus, you become difficult to dislodge." />
-    <feat type="Player's Handbook II page 87" name="Combat Strike" desc="Your intense, focused state allows you to see the one critical moment in a battle when you hang suspended between victory and defeat." />
-    <feat type="Player's Handbook II page 88" name="Combat Vigor" desc="When you maintain your combat focus, your clarity of purpose and relentless drive allow you to overcome your body's frailties." />
-    <feat type="Player's Handbook II page 88" name="Divine Armor" desc="You call upon your deity to protect you in your hour of need by wreathing you in divine power that wards off your enemies' attacks." />
-    <feat type="Player's Handbook II page 88" name="Divine Fortune" desc="With a quick prayer, you channel divine energy to help resist a spell, poison, or other deadly effect." />
-    <feat type="Player's Handbook II page 88" name="Divine Justice" desc="You can channel divine energy to turn your foe's strength against him, striking him with the same force that he used against you." />
-    <feat type="Player's Handbook II page 88" name="Divine Ward" desc="You create a channel of divine energy between yourself and a willing ally." />
-    <feat type="Player's Handbook II page 89" name="Profane Aura" desc="You call upon the dark powers you worship to fill the area around you with a dreadful mist that obscures sight." />
-    <feat type="Player's Handbook II page 89" name="Sacred Healing" desc="You can channel divine energy to aid in your efforts to tend to a comrade's injuries, sickness, or other conditions." />
-    <feat type="Player's Handbook II page 89" name="Sacred Purification" desc="You serve as a conduit of divine energy, filling the area around you with power that aids the living and saps the undead." />
-    <feat type="Player's Handbook II page 89" name="Sacred Radiance" desc="You channel divine energy to fill the area around you with a soothing, gentle radiance." />
-    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Aura" desc="The power of your sorcerous heritage shines through, allowing you to infuse the area around you with a menacing aura." />
-    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Heritage" desc="Your ancestry manifests in the form of several special abilities." />
-    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Lance" desc="You can channel your arcane energy into a bolt of power that is baneful to evil creatures." />
-    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Lore" desc="The power of your ancestry grants you access to a variety of new spells." />
-    <feat type="Player's Handbook II page 91" name="Celestial Sorcerer Wings" desc="You channel your inborn magical abilities to spawn a pair of spectral, magical wings that glow with majestic power." />
-    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Eyes" desc="Your eyes glow with infernal fire, allowing you to see through magical darkness." />
-    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Heritage" desc="Your innate magic derives from infernal ancestors." />
-    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Howl" desc="You channel the fury of your infernal ancesters into a thunderous roar that blasts your enemies with sonic power." />
-    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Resistance" desc="You are as tough and resilient as an infernal monstrosity, allowing you to shrug off acid and cold damage." />
-    <feat type="Player's Handbook II page 91" name="Blistering Spell" desc="Your fire spells sear the flesh from your enemies' bones, leaving them wracked with pain." />
-    <feat type="Player's Handbook II page 91" name="Earthbound Spell" desc="You bind a spell into the rock and soil, leaving it there until an opponent stumbles across it." />
-    <feat type="Player's Handbook II page 91" name="Flash Frost Spell" desc="Your spells that use cold and ice to damage your foes leave behind a thin layer of slippery frost." />
-    <feat type="Player's Handbook II page 92" name="Imbued Summoning" desc="Your summoning spells gain an element of surprise." />
-    <feat type="Player's Handbook II page 92" name="Smiting Spell" desc="You can channel the energy of a touch spell into a weapon, causing the spell to discharge when you strike an opponent." />
-    <feat type="Player's Handbook II page 92" name="Blood-Spiked Charger" desc="You throw yourself into the fray, using your spiked armor and spiked shield to tear your opponents to pieces." />
-    <feat type="Player's Handbook II page 93" name="Combat Cloak Expert" desc="You are adept at turning your cloak into a vital part of your combat repertoire." />
-    <feat type="Player's Handbook II page 93" name="Combat Panache" desc="Your glowing personality and sharp performance abilities allow you to navigate the battlefield on sheer chutzpah alone." />
-    <feat type="Player's Handbook II page 94" name="Einhander" desc="You excel at wielding a one-handed weapon while carrying nothing in your off hand." />
-    <feat type="Player's Handbook II page 94" name="Mad Alchemist" desc="You are an expert at using alchemical items." />
-    <feat type="Player's Handbook II page 94" name="Shadow Striker" desc="You melt into the shadows, hiding from your enemies until the time is right." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 83" name="Abyss-Bound Soul [Vile]" desc="You have pledged your immortal soul to a particular demon lord in return for a gift that aids your evil works in life." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 83" name="Blood War Conscript [Vile]" desc="Your evil brand indicates your rank in the armies of the Blood War and infuses you with fury." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 84" name="Chaotic Spell Recall [Abyssal Heritor]" desc="A few choice spells never stray far from your mind." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 84" name="Claws of the Beast [Abyssal Heritor]" desc="Your hands are twisted like claws. This deformity allows you to deal more damage than usual with your unarmed strikes and sneak attacks." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Cloak of the Obyrith [Abyssal Heritor]" desc="The chaos of the Abyss suffuses your being, as it does the ancient obyriths." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Dark Speech [Vile]" desc="You learn a smattering of the language of truly dark power." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demonic Conduit [Vile]" desc="Your evil brand incorporates blasphemous runes and sigils that augment magical attacks you make against lawful and/or good targets." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demonic Skin [Abyssal Heritor]" desc="Your skin has rough, scaly patches that enhance your natural armor." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demonic Sneak Attack [Abyssal Heritor]" desc="You know exactly how to twist the blade to get the most out of your sneak attacks." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demon Mastery" desc="You are particularly skilled at summoning demons and convincing them to serve you." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Evil Brand [Vile]" desc="You are physically marked forever as the servant of an evil power greater than yourself -- in this case, a demon lord. The symbols is unquestionable in its perversity, depicting a depravity so unthinkable that all who see it know beyond a doubt that you serve the lords of the Abyss." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Extract Demonic Essence" desc="You can draw upon the living essence of a willing or captured demon to fuel the creation of items or the casting of potent spells." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Eyes of the Abyss [Abyssal Heritor]" desc="Your eyes glow with an inner fire of some unusual color. This glow increases your perception and allows you to see in the dark." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Heart of the Nabassu" desc="Your ancestry traces back to a place where the Abyss meets the Negative Energy Plane." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Keeper of Forbidden Lore [Abyssal Heritor]" desc="A shred of demonic racial memory grants you knowledge of numerous ancient magical secrets." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Ordered Chaos" desc="You are an unusually lawful Abyssal heritor." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Otherworldly Countenance [Abyssal Heritor]" desc="You are either stunningly beautiful or wretchedly hideous. Either way, your appearance can be terribly unsettling to others upon whom you focus your attentions." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Poison Healer" desc="Poison isn't always bad for you." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Poison Talons [Abyssal Heritor]" desc="Your claws drip with poison." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Precognitive Visions [Abyssal Heritor]" desc="You periodically experience visions from the near future." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Primordial Scion [Abyssal Heritor]" desc="The Abyss beckons. . . ." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Thrall to Demon [Vile]" desc="You formally become a supplicant to a demon lord. In return for your obedience, you gain a small measure of that demon lord's power." />
-    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Vestigial Wings [Abyssal Heritor]" desc="A pair of vestigial wings sprouts from your shoulders." />
-    <feat type="Monster Manual IV page 202" name="Ability Focus" desc="A particular special ability of a creature with this feat is more potent than normal." />
-    <feat type="Monster Manual IV page 202" name="Awesome Blow" desc="A creature with this feat can choose to deliver blows that send its smaller opponents flying like bowling pins." />
-    <feat type="Monster Manual IV page 202" name="Clinging Breath" desc="This feat enables a creature's breath weapon to cling to creatures and continue to affect them after it has breathed." />
-    <feat type="Monster Manual IV page 202" name="Craft Construct [Item Creation]" desc="A creature with this feat can create golems and other magic automatons that obey its orders." />
-    <feat type="Monster Manual IV page 202" name="Flyby Attack" desc="A creature with this feat can attack on the wing." />
-    <feat type="Monster Manual IV page 202" name="Githyanki Battlecaster" desc="A creature with this feat ignores arcane spell failure chances when wearing light armor." />
-    <feat type="Monster Manual IV page 202" name="Githyanki Dragonrider [Racial]" desc="A creature with this feat has a knack for getting along with red dragons." />
-    <feat type="Monster Manual IV page 203" name="Improved Natural Attack" desc="The natural attacks of a creature with this feat are more dangerous than its size and type would otherwise dictate." />
-    <feat type="Monster Manual IV page 203" name="Improved Toughness" desc="A creature with this feat is significantly tougher than normal." />
-    <feat type="Monster Manual IV page 203" name="Lingering Breath" desc="The breath weapon of a creature with this feat forms a lingering cloud." />
-    <feat type="Monster Manual IV page 203" name="Multiattack" desc="A creature with this feat is adept at using all its natural weapons at once." />
-    <feat type="Monster Manual IV page 203" name="Powerful Charge" desc="A creature with this feat can charge with extra force." />
-    <feat type="Monster Manual IV page 203" name="Quicken Spell-Like Ability" desc="A creature with this feat can employ a spell-like ability with a moment's thought." />
-    <feat type="Secrets of Xen'drik page 134" name="Blessed of Vulkoor [Racial]" desc="A scorpion-shaped birthmark denotes you as one of the chosen of Vulkoor." />
-    <feat type="Secrets of Xen'drik page 134" name="Drow Scorpion Warrior [Racial, Tactical]" desc="Your study of the ways of the scorpion grants you special tactics." />
-    <feat type="Secrets of Xen'drik page 134" name="Drow Skirmisher [Racial]" desc="Your experience with the guerrilla-style combat of the deep jungle grants you mastery of the weapons of the drow." />
-    <feat type="Secrets of Xen'drik page 134" name="Earthquake Stomp" desc="Your thunderous steps allow you to knock smaller enemies off their feet." />
-    <feat type="Secrets of Xen'drik page 134" name="Echoing Spell [Metamagic]" desc="Your spells return after you cast them, although with lessened effects." />
-    <feat type="Secrets of Xen'drik page 135" name="Elder Giant Magic" desc="You have learned a technique developed by ancient giant spellcasters, allowing you to channel additional power in your spells." />
-    <feat type="Secrets of Xen'drik page 135" name="Giant Banemagic" desc="You can cast spells that deal additional damage to giants." />
-    <feat type="Secrets of Xen'drik page 135" name="Jungle Veteran" desc="You have a knack for surviving in harsh environments and avoiding the deadly ambushes of natives." />
-    <feat type="Secrets of Xen'drik page 135" name="Mysterious Magic" desc="Your study of unconventional magic gives your spells an odd appearance and makes them difficult to identify." />
-    <feat type="Secrets of Xen'drik page 135" name="Rending Claws" desc="Your expertise with scorpion claw gauntlets allows you to tear apart your opponents with deadly precision." />
-    <feat type="Dragons of Faerun page 47" name="Breath of Unlife [Metabreath]" desc="Your breath weapon contains the chill of undeath." />
-    <feat type="Dragons of Faerun page 50" name="Transdimensional Breath [Psionic]" desc="Your breath weapon affects bordering planes." />
-    <feat type="Dragons of Faerun page 57" name="Follower of the Scaly Way" desc="You are an adherent of Sammaster's teachings." />
-    <feat type="Dragons of Faerun page 92" name="Servant of a Dragon Ascendant" desc="You formally supplicate yourself to an immortal dragon quasi-deity." />
-    <feat type="Dragons of Faerun page 92" name="Initiate of Tchazzar" desc="You have been initiated into the greatest mysteries of Tchazzar's church." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 28" name="Adaptive Style" desc="With just a short period of meditation, you can change your maneuvers and tactics to meet the threat you currently face." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 28" name="Avenging Strike" desc="Your strength of will and strong sense of justice allow you to smite your foes." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 28" name="Blade Meditation" desc="You have learned a meditation that grants you insight into the martial disciplines you have studied." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Desert Fire" desc="The power of the Desert Wind surges through you, and you find power in the motion of the hot winds and shifting sands that you can channel into your Desert Wind strikes." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Desert Wind Dodge" desc="Your training in the Desert Wind discipline allows you to dance across the battlefield like a blistering sirocco." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Devoted Bulwark" desc="Because of your staunch devotion to your cause and your Devoted Spirit training, you can stand your ground even in the face of an enemy's resounding attack." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Divine Spirit [Divine]" desc="The fervor and dedication of the Devoted Spirit discipline, combined with your fanatical adherence to a divine power, turns you into a font of spiritual energy." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 30" name="Evasive Reflexes" desc="When an opponent gives you an opening in combat, you know exactly what to do: slip away." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 30" name="Extra Granted Maneuver" desc="You are especially devout or insightful, and you have more control over which of your martial maneuvers are currently granted than other crusaders." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 30" name="Extra Readied Maneuver" desc="You are an unusually perspicacious student of the Sublime Way, and you find it easy to keep a large number of maneuvers ready for use." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Falling Sun Attack" desc="The discipline of the Setting Sun teaches you how to turn an opponent's strengths into weaknesses." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Instant Clarity [ Psionic]" desc="You have sharpened your concentration to the point that you can focus your psionic abilities with just an instant's thought." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Ironheart Aura" desc="Your strength of spirit and martial training inspires those around you." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Martial Stance" desc="You have mastered the fundamentals of a martial discipline, and you are now able to master one of its stances." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Martial Study" desc="By studying the basics of a martial discipline, you learn to focus you kiand perfect the form needed to use a maneuver." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Psychic Renewal [Psionic]" desc="Your mental strength and psionic abilities allow you to focus your mind on combat and use your most devastating maneuvers more frequently." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Rapid Assault" desc="Your fighting style emphasizes taking foes down with quick, powerful blows." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Scribe Martial Script [Item Creation]" desc="You know the secret of creating martial scripts -- small slips of paper into which you infuse your own martial power and skill." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Shadow Blade" desc="In the course of your training in the Shadow Hand discipline, you learn to use your natural agility and speed to augment your attacks with certain weapons." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Shadow Trickster" desc="Your mastery of the Shadow Hand discipline lets you augment your illusion spells with the stuff of shadow." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Song of the White Raven" desc="The White Raven discipline shows you how to rouse dedication and fervor within your allies' hearts." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Snap Kick" desc="You have continued to hone your unarmed combat skills, and you deal more damage with your unarmed strikes." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Stone Power" desc="The principles of the Stone Dragon discipline teach you how to gather and focus your raw, physical strength into an attack." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Sudden Recovery" desc="You can instantly recover your focus, balance, and personal energy after using a martial maneuver." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Superior Unarmed Strike" desc="Your unarmed strikes have become increasingly deadly, enabling you to strike your foes in their most vulnerable areas." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Tiger Blooded" desc="The Tiger Claw discipline teaches students to mimic the rampant, feral qualities of a wild animal." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Unnerving Calm" desc="You know that the secret to defeating your enemies lies within the still center of your own mind." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Vital Recovery" desc="Preparing yourself to execute more of your maneuvers gives you the chance to catch a quick second wind and recover from damage you have sustained in the fight." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="White Raven Defense" desc="The White Raven discipline has taught you to shine as a gleaming beacon of hope and endurance amid the chaos of battle." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 34" name="Clarion Commander" desc="On the battlefield, you are a natural leader." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 34" name="Distant Horizon" desc="An initiate of the Setting Sun sometimes learns a set of combat maneuvers to create the Distant Horizon fighting form." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 34" name="Faith Unswerving" desc="The initiate of the Devoted Spirit knows that his fanaticism and devotion to a cause are enough to carry him through almost anything." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Gloom Razor" desc="The teachings of the Shadow Hand discipline allow you to confuse your enemies." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Perfect Clarity of Mind and Body" desc="Your mastery of the Diamond Mind discipline allows you to tap into reserves of spiritual and physical strength that other warriors cannot imagine using." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Reaping Talons" desc="When fighting with the Tiger Claw discipline's preferred weapons, you can use a variety of combat options that maximize the benefits of wielding two weapons." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Scorching Sirocco" desc="As a student of the Desert Wind, the burning fury of the desert sirocco is at your command." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 36" name="Shards of Granite" desc="Like the great Stone Dragon, you hammer through your opponents' defenses using raw, brutal strength." />
-    <feat type="Tome of Battle: The Book of Nine Swords page 36" name="Stormguard Warrior" desc="The Stormguard Warrior feat encompasses a number of the more advanced tactics and techniques you would use as a student of the Iron Heart school." />
-    <feat type="Dragon Magic page 15" name="Armor of Scales [Ceremony]" desc="You imbue a target with the protection of a dragon's blade." />
-    <feat type="Dragon Magic page 15" name="Black Dragon Lineage [Draconic]" desc="You have attuned yourself to your black dragon ancestry and can poison foes with your touch." />
-    <feat type="Dragon Magic page 15" name="Blue Dragon Lineage [Draconic]" desc="You have learned to harness the power of your blue dragon ancestry and can hurl orbs of lightning." />
-    <feat type="Dragon Magic page 16" name="Brass Dragon Lineage [Draconic]" desc="You have unlocked the power of your brass dragon ancestry and can put foes to sleep with ease." />
-    <feat type="Dragon Magic page 16" name="Bronze Dragon Lineage [Draconic]" desc="You have tapped into your bronze dragon blood and can channel arcane energy to repel foes." />
-    <feat type="Dragon Magic page 16" name="Copper Dragon Lineage [Draconic]" desc="You have learned to channel the powers of your copper dragon ancestry to hinder your enemies' mobility." />
-    <feat type="Dragon Magic page 16" name="Double Draconic Aura" desc="You can project two draconic auras simultaneously." />
-    <feat type="Dragon Magic page 16" name="Draconic Armor [Draconic]" desc="You learn to block damage from successful attacks, lessening the blows with spell energy." />
-    <feat type="Dragon Magic page 16" name="Draconic Aura" desc="You can tap into the raw power of dragons to create a variety of potent auras around you." />
-    <feat type="Dragon Magic page 17" name="Draconic Heritage [Draconic]" desc="You have a greater connection with your draconic bloodline than others of your kind." />
-    <feat type="Dragon Magic page 17" name="Draconic Knowledge [Draconic]" desc="Your draconic blood lets you access ancient draconic knowledge." />
-    <feat type="Dragon Magic page 17" name="Draconic Senses [Draconic]" desc="Your draconic blood grants you great sensory powers." />
-    <feat type="Dragon Magic page 17" name="Draconic Vigor [Draconic]" desc="You gain some of the vitality of your draconic ancestry when casting spells." />
-    <feat type="Dragon Magic page 17" name="Dragonfire Assault [Draconic]" desc="You can augment your most powerful melee attacks with draconic power." />
-    <feat type="Dragon Magic page 17" name="Dragonfire Channeling [Draconic]" desc="You channel draconic fire through your holy symbol." />
-    <feat type="Dragon Magic page 17" name="Dragonfire Inspiration [Draconic]" desc="You can channel the power of your draconic ancestry into the attacks of your allies." />
-    <feat type="Dragon Magic page 18" name="Dragonfire Strike [Draconic]" desc="You can call upon your innate draconic powers to augment certain weapon attacks." />
-    <feat type="Dragon Magic page 18" name="Dragontouched [Draconic]" desc="You have a trace of draconic power, a result of dragons in your ancestry or a spiritual connection between you and the forces of dragonkind." />
-    <feat type="Dragon Magic page 19" name="Gold Dragon Lineage [Draconic]" desc="You can harness the legacy of your gold dragon ancestry to protect your allies." />
-    <feat type="Dragon Magic page 19" name="Heart of Dragons [Ceremony]" desc="You imbue your allies with draconic power." />
-    <feat type="Dragon Magic page 20" name="Initiate of Aasterinian [Initiate]" desc="You live for the moment, reveling in new experiences without fear of consequence." />
-    <feat type="Dragon Magic page 20" name="Initiate of Astilabor [Initiate]" desc="You share your deity's desire to acquire and protect treasure, and she has recognized this by granting you an edge in achieving these goals." />
-    <feat type="Dragon Magic page 20" name="Initiate of Bahamut [Initiate]" desc="The Platinum Dragon has entrusted you with great power in the battle against evil." />
-    <feat type="Dragon Magic page 20" name="Initiate of Falazure [Initiate]" desc="Your celebration of death and decay has opened up new magical secrets involving the living and undead." />
-    <feat type="Dragon Magic page 20" name="Initiate of Garyx [Initiate]" desc="You channel the cleansing fire of destruction, as wielded by your deity." />
-    <feat type="Dragon Magic page 21" name="Initiate of Hlal [Initiate]" desc="Fueled by faith in your deity, your audacity and bravery truly know no bounds." />
-    <feat type="Dragon Magic page 21" name="Initiate of Io [Initiate]" desc="Your deity has entrusted you with the responsibility of tending to dragonkind." />
-    <feat type="Dragon Magic page 21" name="Initiate of Lendys [Initiate]" desc="Your dedication to justice grants you the ability to ferret out and punish wrongdoers." />
-    <feat type="Dragon Magic page 21" name="Initiate of Tamara [Initiate]" desc="You wield the twin powers of mercy and death in service to your draconic patron." />
-    <feat type="Dragon Magic page 21" name="Initiate of Tiamat [Initiate]" desc="Your homage to the creator of evil dragonkind has been rewarded with physical and mental power." />
-    <feat type="Dragon Magic page 21" name="Red Dragon Lineage [Draconic]" desc="The fiery blood of red dragons runs within your veins, allowing you to produce flames from thin air." />
-    <feat type="Dragon Magic page 22" name="Silver Dragon Lineage [Draconic]" desc="You are the descendant of silver dragons and can harness your ancestors' power to paralyze your opponents." />
-    <feat type="Dragon Magic page 22" name="Slayer of Dragons [Ceremony]" desc="You protect your allies from the ravages they are sure to face while hunting dragons." />
-    <feat type="Dragon Magic page 22" name="White Dragon Lineage [Draconic]" desc="Your veins run with the savage blood of white dragons, allowing you to whyp yourself into a ragelike state." />
-    <feat type="Dragon Magic page 22" name="Words of Draconic Power [Ceremony]" desc="You tap into the great tradition of draconic magic to enhance the words of your allies." />
-    <feat type="Faiths of Eberron page 145" name="Action Healing" desc="You can spend an action point to enhance your healing power." />
-    <feat type="Faiths of Eberron page 145" name="Ancestral Whispers" desc="Through intense focus and divine energies, you can hear the advice of past ancestors." />
-    <feat type="Faiths of Eberron page 145" name="Ceremonial Empowerment" desc="Your divine might increases on your patron's holy days." />
-    <feat type="Faiths of Eberron page 145" name="Construct Grafter [Item Creation]" desc="You can apply construct grafts to other living creatures or to yourself." />
-    <feat type="Faiths of Eberron page 145" name="Divine Alacrity [Divine]" desc="You can channel divine energies into your own body, increasing your speed." />
-    <feat type="Faiths of Eberron page 146" name="Divine Countermagic [Divine]" desc="You channel divine energies to counter spells." />
-    <feat type="Faiths of Eberron page 146" name="Divine Warrior [Divine]" desc="Through divine power, you wield your deity's favored weapon to devastating effect." />
-    <feat type="Faiths of Eberron page 147" name="Domain Spontaneity [Divine]" desc="You are so familiar with one of your domains that you can convert other prepared spells into spells from that domain." />
-    <feat type="Faiths of Eberron page 147" name="Frantic Rage" desc="Your divine madness allows you to channel your fury into frenetic agility rather than might." />
-    <feat type="Faiths of Eberron page 147" name="Heroic Channeling [Divine]" desc="You can call on your personal strength of will to channel positive or negative energy into divine feats." />
-    <feat type="Faiths of Eberron page 147" name="Heroic Devotion [Divine]" desc="Your devotion to your faith allows you to manipulate fate at the expense of some spellcasting ability." />
-    <feat type="Faiths of Eberron page 147" name="Lucid Channeling" desc="When you invite a celestial into your body, you open your mind completely to the divine spirit." />
-    <feat type="Faiths of Eberron page 147" name="Nightbringer Initiate" desc="You have been trained in the ways of the Nightbringers, a new offshoot of the Children of Winter." />
-    <feat type="Faiths of Eberron page 147" name="Sacred Resilience" desc="You can channel divine energies to protect your allies from harm." />
-    <feat type="Faiths of Eberron page 148" name="Touch of Silver" desc="Your devotion to the Silver Flame allows you to burn the Church's foes with holy energies." />
-    <feat type="Faiths of Eberron page 148" name="Unquenchable Flame of Life" desc="You are hardened to the attacks of the undead." />
-    <feat type="Faiths of Eberron page 148" name="Unyielding Bond of Soul" desc="You are hardened to the attacks of the beings of other worlds." />
-    <feat type="Faiths of Eberron page 148" name="Worldly Focus" desc="Your belief in the omnipresence of the gods is so strong, you can channel your spells through the environment rather than a holy symbol." />
-    <feat type="Faiths of Eberron page 148" name="Wrest Possession" desc="If you resist control by a possessing fiend, you can attempt to seize control of its abilities." />
-    <feat type="Expedition to Castle Ravenloft page 200" name="Enduring Life" desc="You can ignore the effect of negative levels for a short time." />
-    <feat type="Expedition to Castle Ravenloft page 200" name="Lasting Life" desc="You can shed negative levels with an act of will." />
-    <feat type="Expedition to Castle Ravenloft page 205" name="Favored in Guild" desc="You are an active and valued member of your guild." />
-    <feat type="Complete Mage page 37" name="Acidic Splatter" desc="You can channel magical energy into orbs of acid." />
-    <feat type="Complete Mage page 37" name="Alacritous Cogitation" desc="You can leave a prepared spell slot open to spontaneously cast a spell." />
-    <feat type="Complete Mage page 39" name="Aquatic Breath [Reserve]" desc="Your reservoir of magic allows you to breathe normally even underwater." />
-    <feat type="Complete Mage page 39" name="Battlecaster Defense [Tactical]" desc="You have mastered techniques for taking full advantage of spells in melee while remaining unharmed." />
-    <feat type="Complete Mage page 40" name="Battlecaster Offense [Tactical]" desc="You cunningly mix melee combat and spellcasting to increase the potency of both." />
-    <feat type="Complete Mage page 40" name="Blade of Force [Reserve]" desc="You can surround a weapon with a short-lived aura of force." />
-    <feat type="Complete Mage page 40" name="Borne Aloft [Reserve]" desc="You can channel the magic of the winds to briefly grant you flight." />
-    <feat type="Complete Mage page 40" name="Captivating Melody" desc="You can expend some of your musical abilities to increase the potency of your enchantment or illusion spells." />
-    <feat type="Complete Mage page 40" name="Clap of Thunder [Reserve]" desc="You can deliver a thunderous roar with a touch." />
-    <feat type="Complete Mage page 40" name="Cloudy Conjuration" desc="Your conjured creations and summoned beings appear in a puff of sickening black smoke, and you vanish in a cloud of the same when you teleport." />
-    <feat type="Complete Mage page 40" name="Clutch of Earth [Reserve]" desc="You briefly increase the earth's pull on the target creature." />
-    <feat type="Complete Mage page 41" name="Dazzling Illusion" desc="Casting illusions causes the air about you to be filled with flashing colors that dazzle your foes." />
-    <feat type="Complete Mage page 41" name="Defending Spirit" desc="Your watchful spirit helps keep you safe in combat." />
-    <feat type="Complete Mage page 41" name="Delay Potion" desc="You can drink a potion and postpone its effects." />
-    <feat type="Complete Mage page 41" name="Dimensional Jaunt" desc="With a single step, you can cross an entire room." />
-    <feat type="Complete Mage page 41" name="Dimensional Reach [Reserve]" desc="You can transport small objects to you with an act of will." />
-    <feat type="Complete Mage page 41" name="Drowning Glance [Reserve]" desc="With a look, you create a small but incapacitating amount of water in the subject's lungs." />
-    <feat type="Complete Mage page 42" name="Elemental Adept" desc="You can spontaneously cast a spell of the element you have mastered." />
-    <feat type="Complete Mage page 42" name="Energy Abjuration" desc="Casting an abjuration spell grants you protection from energy damage." />
-    <feat type="Complete Mage page 42" name="Energy Gestalt [Tactical]" desc="You have learned to combine multiple energy effects to great advantage." />
-    <feat type="Complete Mage page 42" name="Face-Changer [Reserve]" desc="Your mastery of illusions allows you to subtly alter your appearance at whim." />
-    <feat type="Complete Mage page 42" name="Favored Magic Foe" desc="Through study, you have learned how best to defend yourself against your favored enemies' spells and how to best affect them with your own." />
-    <feat type="Complete Mage page 42" name="Fearsome Necromancy" desc="Creatures subjected to your necromantic spells feel the chill of fear." />
-    <feat type="Complete Mage page 43" name="Fey Heritage [Heritage]" desc="You are descended from creatures native to the fey realms. You are naturally resistant to the most common effects produced by" />
-    <feat type="Complete Mage page 43" name="Fey Legacy [Heritage]" desc="The magical powers of your ancestors manifest in you." />
-    <feat type="Complete Mage page 43" name="Fey Power [Heritage]" desc="Your fey heritage augments the power of certain types of magic." />
-    <feat type="Complete Mage page 43" name="Fey Presence [Heritage]" desc="You share your ancestor's knack for playing tricks on the minds of others." />
-    <feat type="Complete Mage page 43" name="Fey Skin [Heritage]" desc="Your fey heritage guards you against all weapons except those crafted from the dreaded cold iron." />
-    <feat type="Complete Mage page 43" name="Fiendish Heritage [Heritage]" desc="You are descended from creatures native to the Lower Planes." />
-    <feat type="Complete Mage page 43" name="Fiendish Legacy [Heritage]" desc="The magical powers of your ancestors manifest in you." />
-    <feat type="Complete Mage page 43" name="Fiendish Power [Heritage]" desc="Your fiendish heritage augments the power of certain types of magic." />
-    <feat type="Complete Mage page 43" name="Fiendish Presence [Heritage]" desc="You share your ancestors' ability to tamper with the minds of weak-minded fools." />
-    <feat type="Complete Mage page 43" name="Fiendish Resistance [Heritage]" desc="Your bloodline inures you against corrosion and fire." />
-    <feat type="Complete Mage page 43" name="Fiery Burst [Reserve]" desc="You channel your magical talent into a blast of fire." />
-    <feat type="Complete Mage page 44" name="Hasty Spirit" desc="Your watchful spirit lends you a burst of speed in times of great need." />
-    <feat type="Complete Mage page 44" name="Hurricane Breath [Reserve]" desc="The power of elemental air you hold in your mind allows you to exhale the wind." />
-    <feat type="Complete Mage page 44" name="Insightful Divination" desc="Casting a divination spell grants you an uncanny insight into danger." />
-    <feat type="Complete Mage page 44" name="Invisible Needle [Reserve]" desc="You can create tiny darts of force." />
-    <feat type="Complete Mage page 44" name="Magic Device Attunement" desc="You have a knack for activating familiar magic items." />
-    <feat type="Complete Mage page 44" name="Magic Disruption [Reserve]" desc="You can use your powers of abjuration to interfere with other casters' spells." />
-    <feat type="Complete Mage page 44" name="Magic Sensitive [Reserve]" desc="You literally see the emanations of magic around you." />
-    <feat type="Complete Mage page 44" name="Master of Undeath" desc="You can control an undead that you create . . . for a time." />
-    <feat type="Complete Mage page 44" name="Melodic Casting" desc="You can weave your music and magic together into a single perfect voice." />
-    <feat type="Complete Mage page 45" name="Metamagic School Focus" desc="You are unusually skilled at modifying the effects of a particular school of magic." />
-    <feat type="Complete Mage page 45" name="Metamagic Spell Trigger" desc="You can apply metamagic feats you know to spell effects from magic items you activate with a spell trigger." />
-    <feat type="Complete Mage page 45" name="Metamagic Vigor [Tactical]" desc="The energy you pour into increasing the power of your spells feeds back upon itself in an ever-increasing cycle." />
-    <feat type="Complete Mage page 45" name="Minor Shapeshift [Reserve]" desc="Your mastery of shapeshifting magic allows you to reshape your flesh in small but significant ways." />
-    <feat type="Complete Mage page 45" name="Mystic Backlash [Reserve]" desc="With a touch, your magic corrupts the spells of your enemy." />
-    <feat type="Complete Mage page 46" name="Piercing Evocation" desc="Your evocation spells ignore an amount of energy resistance." />
-    <feat type="Complete Mage page 46" name="Ranged Recall" desc="Your magical ranged attacks rarely miss." />
-    <feat type="Complete Mage page 46" name="Rapid Metamagic" desc="You possess an uncanny mastery of your magic, enabling you to modify spells on the fly much faster than others can." />
-    <feat type="Complete Mage page 46" name="Residual Magic [Tactical]" desc="You can use the lingering energy from a spell you cast to boost the effect of a later spell." />
-    <feat type="Complete Mage page 47" name="Retributive Spell [Metamagic]" desc="You can keep a spell in reserve to use when a foe causes you harm." />
-    <feat type="Complete Mage page 47" name="Shadow Veil [Reserve]" desc="You draw wisps of darkness across your enemy's eyes, obscuring the world around him." />
-    <feat type="Complete Mage page 47" name="Sickening Grasp [Reserve]" desc="You wreak havoc with the inner organs of a target, causing it to grow ill." />
-    <feat type="Complete Mage page 47" name="Somatic Weaponry" desc="You are adept at performing somatic spell components while your hands are occupied." />
-    <feat type="Complete Mage page 47" name="Storm Bolt [Reserve]" desc="The electrical energy contained within your magic rages inside you, begging to be released." />
-    <feat type="Complete Mage page 47" name="Summon Elemental [Reserve]" desc="You can channel the summoning power you hold to briefly bring forth an elemental servant." />
-    <feat type="Complete Mage page 48" name="Sunlight Eyes [Reserve]" desc="The bright magic within you allows you to see through the darkest shadow." />
-    <feat type="Complete Mage page 48" name="Touch of Distraction [Reserve]" desc="Your touch briefly clouds the mind of a foe, impeding its efforts." />
-    <feat type="Complete Mage page 48" name="Toughening Transmutation" desc="Casting a transmutation spell briefly transforms your skin or that of an ally into sterner stuff." />
-    <feat type="Complete Mage page 48" name="Unsettling Enchantment" desc="Your enchantment spells cloud the minds of even those who would otherwise resist their effects." />
-    <feat type="Complete Mage page 48" name="Vengeful Spirit" desc="Your watchful spirit takes revenge on foes that have harmed you." />
-    <feat type="Complete Mage page 48" name="Wind-Guided Arrows [Reserve]" desc="Your mastery of the wind allows you to alter the flight of a ranged weapon." />
-    <feat type="Complete Mage page 48" name="Winter's Blast [Reserve]" desc="The frozen magic within you can burst forth in a hail of frost." /></feats>
+<feats>
+    <feat type="Arms and Equipment Guide page 73" name="[Creature Type] Trainer" desc="You are skilled at training a particular type  of creature." />
+    <feat type="Eberron Campaign Setting page 47" name="Aberrant Dragonmark" desc="Although you are not a recognized member of  one of the dragonmarked families, you have manifested a dragonmark." />
+    <feat type="Lords of Madness page 178" name="Aberration Banemagic" desc="You can cast spells that do additional damage  to aberrations." />
+    <feat type="Lords of Madness page 178" name="Aberration Blood" desc="One of your ancestors was an aberration and  has passed the taint of its aberrant physiology down through the generations  to you." />
+    <feat type="Lords of Madness page 178" name="Aberration Wild Shape" desc="Thanks to your heritage, you have learned to  channel your inhuman bloodline into your shapeshifting power." />
+    <feat type="Monster Manual v.3.5 page 303" name="Ability Focus" desc="Choose one of the creature's special attacks.  This attack becomes more potent than normal." />
+    <feat type="Monster Manual II page 18" name="Ability Focus" desc="One of the creature's special attacks is more  potent than normal." />
+    <feat type="Monster Manual III page 206" name="Ability Focus" desc="The special attack of a creature with this feat  is more potent than normal." />
+    <feat type="Savage Species page 30" name="Ability Focus" desc="Choose one of your spell-like abilities. This  attack becomes much more potent than normal." />
+    <feat type="Races of Destiny page 150" name="Able Learner" desc="You have great aptitude for learning." />
+    <feat type="Races of the Wild page 148" name="Able Sniper" desc="You are accomplished at remaining unseen when  you're sniping with a ranged weapon." />
+    <feat type="Unearthed Arcana page 92" name="Accurate Jaunt" desc="You have an instinctive sense of interplanar  travel." />
+    <feat type="Planar Handbook page 37" name="Acheron Flurry" desc="You master the secret technique developed by  Acheron-native special forces of limiting a foe's options in hand-to-hand  combat." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Acrobatic" desc="You have excellent body awareness and coordination." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Acrobatic" desc="You have excellent body awareness and coordination." />
+    <feat type="Eberron Campaign Setting page 47" name="Action Boost" desc="You have the ability to alter your luck drastically  in dire circumstances." />
+    <feat type="Eberron Campaign Setting page 50" name="Action Surge" desc="By spending 2 action points, you can perform  an additional action in a round." />
+    <feat type="Eberron Campaign Setting page 50" name="Adamantine Body" desc="At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction." />
+    <feat type="Monster Manual III page 192" name="Adamantine Body" desc="At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction." />
+    <feat type="Races of Eberron page 118" name="Adamantine Body" desc="At the cost of mobility, your warforged body  can be crafted with a layer of adamantine that provides formidable protective  armor and some damage reduction." />
+    <feat type="Epic Level Handbook page 50" name="Additional Magic Item Space" desc="You can wear more magic items." />
+    <feat type="Draconomicon page 67" name="Adroit Flyby Attack" desc="You can make flyby attacks and get out of reach  quickly." />
+    <feat type="Races of Eberron page 105" name="Aerenal Beastmaster" desc="As an elf of Aerenal, you consider baboons sacred  animals and they serve you obediently." />
+    <feat type="Races of the Wild page 148" name="Aerial Reflexes" desc="Your aerial agility allows you to avoid dangerous  effects while airborne." />
+    <feat type="Races of the Wild page 148" name="Aerial Superiority" desc="You can use your flying ability to gain an advantage  against landbound foes or airborne foes that you can outmaneuver." />
+    <feat type="Races of Faerun page 160" name="Aftersight" desc="You have a trace of the Sight in your blood,  which enables you to pick up echoes of the past, both wondrous and terrible." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Agile" desc="You are particularly flexible and poised." />
+    <feat type="Races of the Wild page 148" name="Agile Athlete" desc="You rely on your agility to perform athletic  feats, rather than brute strength." />
+    <feat type="Lords of Madness page 44" name="Agile Tyrant" desc="A creature with this feat develops longer, more  flexible eyestalks than its kin. This extra flexibility allows it to bring  additional eye rays to bear against its foes." />
+    <feat type="Ghostwalk page 28" name="Agony Touch" desc="Choose one physical ability score. When you  touch a creature, you can deal damage to this ability score." />
+    <feat type="Planar Handbook page 37" name="Air Heritage" desc="You are descended from creatures native to the  Elemental Plane of Air." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Alertness" desc="You have finely tuned senses." />
+    <feat type="Expanded Psionics Handbook page 41" name="Aligned Attack" desc="Your melee or ranged attack overcomes your opponent's  alignment-based damage reduction and deals additional damage." />
+    <feat type="Shining South page 19" name="Allied Defense" desc="You are good at protecting nearby allies." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Alluring" desc="Others have an inexplicable urge to believe  your every word." />
+    <feat type="Frostburn page 45" name="Altitude Adaptation" desc="Your body adapts quickly to changes in altitude,  preventing you from suffering as much from altitude sickness." />
+    <feat type="Planar Handbook page 38" name="Anarchic Heritage" desc="You are descended from creatures native to the  planes of chaos." />
+    <feat type="Races of Eberron page 105" name="Ancestral Guidance" desc="The spirit of your patron ancestor guides your  hands and thoughts in times of trouble." />
+    <feat type="Races of Stone page 136" name="Ancestral Knowledge" desc="You have a strong connection to the ancestors  of your clan, giving you understanding and knowledge beyond the mortal realms." />
+    <feat type="Book of Exalted Deeds page 39" name="Ancestral Relic" desc="You own an ancestral heirloom and can invest  it with increasing power." />
+    <feat type="Races of Faerun page 161" name="Ancestral Spirit" desc="You have ties to the long-dead spirit of one  of your clan's ancestors, who whispers ancient words of wisdom into your  mind in times of need." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Animal Affinity" desc="You are good with animals." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 20" name="Animal Control" desc="You can channel the power of nature to gain  mastery over animal creatures." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 20" name="Animal Defiance" desc="You can channel the power of nature to drive  off animals." />
+    <feat type="Book of Exalted Deeds page 41" name="Animal Friend" desc="Animals respond favorably to the aura of goodness  that exudes from you." />
+    <feat type="Races of Faerun page 161" name="Animal Friends" desc="Your ability to speak with animals has  allowed you to befriend an animal as a permanent ally." />
+    <feat type="Shining South page 19" name="Ankheg Tribe Ambush" desc="You have learned how to hide and spring to attack,  much like the ankhegs that roam the plains where you hunt." />
+    <feat type="Expanded Psionics Handbook page 41" name="Antipsionic Magic" desc="Your spells are more potent when used against  psionic characters and creatures." />
+    <feat type="Complete Warrior page 112" name="Anvil of Thunder" desc="You have mastered the style of fighting with  hammer and axes at the same time, and have learned to deal thunderous blows  with this unique pairing of weapons." />
+    <feat type="Complete Adventurer page 103" name="Appraise Magic Value" desc="Your ability to determine an item's worth and  your knowledge of magic allow you to determine the exact properties of a  magic item without the use of the identify spell or similar magic." />
+    <feat type="Dungeon Master's Guide II page 176" name="Apprentice" desc="A character with this feat has apprenticed himself  to a master in order to speed his learning and bolster his skills." />
+    <feat type="Stormwrack page 90" name="Aquatic Shot" desc="You have developed the technique of firing a  ranged weapon into or through the water with better accuracy than normal,  striking at just the right angle to allow it to slice through the obstruction  with precision." />
+    <feat type="Lords of Madness page 178" name="Aquatic Spellcasting" desc="You know how to cast spells that work equally  well in or out of water." />
+    <feat type="Races of Faerun page 161" name="Arachnid Rider" desc="You are trained in the art of employing spiders  as steeds." />
+    <feat type="Complete Arcane page 73" name="Arcane Defense" desc="Choose a school of magic, such as illusion.  You can resist spells from that school better than normal." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 38" name="Arcane Defense" desc="Choose a school of magic. You can resist spells  from that school better than normal." />
+    <feat type="Complete Divine page 79" name="Arcane Disciple" desc="Choose a deity, and then select a domain available  to clerics of that deity. You can learn to cast spells associated with that  domain as arcane spells." />
+    <feat type="Races of Destiny page 154" name="Arcane Insight" desc="By immersing yourself in the teachings of Boccob,  you have unearthed magical secrets and gained special insight into arcane  spellcasting." />
+    <feat type="Lost Empires of Faerun page 6" name="Arcane Manipulation" desc="You are learned in the arcane ways of Netheril,  where masters of magic once molded and shaped arcane energy to their own  will." />
+    <feat type="Complete Arcane page 73" name="Arcane Mastery" desc="You are quick and certain in your efforts to  defeat the arcane defenses and spells of others." />
+    <feat type="Complete Arcane page 73" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
+    <feat type="Forgotten Realms Campaign Setting page 33" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
+    <feat type="Player's Guide to Faerun page 32" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 38" name="Arcane Preparation" desc="You can prepare an arcane spell ahead of time,  just as a wizard does." />
+    <feat type="Forgotten Realms Campaign Setting page 33" name="Arcane Schooling" desc="In your homeland, all who show some skill at  the Art may receive training as a wielder of magic." />
+    <feat type="Player's Guide to Faerun page 33" name="Arcane Schooling" desc="In your homeland, all who show some skill at  the Art may receive training as arcane spellcasters." />
+    <feat type="Complete Warrior page 96" name="Arcane Strike" desc="You can channel arcane energy into your melee  attacks." />
+    <feat type="Lost Empires of Faerun page 6" name="Arcane Transfiguration" desc="Drawing upon forgotten lore, you broaden your  arcane studies and master a school of magic previously prohibited to you." />
+    <feat type="Races of Faerun page 161" name="Arctic Adaptation" desc="You have adapted to the snowbound environment  of the arctic reaches of Faerun." />
+    <feat type="Savage Species page 30" name="Area Attack" desc="You can wield improvised weapons to attack several  spaces at once." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Armor Proficiency (Heavy)" desc="You are proficient with heavy armor." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Armor Proficiency (Light)" desc="You are proficient with light armor." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Armor Proficiency (Medium)" desc="You are proficient with medium armor." />
+    <feat type="Complete Warrior page 151" name="Armor Skin" desc="Your skin becomes like armor." />
+    <feat type="Epic Level Handbook page 50" name="Armor Skin" desc="Your skin becomes like armor." />
+    <feat type="Oriental Adventures page 60" name="Art of Fascination" desc="You claim descent from Kakita Wayozu, whose  art was so great it is said that she helped create an alternate world." />
+    <feat type="Complete Warrior page 96" name="Arterial Strike" desc="Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Arterial Strike" desc="Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss." />
+    <feat type="Frostburn page 46" name="Artic Priest" desc="You can swap out prepared spells to cast spell  to aid in exploring and surviving in frostfell areas." />
+    <feat type="Forgotten Realms Campaign Setting page 33" name="Artist" desc="You come from a culture in which the arts, philosophy,  and music have a prominent place in society." />
+    <feat type="Oriental Adventures page 61" name="Artist" desc="You claim descent from Doji, who was known as  a creator of culture and civilization." />
+    <feat type="Player's Guide to Faerun page 33" name="Artist" desc="Your people are renowned for their skill at  story and song." />
+    <feat type="Complete Adventurer page 105" name="Ascetic Hunter" desc="You have gone beyond the bounds of your monastic  training to incorporate new modes of bringing the unlawful to justice." />
+    <feat type="Complete Adventurer page 105" name="Ascetic Knight" desc="You belong to a special order of religious monks  that teaches its adherents that self-enlightenment and honorable service  grow from the same well of purity." />
+    <feat type="Complete Adventurer page 105" name="Ascetic Magic" desc="You practice an unusual martial art that mixes  self-taught spellcasting and melee attacks to great effect." />
+    <feat type="Complete Adventurer page 106" name="Ascetic Rogue" desc="You have gone beyond the bounds of your monastic  training to incorporate new modes of stealthy combat." />
+    <feat type="Eberron Campaign Setting page 50" name="Ashbound" desc="You have been trained in the druidic traditions  of the Ashbound, seeing yourself as one of nature's avengers." />
+    <feat type="Savage Species page 30" name="Assume Supernatural Ability" desc="You learn to use a supernatural ability of an  assumed form." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Athletic" desc="You have a knack for athletic endeavors." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Athletic" desc="You're physically fit and adept at outdoor sports." />
+    <feat type="Oriental Adventures page 61" name="Attention to Detail" desc="You are descended from Akodo's advisor Ikoma  -- a historian, judge, and storyteller." />
+    <feat type="Magic of Faerun page 21" name="Attune Gem" desc="You can magically imbue gems to hold a spell  until triggered." />
+    <feat type="Eberron Campaign Setting page 50" name="Attune Magic Weapon" desc="Through your study of magic weapons, you have  become adept at eking every advantage out of their enhanced qualities." />
+    <feat type="Complete Divine page 79" name="Augment Healing " desc="You can increase your healing ability." />
+    <feat type="Magic of Faerun page 21" name="Augment Summoning" desc="Your summoned creatures are better than normal." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Augment Summoning" desc="Your summoned creatures are more powerful than  normal." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Augment Summoning" desc="Your summoned creatures are more powerful than  normal." />
+    <feat type="Complete Adventurer page 191" name="Augmented Alchemy" desc="You can create alchemical items and substances  that are much more powerful than normal." />
+    <feat type="Epic Level Handbook page 50" name="Augmented Alchemy" desc="You can create alchemical items and substances  that are much more powerful than normal." />
+    <feat type="Races of Stone page 136" name="Auspicious Marking" desc="Your [goliath] skin patterns indicate that fate  has marked you for greatness, and the patterns shift slowly to take new  forms." />
+    <feat type="Complete Arcane page 191" name="Automatic Quicken Spell" desc="You can cast any of your lesser spells with  a moment's thought." />
+    <feat type="Epic Level Handbook page 50" name="Automatic Quicken Spell" desc="You can cast any of your lesser spells with  a moment's thought." />
+    <feat type="Complete Arcane page 191" name="Automatic Silent Spell" desc="You can cast any of your lesser spells silently." />
+    <feat type="Epic Level Handbook page 51" name="Automatic Silent Spell" desc="You can cast any of your lesser spells silently." />
+    <feat type="Complete Arcane page 191" name="Automatic Still Spell" desc="You can cast any of your lesser spells without  gestures." />
+    <feat type="Epic Level Handbook page 51" name="Automatic Still Spell" desc="You can cast any of your lesser spells without  gestures." />
+    <feat type="Expanded Psionics Handbook page 41" name="Autonomous" desc="You have a knack for psionic self-sufficiency." />
+    <feat type="Draconomicon page 67" name="Awaken Frightful Presence" desc="You gain frightful presence." />
+    <feat type="Draconomicon page 67" name="Awaken Spell Resistance" desc="You gain spell resistance." />
+    <feat type="Monster Manual v.3.5 page 303" name="Awesome Blow" desc="The creature can choose to deliver blows that  send its smaller opponents flying like bowling pins." />
+    <feat type="Monster Manual III page 206" name="Awesome Blow" desc="A creature with this feat can choose to deliver  blows that send its smaller opponents flying like bowling pins." />
+    <feat type="Underdark page 24" name="Axeshield" desc="You know how to defend yourself with a battleaxe." />
+    <feat type="Races of Stone page 137" name="Axespike" desc="You have mastered the art of fighting in spiked  armor while wielding a greataxe. You blend greataxe blows and armor spike  attacks into one constant, deadly attack form." />
+    <feat type="Player's Guide to Faerun page 33" name="Axethrower" desc="You have learned how to hurl weapons to deadly  effect." />
+    <feat type="Planar Handbook page 38" name="Axiomatic Heritage" desc="You are descended from creatures native to the  planes of law." />
+    <feat type="Complete Warrior page 96" name="Axiomatic Strike" desc="You can turn your fist into an instrument of  law." />
+    <feat type="Player's Guide to Faerun page 135" name="Axiomatic Strike" desc="Your attacks deal incredible damage to chaotic  creatures." />
+    <feat type="Races of Faerun page 161" name="Azerblood" desc="You are descended from the shield dwarves of  Clan Azerkyn, who once ruled the Adamant Kingdom of Xothaerin beneath western  Amn. The blood of the azer runs thick in your veins." />
+    <feat type="Libris Mortis: The Book of the Dead page 24" name="Baleful Moan" desc="Your hollow cry strikes fear into the hearts  of the living." />
+    <feat type="Heroes of Battle page 96" name="Ballista Proficiency" desc="You have trained in ballista operation." />
+    <feat type="Epic Level Handbook page 51" name="Bane of Enemies" desc="Your attacks deal great damage to your favored  enemies." />
+    <feat type="Lords of Madness page 44" name="Bane of the Unclean" desc="A creature with this feat hates aberrant beholders  so strongly that it gains bonuses when fighting them." />
+    <feat type="Serpent Kingdoms page 144" name="Barbed Stinger" desc="Your stinger is unusually difficult to dislodge." />
+    <feat type="Races of Faerun page 161" name="Batrider" desc="You are highly skilled in the art of flying  dire bats, a common form of transportation among the shield dwarves of the  Far Hills." />
+    <feat type="Complete Arcane page 75" name="Battle Caster" desc="Building on your existing training allows you  to avoid the chance of arcane spell failure when you wear armor heavier  than normal." />
+    <feat type="Races of the Wild page 148" name="Battle Casting" desc="You have a knack for staying out of harm's way  when casting spells." />
+    <feat type="Races of Stone page 137" name="Battle Hardened" desc="Your extensive battle experience has left you  incredibly calm and composed, even in the heat of battle." />
+    <feat type="UE page 42" name="Battle Jump" desc="You know how to launch a devastating attack  from above by dropping onto your opponent." />
+    <feat type="Miniatures Handbook page 25" name="Battlefield Inspiration" desc="You inspire courage in your allies." />
+    <feat type="Races of Eberron page 116" name="Battleshifter Training" desc="Your shifter fighting instincts grant you a  sophisticated blend of defensive techniques and controlled attacks." />
+    <feat type="Complete Warrior page 112" name="Bear Fang" desc="You have mastered the fierce style of fighting  with axe and dagger at the same time." />
+    <feat type="Epic Level Handbook page 51" name="Beast Companion" desc="You can befriend a beast." />
+    <feat type="Eberron Campaign Setting page 50" name="Beast Shape" desc="You call upon the power of your beast totem  to physically change your form." />
+    <feat type="Eberron Campaign Setting page 51" name="Beast Totem" desc="In the druidic custom of your people, you have  claimed a kind of magical beast as your totem -- a patron, protector, and  source of strength." />
+    <feat type="Epic Level Handbook page 51" name="Beast Wild Shape" desc="You can wild shape into magical beast form." />
+    <feat type="Eberron Campaign Setting page 51" name="Beasthide Elite" desc="Your shifter trait improves." />
+    <feat type="Frostburn page 47" name="Beckon the Frozen" desc="Creatures you summon are infused with cold energy  and have the cold subtype." />
+    <feat type="Lords of Madness page 179" name="Bestial Hide" desc="Your skin is thicker, scalier, or furrier than  normal." />
+    <feat type="Eberron Campaign Setting page 51" name="Bind Elemental" desc="You can craft magic items that use bound elementals  for special effects, including weapons, armor, airships, and elemental galleons." />
+    <feat type="Complete Arcane page 75" name="Black Lore of Moil" desc="Your study of the sinister knowledge and spellcasting  techniques of the long-dead Nightlords of Moil makes your necromancy spells  especially potent." />
+    <feat type="Stormwrack page 91" name="Blackwater Invocation" desc="You can call upon negative energy to infuse  normal water around you, transforming it into the dark, cold water found  at the bottom of the deepest ocean trenches." />
+    <feat type="Races of Eberron page 107" name="Bladebearer of the Valenar" desc="Your extensive training makes you especially  adept with the curved blades of the Valenar." />
+    <feat type="Unearthed Arcana page 92" name="Bladeproof Skin" desc="Your skin has a degree of protection from even  the sharpest edge." />
+    <feat type="Sandstorm page 49" name="Blazing Berserker" desc="When you enter your rage, your body becomes  infused with fire." />
+    <feat type="Sandstorm page 49" name="Blessed by Tem-Et-Nu" desc="Tem-Et-Nu has marked you as having an important  destiny in her temple." />
+    <feat type="Player's Guide to Faerun page 176" name="Blessed of the Seven Sisters" desc="As a result of a personal connection to one  of the Seven Sisters, you have a taste of Mystra's special favor." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Blind-Fight" desc="You know how to fight in melee without being  able to see your foes." />
+    <feat type="Epic Level Handbook page 51" name="Blinding Speed" desc="You can trigger short bursts of great speed." />
+    <feat type="Complete Adventurer page 114" name="Blindsense" desc="You can sense creatures that you cannot see." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 21" name="Blindsight" desc="Your senses are as keen as the bat's." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 5" name="Blindsight, 5-Foot Radius" desc="You sense opponents in the darkness." />
+    <feat type="Deities and Demigods page 49" name="Blindsight, 5-Foot Radius" desc="The deity senses opponents in the darkness." />
+    <feat type="Heroes of Battle page 96" name="Block Arrow" desc="You can block incoming arrows with your shield." />
+    <feat type="Races of Faerun page 161" name="Blood of the Warlord" desc="You can influence a large number of orcs." />
+    <feat type="Oriental Adventures page 61" name="Blood Sorcerer" desc="You are descended from Yogo, the Scorpion shugenja  who was the first guardian of the Black Scrolls of Fu Leng." />
+    <feat type="Forgotten Realms Campaign Setting page 33" name="Blooded" desc="Enemies find it difficult to catch you off guard." />
+    <feat type="Player's Guide to Faerun page 35" name="Blooded" desc="You know what it means to fight for your life,  and you understand the value of quick wits and quicker reactions when blades  are bared and deadly spells are chanted." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Bloodline of Fire" desc="You are descended from the efreet who ruled  Calimshan for two millennia." />
+    <feat type="Player's Guide to Faerun page 35" name="Bloodline of Fire" desc="You are descended from the efreet who ruled  Calimshan long ago." />
+    <feat type="Champions of Ruin page 17" name="Bloodsoaked Intimidate" desc="Your bloody and vicious approach to combat makes  you a fearsome foe." />
+    <feat type="Savage Species page 31" name="Blowhard" desc="You can blow targets over with your breath." />
+    <feat type="Complete Divine page 79" name="Boar's Ferocity" desc="You can continue fighting even at the brink  of death." />
+    <feat type="Expanded Psionics Handbook page 41" name="Body Fuel" desc="You can expand your power point total at the  expense of your health." />
+    <feat type="Serpent Kingdoms page 144" name="Body Pouch" desc="You can open a cavity in your body without harm  to yourself and use it to carry or conceal items or creatures." />
+    <feat type="Libris Mortis: The Book of the Dead page 25" name="Bolster Resistance" desc="Undead you raise or create are more resistant  to turning than normal." />
+    <feat type="Savage Species page 31" name="Bonus Breath" desc="You can use your breath weapons one more time  per day than you normally could." />
+    <feat type="Complete Divine page 89" name="Bonus Domain" desc="You have access to one additional domain of  spells." />
+    <feat type="Epic Level Handbook page 51" name="Bonus Domain" desc="You have access to one additional domain of  spells." />
+    <feat type="Races of Eberron page 108" name="Boomerang Daze" desc="You can daze the targets of your boomerang attacks." />
+    <feat type="Races of Eberron page 108" name="Boomerang Ricochet" desc="You can strike up to two foes with a single  boomerang throw." />
+    <feat type="Expanded Psionics Handbook page 43" name="Boost Construct" desc="Your astral constructs have more abilities." />
+    <feat type="Book of Vile Darkness page 47" name="Boost Spell Resistance" desc="By making a deal with an evil power, the character  makes himself even more resistant to magic." />
+    <feat type="Book of Vile Darkness page 47" name="Boost Spell-Like Ability" desc="One of the creature's spell-like abilities is  harder to resist than it otherwise would be." />
+    <feat type="Oriental Adventures page 61" name="Born Duelist" desc="You claim descent from Mirumoto, one of the  first two samurai to join Togashi in his meditative retreat." />
+    <feat type="Races of the Wild page 148" name="Born Flyer" desc="You can fly as though born to do it." />
+    <feat type="Complete Arcane page 76" name="Born of the Three Thunders" desc="You have learned to marry the power of lightning  and thunder in your electricity and sonic spells." />
+    <feat type="Underdark page 24" name="Bowslinger" desc="You can ready ranged weapons surprisingly quickly." />
+    <feat type="Complete Adventurer page 106" name="Brachiation" desc="You can swing through trees like a monkey." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 21" name="Brachiation" desc="You move through trees like a monkey." />
+    <feat type="Unearthed Arcana page 92" name="Breadth of Knowledge" desc="Your time spent plumbing the depths of magic  knowledge has resulted in a treasure trove of obscure facts." />
+    <feat type="Races of Faerun page 161" name="Breathing Link" desc="You can allow a person adjacent to you to breathe  water." />
+    <feat type="Stormwrack page 92" name="Breathing Link" desc="You can allow a person adjacent to you to breathe  water." />
+    <feat type="Player's Handbook v.3.5 page 89" name="Brew Potion" desc="You can create potions, which carry spells within  themselves." />
+    <feat type="Races of Destiny page 150" name="Bright Sigil" desc="You have established a greater degree of control  over your sigils. When you concentrate, you can emit strong illumination  from the glowing symbols that surround your head." />
+    <feat type="Complete Adventurer page 106" name="Brutal Throw" desc="You have learned how to hurl weapons to deadly  effect." />
+    <feat type="Races of Eberron page 116" name="Brute Fighting" desc="Your extensive training with two-handed weapons  is revealed through brutally effective tactics." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Bullheaded" desc="The stubbornness and determination of your kind  is legendary." />
+    <feat type="Player's Guide to Faerun page 37" name="Bullheaded" desc="The stubbornness and determination of your kind  are legendary." />
+    <feat type="Epic Level Handbook page 51" name="Bulwark of Defense" desc="Your defensive stance bonuses increase." />
+    <feat type="Races of Stone page 137" name="Burrow Friend" desc="Your natural rapport with burrowing mammals  improves." />
+    <feat type="Expanded Psionics Handbook page 43" name="Burrowing Power" desc="Your powers sometimes bypass barriers." />
+    <feat type="Races of Faerun page 161" name="Calishite Elementalist" desc="You are a student of the Calishite tradition  of elemental magic and have mastered its mysterious lore. You may choose  to specialize in air magic or fire magic." />
+    <feat type="Races of Eberron page 108" name="Call of the Undying" desc="You call upon the power of the Undying Court  to instantly recall a previously cast spell." />
+    <feat type="Races of Faerun page 162" name="Caravanner" desc="You are skilled at leading caravans along established  trade routes." />
+    <feat type="Races of the Wild page 148" name="Catfolk Pounce" desc="You can rush unaware foes and deliver several  attacks before they have a chance to respond." />
+    <feat type="Underdark page 24" name="Caustic Adaptation" desc="Long have your ancestors hunted and been hunted  in the depths. Natural selection has given your blood an unpalatable, acidic  quality." />
+    <feat type="Complete Warrior page 108" name="Cavalry Charger" desc="Fighting from the back of a steed is second  nature to you." />
+    <feat type="Underdark page 24" name="Caver" desc="You are knowledgeable about the secrets of the  subterranean world and wise in its ways." />
+    <feat type="Races of Faerun page 162" name="Celestial Bloodline" desc="Some of your latent abilities have matured." />
+    <feat type="Book of Exalted Deeds page 41" name="Celestial Familiar" desc="As long as you are able to acquire a new familiar,  you may receive a celestial as a familiar." />
+    <feat type="Planar Handbook page 38" name="Celestial Heritage" desc="You are descended from creatures native to the  Upper Planes" />
+    <feat type="Book of Exalted Deeds page 42" name="Celestial Mount" desc="Your special mount is a true creature of the  heavens." />
+    <feat type="Planar Handbook page 38" name="Celestial Summoning Specialist" desc="You can select from a larger number of options  when summoning good creatures." />
+    <feat type="Races of the Wild page 148" name="Centaur Trample" desc="You have trained to use your large body and  unique physiology against your foes. You have learned how to knock down  opponents and ride over them in combat." />
+    <feat type="Expanded Psionics Handbook page 44" name="Chain Power" desc="You can manifest powers that arc to hit other  targets in addition to the primary target." />
+    <feat type="Complete Arcane page 76" name="Chain Spell" desc="You can cast spells that arc to other targets  in addition to your primary target." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Chain Spell" desc="You can cast spells that arc to other targets  in addition to your primary target." />
+    <feat type="Champions of Ruin page 17" name="Chakram Ricochet" desc="You can hurl a chakram so that it strikes two  enemies instead of one." />
+    <feat type="Serpent Kingdoms page 144" name="Chameleon Hide" desc="You can alter the hue of your scales to match  the surrounding terrain." />
+    <feat type="Lost Empires of Faerun page 7" name="Channel Charge" desc="You can power a charged magic item with your  own magical ability." />
+    <feat type="WL page 13" name="Channel Legacy" desc="You can call upon the hidden strength within  your legacy item to empower yourself for a single spectacular effort." />
+    <feat type="Races of Destiny page 150" name="Channeled Rage" desc="You can focus your rage to counter charms and  compulsions." />
+    <feat type="Complete Adventurer page 113" name="Chant of Fortitude" desc="You can channel the power of your bardic music  to sustain your allies, allowing them to function even after receiving wounds  that would cause others to falter." />
+    <feat type="Expanded Psionics Handbook page 44" name="Chaotic Mind" desc="The turbulence of your thoughts prevents others  from gaining insight into your actions." />
+    <feat type="Epic Level Handbook page 51" name="Chaotic Rage" desc="Your rage is particularly damaging to lawful  creatures." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 78" name="Chariot Archery" desc="You are skilled at using ranged weapons from  a chariot." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 79" name="Chariot Charge" desc="You are skilled at charging with your chariot." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 78" name="Chariot Combat" desc="You are skilled in chariot combat." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 79" name="Chariot Sideswipe" desc="You are skilled at using your chariot's scythe  blades against foes." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 78" name="Chariot Trample" desc="You are trained in using your chariot to knock  down opponents." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Charlatan" desc="You're adept at fooling people. You know how  to tell them just what they want to hear." />
+    <feat type="Serpent Kingdoms page 145" name="Charm Immunity" desc="You are immune to charm effects." />
+    <feat type="Serpent Kingdoms page 145" name="Charm Resistance" desc="You can resist charm effects better than you  otherwise could." />
+    <feat type="Shining South page 19" name="Cheetah Tribe Sprint" desc="You have learned the secret of lightning-fast  running from the cheetah that roams the plains where you live." />
+    <feat type="Complete Divine page 79" name="Cheetah's Speed" desc="You can run with the speed of the cheetah." />
+    <feat type="Eberron Campaign Setting page 51" name="Child of Winter" desc="You are trained in the druidic traditions of  the Children of Winter, an Eldeen Reaches sect that embraces death and decay." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Chink in the Armor" desc="You are an expert at slipping a weapon between  armor plates or into seams." />
+    <feat type="Oriental Adventures page 61" name="Choke Hold" desc="You have learned the correct way to apply pressure  to render an opponent unconscious." />
+    <feat type="Races of Faerun page 162" name="Chondathan Missionary" desc="Your training has emphasized spells that help  you spread the word of your faith." />
+    <feat type="Frostburn page 47" name="Chosen of Iborighu" desc="You gain features that identify you as an ally  to the church of Iborighu and grant you supernatural qualities." />
+    <feat type="Player's Guide to Faerun page 135" name="Chosen Weapon Specialization" desc="You deal more damage than normal when wielding  your deity's chosen weapon." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 5" name="Circle Kick" desc="You kick multiple opponents with the same attack  action." />
+    <feat type="Ghostwalk page 29" name="Circle Magic" desc="You know how to use your connection to Galaedros  the Wood God to channel magical power to another spellcaster of your faith." />
+    <feat type="Races of Destiny page 150" name="City Slicker" desc="You are very familiar with city life and the  inner workings of your hometown." />
+    <feat type="Races of Stone page 137" name="Clan Prestige" desc="Your actions have brought you some measure of  fame and respect from your clan, whether from battle prowess or years of  service to the clan." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Cleave" desc="You can follow through with powerful blows." />
+    <feat type="Complete Warrior page 97" name="Clever Wrestling " desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
+    <feat type="Draconomicon page 103" name="Clever Wrestling" desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Clever Wrestling" desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
+    <feat type="Stormwrack page 92" name="Clever Wrestling" desc="You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin." />
+    <feat type="Eberron Campaign Setting page 52" name="Cliffwalk Elite" desc="Your shifter trait improves." />
+    <feat type="Races of Eberron page 113" name="Cliffwalk Elite" desc="Your cliffwalk shifter trait improves." />
+    <feat type="Complete Adventurer page 114" name="Climb Like an Ape" desc="You can improve your climbing ability." />
+    <feat type="Draconomicon page 67" name="Clinging Breath" desc="Your breath weapon clings to creatures and continues  to affect them in the round after you breath." />
+    <feat type="Expanded Psionics Handbook page 44" name="Cloak Dance" desc="You are skilled at using optical tricks to make  yourself seem to be where you are not." />
+    <feat type="Expanded Psionics Handbook page 44" name="Closed Mind" desc="Your mind is better able to resist psionics  than normal." />
+    <feat type="Races of Faerun page 162" name="Close-Quarters Fighting" desc="You are skilled at resisting grapple attacks  from creatures that usually grapple opponents." />
+    <feat type="Complete Warrior page 97" name="Close-Quarters Fighting" desc="You are skilled at fighting at close range and  resisting grapple attempts." />
+    <feat type="Draconomicon page 103" name="Close-Quarters Fighting" desc="You are skilled at fighting at close range and  resisting grapple attempts." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 5" name="Close-Quarters Fighting" desc="You are skilled at fighting at close range and  resisting grapple attacks." />
+    <feat type="Serpent Kingdoms page 145" name="Cobra Head" desc="You can extend the skin of your neck into a  cobra hood." />
+    <feat type="Frostburn page 47" name="Cold Endurance" desc="You can exist with ease in low-temperature environments." />
+    <feat type="Frostburn page 47" name="Cold Focus" desc="Your cold spells are more potent than normal." />
+    <feat type="Races of Eberron page 119" name="Cold Iron Tracery" desc="Cold-forged iron that runs through your body  allows you to overcome the supernatural defenses of certain creatures and  protecting against some magical attacks." />
+    <feat type="Frostburn page 47" name="Cold Spell Specialization" desc="You do additional damage with cold spells." />
+    <feat type="Complete Arcane page 181" name="Collegiate Wizard" desc="You have undergone extensive training in a formal  school for wizards." />
+    <feat type="Epic Level Handbook page 52" name="Colossal Wild Shape" desc="You can wild shape into animals of Colossal  size." />
+    <feat type="Complete Warrior page 151" name="Combat Archery" desc="You can fire a bow in melee safely." />
+    <feat type="Epic Level Handbook page 52" name="Combat Archery" desc="You can fire a bow in melee safely." />
+    <feat type="Complete Warrior page 110" name="Combat Brute" desc="You employ strength and leverage to great effect  in battle." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Combat Casting" desc="You are adept at casting spells in combat." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Combat Expertise" desc="You are trained at using your combat skill for  defense as well as offense." />
+    <feat type="Complete Warrior page 151" name="Combat Insight" desc="Your keen intellect allows you to place melee  attacks where they will deal the most damage." />
+    <feat type="Complete Adventurer page 106" name="Combat Intuition" desc="Your keen understanding of your opponent's moves  and your instinctive feel for the flow of combat enable you to shrewdly  assess your opponent's combat capabilities." />
+    <feat type="Expanded Psionics Handbook page 44" name="Combat Manifestation" desc="You are adept at manifesting powers in combat." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Combat Reflexes" desc="You can respond quickly and repeatedly to opponents  who let their defenses down." />
+    <feat type="Complete Arcane page 76" name="Communicator" desc="You possess a magical understanding of the essence  of language." />
+    <feat type="Races of Destiny page 150" name="Complementary Insight" desc="You get more out of having skills that work  well together." />
+    <feat type="Unearthed Arcana page 92" name="Conductivity" desc="You have crude control over electricity effects  near you." />
+    <feat type="Races of the Wild page 153" name="Confound the Big Folk" desc="You excel when battling foes bigger than you  are." />
+    <feat type="Book of Exalted Deeds page 42" name="Consecrate Spell" desc="You can imbue your spells with the raw energy  of good, by the grace of a celestial power." />
+    <feat type="Complete Divine page 79" name="Consecrate Spell" desc="You can imbue your spells with the raw energy  of good." />
+    <feat type="Book of Exalted Deeds page 42" name="Consecrate Spell Trigger" desc="You can channel holy power through a spell trigger  item, such as a wand or staff." />
+    <feat type="Book of Exalted Deeds page 42" name="Consecrate Spell-Like Ability" desc="You can channel holy power into your spell-like  abilities." />
+    <feat type="Races of Eberron page 119" name="Construct Lock" desc="Your knowledge of construct nature allows you  to deal extra damage to or even immobilize such foes." />
+    <feat type="Libris Mortis: The Book of the Dead page 25" name="Contagious Paralysis" desc="Your paralyzing attack is contagious." />
+    <feat type="Ghostwalk page 29" name="Control Visage" desc="Your ghost body is shaped as if you were alive  and unharmed, and you can control what your ghost body appears to wear." />
+    <feat type="Unearthed Arcana page 92" name="Controlled Immolation" desc="If you catch on fire, the flames don't hurt  you." />
+    <feat type="Savage Species page 31" name="Controlled Respiration" desc="You can stay out of water longer than you otherwise  could." />
+    <feat type="Oriental Adventures page 61" name="Cool Head" desc="You are descended from the great diplomat Ide,  who was chosen to be the voice of Shinjo in all dealings with strangers." />
+    <feat type="Complete Arcane page 76" name="Cooperative Spell" desc="You can cast spells to greater effect in conjunction  with the same spell cast by another individual." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Cooperative Spell" desc="You can cast spells to greater effect in conjunction  with the same spell cast by another individual." />
+    <feat type="Heroes of Battle page 96" name="Coordinated Shot" desc="You are extraordinarily talented at making ranged  attacks past your allies." />
+    <feat type="Races of the Wild page 149" name="Coordinated Strike" desc="You and your animal companion or special mount  can coordinate your melee attacks to gain an advantage in combat." />
+    <feat type="Lost Empires of Faerun page 7" name="Cormanthyran Moon Magic" desc="You have mastered the ancient elven techniques  of drawing power from Sehanine Moonbow's light." />
+    <feat type="Dragonlance Campaign Setting page 85" name="Cornered Rat" desc="You can go from piteous groveling to a murderous  fury in the blink of an eye." />
+    <feat type="Ghostwalk page 29" name="Corpse Malevolence" desc="You can possess and animate dead bodies." />
+    <feat type="Libris Mortis: The Book of the Dead page 25" name="Corpsecrafter" desc="Undead you raise or create are tougher than  normal." />
+    <feat type="Ghostwalk page 29" name="Corrupt Arcane Studies" desc="You have dabbled in strange magic that has increased  your power but adversely affected your mind." />
+    <feat type="Book of Vile Darkness page 47" name="Corrupt Spell" desc="The character can transform one of her spells  into a thing of evil due to a deal she makes with an evil power." />
+    <feat type="Complete Divine page 79" name="Corrupt Spell" desc="You can transform one of your spells into an  evil version of itself." />
+    <feat type="Champions of Ruin page 17" name="Corrupt Spell" desc="You can transform one of your spells into a  thing of evil due to a deal you make with an evil power." />
+    <feat type="Book of Vile Darkness page 48" name="Corrupt Spell-Like Ability" desc="One of the creature's spell-like abilities is  powered by evil. A dark pact provides the creature with unholy energy." />
+    <feat type="Libris Mortis: The Book of the Dead page 25" name="Corrupted Wild Shape" desc="You have learned to use the necromantic energy  that powers your undead form to overcome the inability of undead creatures  to wild shape." />
+    <feat type="Ghostwalk page 29" name="Corrupting Touch" desc="Your touch can damage creatures." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Cosmopolitan" desc="Your exposure to the thousand forking paths  of the city has taught you things you ordinarily would never have uncovered." />
+    <feat type="Player's Guide to Faerun page 37" name="Cosmopolitan" desc="You've been lied to more times than you can  count." />
+    <feat type="Complete Adventurer page 114" name="Cougar's Vision" desc="You can see in the dark like a cat." />
+    <feat type="Heroes of Battle page 97" name="Courageous Rally" desc="You can rally demoralized foes with your bardic  music." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Courteous Magocracy" desc="You were raised in a land where mighty wizards  order affairs." />
+    <feat type="Shining South page 20" name="Cover Your Tracks" desc="You are good at masking your route, making it  difficult for others to track you." />
+    <feat type="Lords of Madness page 22" name="Craft Aboleth Glyph" desc="An aboleth with this feat can create magic glyphs  that store spells or have specialized effects of their own." />
+    <feat type="Unearthed Arcana page 99" name="Craft Alchemical Item" desc="You are capable of creating alchemical items  and substances." />
+    <feat type="Expanded Psionics Handbook page 44" name="Craft Cognizance Crystal" desc="You can create psionic cognizance crystals  that store power points." />
+    <feat type="Monster Manual v.3.5 page 303" name="Craft Construct" desc="The creature can create golems and other magic  automatons that obey its orders." />
+    <feat type="Monster Manual III page 206" name="Craft Construct" desc="A creature with this feat can create golems  and other magic automatons that obey its orders" />
+    <feat type="Complete Arcane page 77" name="Craft Contingent Spell" desc="You know how to attach semipermanent spells  to a creature and set them to activate under certain conditions." />
+    <feat type="UE page 42" name="Craft Contingent Spell" desc="You know how to create contingent spells, which  are semipermanent spells that can be 'worn' and activated under certain  conditions." />
+    <feat type="Oriental Adventures page 61" name="Craft Crystal Weapon" desc="You can create magic weapons from Kuni crystal,  which is deadly to creatures of the Shadowlands." />
+    <feat type="Expanded Psionics Handbook page 44" name="Craft Dorje" desc="You can create slender crystal wands called  dorjes that manifest powers when charges are expended." />
+    <feat type="Epic Level Handbook page 52" name="Craft Epic Magic Arms and Armor" desc="You can craft magic arms and armor of epic power." />
+    <feat type="Epic Level Handbook page 52" name="Craft Epic Rod" desc="You can craft magic rods of epic power." />
+    <feat type="Epic Level Handbook page 52" name="Craft Epic Staff" desc="You can craft magic staffs of epic power." />
+    <feat type="Epic Level Handbook page 52" name="Craft Epic Wondrous Item" desc="You can craft wondrous items of epic power." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Craft Magic Arms and Armor" desc="You can create magic weapons, armor, and shields." />
+    <feat type="Unearthed Arcana page 99" name="Craft Masterwork Armor" desc="You are trained in the creation of fine armor  and shields." />
+    <feat type="Unearthed Arcana page 99" name="Craft Masterwork Ranged Weapon" desc="You are trained in the creation of fine ranged  weapons and ammunition." />
+    <feat type="Unearthed Arcana page 99" name="Craft Masterwork Weapon" desc="You are trained in the creation of fine melee  and thrown weapons." />
+    <feat type="Expanded Psionics Handbook page 44" name="Craft Psicrown" desc="You can create psicrowns, which have multiple  psionic effects." />
+    <feat type="Expanded Psionics Handbook page 44" name="Craft Psionic Arms and Armor" desc="You can create psionic weapons, armor, and shields." />
+    <feat type="Expanded Psionics Handbook page 45" name="Craft Psionic Construct" desc="You can create golems and other psionic automatons  that obey your orders." />
+    <feat type="Lords of Madness page 69" name="Craft Psionic Seal" desc="A creature with this feat can create psionic  glyphs or symbols that hold spells or psionic powers until triggered." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Craft Rod" desc="You can create magic rods, which have varied  magical effects." />
+    <feat type="Races of Stone page 137" name="Craft Rune Circle" desc="You can create rune circles, stationary magic  items that hold a variety of spells and effects." />
+    <feat type="Lost Empires of Faerun page 8" name="Craft Scepter" desc="You know the ancient Netherese secret of creating  magic scepters." />
+    <feat type="Frostburn page 47" name="Craft Skull Talisman" desc="You can create skull talismans, which carry  spells within themselves." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Craft Staff" desc="You can create magic staffs, each of which has  multiple magical effects." />
+    <feat type="Oriental Adventures page 61" name="Craft Talisman" desc="You can create magic fetishes, single-use magic  items that hold spells until triggered." />
+    <feat type="Expanded Psionics Handbook page 45" name="Craft Universal Item" desc="You can create universal psionic items." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Craft Wand" desc="You can create wands, which hold spells." />
+    <feat type="Player's Handbook v.3.5 page 92" name="Craft Wondrous Item" desc="You can create a wide variety of magic items." />
+    <feat type="Champions of Ruin page 17" name="Craven" desc="Like most sly rogues, you are a dangerous coward.  However, your sneak attacks deal more damage than normal." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Create Infusion" desc="You store a divine spell within a specially  prepared herb." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Create Portal" desc="You have learned the ancient craft of creating  a portal." />
+    <feat type="Complete Warrior page 113" name="Crescent Moon" desc="You have mastered the style of fighting with  sword and dagger." />
+    <feat type="Races of Destiny page 156" name="Crowd Tactics" desc="You are adept at moving through and fighting  in crowds." />
+    <feat type="Savage Species page 31" name="Crush" desc="Like a dragon, you can hurl your body onto opponents  to deal tremendous damage." />
+    <feat type="Savage Species page 31" name="Cumbrous Dodge" desc="You have a chance to dodge attacks that hit  you, but at a cost." />
+    <feat type="Savage Species page 31" name="Cumbrous Fortitude" desc="You have a greater chance than normal to resist  attacks against your vitality, but at a cost." />
+    <feat type="Savage Species page 31" name="Cumbrous Reflexes" desc="You have a greater chance to resist attacks  against your agility, but at a cost." />
+    <feat type="Savage Species page 31" name="Cumbrous Will" desc="You have a greater chance to resist attacks  against your willpower, but at a cost." />
+    <feat type="Draconomicon page 103" name="Cunning Sidestep" desc="You have a better than normal chance to avoid  being bull rushed or tripped." />
+    <feat type="WL page 14" name="Curative Legacy" desc="Your item's legacy is so linked with your aura  that it restores your health each time it is activated." />
+    <feat type="Stormwrack page 92" name="Curling Wave Strike" desc="Mimicking the forceful power of the wave, you  can trip multiple foes as part of the same strike." />
+    <feat type="Races of the Wild page 149" name="Dallah Thaun's Luck" desc="You can rely on a good dose of luck to get you  through almost any scrape." />
+    <feat type="Complete Warrior page 151" name="Damage Reduction" desc="You can shrug off some damage from attacks." />
+    <feat type="Epic Level Handbook page 52" name="Damage Reduction" desc="You can shrug off some damage from attacks." />
+    <feat type="Ghostwalk page 30" name="Dancing Blade" desc="You have an energetic fighting style modeled  after traditional Salkirian dancing." />
+    <feat type="Races of Eberron page 117" name="Dancing with Shadows" desc="You have studied shesan talarash dasyannah,  the martial dance of the kalashtar." />
+    <feat type="Complete Adventurer page 106" name="Danger Sense" desc="You are one twitchy individual." />
+    <feat type="Miniatures Handbook page 25" name="Danger Sense" desc="You are one twitchy mother goose." />
+    <feat type="Races of Eberron page 108" name="Darguun Mauler" desc="The memory of your people's lost glory drives  your brutal mastery of the weapons of Darguun." />
+    <feat type="Book of Vile Darkness page 48" name="Dark Speech" desc="The character learns a smattering of the language  of truly dark power." />
+    <feat type="Lords of Madness page 179" name="Darkstalker" desc="You have learned how to stalk and surprise creatures  whose senses are very different from those of a humanoid." />
+    <feat type="Complete Warrior page 97" name="Dash" desc="You can move faster than normal." />
+    <feat type="Miniatures Handbook page 25" name="Dash" desc="You can move faster than normal." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Dash" desc="You move faster than normal for your race." />
+    <feat type="Libris Mortis: The Book of the Dead page 25" name="Daunting Presence" desc="You are skilled at inducing fear in your opponents." />
+    <feat type="Miniatures Handbook page 25" name="Daunting Presence" desc="You are skilled at inducing fear in your opponents." />
+    <feat type="Player's Guide to Faerun page 37" name="Dauntless" desc="You can stand up to greater punishment than  most and still keep going." />
+    <feat type="Player's Guide to Faerun page 37" name="Daylight Adaptation" desc="You have accustomed yourself to the painful  sunlight of the surface world." />
+    <feat type="Races of Eberron page 108" name="Daylight Adaptation" desc="You have grown accustomed to living in the surface  world, such that bright light no longer blinds or dazzles you." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Daylight Adaptation" desc="Through long exile from the shadowed homelands  of your kind, you have learned to endure the painful sunlight of the surface  world." />
+    <feat type="Libris Mortis: The Book of the Dead page 25" name="Deadly Chill" desc="Undead you raise or create deal more damage  than normal." />
+    <feat type="Serpent Kingdoms page 145" name="Deadly Poison" desc="Your poison attack deals more damage than normal." />
+    <feat type="Savage Species page 31" name="Deadly Poison" desc="Your poison attack deals more damage than normal." />
+    <feat type="Expanded Psionics Handbook page 45" name="Deadly Precision" desc="You empty your mind of all distracting emotion,  becoming an instrument of deadly precision." />
+    <feat type="Serpent Kingdoms page 145" name="Deadly Spittle" desc="You can use your spit attack against multiple  opponents." />
+    <feat type="Epic Level Handbook page 52" name="Deafening Song" desc="Your bardic music deafens those nearby." />
+    <feat type="Complete Adventurer page 106" name="Death Blow" desc="You waste no time in dealing with downed foes." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Death Blow" desc="You waste no time in dealing with downed foes." />
+    <feat type="Lords of Madness page 22" name="Death Frenzy" desc="When an aboleth takes this feat, its sense of  immortality rebels against the very concept of death." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Death Master" desc="Foes are especially afraid of your critical  hits." />
+    <feat type="Epic Level Handbook page 52" name="Death of Enemies" desc="You can instantly slay your favored enemies  with a single strike." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Deceitful" desc="You have a knack for disguising the truth." />
+    <feat type="Savage Species page 32" name="Deep Denizen" desc="You are adapted to a subterranean environment." />
+    <feat type="Expanded Psionics Handbook page 45" name="Deep Impact" desc="You can strike your foe with a melee weapon  as if making a touch attack." />
+    <feat type="Races of Stone page 137" name="Deep Vision" desc="Your mental focus helps you see farther with  darkvision." />
+    <feat type="Races of Faerun page 162" name="Deepening Darkness" desc="Your inherent ability to create darkness is  more powerful than normal." />
+    <feat type="Lords of Madness page 179" name="Deepspawn" desc="Your body undergoes a shocking degeneration  into something that is strikingly inhuman." />
+    <feat type="Races of the Wild page 150" name="Defensive Archery" desc="You can avoid attacks of opportunity when making  ranged attacks while threatened." />
+    <feat type="Complete Warrior page 97" name="Defensive Strike" desc="You can turn a strong defense into a powerful  offense." />
+    <feat type="Oriental Adventures page 62" name="Defensive Strike" desc="You can turn a strong defense into a powerful  offense." />
+    <feat type="Complete Warrior page 97" name="Defensive Throw" desc="You can use your opponent's weight, strength,  and momentum against her, deflecting her attack and throwing her to the  ground." />
+    <feat type="Oriental Adventures page 62" name="Defensive Throw" desc="You can use your opponent's  weight, strength, and momentum against her, deflecting her attack and throwing  her to the ground." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Deflect Arrows" desc="You can deflect incoming arrows, as well as  crossbow bolts, spears, and other projectile or thrown weapons." />
+    <feat type="Races of Stone page 137" name="Deflective Armor" desc="Your armor shields you from touch attacks as  well as regular blows." />
+    <feat type="Book of Vile Darkness page 48" name="Deformity (Clawed Hands)" desc="Because of intentional self-mutilation, the  character has deformed arms and hands ending in sharp claws." />
+    <feat type="Book of Vile Darkness page 48" name="Deformity (Eyes)" desc="The character has either drilled a hole in her  forehead trying to add a third eye, or she has supernaturally scarred one  of her regular eyes." />
+    <feat type="Book of Vile Darkness page 48" name="Deformity (Face)" desc="Because of intentional self-mutilation, the  character has a hideous face." />
+    <feat type="Book of Vile Darkness page 48" name="Deformity (Gaunt)" desc="Through intentional starvation and macabre operations,  the character is grossly underweight." />
+    <feat type="Book of Vile Darkness page 48" name="Deformity (Obese)" desc="Through intentional gorging and general gluttony,  the character is obese." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Deft Hands" desc="You have exceptional manual dexterity." />
+    <feat type="Complete Adventurer page 106" name="Deft Opportunist" desc="You are prepared for the unexpected." />
+    <feat type="Miniatures Handbook page 25" name="Deft Opportunist" desc="You are prepared for the unexpected." />
+    <feat type="Complete Adventurer page 106" name="Deft Strike" desc="You can place attacks at weak points in your  opponent's defenses." />
+    <feat type="Draconomicon page 103" name="Deft Strike" desc="You can place attacks at weak points in your  opponent's defenses." />
+    <feat type="Expanded Psionics Handbook page 45" name="Delay Power" desc="You can manifest powers that go off up to 5  rounds later." />
+    <feat type="Complete Arcane page 77" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
+    <feat type="Player's Guide to Faerun page 37" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Delay Spell" desc="You can cast spells that take effect after a  short delay of your choosing." />
+    <feat type="Champions of Ruin page 22" name="Demonsworn Knight" desc="A scornful champion of the demon princes, you  detest and oppose devils and other creatures that refuse to heed the call  of chaos." />
+    <feat type="Savage Species page 32" name="Desert Dweller" desc="You are adapted to a desert environment." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Destruction Retribution" desc="Undead you raise or create harbor a retributive  curse that is unleashed if they are destroyed." />
+    <feat type="Complete Warrior page 97" name="Destructive Rage" desc="You can shatter barriers and objects when enraged." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Destructive Rage" desc="You shatter barriers and objects when enraged." />
+    <feat type="Savage Species page 32" name="Detach" desc="You can remove a part of your body and use it  as a ranged weapon." />
+    <feat type="Draconomicon page 68" name="Devastating Critical" desc="Choose one type of melee weapon, such as a claw  or bite. With that weapon, you are capable of killing any creature with  a single strike." />
+    <feat type="Epic Level Handbook page 53" name="Devastating Critical" desc="Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you are capable of killing any creature with  a single strike." />
+    <feat type="Complete Adventurer page 107" name="Devoted Inquisitor" desc="Your faithful service to your patron deity involves  training and methods that many paladins consider questionable." />
+    <feat type="Complete Adventurer page 107" name="Devoted Performer" desc="You have foregone the pursuit of frivolous musical  talents, instead entering religious training in service of honor and justice." />
+    <feat type="Complete Adventurer page 108" name="Devoted Tracker" desc="You have found a balance between your woodland  training and your devotion to religious training, blending these two aspects  into one seamless whole." />
+    <feat type="Epic Level Handbook page 53" name="Dexterous Fortitude" desc="You are able to resist physical attacks with  exceptional agility." />
+    <feat type="Epic Level Handbook page 53" name="Dexterous Will" desc="You are able to resist compelling effects with  exceptional agility." />
+    <feat type="Ghostwalk page 30" name="Diehard" desc="You can remain conscious after attacks that  would fell others." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Diehard" desc="You can remain conscious after attacks that  would fell others." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Diligent" desc="Your meticulousness allows you to analyze minute  details that others miss." />
+    <feat type="Epic Level Handbook page 53" name="Diminutive Wild Shape" desc="You can wild shape into animals of Diminutive  size." />
+    <feat type="Races of Eberron page 108" name="Dinosaur Hunter" desc="Your extraordinary knowledge of dinosaurs grants  you a special aptitude for tracking and hunting them." />
+    <feat type="Races of Eberron page 108" name="Dinosaur Wrangler" desc="You are attuned to dinosaurs and possess a special  bond with them." />
+    <feat type="Draconomicon page 68" name="Dire Charge" desc="You can make a full attack as part of a charge." />
+    <feat type="Epic Level Handbook page 53" name="Dire Charge" desc="You can make a full attack as part of a charge." />
+    <feat type="Champions of Ruin page 17" name="Dire Flail Smash" desc="You have mastered the style of fighting with  the dire flail and have learned to deal thunderous blows with the weapon." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Dirty Fighting" desc="You know the brutal and effective fighting tactics  of the streets and back alleys." />
+    <feat type="Champions of Ruin page 20" name="Dirty Rat" desc="You are quite adept at slipping under a foe's  guard while he's distracted." />
+    <feat type="Book of Vile Darkness page 49" name="Disciple of Darkness" desc="The character formally supplicates himself to  an archdevil." />
+    <feat type="Champions of Ruin page 23" name="Disciple of Darkness" desc="You formally supplicate yourself to an archdevil.  In return for this obedience, you gain a small measure of the archdevil's  power." />
+    <feat type="Complete Divine page 80" name="Disciple of the Sun" desc="You can destroy undead instead of merely turning  them." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Discipline" desc="Your people are admired for their single-minded  determination and clarity of purpose." />
+    <feat type="Oriental Adventures page 62" name="Discipline" desc="Your ancestor, Naka Kaeteru, was the first Grand  Master of all the elements, a master of meditation and contemplation." />
+    <feat type="Player's Guide to Faerun page 38" name="Discipline" desc="Your people are admired for their single-minded  determination and clarity of purpose." />
+    <feat type="Races of Faerun page 162" name="Disentangler" desc="Thanks to the teachings of Thard Harr, you have  practiced evading the attacks of jungle plants." />
+    <feat type="Complete Adventurer page 108" name="Disguise Spell" desc="You can cast spells without observers noticing." />
+    <feat type="Deities and Demigods page 50" name="Disguise Spell" desc="The deity can cast spells without observers  noticing it." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Disguise Spell" desc="You can cast spells without observers noticing." />
+    <feat type="Lords of Madness page 44" name="Disintegration Finesse" desc="A creature with this feat can use disintegrate  effects to affect smaller, more exacting areas." />
+    <feat type="Lords of Madness page 45" name="Disjunction Ray" desc="A beholder with this feat can narrow its antimagic  cone down to an eye ray that disjoins magic." />
+    <feat type="Epic Level Handbook page 53" name="Distant Shot" desc="You can target a thing you can see with a ranged  weapon." />
+    <feat type="Races of Eberron page 117" name="Disturbing Visage" desc="You can change your features to chilling effect." />
+    <feat type="Complete Adventurer page 108" name="Dive for Cover" desc="You can dive behind cover or drop to the ground  quickly enough to avoid many area effects." />
+    <feat type="Races of Destiny page 156" name="Diverse Background" desc="You have a wide and diverse background, giving  you a greater understanding of different occupations." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Divine Accuracy" desc="You can channel positive energy to give your  allies' melee attacks another chance to strike true against incorporeal  creatures." />
+    <feat type="Complete Warrior page 106" name="Divine Cleansing " desc="You can channel energy to improve your allies'  ability to resist attacks against their vitality and health." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Cleansing" desc="You can channel energy to improve you and your  allies' ability to resist poison and curses." />
+    <feat type="Races of Stone page 137" name="Divine Damage Reduction" desc="You can channel energy to give yourself a small  amount of protection from weapons." />
+    <feat type="Ghostwalk page 30" name="Divine Energy Focus" desc="You have a gift for channeling positive or negative  energy." />
+    <feat type="Complete Divine page 80" name="Divine Metamagic" desc="You can channel energy into some of your divine  spells to make them more powerful." />
+    <feat type="Complete Warrior page 106" name="Divine Might" desc="You can channel energy to increase the damage  you deal in combat." />
+    <feat type="Deities and Demigods page 50" name="Divine Might" desc="The deity can channel energy to increase its  damage in combat." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Might" desc="You can channel energy to increase the damage  you deal in combat." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Divine Might" desc="You can channel energy to increase your damage  in combat." />
+    <feat type="Complete Warrior page 106" name="Divine Resistance" desc="You can channel energy to temporarily reduce  damage you and your allies take from some sources." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Resistance" desc="You can channel energy to temporarily reduce  damage you and your allies take from some sources." />
+    <feat type="Complete Warrior page 106" name="Divine Shield" desc="You can channel energy to make your shield more  effective for either offense or defense." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 19" name="Divine Shield" desc="You can channel energy to make your shield more  effective for either offense or defense." />
+    <feat type="Player's Guide to Faerun page 135" name="Divine Spell Penetration" desc="Choose one component of your alignment. Any  divine spells of that alignment that you cast are more capable of defeating  spell resistance than normal." />
+    <feat type="Complete Divine page 80" name="Divine Spell Power" desc="You can channel positive or negative energy  to enhance your divine spellcasting ability." />
+    <feat type="Races of Stone page 137" name="Divine Spellshield" desc="You can channel energy to help your allies resist  spells and spell-like effects." />
+    <feat type="Deities and Demigods page 50" name="Divine Vengeance" desc="The deity can channel energy to do additional  damage in combat against undead." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Divine Vengeance" desc="You can channel energy to deal additional damage  against undead in melee." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Divine Vengeance" desc="You channel energy to do additional energy damage  in combat against undead." />
+    <feat type="Complete Warrior page 108" name="Divine Vigor" desc="You can channel energy to increase your speed  and durability." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Divine Vigor" desc="You can channel energy to increase your speed  and Constitution." />
+    <feat type="Races of the Wild page 150" name="Diving Charge" desc="You can dive down at a target to deal a devastating  strike." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Dodge" desc="You are adept at dodging blows." />
+    <feat type="Complete Divine page 80" name="Domain Focus" desc="You have mastered the subtle intricacies of  the divine power you've devoted yourself to." />
+    <feat type="Complete Divine page 80" name="Domain Spontaneity " desc="You are so familiar with one of your domains  that you can convert other prepared spells into spells from that domain." />
+    <feat type="Champions of Ruin page 20" name="Doomspeak" desc="You can demoralize an enemy with horrible condemnations  and grim portents of impending doom." />
+    <feat type="Miniatures Handbook page 25" name="Double Hit" desc="You can react with your off hand to make an  additional attack along with an attack of opportunity." />
+    <feat type="Eberron Campaign Setting page 52" name="Double Steel Strike" desc="Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the two-bladed  sword." />
+    <feat type="Complete Arcane page 77" name="Double Wand Wielder" desc="You can activate two wands at the same time." />
+    <feat type="Dragonlance Campaign Setting page 85" name="Draconian Breath Weapon" desc="You have harnessed your draconic heritage and  can attack with a dragonlike breath weapon." />
+    <feat type="Complete Arcane page 77" name="Draconic Breath" desc="You can convert your arcane spells into a breath  weapon." />
+    <feat type="Complete Arcane page 77" name="Draconic Claw" desc="You develop the natural weapons of your draconic  ancestors." />
+    <feat type="Complete Arcane page 77" name="Draconic Flight" desc="The secret of draconic flight is revealed to  you, granting you the ability to fly occasionally." />
+    <feat type="Complete Arcane page 77" name="Draconic Heritage" desc="You have greater connection with your distant  draconic bloodline." />
+    <feat type="Draconomicon page 69" name="Draconic Knowledge" desc="You are attuned to nature and the elements and  can draw on deep wells of knowledge." />
+    <feat type="Complete Arcane page 78" name="Draconic Legacy" desc="You have realized greater arcane power through  your draconic heritage." />
+    <feat type="Complete Arcane page 78" name="Draconic Power" desc="You have greater power manipulating the energies  of your heritage." />
+    <feat type="Complete Arcane page 78" name="Draconic Presence" desc="When you use your magic, your mere presence  can terrify those around you." />
+    <feat type="Complete Arcane page 78" name="Draconic Resistance" desc="Your bloodline hardens your body against the  energy type of your progenitor." />
+    <feat type="Complete Arcane page 78" name="Draconic Skin" desc="Your skin takes on the sheen, luster, and hardness  of your draconic parentage." />
+    <feat type="Draconomicon page 104" name="Dragon Cohort" desc="You gain the service of a loyal dragon ally." />
+    <feat type="Draconomicon page 104" name="Dragon Familiar" desc="When you are able to acquire a new familiar,  you may select a wyrmling dragon as a familiar." />
+    <feat type="Draconomicon page 104" name="Dragon Hunter " desc="You have made a special study of dragons and  know how to defend against a dragon's attacks." />
+    <feat type="Draconomicon page 104" name="Dragon Hunter Bravery " desc="You resist dragons' frightful presence, and  your mere presence helps others resist as well." />
+    <feat type="Draconomicon page 104" name="Dragon Hunter Defense" desc="Your insight into the tactics and abilities  of dragons grants you awareness of how best to avoid their magical attacks." />
+    <feat type="Eberron Campaign Setting page 52" name="Dragon Rage" desc="You call upon the power of your dragon totem  to enhance your barbarian rage." />
+    <feat type="Draconomicon page 105" name="Dragon Steed" desc="You have earned the service of a loyal draconic  steed." />
+    <feat type="Eberron Campaign Setting page 52" name="Dragon Totem" desc="As a proud warrior of the barbarian tribes of  Argonnessen and Seren, you have claimed one of the true dragon types as  your totem -- a patron, protector, and source of strength." />
+    <feat type="Draconomicon page 105" name="Dragon Wild Shape" desc="You can take the form of a dragon." />
+    <feat type="Epic Level Handbook page 53" name="Dragon Wild Shape" desc="You can take the form of a dragon." />
+    <feat type="Draconomicon page 105" name="Dragonbane" desc="You have made a special study of dragons and  are adept at pulling off deliberate attacks that take advantage of a dragon's  weak spots." />
+    <feat type="Draconomicon page 105" name="Dragoncrafter" desc="You can make special weapons, armor, and other  items using parts of dragons as materials." />
+    <feat type="Draconomicon page 105" name="Dragondoom" desc="You have learned how to place blows against  a dragon that deal tremendous damage." />
+    <feat type="Draconomicon page 105" name="Dragonfoe" desc="You have learned how to attack dragons more  effectively than most other individuals." />
+    <feat type="Draconomicon page 105" name="Dragonfriend" desc="You are a known and respected ally of dragons." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Dragon's Toughness" desc="You are incredibly tough." />
+    <feat type="Draconomicon page 105" name="Dragonsong " desc="Your song or poetics echo the power of the dragonsong,  an ancient style of vocal performance created by dragons in the distant  past." />
+    <feat type="Draconomicon page 105" name="Dragonthrall" desc="You have pledged your life to the service of  evil dragonkind." />
+    <feat type="UE page 43" name="Draw from the Land" desc="You can draw strength and sustenance from the  land itself." />
+    <feat type="Races of Destiny page 154" name="Dread Tyranny" desc="A devoted student of Hextor's militant teachings,  you are skilled at intimidating and dominating weaker beings." />
+    <feat type="Player's Guide to Faerun page 38" name="Dreadful Wrath" desc="You are terrible to behold in battle, and few  foes have the heart to face you without quailing" />
+    <feat type="Races of Eberron page 113" name="Dreamsight Elite" desc="Your dreamsight shifter trait improves." />
+    <feat type="Sandstorm page 49" name="Drift Magic" desc="You can tap the power of drift magic." />
+    <feat type="Races of Faerun page 162" name="Drow Eyes" desc="You have trained your eyes to see in the dark  as well as your full drow ancestors." />
+    <feat type="Races of Eberron page 109" name="Drow Skirmisher" desc="Your experience with the guerrilla-style combat  of the deep jungle grants you mastery of the weapons of the drow." />
+    <feat type="Complete Adventurer page 108" name="Dual Strike" desc="You are an expert skirmisher skilled at fighting  with two weapons." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Dual Strike" desc="Your combat teamwork makes you a more dangerous  foe." />
+    <feat type="Races of Faerun page 162" name="Duergar Mindshaper" desc="You are accomplished at using the power of your  mind to overcome weaker personalities." />
+    <feat type="City of Splendors: Waterdeep page 144" name="Dungeoneer's Intuition" desc="You can sense when things don't feel right,  and you have a knack for avoiding deadly traps and ambushes." />
+    <feat type="Lords of Madness page 180" name="Durable Form" desc="You are much more resilient than the fragile  humanoids that do not share your aberrant heritage." />
+    <feat type="Savage Species page 33" name="Dust Cloud" desc="You can sweep dust into the air to hide from  opponents." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Dwarf's Toughness" desc="You are tougher than you were before." />
+    <feat type="Races of Stone page 138" name="Dwarven Armor Proficiency" desc="You are familiar with exotic armor of dwarven  manufacture and understand how to use it properly." />
+    <feat type="Complete Warrior page 97" name="Eagle Claw Attack" desc="Your superior insight allows you to strike objects  with impressive force." />
+    <feat type="Oriental Adventures page 62" name="Eagle Claw Attack" desc="Your unarmed attacks can shatter objects." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Eagle Claw Attack" desc="Your unarmed attacks shatter objects." />
+    <feat type="Shining South page 20" name="Eagle Tribe Vision" desc="You have keen eyesight reminiscent of the giant  eagles that fly over your tribal lands." />
+    <feat type="Sandstorm page 49" name="Eagle's Fury" desc="You know how to wield the eagle's claw with  deadly speed." />
+    <feat type="Complete Divine page 80" name="Eagle's Wings" desc="You can take wing and fly with the grace of  an eagle." />
+    <feat type="Races of Stone page 138" name="Earth Adept" desc="You are in tune with the ground at your feet,  making you more dangerous in the shifting conditions of combat." />
+    <feat type="Races of Stone page 138" name="Earth Fist" desc="Your bond with the earth and martial training  has imbued your fists with the qualities of cold iron." />
+    <feat type="Planar Handbook page 38" name="Earth Heritage" desc="You are descended from creatures native to the  Elemental Plane of Earth." />
+    <feat type="Races of Stone page 138" name="Earth Master" desc="You are in tune with the ground at your feet,  helping you anticipate your opponent's movements in combat." />
+    <feat type="Races of Stone page 138" name="Earth Power" desc="You draw psionic energy from raw stone." />
+    <feat type="Races of Stone page 138" name="Earth Sense" desc="You are in tune with the earth beneath you." />
+    <feat type="Races of Stone page 138" name="Earth Spell" desc="You draw magical power from the earth beneath  your feet." />
+    <feat type="Complete Warrior page 97" name="Earth's Embrace" desc="You can crush opponents when you grapple them." />
+    <feat type="Oriental Adventures page 62" name="Earth's Embrace" desc="You can crush opponents when you grapple them." />
+    <feat type="Races of Stone page 139" name="Earth's Warding" desc="You can channel energy to infuse your skin with  the strength of the earth." />
+    <feat type="Eberron Campaign Setting page 52" name="Ecclesiarch" desc="You command a degree of respect in your church's  hierarchy." />
+    <feat type="Ghostwalk page 30" name="Ectoplasm" desc="You can create ectoplasm, a gooey physical manifestation  of base supernatural spiritual energy." />
+    <feat type="Eberron Campaign Setting page 52" name="Education" desc="Some lands hold the pen in higher regard than  the sword." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Education" desc="In your youth you received the benefit of several  years of more or less formal schooling." />
+    <feat type="Ghostwalk page 31" name="Education" desc="In your youth you received the benefit of several  years of more or less formal schooling." />
+    <feat type="Player's Guide to Faerun page 38" name="Education" desc="You hail from a land where the pen is held in  higher regard than the sword." />
+    <feat type="Epic Level Handbook page 53" name="Efficient Item Creation" desc="Select an item creation feat. You can create  magic items using that feat much more quickly than normal." />
+    <feat type="Races of Faerun page 162" name="Eldritch Linguist" desc="You have a deep understanding of how words themselves  have their own kind of magic, and a mastery of the secret syntax of power." />
+    <feat type="Races of Faerun page 163" name="Elemental Bloodline" desc="You have taken on some of the aspects of the  type of element that infuses your flesh." />
+    <feat type="Complete Divine page 80" name="Elemental Healing" desc="You can channel elemental energy to heal creatures  of a specific elemental subtype." />
+    <feat type="Complete Divine page 81" name="Elemental Smiting" desc="You can channel elemental energy to deal extra  damage to creatures tied to a specific element." />
+    <feat type="Planar Handbook page 39" name="Elemental Spellcasting" desc="Choose an element. You cast spells with that  descriptor more effectively than normal." />
+    <feat type="Complete Divine page 81" name="Elephant's Hide" desc="You can thicken your skin to the toughness of  an elephant's." />
+    <feat type="Races of the Wild page 150" name="Elf Dilettante" desc="Throughout the long years of your life, you  have developed a talent for doing just about anything." />
+    <feat type="Underdark page 25" name="Elfhunter" desc="Because of your cultural hatred for elves, you  have had specific training in how best to fight them." />
+    <feat type="Complete Warrior page 110" name="Elusive Target " desc="Trying to land a blow against you can be a maddening  experience." />
+    <feat type="Draconomicon page 69" name="Embed Spell Focus" desc="You can embed focus components required for  your spells into your body." />
+    <feat type="WL page 14" name="Empower Legacy" desc="You can use one of your item's legacy abilities  to greater effect." />
+    <feat type="Expanded Psionics Handbook page 46" name="Empower Power" desc="You can manifest powers to greater effect." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Empower Spell" desc="You can cast spells to greater effect." />
+    <feat type="Book of Vile Darkness page 49" name="Empower Spell-Like Ability" desc="The creature can use a spell-like ability with  greater effect." />
+    <feat type="Monster Manual v.3.5 page 303" name="Empower Spell-Like Ability" desc="The creature can use a spell-like ability with  greater effect than normal." />
+    <feat type="Monster Manual III page 206" name="Empower Spell-Like Ability" desc="A creature with this feat can use a spell-like  ability with greater effect than normal." />
+    <feat type="Savage Species page 33" name="Empower Spell-Like Ability" desc="You can use a spell-like ability with greater  effect than normal." />
+    <feat type="Complete Divine page 81" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
+    <feat type="Ghostwalk page 31" name="Empower Turning" desc="You can turn or rebuke more undead with a single  turning attempt." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Empower Turning" desc="You can turn or rebuke greater numbers of undead  with a single turning attempt." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Empowered Ability Damage" desc="Your ability damage (or ability drain) special  attack is more potent than normal." />
+    <feat type="Oriental Adventures page 80" name="Empty Hand Mastery" desc="You have mastered the martial arts style of  'Empty Hand' -- a hard form emphasizing strikes with the hand." />
+    <feat type="Races of Stone page 139" name="Enchanting Song" desc="You can channel the power of your bardic music  to temporarily increase the power of your enchantment spells." />
+    <feat type="Player's Handbook v.3.5 page 93" name="Endurance" desc="You are capable of amazing feats of stamina." />
+    <feat type="Draconomicon page 70" name="Endure Blows" desc="You are adept at lessening the effects of blows." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Endure Sunlight" desc="Your vulnerability to sunlight is reduced." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Enduring Life" desc="You can ignore the effect of negative levels  for a short time." />
+    <feat type="Races of Stone page 139" name="Energize Armor" desc="You can charge your armor with psionic energy,  making it resistant to energy damage." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Energize Spell" desc="Your spells channel positive energy to deal  extra damage to undead creatures, but are less effective against other opponents." />
+    <feat type="Complete Arcane page 78" name="Energy Admixture" desc="You can modify a spell that uses one type of  energy to add an equal amount of another energy type." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 39" name="Energy Admixture" desc="You can modify a spell that uses one type of  energy to mix in an equal amount of another type of energy." />
+    <feat type="Miniatures Handbook page 25" name="Energy Affinity" desc="You can modify a spell that uses one type of  energy to use another type of energy." />
+    <feat type="Epic Level Handbook page 53" name="Energy Resistance" desc="You can resist the effects of a chosen type  of energy." />
+    <feat type="Complete Arcane page 79" name="Energy Substitution" desc="You can modify an energy-based spell to use  another type of energy instead." />
+    <feat type="Deities and Demigods page 50" name="Energy Substitution" desc="The deity can modify a spell that uses energy  to use another type of energy." />
+    <feat type="Magic of Faerun page 21" name="Energy Substitution" desc="You can modify a spell that uses one type of  energy to use another type of energy." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Energy Substitution" desc="You can modify a spell that uses one type of  energy to use another type of energy." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Enervate Spell" desc="Your spells channel negative energy to deal  extra damage to undead creatures, but are less effective against unliving  opponents." />
+    <feat type="Ghostwalk page 31" name="Enervating Touch" desc="Your touch can bestow negative levels upon creatures." />
+    <feat type="Races of Faerun page 163" name="Enervative Healing" desc="You can use the life energy of an opponent to  heal yourself." />
+    <feat type="Player's Guide to Faerun page 135" name="Enhance Effect" desc="You can change the characteristics of a persistent  spell effect that is already in place." />
+    <feat type="Epic Level Handbook page 114" name="Enhance Item" desc="You can increase the minimum DC for saving throws  of magic items that you" />
+    <feat type="Complete Arcane page 191" name="Enhance Spell" desc="You can increase the power limit of your damage-dealing  spells." />
+    <feat type="Epic Level Handbook page 53" name="Enhance Spell" desc="You can increase the power limit of your damage-dealing  spells." />
+    <feat type="Underdark page 25" name="Enhanced Adhesive" desc="The natural adhesive you secrete becomes stickier." />
+    <feat type="Races of Destiny page 152" name="Enhanced Power Sigils" desc="Your illumian power sigils are more powerful  than normal." />
+    <feat type="Draconomicon page 70" name="Enlarge Breathe" desc="Your breath weapon is larger than normal." />
+    <feat type="Lords of Madness page 22" name="Enlarge Mucus Cloud" desc="An aboleth with this feat can extend its mucus  cloud into a wider area." />
+    <feat type="Expanded Psionics Handbook page 46" name="Enlarge Power" desc="You can manifest powers farther than normal." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Enlarge Spell" desc="You can cast spells farther than normal." />
+    <feat type="Champions of Ruin page 20" name="Entangling Spell" desc="Your spell releases residual eldritch power  that entangles your enemies." />
+    <feat type="Complete Warrior page 151" name="Epic Combat Expertise " desc="You have extraordinary talent at using your  combat skill for defense." />
+    <feat type="Player's Guide to Faerun page 135" name="Epic Counterspell" desc="You can counterspell any number of spells each  round." />
+    <feat type="Complete Divine page 89" name="Epic Devotion" desc="Choose an alignment component different from  your own alignment. You are particularly resistant to spells of that alignment." />
+    <feat type="Player's Guide to Faerun page 135" name="Epic Devotion" desc="Choose an alignment component that you do not  possess. You are particularly resistant to spells with that descriptor." />
+    <feat type="Complete Adventurer page 191" name="Epic Dodge" desc="You are able to evade attacks with exceptional  agility." />
+    <feat type="Epic Level Handbook page 54" name="Epic Dodge" desc="You are able to evade attacks with exceptional  agility." />
+    <feat type="Epic Level Handbook page 54" name="Epic Endurance" desc="You are capable of legendary feats of stamina." />
+    <feat type="Expanded Psionics Handbook page 34" name="Epic Expanded Knowledge" desc="You learn another power." />
+    <feat type="Draconomicon page 70" name="Epic Fortitude" desc="You have tremendously high fortitude." />
+    <feat type="Epic Level Handbook page 54" name="Epic Fortitude" desc="You have tremendously high fortitude." />
+    <feat type="Epic Level Handbook page 54" name="Epic Inspiration" desc="Your bardic music provides greater inspiration  than normally possible." />
+    <feat type="Epic Level Handbook page 54" name="Epic Leadership" desc="You attract more powerful cohorts and followers  than normally possible." />
+    <feat type="Complete Warrior page 151" name="Epic Prowess" desc="You have great skill in combat." />
+    <feat type="Epic Level Handbook page 54" name="Epic Prowess" desc="You gain great skill in combat." />
+    <feat type="Expanded Psionics Handbook page 34" name="Epic Psionic Focus" desc="You can expend your psionic focus to greater  effect." />
+    <feat type="Draconomicon page 70" name="Epic Reflexes" desc="You have tremendously fast reflexes." />
+    <feat type="Epic Level Handbook page 54" name="Epic Reflexes" desc="You have tremendously fast reflexes." />
+    <feat type="Complete Adventurer page 191" name="Epic Reputation" desc="Your reputation provides great bonuses on interactions  with others." />
+    <feat type="Epic Level Handbook page 54" name="Epic Reputation" desc="Your reputation provides great bonuses on interactions  with others." />
+    <feat type="Complete Adventurer page 191" name="Epic Skill Focus" desc="Choose a skill, such as Move Silently. You have  a legendary knack with that skill." />
+    <feat type="Epic Level Handbook page 54" name="Epic Skill Focus" desc="Choose a skill, such as Move Silently. You have  a legendary knack with that skill." />
+    <feat type="Epic Level Handbook page 54" name="Epic Speed" desc="You can move much more quickly than a normal  person." />
+    <feat type="Complete Arcane page 192" name="Epic Spell Focus " desc="Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal." />
+    <feat type="Epic Level Handbook page 54" name="Epic Spell Focus" desc="Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal." />
+    <feat type="Complete Arcane page 192" name="Epic Spell Penetration" desc="Your spells are tremendously potent, breaking  through spell resistance with ease." />
+    <feat type="Epic Level Handbook page 54" name="Epic Spell Penetration" desc="Your spells are tremendously potent, breaking  through spell resistance with ease." />
+    <feat type="Epic Level Handbook page 55" name="Epic Spellcasting" desc="You can create and cast spells that transcend  the most powerful existing spells." />
+    <feat type="Player's Guide to Faerun page 136" name="Epic Spellfire Wielder" desc="You can store more spellfire energy levels than  normal." />
+    <feat type="Complete Warrior page 151" name="Epic Sunder" desc="You are preternaturally tough." />
+    <feat type="Complete Warrior page 151" name="Epic Toughness" desc="You are specially good at using one chosen type  of weapon." />
+    <feat type="Epic Level Handbook page 55" name="Epic Toughness" desc="You are preternaturally tough." />
+    <feat type="Complete Warrior page 151" name="Epic Weapon Focus " desc="You deal extra damage when attacking objects." />
+    <feat type="Epic Level Handbook page 55" name="Epic Weapon Focus" desc="Choose one type of weapon, such as a greataxe.  You are especially good at using this weapon." />
+    <feat type="Epic Level Handbook page 55" name="Epic Weapon Specialization" desc="Choose one type of weapon, such as a greataxe.  You deal extraordinary damage wielding this weapon." />
+    <feat type="Draconomicon page 70" name="Epic Will" desc="You have tremendously strong willpower." />
+    <feat type="Epic Level Handbook page 55" name="Epic Will" desc="You have tremendously strong willpower." />
+    <feat type="Deities and Demigods page 50" name="Eschew Materials " desc="The deity can cast spells without material components." />
+    <feat type="Epic Level Handbook page 69" name="Eschew Materials" desc="You can cast spells without material components." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Eschew Materials" desc="You can cast spells without material components." />
+    <feat type="Lords of Darkness page 189" name="Eschew Materials" desc="You can cast spells without material components." />
+    <feat type="Magic of Faerun page 22" name="Eschew Materials" desc="You can cast spells without material components." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Eschew Materials" desc="You can cast spells without relying on material  components." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Eschew Materials" desc="You can cast spells without material components." />
+    <feat type="Races of Destiny page 155" name="Eternal Strength" desc="You have taken Kord's fighting ways to heart.  Throwing yourself into every brawl, you draw upon your mighty deity's strength." />
+    <feat type="Ghostwalk page 31" name="Ethereal Sidestep" desc="You can teleport yourself a short distance." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Ethran" desc="You have been initiated into the secrets of  the Witches of Rashemen as a member of the Ethran, the 'untried.'" />
+    <feat type="Player's Guide to Faerun page 38" name="Ethran" desc="You have been initiated into  the secrets of the Witches of Rashemen as a member of the Ethran, the 'untrained.'" />
+    <feat type="UE page 43" name="Ettercap Berserker" desc="The intense physical training required to join  your lodge has made you tougher." />
+    <feat type="Book of Vile Darkness page 49" name="Evil Brand" desc="The character is physically marked forever as  a servant of an evil power or as a villain." />
+    <feat type="Champions of Ruin page 23" name="Evil Brand" desc="You are physically marked forever as a servant  of an evil power or as a villain." />
+    <feat type="Champions of Ruin page 23" name="Evil Embraced" desc="You embrace the power of your fiendish patron  and call upon that power in moments of great need." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Eviscerator" desc="The allies of your foes are especially afraid  of your critical hits." />
+    <feat type="Book of Exalted Deeds page 42" name="Exalted Companion" desc="Instead of an animal companion, you have a magical  beast of good alignment." />
+    <feat type="Book of Exalted Deeds page 42" name="Exalted Smite" desc="Your smite ability is empowered with holy energy." />
+    <feat type="Book of Exalted Deeds page 42" name="Exalted Spell Resistance" desc="You are particularly resistant to evil spells." />
+    <feat type="Book of Exalted Deeds page 42" name="Exalted Turning" desc="You turn undead with such power that affected  undead take damage." />
+    <feat type="Book of Exalted Deeds page 42" name="Exalted Wild Shape" desc="You can use your wild shape ability to take  the form of a good-aligned magical beast." />
+    <feat type="Eberron Campaign Setting page 52" name="Exceptional Artisan" desc="You are an expert at creating magic items faster  than usual." />
+    <feat type="Epic Level Handbook page 55" name="Exceptional Deflection" desc="You can deflect any type of ranged attack." />
+    <feat type="Races of Stone page 139" name="Exotic Armor Proficiency" desc="Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly." />
+    <feat type="Underdark page 25" name="Exotic Armor Proficiency" desc="Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly." />
+    <feat type="Races of Stone page 139" name="Exotic Shield Proficiency" desc="Choose an exotic shield. You are proficient  with that type of exotic shield." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Exotic Weapon Proficiency" desc="Choose a type of exotic weapon. You understand  how to use that type of exotic weapon in combat." />
+    <feat type="Heroes of Battle page 97" name="Expanded Aura of Courage" desc="Your aura of courage protects more allies than  normal." />
+    <feat type="Expanded Psionics Handbook page 46" name="Expanded Knowledge" desc="You learn another power." />
+    <feat type="Ghostwalk page 31" name="Expanded Possession" desc="You can ride or possess an additional type of  creature." />
+    <feat type="Races of the Wild page 150" name="Expeditious Dodge" desc="You're good at avoiding attacks while moving  quickly." />
+    <feat type="Heroes of Battle page 97" name="Expert Siege Engineer" desc="You are particularly skilled at operating siege  weapons, such as catapults and battering rams." />
+    <feat type="Stormwrack page 92" name="Expert Swimmer" desc="You swim like a fish. You can stay underwater  far longer than others of your race, and you are at home in the water." />
+    <feat type="Complete Adventurer page 109" name="Expert Tactician" desc="Your tactical skills work to your advantage." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 38" name="Expert Tactician" desc="Your tactical skills work to your advantage." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Expert Tactician" desc="Your tactical skills work to your advantage." />
+    <feat type="Complete Arcane page 79" name="Explosive Spell" desc="You can cast spells that blast creatures off  their feet." />
+    <feat type="UE page 43" name="Explosive Spell" desc="You can cast spells that blast creatures off  their feet." />
+    <feat type="Expanded Psionics Handbook page 46" name="Extend Power" desc="You can manifest powers that last longer than  normal." />
+    <feat type="Complete Warrior page 97" name="Extend Rage" desc="You are able to maintain your rage longer than  most." />
+    <feat type="Eberron Campaign Setting page 52" name="Extend Rage" desc="You are able to maintain your rage longer than  most." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Extend Spell" desc="You can cast spells that last longer than normal." />
+    <feat type="Draconomicon page 70" name="Extend Spreading Breath" desc="You can convert your breath weapon into a spread  effect that can be used at range." />
+    <feat type="Epic Level Handbook page 56" name="Extended Life Span" desc="You are exceptionally long-lived." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extended Rage" desc="Your rage lasts longer than it normally would." />
+    <feat type="UE page 43" name="Extended Rage" desc="Your rage lasts longer than it normally would." />
+    <feat type="Savage Species page 34" name="Extended Reach" desc="Your flexible body allows you to reach farther  than normal." />
+    <feat type="Miniatures Handbook page 26" name="Extra Domain Spell" desc="You have chosen to be more specialized in a  particular domain." />
+    <feat type="Complete Arcane page 79" name="Extra Edge" desc="Your ability to deal spell damage is particularly  striking." />
+    <feat type="Ghostwalk page 32" name="Extra Favored Enemy" desc="You select an additional favored enemy." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extra Favored Enemy" desc="You select an additional favored enemy." />
+    <feat type="Heroes of Battle page 97" name="Extra Followers" desc="Your charismatic magnetism attracts even more  followers to your banner." />
+    <feat type="Complete Arcane page 79" name="Extra Invocation" desc="You learn an additional invocation." />
+    <feat type="Savage Species page 34" name="Extra Item Space" desc="You can wear more magic items than are normally  allowed." />
+    <feat type="Complete Adventurer page 109" name="Extra Music" desc="You can use your bardic music more often than  you otherwise could." />
+    <feat type="Deities and Demigods page 50" name="Extra Music" desc="The deity can use its bardic songs more often  than it otherwise could." />
+    <feat type="Eberron Campaign Setting page 52" name="Extra Music" desc="You can use your bardic music more often than  you otherwise could." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Extra Music" desc="You can use your bardic music more often than  you otherwise could." />
+    <feat type="Complete Warrior page 98" name="Extra Rage" desc="You may rage more frequently than normal." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extra Rage" desc="You rage more frequently than you normally would." />
+    <feat type="Eberron Campaign Setting page 53" name="Extra Rings" desc="Your familiarity with forging magic rings allows  you to make use of more rings than normal." />
+    <feat type="Eberron Campaign Setting page 53" name="Extra Shifter Trait" desc="You manifest a second shifter trait while shifting." />
+    <feat type="Monster Manual III page 150" name="Extra Shifter Trait" desc="You manifest a second shifter trait while shifting." />
+    <feat type="Races of Eberron page 114" name="Extra Shifter Trait" desc="You manifest a second shifter trait while shifting." />
+    <feat type="Races of Stone page 139" name="Extra Silence" desc="You can generate a field of silence more often  than other whisper gnomes can." />
+    <feat type="Complete Arcane page 79" name="Extra Slot" desc="You can cast an additional spell." />
+    <feat type="Ghostwalk page 32" name="Extra Slot" desc="You can cast an extra spell." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Extra Slot" desc="You can cast an extra spell." />
+    <feat type="Complete Warrior page 98" name="Extra Smiting" desc="You can make more smite attacks." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Extra Smiting" desc="You can make more smite attacks." />
+    <feat type="Complete Arcane page 79" name="Extra Spell" desc="You learn an additional spell." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Extra Spell" desc="You can learn one more spell." />
+    <feat type="Complete Arcane page 80" name="Extra Spell Secret" desc="You learn an additional spell secret." />
+    <feat type="Complete Warrior page 98" name="Extra Stunning" desc="You gain extra stunning attacks." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Extra Stunning Attacks" desc="You gain extra stunning attacks when fighting  unarmed." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Extra Turning" desc="You can turn or rebuke creatures more often  than normal." />
+    <feat type="Complete Divine page 81" name="Extra Wild Shape" desc="You can use wild shape more frequently than  you normally could." />
+    <feat type="Ghostwalk page 32" name="Extra Wild Shape" desc="You can use wild shape more frequently than  you normally could." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Extra Wild Shape" desc="You use wild shape more frequently than you  normally could." />
+    <feat type="Underdark page 25" name="Extra Wild Shape" desc="You can use wild shape more frequently than  you normally could." />
+    <feat type="Eberron Campaign Setting page 53" name="Extraordinary Artisan" desc="You are an expert at creating magic items at  a lower cost than usual." />
+    <feat type="Complete Adventurer page 109" name="Extraordinary Concentration" desc="Your mind is so focused that you can cast spells  even while concentrating on another spell." />
+    <feat type="Complete Adventurer page 109" name="Extraordinary Spell Aim" desc="You can shape a spell's area to exclude one  creature from its effects." />
+    <feat type="Complete Warrior page 98" name="Eyes in the Back of Your Head" desc="Your superior battle sense helps minimize the  threat of flanking." />
+    <feat type="Deities and Demigods page 50" name="Eyes in the Back of Your Head" desc="The deity's superior battle sense helps minimize  the threat of flanking attacks." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Eyes in the Back of Your Head" desc="Your superior battle sense helps minimize the  threat of flanking." />
+    <feat type="Races of Faerun page 163" name="Eyes of Light" desc="You can focus the holy power within you to create  a beam of destructive light energy." />
+    <feat type="Unearthed Arcana page 93" name="Eyes to the Sky" desc="You have an instinctive sense of when someone  is magically watching you." />
+    <feat type="Ghostwalk page 32" name="Fade" desc="You can make your ghost body more diaphanous  and difficult to detect." />
+    <feat type="Frostburn page 48" name="Faith in the Frost" desc="You channel frozen energies from your deity  when you turn or rebuke creatures." />
+    <feat type="Oriental Adventures page 62" name="Falling Far Strike" desc="You have mastered the art of striking a nerve  that blinds a humanoid opponent." />
+    <feat type="Unearthed Arcana page 93" name="False Pretenses" desc="Those who try to charm you get an unpleasant  surprise." />
+    <feat type="Lost Empires of Faerun page 8" name="Familiar Concentration" desc="In the tradition of Narfell's ancient summoners,  your familiar can concentrate to maintain spells for you." />
+    <feat type="Dungeon Master's Guide v.3.5 page 209" name="Familiar Spell" desc="Your familiar can cast a spell." />
+    <feat type="Epic Level Handbook page 56" name="Familiar Spell" desc="Your familiar can use one of your spells as  a spell-like ability." />
+    <feat type="Underdark page 25" name="Familiar Spell" desc="You are so well acquainted with the spells you  have mastered that you can store the prepared spells in the mind of your  familiar." />
+    <feat type="Races of Destiny page 155" name="Far Horizons" desc="By dedicating yourself to the philosophies of  Fharlanghn, you have become a more world-wise and capable traveler." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Far Shot" desc="You can get greater distance out of a ranged  weapon." />
+    <feat type="Draconomicon page 70" name="Fast Healing" desc="You heal your wounds very quickly." />
+    <feat type="Epic Level Handbook page 56" name="Fast Healing" desc="You heal your wounds very quickly." />
+    <feat type="Complete Divine page 81" name="Fast Wild Shape" desc="You assume your wild shape faster and more easily  than you otherwise could." />
+    <feat type="Ghostwalk page 32" name="Fast Wild Shape" desc="You can assume your wild shape faster and more  easily than you normally could." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Fast Wild Shape" desc="You assume your wild shape faster and more easily  than you otherwise could." />
+    <feat type="Complete Warrior page 98" name="Faster Healing" desc="You recover faster than normal." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 22" name="Faster Healing" desc="You recover faster than others do." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Favored Critical" desc="You know how to hit your favored enemies where  it hurts." />
+    <feat type="Eberron Campaign Setting page 53" name="Favored in House" desc="You are a member of one of the dragonmarked  mercantile houses and wield some influence in that house." />
+    <feat type="Book of Exalted Deeds page 43" name="Favored of the Companions" desc="You swear allegiance to the Talisid or one of  the Five Companions, the paragons of the guardinals, and in exchange gain  power to act on their behalf." />
+    <feat type="Player's Guide to Faerun page 176" name="Favored of the Zulkirs" desc="Through your position of prestige among the  Red Wizards, you have gained access to secrets of evil magic known to few  outside the zulkirs themselves." />
+    <feat type="Complete Warrior page 98" name="Favored Power Attack" desc="You are able to deal more damage against your  favored enemies." />
+    <feat type="Player's Guide to Faerun page 38" name="Fearless" desc="You are a stranger to fear." />
+    <feat type="Races of Destiny page 152" name="Fearless Destiny" desc="Your grand destiny allows you to avoid death." />
+    <feat type="Oriental Adventures page 62" name="Fearsome and Fearless" desc="You claim descent from the first Akodo, the  paragon of samurai virtue." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Feign Weakness" desc="You capitalize on your foe's perceptions of  your unarmed status." />
+    <feat type="Libris Mortis: The Book of the Dead page 26" name="Fell Animate" desc="Living foes slain by your spell may rise as  zombies." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Fell Drain" desc="Living foes damaged by your spell also gain  a negative level." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Fell Frighten" desc="Living foes damaged by your spell are also shaken." />
+    <feat type="Expanded Psionics Handbook page 46" name="Fell Shot" desc="You can strike your foe with a ranged weapon  as if making a touch attack." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Fell Weaken" desc="Living foes damaged by your spell are also weakened." />
+    <feat type="Champions of Ruin page 20" name="Feral Animal Companion" desc="You can enslave a feral animal and adopt it  as your animal companion." />
+    <feat type="Races of Faerun page 163" name="Fiendish Bloodline" desc="Some of your latent abilities, inherited from  an unusually powerful fiendish ancestor, have matured." />
+    <feat type="Planar Handbook page 39" name="Fiendish Heritage" desc="You are descended from creatures native to the  Lower Planes." />
+    <feat type="Planar Handbook page 39" name="Fiendish Summoning Specialist" desc="You can select from a larger number of options  when summoning evil creatures." />
+    <feat type="Sandstorm page 49" name="Fiery Spell" desc="Your fire magic is bolstered, further scorching  your enemies." />
+    <feat type="Sharn: City of Towers page 157" name="Filth Eater" desc="You are highly resistant to the effects of disease  and can usually eat spoiled food without suffering ill effects." />
+    <feat type="Savage Species page 34" name="Final Strike" desc="Your death throes are destructive." />
+    <feat type="Epic Level Handbook page 56" name="Fine Wild Shape" desc="You can wild shape into animals of Fine size." />
+    <feat type="Planar Handbook page 39" name="Fire Heritage" desc="You are descended from creatures native to the  Elemental Plane of Fire." />
+    <feat type="Book of Exalted Deeds page 43" name="Fist of the Heavens" desc="Your stunning attack is empowered by celestial  might." />
+    <feat type="Complete Warrior page 99" name="Fists of Iron" desc="You have learned the secrets of imbuing your  unarmed attacks with extra force." />
+    <feat type="Oriental Adventures page 62" name="Fists of Iron" desc="You have learned the secrets of imbuing your  unarmed attacks with extra force." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 6" name="Fists of Iron" desc="You have learned the secrets of imbuing your  unarmed attacks with extra force." />
+    <feat type="Champions of Ruin page 20" name="Flay Foe" desc="You are skilled at flaying the flesh from your  enemy's bones." />
+    <feat type="Complete Warrior page 99" name="Fleet of Foot" desc="You run nimbly, able to turn corners without  losing momentum." />
+    <feat type="Deities and Demigods page 50" name="Fleet of Foot" desc="The deity runs so nimbly that it can turn corners  without losing momentum." />
+    <feat type="Player's Guide to Faerun page 38" name="Fleet of Foot" desc="You are extraordinarily swift." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Fleet of Foot" desc="You run so nimbly that you can turn corners  without losing momentum." />
+    <feat type="Eberron Campaign Setting page 53" name="Flensing Strike" desc="You have studied a martial style practiced by  monks devoted to the Mockery, which has taught you to cut your opponent's  skin in a very painful way." />
+    <feat type="Complete Warrior page 99" name="Flick of the Wrist" desc="With a single motion, you can draw a light weapon  and make a devastating attack." />
+    <feat type="Races of the Wild page 150" name="Flick of the Wrist" desc="With a single motion, you can draw a light weapon  and make a devastating attack." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Flick of the Wrist" desc="With a single motion, you can draw a light weapon  and make a devastating attack." />
+    <feat type="Races of Stone page 139" name="Fling Ally" desc="You can launch your comrades into the air as  if they were thrown weapons." />
+    <feat type="Races of Stone page 140" name="Fling Enemy" desc="When you're wrestling a foe, you can lift him  into the air and hurl him." />
+    <feat type="Savage Species page 34" name="Fling Enemy" desc="You can pick up an opponent and fling it." />
+    <feat type="Monster Manual v.3.5 page 303" name="Flyby Attack" desc="The creature can attack on the wing." />
+    <feat type="Monster Manual II page 18" name="Flyby Attack" desc="The creature can attack on the wing." />
+    <feat type="Monster Manual III page 206" name="Flyby Attack" desc="A creature with this feat can attack on the  wing." />
+    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Flyby Attack" desc="The creature can attack on the wing." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Flyby Attack" desc="You attack while on the wing." />
+    <feat type="Dragonlance Campaign Setting page 85" name="Flyby Breath" desc="You can employ your breath weapon in a high-speed  attack pass." />
+    <feat type="Stormwrack page 92" name="Flying Fish Leap" desc="You can hurl yourself out of the water with  ease." />
+    <feat type="Complete Warrior page 99" name="Flying Kick" desc="You literally leap into battle, dealing devastating  damage." />
+    <feat type="Oriental Adventures page 62" name="Flying Kick" desc="You literally leap into battle, dealing devastating  damage." />
+    <feat type="Lords of Madness page 45" name="Focused Antimagic" desc="A beholder with this feat can focus the antimagic  of its central eye to target a single person or object." />
+    <feat type="Races of the Wild page 151" name="Focused Mind" desc="When you have the opportunity to concentrate  on a task, you usually do very well at it." />
+    <feat type="Races of Stone page 140" name="Focused Shield" desc="Your mental focus makes you more adept at using  your shield." />
+    <feat type="Expanded Psionics Handbook page 46" name="Focused Sunder" desc="You can sense the stress points on others' weapons." />
+    <feat type="Forgotten Realms Campaign Setting page 34" name="Foe Hunter" desc="In lands threatened by evil nonhumans, many  warriors learn ways to fight effectively against these creatures." />
+    <feat type="Ghostwalk page 32" name="Foe Hunter" desc="You have been trained in the methods of fighting  various kinds of yuan-ti." />
+    <feat type="Player's Guide to Faerun page 38" name="Foe Hunter" desc="In a land threatened by fierce raiders, you  have learned to fight effectively against certain foes." />
+    <feat type="Miniatures Handbook page 26" name="Foe Specialist" desc="You are trained at how to damage a particular  type of foe." />
+    <feat type="Oriental Adventures page 80" name="Foot and Fist Mastery" desc="You have mastered the martial arts style of  'Foot and Fist' -- a hard form emphasizing strikes with the hands and feet." />
+    <feat type="Complete Adventurer page 109" name="Force of Personality" desc="You have cultivated an unshakable belief in  your self-worth." />
+    <feat type="Expanded Psionics Handbook page 46" name="Force of Will" desc="You are able to resist psionic attacks with  extreme force of will." />
+    <feat type="Ghostwalk page 32" name="Forceful Staff Style" desc="You can stun people with your quarterstaff and  push them around after you stun them." />
+    <feat type="Races of Faerun page 163" name="Forest Gnome Phantasist" desc="You can protect your forest home with a variety  of phantasms and patterns to befuddle your foes." />
+    <feat type="Forgotten Realms Campaign Setting page 35" name="Forester" desc="You are knowledgeable about the secrets of the  forest and wise in its ways." />
+    <feat type="Player's Guide to Faerun page 39" name="Forester" desc="You are one with Faerun's mighty forests." />
+    <feat type="Epic Level Handbook page 56" name="Forge Epic Ring" desc="You can craft magic rings of epic power." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Forge Ring" desc="You can create magic rings, which have varied  magical effects." />
+    <feat type="Player's Guide to Faerun page 39" name="Forgeheart" desc="Because you are inured to the hellish heat of  your homeland, you are resistant to blasts of fire that would damage other  creatures." />
+    <feat type="Serpent Kingdoms page 145" name="Forked Tongue" desc="You speak with a honeyed voice that bends listeners  to your will." />
+    <feat type="Complete Warrior page 110" name="Formation Expert" desc="You are trained at fighting in ranks and files." />
+    <feat type="Complete Arcane page 80" name="Fortify Spell" desc="You cast spells that more easily penetrate spell  resistance." />
+    <feat type="UE page 43" name="Fortify Spell" desc="You can cast spells that easily penetrate spell  resistance." />
+    <feat type="Complete Warrior page 99" name="Freezing the Lifeblood" desc="You can paralyze a humanoid opponent with an  unarmed attack." />
+    <feat type="Oriental Adventures page 62" name="Freezing the Lifeblood" desc="You can paralyze a humanoid opponent with an  unarmed attack." />
+    <feat type="Ghostwalk page 33" name="Freezing Touch" desc="Your touch is supernaturally cold." />
+    <feat type="Ghostwalk page 33" name="Frightful Moan" desc="You can unleash a moan that panics creatures  near you." />
+    <feat type="Draconomicon page 106" name="Frightful Presence" desc="Like a dragon, your mere presence can terrify  those around you." />
+    <feat type="Ghostwalk page 33" name="Frightful Presence" desc="Your very presence can cause others to be stricken  with fear." />
+    <feat type="Frostburn page 48" name="Frostfell Prodigy" desc="You gain additional bonus spells in cold regions." />
+    <feat type="Frostburn page 48" name="Frozen Berserker" desc="When you enter your barbarian rage, your body  becomes infused with cold energy." />
+    <feat type="Frostburn page 48" name="Frozen Magic" desc="Your cold spells are more powerful when you  cast them in a cold region." />
+    <feat type="Frostburn page 48" name="Frozen Wild Shape" desc="You can assume the form of magical beasts with  the cold subtype." />
+    <feat type="Ghostwalk page 33" name="Full Manifestation" desc="You can manifest fully when you would otherwise  be forced to be incorporeal." />
+    <feat type="Player's Guide to Faerun page 39" name="Furious Charge" desc="Your people are known for their love of battle,  and they rarely waste time in meeting a foe blade-to-blade." />
+    <feat type="Savage Species page 35" name="Gap of the Serpent" desc="You can swallow larger creatures than normal." />
+    <feat type="Serpent Kingdoms page 146" name="Gape of the Serpent" desc="Like a snake, you can stretch your mouth to  an outlandish extent to accommodate immense prey." />
+    <feat type="Epic Level Handbook page 56" name="Gargantuan Wild Shape" desc="You can wild shape into animals of Gargantuan  size." />
+    <feat type="Eberron Campaign Setting page 54" name="Gatekeeper Initiate" desc="You have been trained in the ancient druidic  tradition of the Gatekeepers, founded originally to ward off an extraplanar  assault by aberrations." />
+    <feat type="Races of Faerun page 163" name="Genie Lore" desc="You have studied centuries of Calishite lore  regarding geniekind." />
+    <feat type="Races of Eberron page 112" name="Gestalt Anchor" desc="Your strong bond to your quori spirit allows  you and your kalashtar allies to move and act as a fluid unit." />
+    <feat type="Expanded Psionics Handbook page 46" name="Ghost Attack" desc="Your deadly strikes against incorporeal foes  always hit their mark." />
+    <feat type="Ghostwalk page 33" name="Ghost Flight" desc="Your fully manifested ghost body can fly." />
+    <feat type="Ghostwalk page 33" name="Ghost Glide" desc="Your fully manifested ghost body can slowly  fly." />
+    <feat type="Ghostwalk page 33" name="Ghost Hand" desc="You can move small objects in a limited manner  when you are a ghost." />
+    <feat type="Ghostwalk page 33" name="Ghost Healing" desc="You can transfer some of your own ectoplasm  to another ghost to heal it." />
+    <feat type="Ghostwalk page 33" name="Ghost Ride" desc="You can hide within the physical body of a living  creature, perceiving the world through its senses, but without the ability  to control the host." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Ghost Scarred" desc="You are adept at fighting incorporeal undead." />
+    <feat type="Ghostwalk page 34" name="Ghost Smiting" desc="You can use your smite ability to smite ghosts." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Ghostly Grasp" desc="You can handle corporeal objects even while  corporeal." />
+    <feat type="Ghostwalk page 34" name="Ghost-Touch Spell" desc="You know how to tune your damaging spells to  affect ghosts without harming other creatures." />
+    <feat type="Complete Warrior page 111" name="Giantbane" desc="You are trained in fighting foes larger than  you are." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Giant's Toughness" desc="You are amazingly tough." />
+    <feat type="Player's Guide to Faerun page 176" name="Gift of Discernment" desc="You can rely on your conscience to steer you  away from evil deeds." />
+    <feat type="Book of Exalted Deeds page 43" name="Gift of Faith" desc="You have an unusual capacity to trust in divine  providence working all things for the good." />
+    <feat type="Book of Exalted Deeds page 43" name="Gift of Grace" desc="You can improve the saving throws of your allies  by sharing some of your divine grace." />
+    <feat type="Ghostwalk page 34" name="Gift of Tongues" desc="You have an intuitive talent for learning languages." />
+    <feat type="Races of Faerun page 163" name="Gift of Tongues" desc="You have an intuitive talent for learning languages." />
+    <feat type="Oriental Adventures page 62" name="Gifted General" desc="Your ancestor Daidoji Yurei, an ancient daimyo  of the Daidoji family, was a gifted general -- the first in Rokugan to use  guerilla warfare." />
+    <feat type="Complete Divine page 82" name="Glorious Weapons" desc="You can channel positive or negative energy  to imbue your allies' weapons with an alignment." />
+    <feat type="Races of the Wild page 151" name="Gnoll Ferocity" desc="You embody the savage ferocity of your people.  When you fly into a berserk rage, you can bite opponents with your powerful  jaws." />
+    <feat type="Races of Stone page 140" name="Gnome Foe Killer" desc="Your battle techniques against your racial foes  improve." />
+    <feat type="Complete Adventurer page 109" name="Goad " desc="You are skilled at inducing opponents to attack  you." />
+    <feat type="Miniatures Handbook page 26" name="Goad" desc="You are skilled at inducing opponents to attack  you." />
+    <feat type="Races of Stone page 140" name="Goad" desc="You are skilled at inducing opponents to attack  you." />
+    <feat type="Lost Empires of Faerun page 8" name="Godsight" desc="You enjoy the special blessing of a deity of  the Mulhorandi pantheon, who has granted you unerring powers of perception." />
+    <feat type="Races of Faerun page 163" name="Gold Dwarf Dweomersmith" desc="You have learned the secrets of gold dwarf magic  that creates or enhances weapons." />
+    <feat type="Races of Eberron page 114" name="Gorebrute Elite" desc="Your mighty charge attack can knock down foes." />
+    <feat type="Fiend Folio page 207" name="Graft Flesh" desc="You can apply a certain type of graft to other  living creatures or to yourself." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Graft Flesh" desc="You can apply a certain type of graft to other  living creatures or to yourself." />
+    <feat type="Lords of Madness page 216" name="Graft Flesh" desc="You can apply a certain type of graft to other  living creatures or to yourself." />
+    <feat type="Underdark page 25" name="Graft Illithid Flesh" desc="You can apply illithid grafts to other living  creatures or to yourself." />
+    <feat type="Serpent Kingdoms page 146" name="Graft Yuan-Ti Flesh" desc="You can apply yuan-ti grafts to other living  creatures or to yourself." />
+    <feat type="Ghostwalk page 34" name="Grand Malevolence" desc="You can possess multiple creatures and control  their actions." />
+    <feat type="Oriental Adventures page 63" name="Grappling Block" desc="You can catch and pin an opponent's weapon with  your bare hands." />
+    <feat type="Savage Species page 35" name="Grass Trekker" desc="You are adapted to a plains environment." />
+    <feat type="Eberron Campaign Setting page 54" name="Great Bite" desc="You know how to hit where it hurts with your  fangs." />
+    <feat type="Stormwrack page 92" name="Great Captain" desc="You are a master pilot and battle leader; your  crew anticipates your every command and leaps to do your bidding." />
+    <feat type="Epic Level Handbook page 56" name="Great Charisma" desc="Your powers of persuasion and leadership are  greater than normal." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Great Cleave" desc="You can wield a melee weapon with such power  that you can strike multiple times when you fell your foes." />
+    <feat type="Epic Level Handbook page 56" name="Great Constitution" desc="Your health and endurance are greater than normal." />
+    <feat type="Oriental Adventures page 63" name="Great Crafter" desc="Your ancestor, Kaiu, was the first and greatest  blacksmith of the Crab clan." />
+    <feat type="Epic Level Handbook page 56" name="Great Dexterity" desc="Your agility and coordination are greater than  normal." />
+    <feat type="Oriental Adventures page 63" name="Great Diplomat" desc="You are descended from Asako, one of the companions  of the first Phoenix, a great healer, diplomat, and warrior." />
+    <feat type="Savage Species page 35" name="Great Flyby Attack" desc="You can make multiple flyby attacks in a round." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Great Fortitude" desc="You are tougher than normal." />
+    <feat type="Epic Level Handbook page 56" name="Great Intelligence" desc="Your powers of reason and learning are greater  than normal." />
+    <feat type="Eberron Campaign Setting page 54" name="Great Rend" desc="You know how to hit where it hurts with your  claws." />
+    <feat type="Dungeon Master's Guide v.3.5 page 209" name="Great Smiting" desc="Your smite attacks are much more powerful than  normal." />
+    <feat type="Epic Level Handbook page 56" name="Great Smiting" desc="Your smite attacks are much more powerful than  normal." />
+    <feat type="UE page 43" name="Great Stag Berserker" desc="Your fighting style employs aggressive charges  in the manner of your lodge's totem animal." />
+    <feat type="Oriental Adventures page 63" name="Great Stamina" desc="Your ancestor, Daidoji Masashigi, gave his life  defending the Kaiu Wall alongside the Crab at the Battle of the Landbridge." />
+    <feat type="Epic Level Handbook page 57" name="Great Strength" desc="Your muscle and physical power are greater than  normal." />
+    <feat type="Oriental Adventures page 63" name="Great Teamwork" desc="You are a descendant of Hida Banuken, the Crab  champion who oversaw the construction of the Kaiu Wall during the battle  of the Cresting Wave." />
+    <feat type="Epic Level Handbook page 57" name="Great Wisdom" desc="Your willpower and insight are greater than  normal." />
+    <feat type="Oriental Adventures page 63" name="Greater Ki Shout" desc="Your ki shout can panic your opponents." />
+    <feat type="Frostburn page 48" name="Greater Cold Focus" desc="Your cold spells are now even more potent than  before." />
+    <feat type="Eberron Campaign Setting page 54" name="Greater Dragonmark" desc="You have a greater dragonmark." />
+    <feat type="Races of Stone page 141" name="Greater Heavy Armor Optimization" desc="You have mastered the use of heavy armor, maximizing  its protective qualities while moving more easily in it." />
+    <feat type="Complete Warrior page 99" name="Greater Kiai Shout" desc="You kiai shout can panic your opponents." />
+    <feat type="WL page 14" name="Greater Legacy" desc="You awaken the most powerful abilities of a  specific item of legacy." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Manyshot" desc="You are skilled at firing many arrows at once,  even at different opponents." />
+    <feat type="Savage Species page 35" name="Greater Mighty Roar" desc="You unsettle opponents with a dreadful roar  as you attack." />
+    <feat type="Serpent Kingdoms page 146" name="Greater Multigrab" desc="You can grapple enemies effortlessly with your  natural weapons." />
+    <feat type="Savage Species page 35" name="Greater Multigrab" desc="You can grapple enemies effortlessly with your  natural weapons." />
+    <feat type="Deities and Demigods page 50" name="Greater Multiweapon Fighting" desc="A deity with three or more hands can fight with  a weapon in each hand." />
+    <feat type="Epic Level Handbook page 69" name="Greater Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
+    <feat type="Savage Species page 35" name="Greater Multiweapon Fighting" desc="A creature with three or more arms can fight  with a weapon in each hand. The creature can make up to three attacks per  round with each extra weapon." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Power Penetration" desc="Your powers are especially potent at breaking  through power resistance." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Power Specialization" desc="You deal more damage with your powers." />
+    <feat type="Eberron Campaign Setting page 54" name="Greater Powerful Charge" desc="You can charge with extra force." />
+    <feat type="Miniatures Handbook page 27" name="Greater Powerful Charge" desc="You can charge with extra force." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Endowment" desc="You can use meditation to focus your powers." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Fist" desc="You can charge your unarmed strike or natural  weapon with additional damage potential." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Shot" desc="You can charge your ranged attacks with additional  damage potential." />
+    <feat type="Expanded Psionics Handbook page 47" name="Greater Psionic Weapon" desc="You can charge your melee weapon with additional  damage potential." />
+    <feat type="Complete Warrior page 99" name="Greater Resiliency" desc="Your extraordinary resilience to damage increases." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Greater Resiliency" desc="Your extraordinary resilience to damage increases." />
+    <feat type="Eberron Campaign Setting page 54" name="Greater Shifter Defense" desc="By delving deeper into your shifter heritage,  you develop the ability to ignore some damage from every attack." />
+    <feat type="Deities and Demigods page 50" name="Greater Spell Focus" desc="The deity chooses a school of magic to which  it already has applied the Spell Focus feat." />
+    <feat type="Epic Level Handbook page 69" name="Greater Spell Focus" desc="Choose a school of magic, such as illusion.  Your spells of that school are far more potent than normal." />
+    <feat type="Forgotten Realms Campaign Setting page 35" name="Greater Spell Focus" desc="Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Greater Spell Focus" desc="Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Greater Spell Focus" desc="Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal." />
+    <feat type="Deities and Demigods page 50" name="Greater Spell Penetration" desc="The deity's spells are especially potent, defeating  spell resistance more readily than normal." />
+    <feat type="Epic Level Handbook page 69" name="Greater Spell Penetration" desc="Your spells are especially potent, defeating  spell resistance more readily than normal." />
+    <feat type="Forgotten Realms Campaign Setting page 35" name="Greater Spell Penetration" desc="Your spells are especially potent, defeating  spell resistance more readily than normal." />
+    <feat type="Player's Handbook v.3.5 page 94" name="Greater Spell Penetration" desc="Your spells are remarkably potent, breaking  through spell resistance more readily than normal." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Greater Spell Penetration" desc="Your spells are especially potent, breaking  through spell resistance more readily than normal." />
+    <feat type="Complete Warrior page 100" name="Greater Two-Weapon Defense" desc="When fighting with two weapons, your defenses  are extraordinarily strong." />
+    <feat type="Deities and Demigods page 50" name="Greater Two-Weapon Fighting" desc="The deity is a master at fighting two-handed." />
+    <feat type="Epic Level Handbook page 69" name="Greater Two-Weapon Fighting" desc="You are a master at fighting two-handed." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Greater Two-Weapon Fighting" desc="You are a master at fighting two-handed." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Greater Two-Weapon Fighting" desc="You are a master at fighting two-handed." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Greater Weapon Focus" desc="Choose one type of weapon for which you have  already selected Weapon Focus. You can also choose unarmed strike or grapple  as your weapon for purposes of this feat. You are especially good at using  this weapon." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Greater Weapon Specialization" desc="Choose one type of weapon for which you have  already selected Weapon Specialization You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon." />
+    <feat type="Ghostwalk page 34" name="Greater Witchlight" desc="Your witchlight can last longer, become hotter,  or give off more light." />
+    <feat type="Ghostwalk page 35" name="Green Bond" desc="You have an empathic bond with one of the spirit  trees around Manifest" />
+    <feat type="Complete Adventurer page 110" name="Green Ear" desc="Your bardic music can affect plant creatures." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Green Ear" desc="Your bardic music and virtuoso performance affect  plants and plant creatures." />
+    <feat type="Lost Empires of Faerun page 8" name="Greenbound Summoning" desc="You are learned in a long-forgotten manner of  summoning once practiced by Eaerlanni elves of the High Forest." />
+    <feat type="Eberron Campaign Setting page 54" name="Greensinger Initiate" desc="You have embraced the druidic traditions of  the Greensingers, a chaotic Eldeen Reaches sect with close ties to the fey." />
+    <feat type="Lords of Madness page 114" name="Grell Alchemy" desc="A creature that has this feat has studied the  alien and disturbing arcane lore of the grell, and understands the magical  and physical laws by which their spells and devices function." />
+    <feat type="Races of Faerun page 163" name="Grim Visage" desc="Your eyes have seen a lot, and now they show  everyone that you aren't to be trifled with. Even glib people stammer in  your presence." />
+    <feat type="Complete Divine page 82" name="Grizzly's Claws" desc="You can grow claws as sharp as those of a bear." />
+    <feat type="Complete Adventurer page 192" name="Group Inspiration" desc="Your bardic powers can inspire more allies than  normal." />
+    <feat type="Epic Level Handbook page 57" name="Group Inspiration" desc="You can inspire competence or greatness in more  than one ally simultaneously." />
+    <feat type="Complete Arcane page 80" name="Guardian Spirit" desc="Your watchful spirit is more capable than normal." />
+    <feat type="Heroes of Battle page 97" name="Guerrilla Scout" desc="You know how to use your senses to greater effect." />
+    <feat type="Heroes of Battle page 97" name="Guerrilla Warrior" desc="You know how to move stealthily, even when armored." />
+    <feat type="Shining South page 20" name="Halruuan Adept" desc="You have studied the old cooperative spellcasting  traditions of Halruaa, and you are well-versed in the rites and arcana of  Halruuan magic." />
+    <feat type="Races of Faerun page 164" name="Hammer Fist" desc="You are trained in an unarmed fighting style  that emphasizes a two-handed strike." />
+    <feat type="Complete Warrior page 113" name="Hammer's Edge" desc="You are a master of the style of fighting with  a hammer and sword at the same time." />
+    <feat type="Complete Warrior page 100" name="Hamstring" desc="You can wound your opponents' legs, hampering  their movement." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 39" name="Hamstring" desc="You can wound an opponent's legs, hampering  his or her movement." />
+    <feat type="City of Splendors: Waterdeep page 145" name="Hand of Tyr" desc="You have sacrificed your right hand to Tyr,  the Maimed God, proving your resilience and strength of spirit." />
+    <feat type="Book of Exalted Deeds page 43" name="Hands of a Healer" desc="You can heal more damage than normal by laying  on hands." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Hardened Flesh" desc="Undead you raise or create can better handle  themselves in a fight." />
+    <feat type="Races of Faerun page 164" name="Harem Trained" desc="You have been trained to serve as a jhasin (if  male) or jhasina (if female) and are well versed in song, music, dance,  art, the recitation of great literature, the art of massage, and other duties  of the harem." />
+    <feat type="Ghostwalk page 35" name="Haunting Appearance" desc="You can make your ghost body assume a terrifying  appearance that can frighten observers." />
+    <feat type="Eberron Campaign Setting page 54" name="Haunting Melody" desc="You can use your music to inspire fear." />
+    <feat type="Ghostwalk page 35" name="Haunting Voice" desc="You can make your voice originate from another  location." />
+    <feat type="Complete Adventurer page 114" name="Hawk's Vision" desc="You can improve your visual acuity." />
+    <feat type="Races of Faerun page 164" name="Headlong Rush" desc="You charge your foes with immense force, heedless  of your own safety." />
+    <feat type="Eberron Campaign Setting page 55" name="Healing Factor" desc="When your current period of shifting ends, you  heal a limited amount of damage." />
+    <feat type="Monster Manual III page 150" name="Healing Factor" desc="When your current period of shifting ends, you  heal a limited amount of damage." />
+    <feat type="Races of Faerun page 164" name="Healing Flames" desc="You can draw energy from open flames to heal  yourself." />
+    <feat type="Complete Adventurer page 110" name="Hear the Unseen" desc="Your sense of hearing is so acute that you can  partially pinpoint an opponent's location by sound, allowing you to strike  even if the opponent is concealed or displaced." />
+    <feat type="Sandstorm page 50" name="Heat Endurance" desc="Either as a result of growing up in the waste,  or by training your body and mind to ignore the effects of searing heat,  you can exist with ease in high-temperature environments." />
+    <feat type="Shining South page 20" name="Heat Tolerance" desc="You are used to living in hot, humid conditions." />
+    <feat type="Races of Stone page 141" name="Heavy Armor Optimization" desc="You have trained extensively in heavy armor,  and you have learned to take advantage of the protection it offers." />
+    <feat type="Races of Stone page 141" name="Heavy Lithoderms" desc="You have stony growths on your skin that afford  you protection against attacks." />
+    <feat type="Draconomicon page 70" name="Heighten Breath" desc="Your breath weapon is even more deadly than  normal." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Heighten Spell" desc="You can cast a spell as if it were a higher-level  spell than it actually is." />
+    <feat type="Complete Arcane page 80" name="Heighten Spell-Like Ability" desc="You can use a spell-like ability as if it were  a higher spell-level equivalent than it actually is." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
+    <feat type="Ghostwalk page 35" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Heighten Turning" desc="You can affect more powerful undead with your  turning or rebuking attempts." />
+    <feat type="Champions of Ruin page 23" name="Hellbound Knight" desc="A devoted disciple of the Nine Hells, you have  sworn to strike down creatures that oppose law and threaten tyranny." />
+    <feat type="Races of Destiny page 152" name="Heroic Destiny" desc="You have a destiny to fulfill." />
+    <feat type="Races of Eberron page 109" name="Heroic Metamagic" desc="In times of great need, you can call upon a  heroic reserve of power to strengthen your spells." />
+    <feat type="Eberron Campaign Setting page 55" name="Heroic Spirit" desc="You have a larger reservoir of luck than the  average hero." />
+    <feat type="Complete Warrior page 113" name="High Sword Low Axe" desc="You have mastered the style of fighting with  a sword and axe at the same time." />
+    <feat type="Races of Faerun page 164" name="Highborn Drow" desc="You have learned how to tap into the advanced  magical abilities of your drow noble heritage." />
+    <feat type="Underdark page 25" name="Highborn Drow" desc="You have learned how to tap into the advanced  magical abilities available to you through your drow noble heritage." />
+    <feat type="Races of Faerun page 164" name="Hin Wandermage" desc="You have a natural affinity for spells that  take you from place to place." />
+    <feat type="Epic Level Handbook page 57" name="Hindering Song" desc="Your bardic music interferes with opposing spellcasters." />
+    <feat type="Complete Warrior page 100" name="Hold the Line" desc="You are trained in defensive techniques against  charging opponents." />
+    <feat type="Deities and Demigods page 51" name="Hold the Line" desc="The deity is trained in defensive techniques  against charging opponents." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Hold the Line" desc="You are trained in defensive techniques against  charging opponents." />
+    <feat type="Shining South page 20" name="Hold the Line" desc="You are trained in defensive techniques against  charging opponents." />
+    <feat type="Book of Exalted Deeds page 44" name="Holy Ki Strike" desc="Your unarmed attacks deal extra damage to evil  creatures." />
+    <feat type="Book of Exalted Deeds page 44" name="Holy Radiance" desc="You can increase the intensity of the light  surrounding you to damage undead creatures." />
+    <feat type="Complete Divine page 89" name="Holy Strike" desc="Your attacks deal great damage to evil creatures." />
+    <feat type="Epic Level Handbook page 57" name="Holy Strike" desc="Your attacks deal great damage to evil creatures." />
+    <feat type="Book of Exalted Deeds page 44" name="Holy Subdual" desc="You can turn bonus damage into nonlethal damage." />
+    <feat type="Oriental Adventures page 63" name="Honest Merchant" desc="Your ancestor, Bayushi Tesaguri, was the son  of Bayushi Junzen, Scorpion Clan Champion." />
+    <feat type="Dragonlance Campaign Setting page 86" name="Honor-Bound" desc="Keeping your word and upholding your honor is  of great importance to you." />
+    <feat type="Ghostwalk page 35" name="Horrific Appearance" desc="You can blast creatures with your simple appearance." />
+    <feat type="Forgotten Realms Campaign Setting page 35" name="Horse Nomad" desc="You have been raised in a culture that relies  upon riding and shooting for survival." />
+    <feat type="Player's Guide to Faerun page 39" name="Horse Nomad" desc="You have been raised in a culture that relies  upon riding and shooting." />
+    <feat type="Expanded Psionics Handbook page 47" name="Hostile Mind" desc="Your mind recoils violently against those who  use psionics against you." />
+    <feat type="Monster Manual v.3.5 page 304" name="Hover" desc="The creature can come to a halt in midair." />
+    <feat type="Monster Manual II page 18" name="Hover" desc="The creature can halt its forward motion while  flying, regardless of maneuverability." />
+    <feat type="Dragonlance Campaign Setting page 86" name="Hulking Brute " desc="You possess a truly impressive stature." />
+    <feat type="Races of Destiny page 152" name="Human Heritage" desc="Your human heritage is more prominent than in  others of your kind." />
+    <feat type="Miniatures Handbook page 27" name="Hurling Charge" desc="You are trained in using thrown weapons as part  of a charge attack." />
+    <feat type="Shining South page 20" name="Hyena Tribe Hunter" desc="You have learned the secrets of hunting from  the hyena that roams the lands where your tribe wanders." />
+    <feat type="Oriental Adventures page 63" name="Iaijutsu Master" desc="You are not only descended from Kakita, the  greatest duelist ever to have lived, but you share a karmic tie to his spirit." />
+    <feat type="Frostburn page 48" name="Ice Harmonics" desc="Your summon spells work better in the frostfell  if you summon native creatures." />
+    <feat type="UE page 44" name="Ice Troll Berserker" desc="When raging, your skin becomes very thick and  tough like the ice trolls that plague parts of your homeland." />
+    <feat type="Frostburn page 48" name="Icy Calling" desc="You can use your voice to shatter ice." />
+    <feat type="Epic Level Handbook page 57" name="Ignore Material Components" desc="You need not use any material components in  casting spells." />
+    <feat type="Expanded Psionics Handbook page 47" name="Imprint Stone" desc="You can create power stones to store psionic  powers." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Improve Bull Rush" desc="You know how to push opponents back." />
+    <feat type="Oriental Adventures page 63" name="Improved Aid" desc="You are descended from Hida Tadaka, the great  Crab daimyo who gave his life to avert a war between his clan and the Lion." />
+    <feat type="Epic Level Handbook page 57" name="Improved Alignment-Based Casting" desc="Your spells of a particular alignment are more  powerful than normal." />
+    <feat type="Epic Level Handbook page 57" name="Improved Arrow of Death" desc="Your arrows of death are harder to resist." />
+    <feat type="Savage Species page 35" name="Improved Assume Supernatural Ability" desc="You gain skills using a supernatural ability  of an assumed form." />
+    <feat type="Epic Level Handbook page 57" name="Improved Aura of Courage" desc="Your aura of courage is stronger than normal." />
+    <feat type="Epic Level Handbook page 57" name="Improved Aura of Despair" desc="Your aura of despair is wider than normal." />
+    <feat type="Complete Warrior page 100" name="Improved Buckler Defense" desc="You can attack with an off-hand weapon while  retaining a buckler's shield bonus to your Armor Class." />
+    <feat type="Heroes of Battle page 98" name="Improved Cohort" desc="You attract a more powerful cohort than you  normally would." />
+    <feat type="Frostburn page 48" name="Improved Cold Endurance" desc="Your training and natural hardiness have improved  your natural resistance to cold temperatures." />
+    <feat type="Complete Arcane page 192" name="Improved Combat Casting" desc="You heighten your ability to cast spells while  threatened without fear of being attacked." />
+    <feat type="Epic Level Handbook page 57" name="Improved Combat Casting" desc="You can cast spells while threatened without  fear of being attacked." />
+    <feat type="Complete Warrior page 100" name="Improved Combat Expertise" desc="You have mastered the art of defense in combat." />
+    <feat type="Epic Level Handbook page 57" name="Improved Combat Reflexes" desc="You can respond to any number of opponents who  let their defenses down." />
+    <feat type="Ghostwalk page 35" name="Improved Control Visage" desc="You can change your ghost form's appearance." />
+    <feat type="Player's Guide to Faerun page 136" name="Improved Cooperative Metamagic" desc="Your ability to enhance an ally's spell during  casting is expanded." />
+    <feat type="Epic Level Handbook page 70" name="Improved Counterspell" desc="You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency." />
+    <feat type="Forgotten Realms Campaign Setting page 35" name="Improved Counterspell" desc="You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Improved Counterspell" desc="You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Improved Critical" desc="Choose one type of weapon. With that weapon,  you know how to hit where it hurts." />
+    <feat type="Eberron Campaign Setting page 55" name="Improved Damage Reduction" desc="You gain damage reduction or improve your existing  damage reduction." />
+    <feat type="Epic Level Handbook page 58" name="Improved Darkvision" desc="Your ability to see in the dark is greater than  normal." />
+    <feat type="Epic Level Handbook page 58" name="Improved Death Attack" desc="Your death attack is harder to overcome." />
+    <feat type="Ghostwalk page 35" name="Improved Deflection" desc="You are adept at deflecting things before they  strike you." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Improved Disarm" desc="You know how to disarm opponents in melee combat." />
+    <feat type="Complete Adventurer page 110" name="Improved Diversion" desc="You can create a diversion to hide quickly and  with less effort." />
+    <feat type="Dragonlance Campaign Setting page 86" name="Improved Draconian Breath Weapon" desc="You have mastered your draconic heritage and  improved on your innate breath weapon." />
+    <feat type="Planar Handbook page 40" name="Improved Elemental Heritage" desc="You have manifested an even stronger tie to  your elemental ancestor, resulting in a minor resistance to elemental effects." />
+    <feat type="Dungeon Master's Guide v.3.5 page 209" name="Improved Elemental Wild Shape " desc="You can take the form of a larger variety of  elementals than normal." />
+    <feat type="Epic Level Handbook page 58" name="Improved Elemental Wild Shape" desc="You can take the form of a greater variety of  elementals than normal." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Energy Drain" desc="You draw extra power from your energy-drained  victims." />
+    <feat type="Races of Faerun page 164" name="Improved Energy Resistance" desc="Choose one form of energy to which you have  a natural (not spell- or item-generated) resistance. Your inherent resistance  to this kind of energy is more effective than normal." />
+    <feat type="Complete Warrior page 100" name="Improved Familiar" desc="This feat allows spellcasters to acquire a new  familiar from a nonstandard list, but only when they could normally acquire  a new familiar." />
+    <feat type="Forgotten Realms Campaign Setting page 35" name="Improved Familiar" desc="So long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list." />
+    <feat type="Player's Guide to Faerun page 39" name="Improved Familiar" desc="Refer to the Improved Familiar feat description  on page 200 of the Dungeon Master's Guide." />
+    <feat type="Races of Faerun page 165" name="Improved Familiar" desc="See the discussion of the Improved Familiar  feat in Chapter 1 of the Forgotten Realms Campaign Setting. Table A-5 shows  additional improved familiars from this book that are available with this  feat." />
+    <feat type="Serpent Kingdoms page 146" name="Improved Familiar" desc="Refer to the Improved Familiar feat description  in the Dungeon Master's Guide." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 40" name="Improved Familiar" desc="As long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list." />
+    <feat type="Complete Warrior page 101" name="Improved Favored Enemy" desc="You know how to hit your favored enemies where  it hurts." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Favored Enemy" desc="Gain bonuses against favored enemies." />
+    <feat type="Epic Level Handbook page 58" name="Improved Favored Enemy" desc="You gain bonuses against favored enemies." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Improved Feint" desc="You are skilled at misdirecting your opponent's  attention in combat." />
+    <feat type="Champions of Ruin page 20" name="Improved Fiendish Servant" desc="You gain the service of a powerful fiendish  animal servitor." />
+    <feat type="Complete Adventurer page 110" name="Improved Flight" desc="You gain greater maneuverability when flying  than you would normally have." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Improved Flight" desc="You gain greater maneuverability when flying  than you would normally have." />
+    <feat type="Races of Faerun page 165" name="Improved Flight" desc="You gain greater maneuverability when flying  than you would normally have." />
+    <feat type="Races of the Wild page 151" name="Improved Flight" desc="You have gained greater maneuverability when  flying than you would normally have." />
+    <feat type="Sharn: City of Towers page 157" name="Improved Flight Item (Item Creation)" desc="You have learned to make use of the manifest  zone in Sharn to craft magic items that grant superior flight." />
+    <feat type="Epic Level Handbook page 70" name="Improved Flyby Attack" desc="The creature can attack on the wing with increased  mobility." />
+    <feat type="Savage Species page 36" name="Improved Flyby Attack" desc="You can attack on the wing with increased mobility." />
+    <feat type="Eberron Campaign Setting page 55" name="Improved Fortification" desc="You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits." />
+    <feat type="Monster Manual III page 192" name="Improved Fortification" desc="You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits." />
+    <feat type="Frostburn page 49" name="Improved Frosty Touch" desc="Your frosty touch causes more cold damage." />
+    <feat type="Ghostwalk page 35" name="Improved Ghost Flight" desc="Your ghost body can fly rapidly." />
+    <feat type="Deities and Demigods page 51" name="Improved Grapple " desc="The deity is skilled in martial arts that emphasize  holds and throws." />
+    <feat type="Oriental Adventures page 63" name="Improved Grapple" desc="You are skilled in martial arts that emphasize  holds and throws." />
+    <feat type="Player's Handbook v.3.5 page 95" name="Improved Grapple" desc="You are skilled at grappling opponents." />
+    <feat type="UE page 44" name="Improved Grapple" desc="You are skilled in martial arts that emphasize  holds and throws." />
+    <feat type="Sandstorm page 50" name="Improved Heat Endurance" desc="You can survive even in the most extreme natural  heat conditions." />
+    <feat type="Epic Level Handbook page 58" name="Improved Heighten Spell" desc="You can cast a spell at any level above its  own." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Initiative" desc="You can react more quickly than normal in a  fight." />
+    <feat type="Epic Level Handbook page 58" name="Improved Ki Strike" desc="You can strike opponents with great damage reduction." />
+    <feat type="Races of Faerun page 165" name="Improved Levitation" desc="You have learned to use part of your levitate  spell-like ability at a time, allowing multiple uses with a shorter duration." />
+    <feat type="Underdark page 25" name="Improved Levitation" desc="You have learned to use only part of your levitate  spell-like ability at a time, allowing multiple uses with shorter duration." />
+    <feat type="Races of Faerun page 165" name="Improved Low Blow" desc="You are especially good at using the Low Blow  feat." />
+    <feat type="Epic Level Handbook page 58" name="Improved Low-Light Vision" desc="The range of your low-light vision is greater  than normal." />
+    <feat type="Draconomicon page 70" name="Improved Maneuverability" desc="Your maneuverability in flight improves." />
+    <feat type="Epic Level Handbook page 58" name="Improved Manifestation" desc="You can manifest psionic powers more powerful  than the normal limits of manifestation." />
+    <feat type="Expanded Psionics Handbook page 34" name="Improved Manifestation" desc="You increase your power point reserve." />
+    <feat type="Epic Level Handbook page 58" name="Improved Manyshot" desc="You can fire even more arrows as a single attack  against a nearby target." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Metamagic" desc="You can cast spells using metamagic feats more  easily than normal." />
+    <feat type="Epic Level Handbook page 59" name="Improved Metamagic" desc="You can cast spells using metamagic feats more  easily than normal." />
+    <feat type="Expanded Psionics Handbook page 34" name="Improved Metapsionics" desc="You can manifest powers using metapsionic feats  more often than normal." />
+    <feat type="Complete Warrior page 101" name="Improved Mounted Archery" desc="You can make ranged attacks from a mount almost  as well as you can from the ground." />
+    <feat type="Draconomicon page 70" name="Improved Multiattack" desc="You are particularly adept at using all your  natural weapons at once." />
+    <feat type="Epic Level Handbook page 70" name="Improved Multiattack" desc="The creature is particularly adept at using  all its natural weapons at once." />
+    <feat type="Savage Species page 36" name="Improved Multiattack" desc="You are particularly adept at using all your  natural weapons at once." />
+    <feat type="Deities and Demigods page 51" name="Improved Multiweapon Fighting" desc="A deity with three or more hands can fight with  a weapon in each hand." />
+    <feat type="Epic Level Handbook page 70" name="Improved Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
+    <feat type="Savage Species page 36" name="Improved Multiweapon Fighting" desc="You are expert at fighting with a weapon in  each of your three or more hands. You can make up to two attacks per round  with each off-hand weapon." />
+    <feat type="Monster Manual v.3.5 page 304" name="Improved Natural Armor" desc="The creature's natural armor is thicker and  harder than that of other of its kind." />
+    <feat type="Monster Manual III page 206" name="Improved Natural Armor" desc="The natural armor of a creature with this feat  is thicker and harder than normal for its kind." />
+    <feat type="Races of Faerun page 165" name="Improved Natural Armor" desc="Your skin is even tougher than that of most  of your kind." />
+    <feat type="Eberron Campaign Setting page 55" name="Improved Natural Attack" desc="One of a creature's natural attacks is more  dangerous than its type and size would otherwise indicate." />
+    <feat type="Monster Manual v.3.5 page 304" name="Improved Natural Attack" desc="The creature's natural attacks are more dangerous  than its size and type would otherwise dictate." />
+    <feat type="Monster Manual III page 206" name="Improved Natural Attack" desc="The natural attacks of a creature with this  feat are more dangerous than its size and type would otherwise dictate." />
+    <feat type="Planar Handbook page 40" name="Improved Outer Planar Heritage" desc="Your ancestral tie to the Outer Planes manifests  as an ability to deal damage with your natural attacks as if they matched  the alignment of your ancestors." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Overrun" desc="You are skilled at knocking down opponents." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Improved Overrun" desc="You are trained in knocking over opponents that  are smaller than you." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Paralysis" desc="You are better at paralyzing your victims." />
+    <feat type="Ghostwalk page 36" name="Improved Poltergeist Hand" desc="You can move a large object at a distance when  you are a ghost." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Precise Shot" desc="Your ranged attacks can ignore the effects of  cover or concealment." />
+    <feat type="Expanded Psionics Handbook page 47" name="Improved Psicrystal" desc="You can upgrade your psicrystal." />
+    <feat type="Complete Warrior page 101" name="Improved Rapid Shot" desc="You are an expert at firing weapons with exceptional  speed." />
+    <feat type="Draconomicon page 70" name="Improved Rapidstrike" desc="You can make multiple attacks with a natural  weapon." />
+    <feat type="Races of Eberron page 119" name="Improved Resiliency" desc="You gain a construct's resistance to nonlethal  damage." />
+    <feat type="Dragonlance Campaign Setting page 86" name="Improved Resist Dragonfear" desc="You are able to demonstrate great courage in  the presence of dragons." />
+    <feat type="Races of Stone page 141" name="Improved Rock Hurling" desc="Your accuracy and effectiveness with thrown  rocks improves." />
+    <feat type="Savage Species page 36" name="Improved Scent" desc="You can detect and track creatures by smell  at greater distances than normal." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Improved Shield Bash" desc="You can push opponents back by bashing them  with your shield." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Shield Bash" desc="You can bash with a shield while retaining its  shield bonus to your Armor Class." />
+    <feat type="Miniatures Handbook page 27" name="Improved Shieldmate" desc="You have an outstanding ability to protect those  near you with your shield." />
+    <feat type="Races of Destiny page 152" name="Improved Sigil (Aesh)" desc="You tap into your aesh power sigil to  gain enhanced accuracy with your favored melee weapons." />
+    <feat type="Races of Destiny page 152" name="Improved Sigil (Hoon)" desc="You tap into your hoon power sigil to  help survive deadly conditions." />
+    <feat type="Races of Destiny page 153" name="Improved Sigil (Krau)" desc="You tap into your krau power sigil to  augment the energy of your magical utterances." />
+    <feat type="Races of Destiny page 153" name="Improved Sigil (Naen)" desc="You tap into your naen power sigil to  see through illusions and resist language-based effects." />
+    <feat type="Races of Destiny page 153" name="Improved Sigil (Uur)" desc="You tap into your uur power sigil to  gain enhanced accuracy with ranged weapons." />
+    <feat type="Races of Destiny page 153" name="Improved Sigil (Vaul)" desc="You tap into your vaul power sigil to  resist mental effects." />
+    <feat type="Complete Adventurer page 192" name="Improved Skirmish" desc="Your combat mobility improves." />
+    <feat type="Complete Divine page 82" name="Improved Smiting" desc="Your smite attacks deal more damage to specific  foes, and can damage creature with alignment-based damage reduction." />
+    <feat type="Draconomicon page 71" name="Improved Snatch" desc="You can make snatch attacks against bigger opponents  than other creatures can." />
+    <feat type="Player's Guide to Faerun page 136" name="Improved Snatch Spell" desc="When you take over a spell from another spellcaster,  you gain more control over its effect." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Sneak Attack" desc="Your sneak attacks are more deadly than normal." />
+    <feat type="Epic Level Handbook page 59" name="Improved Sneak Attack" desc="Your sneak attacks are more deadly than normal." />
+    <feat type="Draconomicon page 71" name="Improved Speed " desc="You are faster than others of your kind." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Spell Capacity" desc="You can prepare spells that exceed the normal  limits of spellcasting." />
+    <feat type="Draconomicon page 71" name="Improved Spell Capacity" desc="You can prepare spells that exceed the normal  limits of spellcasting." />
+    <feat type="Epic Level Handbook page 59" name="Improved Spell Capacity" desc="You can prepare spells that exceed the normal  limits of spellcasting." />
+    <feat type="Epic Level Handbook page 60" name="Improved Spell Resistance" desc="Your innate resistance to magical effects increases." />
+    <feat type="Player's Guide to Faerun page 136" name="Improved Spellpool Access" desc="You can use your spellpool access to call spells  of greater than normal power." />
+    <feat type="Serpent Kingdoms page 146" name="Improved Spit" desc="You can spit farther than normal." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Improved Stunning Fist" desc="Your stunning attack is more powerful." />
+    <feat type="Epic Level Handbook page 60" name="Improved Stunning Fist" desc="Your stunning attack is more powerful." />
+    <feat type="Complete Adventurer page 192" name="Improved Sudden Strike" desc="Your ability to strike unaware foes improves." />
+    <feat type="Deities and Demigods page 51" name="Improved Sunder" desc="The deity is adept at placing its attacks precisely  where it wants them to land." />
+    <feat type="Enemies and Allies page 42" name="Improved Sunder" desc="You are adept at placing your attacks precisely  where you want them to land." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Sunder" desc="You are skilled at attacking your opponents'  weapons and shields, as well as other objects." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Improved Sunder" desc="You are adept at placing your attacks precisely  where you want them to land." />
+    <feat type="Complete Adventurer page 110" name="Improved Swimming" desc="You can swim faster than you normally could." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Improved Swimming" desc="You swim faster than you normally could." />
+    <feat type="Complete Warrior page 101" name="Improved Toughness" desc="You are significantly tougher than normal." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Toughness" desc="You are significantly tougher than normal." />
+    <feat type="Monster Manual III page 207" name="Improved Toughness" desc="A creature with this feat is significantly tougher  than normal." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Trip" desc="You are trained not only in tripping opponents  safely but also following through with an attack." />
+    <feat type="Ghostwalk page 36" name="Improved Turn Resistance" desc="You are better able to resist the channeling  of positive or negative energy by clerics and similar classes." />
+    <feat type="Libris Mortis: The Book of the Dead page 27" name="Improved Turn Resistance" desc="You have a better than normal chance to resist  turning." />
+    <feat type="Savage Species page 36" name="Improved Turn Resistance" desc="You have a better than normal chance to resist  turning." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Turning" desc="Your turning or rebuking attempts are more powerful  than normal." />
+    <feat type="Complete Warrior page 101" name="Improved Two-Weapon Defense" desc="You gain a significant defensive advantage while  fighting with two weapons." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Two-Weapon Fighting" desc="You are an expert in fighting two-handed." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Improved Unarmed Strike" desc="You are skilled at fighting while unarmed." />
+    <feat type="Complete Warrior page 101" name="Improved Weapon Familiarity" desc="You are familiar with all exotic weapons common  to your people." />
+    <feat type="Races of Stone page 141" name="Improved Weapon Familiarity" desc="You are familiar with all exotic weapons common  to your people." />
+    <feat type="Savage Species page 36" name="Improved Web" desc="You gain additional utility from your webs." />
+    <feat type="Epic Level Handbook page 60" name="Improved Whirlwind Attack" desc="You become a blurry whirlwind of attacks, striking  out at all enemies near your position." />
+    <feat type="Epic Level Handbook page 60" name="Incite Rage" desc="You can incite allies into a rage." />
+    <feat type="Ghostwalk page 36" name="Incorporeal Form" desc="You can become incorporeal even when you would  otherwise be forced to manifest fully." />
+    <feat type="Ghostwalk page 36" name="Incorporeal Spell Targeting" desc="You know how to cast your spells so they're  more likely to affect incorporeal creatures." />
+    <feat type="Ghostwalk page 36" name="Incorporeal Target Fighting" desc="You know how to fight incorporeal creatures  in melee." />
+    <feat type="Unearthed Arcana page 93" name="Ineluctable Echo" desc="Those who use words of power around you hear  the sound of their own voices." />
+    <feat type="Races of Faerun page 165" name="Infernal Bargainer" desc="You are comfortable making deals with powerful  entities from the Lower Planes." />
+    <feat type="Epic Level Handbook page 61" name="Infinite Deflection" desc="You can deflect an infinite number of projectiles." />
+    <feat type="Lords of Madness page 180" name="Inhuman Reach" desc="Your arms elongate, allowing you to touch the  floor with your hands." />
+    <feat type="Lords of Madness page 180" name="Inhuman Vision" desc="You possess the inhuman eyes of some strange  creature." />
+    <feat type="Champions of Ruin page 23" name="Initiate of Ghaunadaur" desc="You have learned the dread secrets of the god  of oozes, slimes, jellies, and outcasts." />
+    <feat type="Champions of Ruin page 24" name="Initiate of Gruumsh" desc="The singular eye of the great orc god Gruumsh  watches over you." />
+    <feat type="Champions of Ruin page 24" name="Initiate of Kossuth" desc="You have faced the fierce elemental flame and  unlocked some of the secrets of Kossuth's church." />
+    <feat type="Champions of Ruin page 24" name="Initiate of Loviatar" desc="With great pain comes great power. This and  other secrets you have learned from the church of Loviatar." />
+    <feat type="Shining South page 20" name="Initiate of Loviatar" desc="You have been initiated into the greatest secrets  of Loviatar's church." />
+    <feat type="Champions of Ruin page 24" name="Initiate of Shar" desc="You have been initiated into the greatest secrets  of Shar's church." />
+    <feat type="City of Splendors: Waterdeep page 145" name="Initiate of Shar" desc="You have been initiated into the greatest secrets  of Shar's church." />
+    <feat type="Champions of Ruin page 25" name="Initiate of Varae" desc="You fervently worship Varae, the serpentine  goddess, and guard well the secrets of your faith." />
+    <feat type="Complete Arcane page 80" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
+    <feat type="Player's Guide to Faerun page 39" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Innate Spell" desc="You have mastered a spell so thoroughly that  you can now use it as a spell-like ability." />
+    <feat type="Expanded Psionics Handbook page 48" name="Inquisitor" desc="You know when others lie." />
+    <feat type="Player's Guide to Faerun page 136" name="Inscribe Epic Runes" desc="You can inscribe runes of epic power." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Inscribe Rune" desc="You can create magic runes that hold spells  until triggered." />
+    <feat type="Player's Guide to Faerun page 40" name="Inscribe Rune" desc="You can create magic runes that hold spells  until triggered." />
+    <feat type="Races of Destiny page 153" name="Inside Connection" desc="Choose a specific organization. You have strong  personal connections within that organization, as well as insight into its  membership." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Insidious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to detect." />
+    <feat type="Player's Guide to Faerun page 40" name="Insidious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
+    <feat type="Complete Arcane page 80" name="Insightful" desc="You possess a magical understanding of the workings  of arcane detection." />
+    <feat type="Complete Adventurer page 110" name="Insightful Reflexes" desc="Your keen intellect allows you an uncanny knack  for evading dangerous effects." />
+    <feat type="Heroes of Battle page 98" name="Inspirational Leadership" desc="Your cohort and followers are exceptionally  faithful to your cause." />
+    <feat type="Epic Level Handbook page 61" name="Inspire Excellence" desc="You can improve the abilities of your comrades  through your performance." />
+    <feat type="Races of Stone page 141" name="Inspire Spellpower" desc="You can use your bardic music to increase the  power of your allies' spells." />
+    <feat type="Epic Level Handbook page 61" name="Instant Reload" desc="Choose one type of crossbow, such as heavy crossbow.  You can fire that type of crossbow as fast as a bow." />
+    <feat type="Complete Warrior page 102" name="Instantaneous Rage" desc="You activate your rage instantly." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 23" name="Instantaneous Rage" desc="You activate your rage instantly." />
+    <feat type="Epic Level Handbook page 61" name="Intensify Spell" desc="You can cast spells with exceptionally great  effect." />
+    <feat type="Complete Warrior page 102" name="Intimidating Rage" desc="Your rage engenders fear in your opponents." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Intimidating Rage" desc="Your rage engenders fear in your opponents." />
+    <feat type="Book of Exalted Deeds page 44" name="Intuitive Attack" desc="You fight by faith more than brute strength." />
+    <feat type="Savage Species page 36" name="Inured to Energy" desc="You can resist energy attacks more efficiently  than normal." />
+    <feat type="Races of Stone page 141" name="Invest Armor" desc="You can charge your armor with additional protective  qualities." />
+    <feat type="Eberron Campaign Setting page 55" name="Investigate" desc="You can use the Search skill to find and analyze  clues at the scene of a crime or a mystery." />
+    <feat type="Player's Handbook v.3.5 page 96" name="Investigator" desc="You have a knack for finding information." />
+    <feat type="Savage Species page 36" name="Involuntary Rage" desc="Extreme pain drives you berserk." />
+    <feat type="Races of Faerun page 165" name="Iron Mind" desc="You are descended from duergar who escaped enslavement  by the illithids. The blood of these psionic-resistant former thralls runs  thick in your veins." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Iron Will" desc="You have a stronger will than normal." />
+    <feat type="Complete Adventurer page 113" name="Ironskin Chant" desc="You can channel the power of your bardic music  to enable yourself to ignore minor injuries." />
+    <feat type="Races of Eberron page 119" name="Ironwood Body" desc="Your body is crafted with a layer of hard ironwood  that cushions blows." />
+    <feat type="Serpent Kingdoms page 146" name="Irresistible Gaze" desc="Your gaze attack is more potent than normal." />
+    <feat type="Savage Species page 37" name="Irresistible Gaze" desc="Your gaze attack is more potent than normal." />
+    <feat type="Lost Empires of Faerun page 8" name="Item Reprieve" desc="You learn how to use items from a school of  magic previously prohibited to you." />
+    <feat type="Complete Adventurer page 110" name="Jack of All Trades" desc="You have picked up a smattering of even the  most obscure skills." />
+    <feat type="Deities and Demigods page 51" name="Jack of All Trades" desc="The deity has picked up a smattering of even  the most obscure skills." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Jack of All Trades" desc="You've picked up a smattering of even the most  obscure skills." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Jack of All Trades" desc="You've picked up a smattering of even the most  obscure skills." />
+    <feat type="Races of Eberron page 119" name="Jaws of Death" desc="Gnashing teeth and a powerful set of jaws allow  you to bite foes." />
+    <feat type="Lost Empires of Faerun page 8" name="Jergal's Pact" desc="You have made a bargain with Jergal, seneschal  to the god of death." />
+    <feat type="City of Splendors: Waterdeep page 145" name="Jester's Magic" desc="You are a skilled master of magical jests, capable  of inciting audiences to laughter or lulling them to sleep." />
+    <feat type="Races of Faerun page 166" name="Jotunbrud" desc="You are descended from the giants who ruled  the mountain-spanning empire of Ostoria in ages past, and possess a truly  impressive stature." />
+    <feat type="Sandstorm page 50" name="Judged by Aurifar" desc="Aurifar, the Caliph of the Sky, has judged you,  and he shows you special favor." />
+    <feat type="Races of Faerun page 166" name="Jungle Stamina" desc="You are acclimated to the disease-ridden jungles  of southwestern Faerun." />
+    <feat type="Races of Eberron page 118" name="Kalashtar Thoughtshifter" desc="You have learned to control your mind blade  for maximum impact in battle." />
+    <feat type="Oriental Adventures page 63" name="Kami's Intuition" desc="You are descended from Shinjo, the first Unicorn,  the kindest and most compassionate of the kami." />
+    <feat type="Complete Warrior page 102" name="Karmic Strike" desc="You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you." />
+    <feat type="Oriental Adventures page 63" name="Karmic Strike" desc="You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you." />
+    <feat type="Oriental Adventures page 64" name="Karmic Twin" desc="You are descended from Bayushi, the first Scorpion,  whos love for his daughter proved his final downfall." />
+    <feat type="Oriental Adventures page 64" name="Keen Intellect" desc="You are descended from Agasha, the founder of  the original Dragon shugenja school, a shugenja known for her keen intellect  and powers of observation." />
+    <feat type="Epic Level Handbook page 61" name="Keen Strike" desc="Your unarmed strikes become as sharp as blades." />
+    <feat type="Oriental Adventures page 64" name="Ki Shout" desc="You can bellow forth a ki-empowered shout  that strikes terror into your enemies." />
+    <feat type="Complete Warrior page 102" name="Kiai Shout" desc="You can bellow forth a shout that strikes terror  into your enemies." />
+    <feat type="Ghostwalk page 36" name="Kihu-Sherem Guardian" desc="You are one of the Kihu-Sherem, magically altered  in the womb to allow you to better protect the sorcerers of your homeland." />
+    <feat type="Races of the Wild page 151" name="Killoren Ancient" desc="You favor the killoren aspect of the ancient." />
+    <feat type="Races of the Wild page 151" name="Killoren Destroyer" desc="You favor the killoren aspect of the destroyer." />
+    <feat type="Races of the Wild page 151" name="Killoren Hunter" desc="You favor the killoren aspect of the hunter" />
+    <feat type="Player's Guide to Faerun page 40" name="Knifefighter" desc="You're an expert at using weapons in a grapple." />
+    <feat type="Book of Exalted Deeds page 44" name="Knight of Stars " desc="You swear allegiance to the Court of Stars,  the paragons of the eladrin, and in exchange gain power to act on their  behalf." />
+    <feat type="Eberron Campaign Setting page 56" name="Knight Training" desc="You are part of a knightly order that combines  the divine calling of the paladin class with another form of training." />
+    <feat type="Races of Stone page 142" name="Knockback" desc="By putting your bulk behind a blow, you can  push your enemy backward." />
+    <feat type="Deities and Demigods page 51" name="Knock-Down" desc="The deity's mighty blows can knock foes off  their feet." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Knock-Down" desc="Your mighty blows can knock foes off their feet." />
+    <feat type="Stronghold Builder's Guidebook page 10" name="Landlord" desc="By knowing the right nobles, making contacts  with masons and artisans, or performing great deeds for a liege-lord, you  have resources that help you build and expand your stronghold." />
+    <feat type="Races of Faerun page 166" name="Landwalker" desc="You can survive out of water for a longer period  of time than most of your kind." />
+    <feat type="Stormwrack page 92" name="Landwalker" desc="You can survive out of water for a longer period  of time than most of your kind." />
+    <feat type="Draconomicon page 71" name="Large and In Charge" desc="You can prevent opponents from closing inside  your reach." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 61" name="Large and in Charge" desc="You can prevent opponents from closing inside  your reach." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Lasting Inspiration" desc="Your songs continue to inspire allies long after  your words have faded." />
+    <feat type="Epic Level Handbook page 61" name="Lasting Inspiration" desc="Your songs continue to inspire allies long after  your words have faded." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Lasting Life" desc="You can shed negative levels with an act of  will." />
+    <feat type="Races of Destiny page 155" name="Law Inviolate" desc="Your unshakable faith in St. Cuthbert allows  you to better apprehend fugitives or overcome villains who transgress the  law." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Leadership" desc="You are the sort of person others want to follow,  and you have done some work attempting to recruit cohorts and followers." />
+    <feat type="Complete Adventurer page 110" name="Leap Attack" desc="You can combine a powerful charge and a mighty  leap into one devastating attack." />
+    <feat type="Eberron Campaign Setting page 56" name="Least Dragonmark" desc="You have a least dragonmark." />
+    <feat type="WL page 14" name="Least Legacy" desc="You awaken the basic abilities of a specific  item of legacy." />
+    <feat type="WL page 15" name="Legacy Focus" desc="Your item's legacy abilities are more potent  than normal." />
+    <feat type="Complete Adventurer page 192" name="Legendary Acrobat" desc="You can balance and tumble much more easily  than a normal person." />
+    <feat type="Eberron Campaign Setting page 56" name="Legendary Artisan" desc="You have mastered the method of creating magic  items." />
+    <feat type="Complete Adventurer page 192" name="Legendary Climber" desc="You can climb rapidly much more easily than  a normal person." />
+    <feat type="Epic Level Handbook page 61" name="Legendary Climber" desc="You can climb rapidly much more easily than  a normal person." />
+    <feat type="Epic Level Handbook page 62" name="Legendary Commander" desc="You attract and lead great armies of followers  through sheer force of personality." />
+    <feat type="Complete Adventurer page 192" name="Legendary Leaper" desc="You can cover great distances with only a brief  start." />
+    <feat type="Epic Level Handbook page 62" name="Legendary Leaper" desc="You can jump much farther than normal for your  size." />
+    <feat type="Complete Warrior page 152" name="Legendary Rider" desc="You can ride a mount in combat with ease, even  bareback." />
+    <feat type="Epic Level Handbook page 62" name="Legendary Rider" desc="You can ride any mount without penalty (even  bareback) and can control any mount in combat." />
+    <feat type="Complete Adventurer page 192" name="Legendary Tracker" desc="You can track prey across or through the water,  or even through the air." />
+    <feat type="Epic Level Handbook page 62" name="Legendary Tracker" desc="You can track prey across or through the water,  or even through the air." />
+    <feat type="Epic Level Handbook page 62" name="Legendary Wrestler" desc="You are exceptionally proficient at grappling." />
+    <feat type="Eberron Campaign Setting page 56" name="Lesser Dragonmark" desc="You have a lesser dragonmark." />
+    <feat type="WL page 15" name="Lesser Legacy" desc="You awaken more powerful abilities of a specific  item of legacy." />
+    <feat type="Book of Vile Darkness page 49" name="Lichloved" desc="By repeatedly committing perverted sex acts  with the undead, the character gains dread powers." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Life Drain" desc="You drain additional life energy from your foes." />
+    <feat type="Unearthed Arcana page 93" name="Life Leech" desc="You automatically try to steal the last bit  of life energy from anyone nearby." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Lifebond" desc="Select a specific living creature that is friendly  to you. You create a special bond with that creature." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Lifesense" desc="You see the light that all living creatures  emit." />
+    <feat type="Sandstorm page 51" name="Light of Aurifar" desc="Undead that you turn or rebuke immolate." />
+    <feat type="Races of Faerun page 166" name="Light to Daylight" desc="Your inherent ability to create light is more  powerful than normal." />
+    <feat type="Races of Faerun page 166" name="Lightbringer" desc="You can channel positive energy into your spells  so that they glow with holy power." />
+    <feat type="Races of the Wild page 151" name="Lightfeet" desc="You have an incredibly soft step, making it  difficult to track or hear you." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Lightning Fists" desc="Your skill and agility allow you to attempt  a series of blindingly fast blows." />
+    <feat type="Complete Warrior page 113" name="Lightning Mace" desc="You are a master of fighting with two maces  at the same time." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Lightning Reflexes" desc="You have faster than normal reflexes." />
+    <feat type="Draconomicon page 71" name="Lingering Breath" desc="Your breath weapon forms a lingering cloud." />
+    <feat type="Epic Level Handbook page 62" name="Lingering Damage" desc="Your sneak attacks continue to deal damage even  after you strike." />
+    <feat type="Complete Adventurer page 111" name="Lingering Song" desc="Your inspirational bardic music stays with the  listeners long after the last note has died away." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Lingering Song" desc="Your bardic music stays with the listeners long  after the last note has died away." />
+    <feat type="Champions of Ruin page 20" name="Lingering Spell" desc="Residual eldritch energy from your spell continues  to harm your enemies after the spell's main effect has expired." />
+    <feat type="Oriental Adventures page 64" name="Lion Spy" desc="Your ancestor, Akodo Shinju, was the greatest  spy of the Lion clan." />
+    <feat type="Shining South page 20" name="Lion Tribe Warrior" desc="You have learned how to pounce on your foes,  like the lion that roams your lands." />
+    <feat type="Complete Divine page 82" name="Lion's Pounce" desc="You can deliver a terrible attack at the end  of a charge." />
+    <feat type="Unearthed Arcana page 94" name="Live My Nightmare" desc="Those who magically pry into your mind become  privy to your most frightening dreams." />
+    <feat type="Player's Guide to Faerun page 176" name="Lliira's Blessing" desc="Thanks to the favor of the goddess of freedom,  you are difficult to restrain." />
+    <feat type="Races of Faerun page 166" name="Lolth's Blessing" desc="The Spider Queen has blessed you with additional  magical abilities." />
+    <feat type="Underdark page 26" name="Lolth's Meat" desc="Like all drow raised in cities that are ruled  by Lolth's priestesses, you know that you exist only to provide your goddess  with food and pleasure. This knowledge lends you a certain bloodthirsty  readiness." />
+    <feat type="UE page 44" name="Long Reach" desc="You know how to use your great stature to reach  an opponent more than 5 feet away with a spearlike weapon." />
+    <feat type="Eberron Campaign Setting page 57" name="Longstride Elite" desc="Your shifter trait improves." />
+    <feat type="Races of Eberron page 114" name="Longstride Elite" desc="Your longstride shifter trait improves." />
+    <feat type="Races of Eberron page 114" name="Longtooth Elite" desc="Your longtooth shifter trait improves." />
+    <feat type="Complete Arcane page 80" name="Lord of the Uttercold" desc="Through careful study of the Elemental Planes  and their interactions with the Negative Energy Plane, you have learned  to wield the uttercold." />
+    <feat type="Races of Faerun page 166" name="Low Blow" desc="You can get underfoot and attack creatures larger  than you." />
+    <feat type="Unearthed Arcana page 182" name="Low Profile" desc="You are less famous than others of your class  and level, or you wish to maintain a less visible presence than others of  your station." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Luck of Heroes" desc="Your land is known for producing heroes; you  receive a luck bonus on all saving throws." />
+    <feat type="Oriental Adventures page 64" name="Luck of Heroes" desc="You are descended from the quick-footed and  quick-witted Hiruma, the archetypal hunter and scout." />
+    <feat type="Player's Guide to Faerun page 40" name="Luck of Heroes" desc="Your land is known for producing heroes." />
+    <feat type="City of Splendors: Waterdeep page 146" name="Lunar Magic" desc="Your spells and spell-like abilities are tied  to the phase of the moon, rising and falling with the strength of Selune." />
+    <feat type="Faiths &amp; Pantheons page 214" name="Lycanthropic Spell" desc="You cast spells while in your lycanthropic animal  form." />
+    <feat type="Complete Adventurer page 113" name="Lyric Spell" desc="You can channel the power of your bardic music  into your magic, allowing you to expend uses of your bardic music ability  to cast spells." />
+    <feat type="Complete Arcane page 81" name="Mage Slayer" desc="You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly." />
+    <feat type="Miniatures Handbook page 27" name="Mage Slayer" desc="You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly." />
+    <feat type="Oriental Adventures page 64" name="Magic in the Blood" desc="You claim a karmic link with Iuchi, one of the  most resourceful shugenjas in early Rokugan." />
+    <feat type="Player's Guide to Faerun page 40" name="Magic in the Blood" desc="You have a knack for getting the most out of  your innate magic abilities." />
+    <feat type="Races of the Wild page 152" name="Magic of the Land" desc="Your intimate understanding of the natural world  allows you to imbue your spells with life-giving magical power from the  land itself." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Magical Aptitude" desc="You have a knack for magical endeavors." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Magical Artisan" desc="You have mastered the method of creating certain  magic items." />
+    <feat type="Oriental Adventures page 64" name="Magical Artisan" desc="You are descended from Asahina Yajinden, a shugenja  of Crane clan who became the greatest lieutenant of the dread sorcerer Iuchiban." />
+    <feat type="Player's Guide to Faerun page 41" name="Magical Artisan" desc="You have mastered the method of creating a certain  kind of magic item." />
+    <feat type="Complete Divine page 90" name="Magical Beast Wild Shape" desc="You can wild shape into magical beast form." />
+    <feat type="Epic Level Handbook page 62" name="Magical Beast Wild Shape" desc="You can wild shape into magical beast form." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Magical Training" desc="Every crafter and laborer knows a cantrip or  two to ease her work." />
+    <feat type="Player's Guide to Faerun page 41" name="Magical Training" desc="You come from a land where cantrips are taught  to all who have the aptitude to learn magic." />
+    <feat type="Oriental Adventures page 64" name="Magistrate's Mind" desc="You claim descent from Soshi Saibankan, a great  Scorpion judge who helped establish the Empire's institution of Emerald  magistrates." />
+    <feat type="Ghostwalk page 36" name="Malevolence" desc="You can possess a creature and control its actions." />
+    <feat type="Book of Vile Darkness page 49" name="Malign Spell Focus" desc="The character's spells that have the evil descriptor  are more potent than normal due to a deal she makes with an evil power." />
+    <feat type="Champions of Ruin page 20" name="Malign Spell Focus" desc="Your evil spells are more potent than normal  due to a deal forged with an evil power." />
+    <feat type="Sharn: City of Towers page 157" name="Manifest Flight" desc="You have learned to make use of the manifest  zone in Sharn to improve your natural ability to fly." />
+    <feat type="Sharn: City of Towers page 157" name="Manifest Leap" desc="You have learned to make use of the manifest  zone in Sharn to increase your ability to jump and reduce the damage you  take when you fall." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Mantis Leap" desc="You deliver a powerful attack after making a  jump." />
+    <feat type="Oriental Adventures page 64" name="Many Masks" desc="You are descended from Shosuro Furuyari, an  important Scorpion playwright." />
+    <feat type="Epic Level Handbook page 70" name="Manyshot" desc="You can fire multiple arrows as a single attack  against a nearby target." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Manyshot" desc="You can fire multiple arrows simultaneously  against a nearby target." />
+    <feat type="Frostburn page 49" name="Mark of Hleid" desc="You bear a mark that identifies you as an ally  of the church of Hleid and grants you supernatural qualities." />
+    <feat type="Races of Stone page 142" name="Markings of the Blessed" desc="Your skin markings shift into a pattern that  resists a wide array of harmful effects in times of trouble." />
+    <feat type="Races of Stone page 142" name="Markings of the Hunter" desc="Your skin markings shift into a pattern that  makes you hard to get the drop on." />
+    <feat type="Races of Stone page 142" name="Markings of the Magi" desc="Your skin markings shift into a pattern that  denotes you as having strong magical talent." />
+    <feat type="Races of Stone page 142" name="Markings of the Maker" desc="Your skin markings shift into a pattern that  gives you fate's edge when using skills." />
+    <feat type="Races of Stone page 142" name="Markings of the Warrior" desc="Your skin markings have shifted over time into  a pattern that gives you fate's deathly accuracy in times of trouble." />
+    <feat type="Miniatures Handbook page 27" name="Martial Throw" desc="You can switch positions with an opponent you  hit in melee by throwing that opponent." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Martial Weapon Proficiency" desc="Choose a type of martial weapon. You understand  how to use that type of martial weapon in combat." />
+    <feat type="WL page 15" name="Master Legacy" desc="You temporarily gain access to legacy abilities  beyond your normal reach." />
+    <feat type="Races of Eberron page 109" name="Master Linguist" desc="You have a broad knowledge of language." />
+    <feat type="Complete Arcane page 192" name="Master Staff" desc="You can activate a staff without using a charge." />
+    <feat type="Epic Level Handbook page 62" name="Master Staff" desc="You can activate a staff without using a charge." />
+    <feat type="Complete Arcane page 192" name="Master Wand" desc="You can activate a wand without using a charge." />
+    <feat type="Epic Level Handbook page 62" name="Master Wand" desc="You can activate a wand without using a charge." />
+    <feat type="Draconomicon page 71" name="Maximize Breath" desc="You can take a full-round action to use your  breath weapon to maximum effect." />
+    <feat type="Expanded Psionics Handbook page 48" name="Maximize Power" desc="You can manifest powers to maximum effect." />
+    <feat type="Player's Handbook v.3.5 page 97" name="Maximize Spell" desc="You can cast spells to maximum effect." />
+    <feat type="Complete Arcane page 81" name="Maximize Spell-Like Ability" desc="You can use a spell-like ability at its maximum  effect." />
+    <feat type="Oriental Adventures page 81" name="Meditation of War Mastery" desc="You have mastered the martial arts style of  'Meditation of War' -- a hard/soft form emphasizing weapon use and strikes  to pressure points." />
+    <feat type="Lords of Madness page 22" name="Memory Eater" desc="An aboleth with this feat is particularly adept  at extracting memories and knowledge from the bodies of those it consumes." />
+    <feat type="Races of Destiny page 155" name="Menacing Demeanor" desc="You can tap into your savage heritage to improve  your intimidation techniques." />
+    <feat type="Expanded Psionics Handbook page 48" name="Mental Leap" desc="You can make amazing jumps." />
+    <feat type="Expanded Psionics Handbook page 48" name="Mental Resistance" desc="Your mind is armored against mental intrusion." />
+    <feat type="Dungeon Master's Guide II page 176" name="Mentor" desc="A character who takes this feat has offered  his knowledge and skill to a lower-level NPC and takes that NPC on as an  apprentice." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Mercantile Background" desc="You come from a family that excels at a particular  trade and knows well the value of any kind of trade good or commodity." />
+    <feat type="Player's Guide to Faerun page 41" name="Mercantile Background" desc="You come from a wealthy family with numerous  contacts in the trading costers and craft guilds of Faerun's bustling cities." />
+    <feat type="Races of Faerun page 166" name="Metallurgy" desc="You are skilled in the act of metallurgy, creating  metal alloys both for their appearance and their properties." />
+    <feat type="Races of Stone page 142" name="Metamagic Song" desc="You can channel the power of your bardic music  into your magic, allowing you to pay the cost of metamagic feats by spending  uses of your bardic music ability." />
+    <feat type="Expanded Psionics Handbook page 48" name="Metamorphic Transfer" desc="You can gain a supernatural ability of a metamorphed  form." />
+    <feat type="Champions of Ruin page 25" name="Metanode Spell" desc="You cast metamagic spells to greater effect  in nodes to which you are attuned than elsewhere." />
+    <feat type="Underdark page 26" name="Metanode Spell" desc="You cast metamagic spells to greater effect  in earth nodes than elsewhere." />
+    <feat type="Lords of Madness page 45" name="Metaray" desc="A beholder with this feat can apply the effects  of metamagic feats to its eye rays." />
+    <feat type="Races of Faerun page 166" name="Might Makes Right" desc="Your great strength draws more followers." />
+    <feat type="Savage Species page 37" name="Mighty Leaping" desc="You have developed your leg muscles and trained  yourself to make mighty leaps." />
+    <feat type="Epic Level Handbook page 63" name="Mighty Rage" desc="Your rage becomes even more powerful than normal." />
+    <feat type="Savage Species page 37" name="Mighty Roar" desc="You unsettle opponents with a dreadful roar  as you attack." />
+    <feat type="Oriental Adventures page 80" name="Mighty Works Mastery I" desc="You have mastered the initial secrets of the  'Mighty Works' martial arts style -- a hard/soft form emphasizing locks  and hand strikes." />
+    <feat type="Oriental Adventures page 80" name="Mighty Works Mastery II" desc="You have mastered the deeper secrets of the  'Mighty Works' martial arts style." />
+    <feat type="Forgotten Realms Campaign Setting page 36" name="Militia" desc="You served in a local militia, training with  weapons suitable for use on the battlefield." />
+    <feat type="Ghostwalk page 37" name="Militia" desc="You served in a local militia, training with  weapons suitable for use on the battlefield." />
+    <feat type="Player's Guide to Faerun page 41" name="Militia" desc="Your people rely on a well-trained and well-armed  militia to defend their land." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Mind Over Body" desc="The arcane spellcasters of some lands have learned  to overcome the frailties of the body with the unyielding power of the mind." />
+    <feat type="Player's Guide to Faerun page 41" name="Mind Over Body" desc="The aesthetics and mystics of your homeland  have learned to overcome the frailties of the body with the unyielding power  of the mind." />
+    <feat type="Expanded Psionics Handbook page 48" name="Mind Over Body" desc="Your ability damage heals more rapidly." />
+    <feat type="Lords of Madness page 126" name="Mindsight" desc="A creature that has this feat possesses innate  telepathic ability that allows it to precisely pinpoint other thinking beings  within range of its telepathy." />
+    <feat type="Ghostwalk page 37" name="Minor Malevolence" desc="You can possess a creature for a short while  and control its actions." />
+    <feat type="Races of Stone page 142" name="Misleading Song" desc="You can channel the power of your bardic music  to temporarily increase the power of your illusion spells." />
+    <feat type="Eberron Campaign Setting page 57" name="Mithral Body" desc="A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness." />
+    <feat type="Monster Manual III page 192" name="Mithral Body" desc="A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness." />
+    <feat type="Races of Eberron page 119" name="Mithral Body" desc="Your warforged body can be crafted with a layer  of mithral that provides some protection without hindering speed or gracefulness." />
+    <feat type="Eberron Campaign Setting page 57" name="Mithral Fluidity" desc="Your movements are smoother and more fluid than  those of other warforged." />
+    <feat type="Monster Manual III page 192" name="Mithral Fluidity" desc="Your movements are smoother and more fluid than  those of other warforged." />
+    <feat type="Epic Level Handbook page 63" name="Mobile Defense" desc="You can adjust your position while maintaining  a defensive stance." />
+    <feat type="Complete Adventurer page 111" name="Mobile Spell-Casting" desc="Your focused concentration allows you to move  while casting a spell." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Mobility" desc="You are skilled at dodging past opponents and  avoiding blows." />
+    <feat type="Unearthed Arcana page 94" name="Momentary Alteration" desc="You can briefly transform yourself into a second  form, acquiring its physical qualities." />
+    <feat type="Eberron Campaign Setting page 57" name="Monastic Training" desc="You are part of an order that combines the monastic  discipline of the monk class with another form of training." />
+    <feat type="Complete Warrior page 103" name="Monkey Grip" desc="You are able to use a larger weapon than other  people your size." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Monkey Grip" desc="You use a wider variety of sizes of weapons." />
+    <feat type="Races of Stone page 142" name="Moradin's Smile" desc="Through the favor of Moradin, you are skilled  at interacting with others." />
+    <feat type="Book of Vile Darkness page 49" name="Mortalbane" desc="The creature can make a spell-like ability particularly  deadly to mortals." />
+    <feat type="Champions of Ruin page 20" name="Mortifying Attack" desc="Those who witness your brutal death attack are  unnerved and jarred by the experience." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Mother Cyst" desc="You gain the ability to cast necrotic cyst spells  by growing a cyst of your own." />
+    <feat type="Races of Stone page 142" name="Mountain Warrior" desc="You are adept at fighting on the uneven ground  of mountainous terrain." />
+    <feat type="Frostburn page 49" name="Mountaineer" desc="You are a particularly gifted explorer and mountain  climber." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Mounted Archery" desc="You are skilled at using ranged weapons while  mounted." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Mounted Combat" desc="You are skilled in mounted combat." />
+    <feat type="Heroes of Battle page 98" name="Mounted Mobility" desc="You are skilled at dodging past opponents while  mounted." />
+    <feat type="Miniatures Handbook page 27" name="Mounting Casting" desc="You are skilled at casting spells while riding  a mount." />
+    <feat type="Races of Eberron page 109" name="Mror Stalwart" desc="You have been trained to make devastating strikes  with the weapons of the dwarves of the Mror Holds." />
+    <feat type="Monster Manual v.3.5 page 304" name="Multiattack" desc="The creature is adept at using all its natural  weapons at once." />
+    <feat type="Monster Manual II page 18" name="Multiattack" desc="The creature is adept at using all its natural  weapons at once." />
+    <feat type="Monster Manual III page 207" name="Multiattack" desc="A creature with this feat is adept at using  all its natural weapons at once." />
+    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Multiattack" desc="The creature is adept at using all its natural  weapons at once." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Multiattack" desc="You are adept at using all your natural weapons  at once." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Multicultural" desc="You blend in well with members of another race." />
+    <feat type="Monster Manual II page 18" name="Multidexterity" desc="The creature is adept at using all its hands  in combat." />
+    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Multidexterity" desc="The creature is adept at using all its hands  in combat." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Multidexterity" desc="You are skilled at utilizing all your hands  in combat." />
+    <feat type="Serpent Kingdoms page 146" name="Multigrab" desc="You can grapple enemies more firmly than normal  with your natural attacks." />
+    <feat type="Savage Species page 37" name="Multigrab" desc="You can grapple enemies more firmly than normal  with your natural attacks." />
+    <feat type="Lost Empires of Faerun page 8" name="Multilingual" desc="You have an uncanny knack for languages." />
+    <feat type="Draconomicon page 72" name="Multisnatch" desc="You can grapple enemies more firmly with only  one of your natural attacks." />
+    <feat type="Epic Level Handbook page 63" name="Multispell" desc="You can cast an additional quickened spell in  a round." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 62" name="Multitasking" desc="You can perform different tasks with different  limbs." />
+    <feat type="Savage Species page 37" name="Multitasking" desc="You can perform different tasks with different  limbs." />
+    <feat type="Savage Species page 37" name="Multivoice" desc="If you have two or more heads, you can cast  more spells than usual in a round." />
+    <feat type="Monster Manual v.3.5 page 304" name="Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
+    <feat type="Monster Manual II page 18" name="Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
+    <feat type="Monster Compendium: Monsters of Faerun page 9" name="Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
+    <feat type="Epic Level Handbook page 63" name="Multiweapon Rend" desc="You can rend opponents when fighting with more  than two limbs." />
+    <feat type="Eberron Campaign Setting page 57" name="Music of Growth" desc="Your music can enhance the power of animals  and plant creatures." />
+    <feat type="Eberron Campaign Setting page 57" name="Music of Making" desc="Echoing the music of creation, your own performance  enhances any process of creation." />
+    <feat type="Epic Level Handbook page 63" name="Music of the Gods" desc="You can use your bardic music to influence creatures  immune to mind-affecting effects." />
+    <feat type="Lords of Madness page 181" name="Music of the Outer Spheres" desc="You can use your bardic music to create discordant,  insane sounds." />
+    <feat type="Races of Eberron page 110" name="Mutable Body" desc="Your enhanced control over your shapechanging  ability grants you extra power from transmutation spells." />
+    <feat type="Champions of Ruin page 20" name="Mutilator" desc="After striking down your enemy in battle, you  can skillfully mutilate the corpse to prevent others from raising it from  the dead." />
+    <feat type="Expanded Psionics Handbook page 48" name="Narrow Mind" desc="Your ability to concentrate is as keen as an  arrowhead, allowing you to gain your psionic focus even in the most turbulent  situations." />
+    <feat type="Serpent Kingdoms page 146" name="Narrowed Gaze" desc="Your gaze attack has a limited field of effect." />
+    <feat type="Savage Species page 37" name="Narrowed Gaze" desc="Your gaze attack has a limited field of effect." />
+    <feat type="Complete Adventurer page 111" name="Natural Bond" desc="Your bond with your animal companion is exceptionally  strong." />
+    <feat type="Champions of Ruin page 21" name="Natural Bully" desc="You easily terrify weaker adversaries." />
+    <feat type="Planar Handbook page 40" name="Natural Heavyweight" desc="You are descended from creatures native to a  plane of heavy gravity." />
+    <feat type="Heroes of Battle page 98" name="Natural Leader" desc="You have a natural commanding presence." />
+    <feat type="Shining South page 21" name="Natural Scavenger" desc="You are particularly adept at finding food while  on the move." />
+    <feat type="Ghostwalk page 37" name="Natural Spell" desc="You can cast spells while in wild shape or shifted  form." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Natural Spell" desc="You cast spells while in a wild shape." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Natural Spell" desc="You can cast spells while in a wild shape." />
+    <feat type="Races of Stone page 143" name="Natural Trickster" desc="You have greater natural access to your race's  powers of illusion." />
+    <feat type="Unearthed Arcana page 94" name="Naturalized Denizen" desc="You are unusually anchored to your location." />
+    <feat type="Ghostwalk page 37" name="Nauseating Touch" desc="When you touch a living creature, you can make  it nauseated." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Necromantic Might" desc="Undead you control gain benefits when they are  near you." />
+    <feat type="Libris Mortis: The Book of the Dead page 28" name="Necromantic Presence" desc="Undead you control are harder to turn when they  are near you." />
+    <feat type="Complete Arcane page 81" name="Necropolis Born" desc="You possess a magical understanding of the essence  of mortal dread." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Necropotent" desc="Your special melee or ranged attack with one  type of weapon is especially effective against undead." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Necrotic Reserve" desc="You are not immediately destroyed when your  hit points fall to 0 or lower." />
+    <feat type="Complete Divine page 90" name="Negative Energy Burst" desc="You can use your rebuke/command undead ability  to unleash a burst of negative energy." />
+    <feat type="Epic Level Handbook page 63" name="Negative Energy Burst" desc="You can use your rebuke/command undead ability  to unleash a burst of negative energy." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Negotiator" desc="You are good at gauging and swaying attitudes." />
+    <feat type="Book of Exalted Deeds page 44" name="Nemesis" desc="You are the holy bane of creatures of a particular  type." />
+    <feat type="Planar Handbook page 40" name="Neraph Charge" desc="You master the Limbo-native neraph martial art  of motion camouflage when you charge your foe." />
+    <feat type="Planar Handbook page 40" name="Neraph Throw" desc="You master the Limbo-native neraph martial art  of motion camouflage for your thrown weapons." />
+    <feat type="Complete Warrior page 114" name="Net and Trident" desc="You are a master of fighting with the net and  the trident." />
+    <feat type="Lost Empires of Faerun page 8" name="Netherese Battle Curse" desc="You can channel your own arcane energy into  a powerful curse upon those who dare to face you in battle." />
+    <feat type="Complete Arcane page 81" name="Night Haunt" desc="You possess a magical understanding of the workings  of the unseen." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Nimble Bones" desc="Undead you raise or create are faster and more  nimble than normal." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Nimble Fingers" desc="You are adept at manipulating small, delicate  objects." />
+    <feat type="Book of Exalted Deeds page 44" name="Nimbus of Light" desc="You are cloaked in the radiant light that marks  you as a servant of the purest ideals." />
+    <feat type="Races of Faerun page 166" name="Nobody's Fool" desc="You have an uncommon streak of skepticism and  common sense, and have a knack for discerning falsehood from truth." />
+    <feat type="Champions of Ruin page 25" name="Node Defense" desc="You can use the magical power of a node to defend  yourself from harm." />
+    <feat type="Underdark page 26" name="Node Defense" desc="You can use the magical power of a node to defend  yourself from harm." />
+    <feat type="Champions of Ruin page 25" name="Node Sensitive" desc="You can perceive a node just by passing near  it." />
+    <feat type="Underdark page 26" name="Node Sensitive" desc="You can perceive an earth node just by passing  near it." />
+    <feat type="Champions of Ruin page 25" name="Node Spellcasting" desc="You have discovered the secret of the magic  of a particular type of node." />
+    <feat type="Underdark page 26" name="Node Spellcasting" desc="You have discovered the secret of node magic." />
+    <feat type="Champions of Ruin page 26" name="Node Store" desc="You can store a prepared spell in a node to  which you are attuned." />
+    <feat type="Underdark page 26" name="Node Store" desc="You can store a prepared spell in an earth node." />
+    <feat type="Shining South page 21" name="Nomadic Trekker" desc="You are particularly efficient at overland movement  across the great grasslands." />
+    <feat type="Book of Exalted Deeds page 44" name="Nonlethal Substitution" desc="You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead." />
+    <feat type="Complete Arcane page 81" name="Nonlethal Substitution" desc="You can modify an energy spell to deal nonlethal  damage." />
+    <feat type="Planar Handbook page 40" name="Nonverbal Spell" desc="You can cast spells that have verbal components  without actually verbalizing the words." />
+    <feat type="Book of Exalted Deeds page 44" name="Nymph's Kiss" desc="By maintaining an intimate relationship with  a good-aligned fey, you gain some of the characteristics of fey." />
+    <feat type="Complete Divine page 82" name="Oaken Resilience" desc="You can take on the sturdiness of the mighty  oak." />
+    <feat type="Complete Adventurer page 111" name="Obscure Lore" desc="You are a treasure trove of little-known information." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Obscure Lore" desc="You are a treasure trove of little-known information." />
+    <feat type="Complete Arcane page 81" name="Obtain Familiar" desc="You gain a familiar." />
+    <feat type="Lords of Madness page 181" name="Ocular Spell" desc="Your study of the terrible powers of the beholder  has given you insight into new ways to prepare and cast spells." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Off-Hand Parry" desc="You use your off-hand weapon to defend against  melee attacks." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 7" name="Off-Hand Parry" desc="You use your off-hand weapon to defend against  melee attacks." />
+    <feat type="Stormwrack page 93" name="Old Salt" desc="You are an old hand at shipboard life, having  mastered the myriad skills that are required of the experience sailor. Additionally,  you have an eye for the weather." />
+    <feat type="Unearthed Arcana page 94" name="Omniscient Whispers" desc="A constant, barely audible muttering echoes  in your ears, usually beyond your comprehension. But if you focus all your  energy on listening, you sometimes catch a sentence or two that bears directly  on your current situation." />
+    <feat type="Oriental Adventures page 64" name="Oni's Bane" desc="Your ancestor, Isawa Akuma, was a Phoenix shugenja  who sought to understand the mystery of identity." />
+    <feat type="Expanded Psionics Handbook page 48" name="Open Minded" desc="You are naturally able to reroute your memory,  mind, and skill expertise." />
+    <feat type="Complete Adventurer page 111" name="Open Minded" desc="You are naturally able to reroute your memory  and skill expertise." />
+    <feat type="Expanded Psionics Handbook page 48" name="Opportunity Power" desc="You can make power-enhanced attacks of opportunity." />
+    <feat type="Races of Faerun page 167" name="Oral History" desc="You are well versed in the art of storytelling  and the oral history of your culture." />
+    <feat type="Player's Guide to Faerun page 41" name="Otherworldly" desc="Your folk are known for their mystic power and  seem to transcend their mortal forms." />
+    <feat type="Races of Faerun page 167" name="Outsider Wings" desc="You have sprouted wings appropriate to your  heritage, revealing the power of your supernatural bloodline." />
+    <feat type="Expanded Psionics Handbook page 49" name="Overchannel" desc="You burn your life force to strengthen your  powers." />
+    <feat type="Draconomicon page 72" name="Overcome Weakness" desc="You can overcome an innate vulnerability through  sheer willpower." />
+    <feat type="Draconomicon page 106" name="Overhead Thrust" desc="You can deal a nasty attack to anything that  tries to crush or run over you." />
+    <feat type="Complete Adventurer page 111" name="Oversized Two-Weapon Fighting" desc="You are adept at wielding larger than normal  weapons in your off hand." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Overwhelming Critical" desc="Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit." />
+    <feat type="Draconomicon page 72" name="Overwhelming Critical" desc="Choose one type of melee weapon, such as a claw  or bite. With that weapon, you deal more damage on a critical hit." />
+    <feat type="Epic Level Handbook page 63" name="Overwhelming Critical" desc="Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit." />
+    <feat type="UE page 44" name="Owlbear Berserker" desc="Your fighting style emulates the owlbear, the  totem beast of your berserker lodge." />
+    <feat type="Savage Species page 37" name="Pain Mastery" desc="Injuries send you into a fury, increasing your  physical power." />
+    <feat type="Complete Warrior page 103" name="Pain Touch" desc="You cause intense pain in an opponent with a  successful stunning attack." />
+    <feat type="Oriental Adventures page 64" name="Pain Touch" desc="You cause intense pain in an opponent with a  successful stunning attack." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Pain Touch" desc="You cause intense pain in an opponent with a  successful stunning attack." />
+    <feat type="Lords of Madness page 181" name="Parrying Shield" desc="You have studied advanced techniques for battling  foes whose attacks normally bypass armor." />
+    <feat type="Races of Eberron page 110" name="Path of Shadows" desc="You can use dancelike maneuvers to aid your  defense." />
+    <feat type="Savage Species page 37" name="Peak Hopper" desc="You are adapted to a hilly or mountainous environment." />
+    <feat type="Epic Level Handbook page 63" name="Penetrating Damage Reduction" desc="You can bypass a creature's damage reduction." />
+    <feat type="Epic Level Handbook page 63" name="Perfect Health" desc="You are immune to normal diseases and common  poisons." />
+    <feat type="Epic Level Handbook page 63" name="Perfect Multiweapon Fighting" desc="A creature with three or more hands can fight  with a weapon in each hand." />
+    <feat type="Complete Warrior page 152" name="Perfect Two-Weapon Fighting" desc="You can attack with your off-hand weapon as  frequently as with your primary weapon." />
+    <feat type="Epic Level Handbook page 64" name="Perfect Two-Weapon Fighting" desc="You can attack with your off-hand weapon as  frequently as with your primary weapon." />
+    <feat type="Epic Level Handbook page 64" name="Permanent Emanation" desc="One of your personal emanation spells becomes  permanent." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Pernicious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to counter." />
+    <feat type="Player's Guide to Faerun page 42" name="Pernicious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
+    <feat type="Complete Arcane page 81" name="Persistent Spell" desc="You can make a spell last all day." />
+    <feat type="Deities and Demigods page 51" name="Persistent Spell" desc="The deity makes one of its spells last all day." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Persistent Spell" desc="You make one of your spells last all day." />
+    <feat type="Player's Guide to Faerun page 42" name="Persistent Spell" desc="You can make a spell last all day." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Persistent Spell" desc="You make one of your spells last all day." />
+    <feat type="Races of Eberron page 110" name="Persona Immersion" desc="Your assumption of another's physical identity  grants you defenses against mental intrusion." />
+    <feat type="Planar Handbook page 41" name="Personal Touchstone" desc="You draw more power form one of the planar touchstone  locations to which you have forged a link." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Persuasive" desc="You have a way with words and body language." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Persuasive" desc="You could sell a tindertwig hat to a troll." />
+    <feat type="Serpent Kingdoms page 146" name="Pervasive Gaze" desc="Your gaze attack is more effective than normal." />
+    <feat type="Savage Species page 37" name="Pervasive Gaze" desc="Your gaze attack is more effective than normal." />
+    <feat type="Serpent Kingdoms page 147" name="Petrification Immunity" desc="You are immune to petrification effects." />
+    <feat type="Serpent Kingdoms page 147" name="Petrification Resistance" desc="You can resist petrification effects better  than you otherwise could." />
+    <feat type="Complete Warrior page 103" name="Phalanx Fighting" desc="You are trained in fighting in close formation  with your allies." />
+    <feat type="Lords of Darkness page 189" name="Phalanx Fighting" desc="You are trained in fighting in close formation  with your allies." />
+    <feat type="Sandstorm page 51" name="Pharaoh's Fist" desc="Your unarmed strikes echo with thunder, stunning  your foe and those nearby." />
+    <feat type="Unearthed Arcana page 94" name="Photosynthetic Skin" desc="Your skin toughens when it draws energy from  the sun." />
+    <feat type="Complete Arcane page 81" name="Pierce Magical Concealment" desc="You ignore the miss chance provided by certain  magical effects." />
+    <feat type="Complete Arcane page 82" name="Pierce Magical Protection" desc="You can overcome the magical protections of  your enemies." />
+    <feat type="Races of Stone page 143" name="Pierce the Darkness" desc="You can channel positive energy to temporarily  increase the range of your darkvision." />
+    <feat type="Frostburn page 49" name="Piercing Cold" desc="Your cold spells are so cold that they can damage  creatures normally resistant or immune to cold." />
+    <feat type="Serpent Kingdoms page 147" name="Piercing Gaze" desc="Your gaze attack has a greater range than normal." />
+    <feat type="Savage Species page 38" name="Piercing Gaze" desc="Your gaze attack has a greater range than normal." />
+    <feat type="Races of Stone page 143" name="Piercing Sight" desc="Your fundamental familiarity with illusion allows  you to better recognize them." />
+    <feat type="Complete Warrior page 103" name="Pin Shield" desc="You know how to get inside your opponent's guard  by pinning his shield out of the way." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Pin Shield" desc="You know how to get inside your opponent's guard  by pinning his shield out of the way." />
+    <feat type="Complete Divine page 86" name="Pious Defense" desc="Your connection to a greater power sometimes  gives you flashes of insight that keep you safe." />
+    <feat type="Complete Divine page 86" name="Pious Soul" desc="By adhering to the precepts of your religion  or philosophy, you gain an extra edge when you need it most." />
+    <feat type="Complete Divine page 87" name="Pious Spellsurge" desc="You can use the strength of your faith to augment  a spell cast at a critical juncture." />
+    <feat type="Races of Faerun page 167" name="Plague Resistant" desc="You are descended from the handful of combatants  who fought on the Fields of Nun and survived Chondath's Rotting War in 902  DR." />
+    <feat type="Planar Handbook page 41" name="Planar Familiar" desc="When you are ready and able to acquire a new  familiar, you may choose one of several nonstandard familiars." />
+    <feat type="Planar Handbook page 41" name="Planar Touchstone" desc="Forge a link between you and power-rich planar  locations, referred to as planar touchstones." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Planar Turning" desc="You can turn or rebuke outsiders." />
+    <feat type="Epic Level Handbook page 64" name="Planer Turning" desc="You can turn or rebuke outsiders." />
+    <feat type="Races of Faerun page 167" name="Planetouched Animal Affinity" desc="You have a special affinity for a kind of animal  associated with your deity ancestor." />
+    <feat type="Deities and Demigods page 51" name="Plant Control" desc="The deity can channel the power of nature to  gain mastery over plant creatures." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Plant Control" desc="You channel the power of nature to gain mastery  over plant creatures." />
+    <feat type="Deities and Demigods page 51" name="Plant Defiance" desc="The deity can channel the power of nature to  drive off or stop plant creatures." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Plant Defiance" desc="You channel the power of nature to drive off  plant creatures." />
+    <feat type="Epic Level Handbook page 65" name="Plant Wild Shape" desc="You can wild shape into plant form." />
+    <feat type="Heroes of Battle page 99" name="Plunging Shot" desc="You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you." />
+    <feat type="Races of the Wild page 152" name="Plunging Shot" desc="You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Point Blank Shot" desc="You are skilled at making well-placed shots  with ranged weapons at close range." />
+    <feat type="Book of Vile Darkness page 49" name="Poison Immunity" desc="After prolonged exposure to a poison or toxin,  the character has rendered himself immune to it." />
+    <feat type="Champions of Ruin page 21" name="Poison Immunity" desc="After prolonged exposure to a poison or toxin,  you have rendered yourself immune to it." />
+    <feat type="Serpent Kingdoms page 147" name="Poison Immunity" desc="You can ignore the effects of poison." />
+    <feat type="Savage Species page 38" name="Poison Immunity" desc="You can ignore the effects of poison." />
+    <feat type="Serpent Kingdoms page 147" name="Poison Resistance" desc="You can resist poison better than you otherwise  could." />
+    <feat type="Savage Species page 38" name="Poison Resistance" desc="You can resist poison better than you otherwise  could." />
+    <feat type="Unearthed Arcana page 94" name="Polar Chill" desc="You can call forth the cold of the arctic regions,  making movement and fighting difficult for the unprepared." />
+    <feat type="Ghostwalk page 37" name="Poltergeist Hand" desc="You can move small objects in a limited manner  at a distance when you are a ghost." />
+    <feat type="Ghostwalk page 37" name="Poltergeist Rage" desc="You can throw heavy objects with the power of  your mind." />
+    <feat type="Complete Adventurer page 192" name="Polyglot" desc="You can speak, read, and write all languages." />
+    <feat type="Epic Level Handbook page 65" name="Polyglot" desc="You can speak, read, and write all languages." />
+    <feat type="Player's Guide to Faerun page 42" name="Portal Master" desc="You are especially proficient at creating portals." />
+    <feat type="Underdark page 27" name="Portal Sensitive" desc="You can perceive a portal just by passing  near it." />
+    <feat type="Complete Divine page 90" name="Positive Energy Aura" desc="You automatically turn (or even destroy) lesser  undead." />
+    <feat type="Epic Level Handbook page 65" name="Positive Energy Aura" desc="You automatically turn (or even destroy) lesser  undead." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Positive Energy Resistance" desc="You are resistant to the damage dealt by positive  energy effects." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Power Attack" desc="You can make exceptionally powerful melee attacks." />
+    <feat type="Oriental Adventures page 64" name="Power Attack - Iaijutsu" desc="Your ancestor, Kakita Rensei, was a renowned  duelist whose strength was legendary." />
+    <feat type="Oriental Adventures page 65" name="Power Attack - Shadowlands" desc="You are descended from Kaiu Gineza, the engineer  who not only helped construct the tomb of Iuchiban, but also remained in  the tomb to set the last trap." />
+    <feat type="Draconomicon page 72" name="Power Climb" desc="If you fly in a straight line, you can gain  altitude in flight more easily than others." />
+    <feat type="Complete Warrior page 103" name="Power Critical" desc="Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts." />
+    <feat type="Deities and Demigods page 51" name="Power Critical" desc="The deity chooses one kind of weapon, such as  a longsword or greataxe. With this weapon, the deity knows how to hit where  it hurts when it counts." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Power Critical" desc="Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts." />
+    <feat type="Draconomicon page 72" name="Power Dive" desc="You can fall upon an opponent from the sky." />
+    <feat type="Savage Species page 38" name="Power Dive" desc="You can fall upon an opponent from the sky." />
+    <feat type="Expanded Psionics Handbook page 34" name="Power Knowledge" desc="You add two additional powers to your list of  powers known." />
+    <feat type="Enemies and Allies page 50" name="Power Lunge" desc="Your ferocious attack may catch an opponent  unprepared." />
+    <feat type="Ghostwalk page 37" name="Power Lunge" desc="Your ferocious attack may catch an opponent  unprepared." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Power Lunge" desc="Your ferocious attack may catch an opponent  unprepared." />
+    <feat type="Expanded Psionics Handbook page 49" name="Power Penetration" desc="Your powers are especially potent at breaking  through power resistance." />
+    <feat type="Expanded Psionics Handbook page 49" name="Power Specialization" desc="You deal more damage with your powers." />
+    <feat type="Complete Adventurer page 111" name="Power Throw" desc="You have learned how to hurl weapons to deadly  effect." />
+    <feat type="Lords of Madness page 23" name="Powerful Bite" desc="An aboleth with this feat develops jaws that  are much more muscular than normal, allowing it to bite more efficiently." />
+    <feat type="Eberron Campaign Setting page 57" name="Powerful Charge" desc="You can charge with extra force." />
+    <feat type="Miniatures Handbook page 27" name="Powerful Charge" desc="You can charge with extra force." />
+    <feat type="Monster Manual III page 207" name="Powerful Charge" desc="A creature with this feat can charge with extra  force." />
+    <feat type="Oriental Adventures page 65" name="Powerful Voice" desc="You are karmically linked to Utaku, Shinjo's  most trusted lieutenant and devoted bodyguard." />
+    <feat type="Races of Stone page 143" name="Powerful Wild Shape" desc="You retain your powerful build while in wild  shape form." />
+    <feat type="Heroes of Battle page 99" name="Practiced Cohort" desc="Your cohort works well as part of your team." />
+    <feat type="Complete Arcane page 82" name="Practiced Spellcaster" desc="Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful." />
+    <feat type="Complete Divine page 82" name="Practiced Spellcaster" desc="Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Precise Shot" desc="You are skilled at timing and aiming ranged  attacks." />
+    <feat type="Eberron Campaign Setting page 58" name="Precise Swing" desc="You can ignore most obstacles when making a  melee attack against an opponent." />
+    <feat type="Complete Arcane page 181" name="Precocious Apprentice" desc="Your master has shown you the basics of a spell  beyond the normal limits of your experience and training." />
+    <feat type="Serpent Kingdoms page 147" name="Prehensile Tail" desc="You can use your tail to manipulate objects." />
+    <feat type="Savage Species page 38" name="Prehensile Tail" desc="You can use your tail to manipulate objects." />
+    <feat type="Sandstorm page 51" name="Priest of the Waste" desc="You can swap out prepared spells for others  that aid in exploring and surviving in wastelands." />
+    <feat type="Frostburn page 49" name="Primeval Wild Shape" desc="Your wild shape forms are stronger than normal." />
+    <feat type="Frostburn page 49" name="Primitive Caster" desc="You use screeches, wild gesticulations, and  extra material components to give your spells additional power." />
+    <feat type="Races of Faerun page 167" name="Primitive Caster" desc="You use screeches, wild gesticulations, and  extra material components to give your spells additional powers." />
+    <feat type="Complete Divine page 84" name="Profane Boost" desc="You can channel negative energy to increase  the power of inflict wounds spells cast near you." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Profane Lifeleech" desc="You can channel negative energy to draw the  life force from nearby living creatures." />
+    <feat type="Champions of Ruin page 21" name="Profane Outburst" desc="With a horrendous release of divine energy,  you steel your undead allies and minions against harm." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Profane Vigor" desc="You can channel negative energy to heal nearby  undead allies of physical damage." />
+    <feat type="Complete Warrior page 103" name="Prone Attack" desc="You can attack from a prone position without  penalty." />
+    <feat type="Oriental Adventures page 65" name="Prone Attack" desc="You attack from a prone position without penalty." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 8" name="Prone Attack" desc="You attack from a prone position without penalty." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 24" name="Proportionate Wild Shape" desc="You use wild shape to become animals of your  own size even if your wild shape ability would normally exclude that size  category." />
+    <feat type="Races of Destiny page 153" name="Protected Destiny" desc="Your heroic destiny is guarded against the whims  of misfortune." />
+    <feat type="Expanded Psionics Handbook page 49" name="Psicrystal Affinity" desc="You have created a psicrystal." />
+    <feat type="Expanded Psionics Handbook page 49" name="Psicrystal Containment" desc="Your psicrystal has advanced enough that it  can hold a psionic focus that you store within it." />
+    <feat type="Expanded Psionics Handbook page 34" name="Psicrystal Power" desc="Your psicrystal can manifest a power." />
+    <feat type="Expanded Psionics Handbook page 49" name="Psionic Affinity" desc="You have a knack for psionic endeavors." />
+    <feat type="Expanded Psionics Handbook page 49" name="Psionic Body" desc="Your mind reinforces your body." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Charge" desc="You can charge in crooked line." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Dodge" desc="You are proficient at dodging blows." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Endowment" desc="You can endow your manifestations with more  concentrated focus." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Fist" desc="You can charge your unarmed strike or natural  weapon with additional damage potential." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Hole" desc="You are anathema to psionic creatures and characters." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Meditation" desc="You can focus your mind faster than normal,  even under duress." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Shot" desc="You can charge your ranged attacks with additional  damage potential." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Talent" desc="You gain additional power points to supplement  those you already had." />
+    <feat type="Expanded Psionics Handbook page 50" name="Psionic Weapon" desc="You can charge your melee weapon with additional  damage potential." />
+    <feat type="Serpent Kingdoms page 147" name="Puff Torso" desc="You can puff out your skin to appear larger  and more threatening." />
+    <feat type="Champions of Ruin page 21" name="Pulverize Foe" desc="You enjoy smashing your opponents into submission." />
+    <feat type="Book of Exalted Deeds page 44" name="Purify Spell" desc="You can charge your damaging spells with celestial  energy that leaves good creatures unharmed." />
+    <feat type="Book of Exalted Deeds page 45" name="Purify Spell Trigger" desc="You can channel holy power through a spell trigger  item, such as a wand or staff." />
+    <feat type="Book of Exalted Deeds page 45" name="Purify Spell-Like Ability" desc="You can charge your damaging spell-like abilities  with celestial energy that leaves good creatures unharmed." />
+    <feat type="Eberron Campaign Setting page 58" name="Pursue" desc="You have the ability to follow in an opponent's  wake." />
+    <feat type="Miniatures Handbook page 27" name="Pushback" desc="You can knock opponents back when you hit them  in melee." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Pyro" desc="You're good at lighting objects and opponents  on fire." />
+    <feat type="Book of Exalted Deeds page 45" name="Quell the Profane" desc="Your mightiest attacks weaken evil foes." />
+    <feat type="Races of Eberron page 110" name="Quick Change" desc="You can quickly alter your features and physiology." />
+    <feat type="Savage Species page 38" name="Quick Change" desc="You can shift to an alternate form faster and  more easily than you otherwise could." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Quick Draw" desc="You can draw weapons with startling speed." />
+    <feat type="Complete Adventurer page 112" name="Quick Reconnoiter" desc="You can learn a lot of information from just  a quick scan of an area or object." />
+    <feat type="Lords of Madness page 181" name="Quick Recovery" desc="It's hard to keep you down for long. You have  a talent for shaking off effects that leave others unable to act." />
+    <feat type="Complete Warrior page 114" name="Quick Staff" desc="You have mastered the style of fighting with  a quarterstaff." />
+    <feat type="Draconomicon page 73" name="Quicken Breath" desc="You can loose your breath weapon with but a  thought." />
+    <feat type="WL page 15" name="Quicken Legacy" desc="You can activate one of your item's legacy abilities  with a moment's thought." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Quicken Manifestation" desc="You can manifest from the Ethereal Plane with  a moment's thought." />
+    <feat type="Expanded Psionics Handbook page 50" name="Quicken Power" desc="You can manifest a power with a moment's thought." />
+    <feat type="Player's Handbook v.3.5 page 98" name="Quicken Spell" desc="You can cast a spell with a moment's thought." />
+    <feat type="Book of Vile Darkness page 49" name="Quicken Spell-Like Ability" desc="The creature can use a spell-like ability with  a moment's thought." />
+    <feat type="Monster Manual v.3.5 page 304" name="Quicken Spell-Like Ability" desc="The creature can employ a spell-like ability  with a moment's thought." />
+    <feat type="Monster Manual II page 18" name="Quicken Spell-like Ability" desc="The creature can use a spell-like ability with  a moment's thought." />
+    <feat type="Monster Manual III page 207" name="Quicken Spell-Like Ability" desc="A creature with this feat can employ a spell-like  ability with a moment's thought." />
+    <feat type="Savage Species page 38" name="Quicken Spell-Like Ability" desc="You can use a spell-like ability with a moment's  thought." />
+    <feat type="Complete Divine page 84" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
+    <feat type="Faiths &amp; Pantheons page 215" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
+    <feat type="Ghostwalk page 37" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Quicken Turning" desc="You can turn or rebuke undead with a moment's  thought." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Quicker Than the Eye" desc="Your hands can move so quickly that observers  don't see what you've done." />
+    <feat type="Lords of Madness page 23" name="Quickslime" desc="The slime attack of an aboleth with this feat  is particularly fast and difficult to resist." />
+    <feat type="Races of Eberron page 110" name="Racial Emulation" desc="You can emulate a humanoid more closely with  your minor change shape ability." />
+    <feat type="Races of Destiny page 155" name="Radiant Fire" desc="Pelor has ignited your faith and conviction,  making you better able to fight the creatures of darkness." />
+    <feat type="Races of Eberron page 118" name="Ragewild Fighting" desc="You have mastered a merciless form of combat  that emphasizes using brute strength to shatter your foes." />
+    <feat type="Eberron Campaign Setting page 58" name="Raging Luck" desc="When raging, you have a greater ability to alter  your luck than most others do." />
+    <feat type="Races of Stone page 143" name="Rampaging Bull Rush" desc="You can use brute force to slam into and knock  down your enemies." />
+    <feat type="Complete Warrior page 103" name="Ranged Disarm" desc="You can disarm a foe from a distance." />
+    <feat type="Epic Level Handbook page 65" name="Ranged Inspiration" desc="You can use your bardic music at a greater range  than normal." />
+    <feat type="Complete Warrior page 104" name="Ranged Pin" desc="You can perform a ranged grapple attempt against  an opponent not adjacent to you." />
+    <feat type="Book of Exalted Deeds page 45" name="Ranged Smite Evil" desc="You smite ability can be channeled through your  ranged weapon." />
+    <feat type="Complete Arcane page 82" name="Ranged Spell Specialization" desc="You deal more damage with ranged touch attack  spells." />
+    <feat type="Complete Warrior page 104" name="Ranged Sunder" desc="You can attack an opponent's weapon from a distance." />
+    <feat type="Savage Species page 39" name="Rapid Breath" desc="You do not have to wait as long to reuse your  breath weapons as you normally would." />
+    <feat type="Epic Level Handbook page 66" name="Rapid Inspiration" desc="You can inspire your allies with bardic music  more quickly than normal." />
+    <feat type="Expanded Psionics Handbook page 50" name="Rapid Metabolism" desc="Your wounds heal rapidly." />
+    <feat type="Epic Level Handbook page 70" name="Rapid Reload" desc="You reload a crossbow more quickly than normal." />
+    <feat type="Player's Handbook v.3.5 page 99" name="Rapid Reload" desc="Choose a type of crossbow. You can reload a  crossbow of that type more quickly than normal." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Rapid Reload" desc="You reload a crossbow more quickly than normal." />
+    <feat type="Player's Handbook v.3.5 page 99" name="Rapid Shot" desc="You can use ranged weapons with exceptional  speed." />
+    <feat type="Complete Divine page 84" name="Rapid Spell" desc="You can cast spells with long casting times  more quickly." />
+    <feat type="Complete Warrior page 104" name="Rapid Stunning" desc="You can use your stunning attacks in rapid succession." />
+    <feat type="Races of Faerun page 167" name="Rapid Swimming" desc="You are one with the water." />
+    <feat type="Stormwrack page 93" name="Rapid Swimming" desc="You are one with the water." />
+    <feat type="Draconomicon page 73" name="Rapidstrike" desc="You can attack more than once with a natural  weapon." />
+    <feat type="Complete Warrior page 111" name="Raptor School" desc="You know martial arts techniques inspired by  hunting birds." />
+    <feat type="UE page 45" name="Rashemi Elemental Summoning" desc="You may summon Rashemen's native elementals  in any situation where you could summon an air or earth elemental." />
+    <feat type="Sandstorm page 51" name="Rattlesnake Strike" desc="Having observed the ways of a desert viper,  you have learned to use ki in a fashion similar to poison." />
+    <feat type="Complete Adventurer page 112" name="Razing Strike" desc="You have mastered the art of delivering precise  strikes against nonliving creatures while channeling spell energy through  your melee attacks." />
+    <feat type="Races of Eberron page 114" name="Razorclaw Elite" desc="Your razorclaw shifter trait improves." />
+    <feat type="Lords of Madness page 23" name="Reach Bite" desc="An aboleth with this feat can extend its jaws  and esophagus out from its body to make attacks beyond its normal reach." />
+    <feat type="Complete Divine page 84" name="Reach Spell" desc="You can cast touch spells without touching the  spell recipient." />
+    <feat type="Deities and Demigods page 51" name="Reach Spell" desc="The deity can cast touch spells without touching  the spell recipient." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Reach Spell" desc="You can cast touch spells without touching the  spell recipient." />
+    <feat type="Faiths &amp; Pantheons page 215" name="Reach Spell" desc="You can cast touch spells without touching the  spell recipient." />
+    <feat type="Epic Level Handbook page 66" name="Reactive Countersong" desc="You can use countersong as a reaction to a sonic  or language-dependent magical attack." />
+    <feat type="Magic of Faerun page 22" name="Reactive Counterspell" desc="You can react quickly to counterspells cast  by opponents." />
+    <feat type="Player's Guide to Faerun page 42" name="Reactive Counterspell" desc="You can react quickly to counter  spells cast by opponents." />
+    <feat type="Races of Eberron page 115" name="Reactive Shifting" desc="You can shift with a mere thought." />
+    <feat type="Heroes of Battle page 99" name="Ready Shot" desc="You can make devastating attacks with ranged  weapons against charging opponents." />
+    <feat type="Champions of Ruin page 21" name="Reaping Spell" desc="The dark energy of your spell devours the soul  of any creature killed by it." />
+    <feat type="Miniatures Handbook page 27" name="Reckless Charge" desc="You can charge with wild abandon." />
+    <feat type="Expanded Psionics Handbook page 51" name="Reckless Offense" desc="You can shift your focus from defense to offense." />
+    <feat type="Enemies and Allies page 41" name="Reckless Offensive" desc="You lower your guard in order to make a telling  attack." />
+    <feat type="Races of Faerun page 167" name="Reckless Offensive" desc="You lower your guard in order to make a telling  attack." />
+    <feat type="Races of Stone page 143" name="Reckless Rage" desc="You are considered extreme even among other  barbaric warriors, and you enter a deeper state of rage than others." />
+    <feat type="Complete Arcane page 82" name="Reckless Wand Wielder" desc="You can increase the effectiveness of spells  cast from a wand." />
+    <feat type="Eberron Campaign Setting page 58" name="Recognize Impostor" desc="You are extremely skilled at spotting imposters." />
+    <feat type="Draconomicon page 73" name="Recover Breath" desc="You wait less time before being able to use  your breath weapon again." />
+    <feat type="Epic Level Handbook page 66" name="Reflect Arrows" desc="You reflect ranged attacks back upon the attacker." />
+    <feat type="Races of Eberron page 111" name="Relic Hunter" desc="You possess great knowledge of the relics and  crafts of the ancient cultures of Eberron." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Remain Conscious" desc="You have the tenacity of will that supports  you even when things look bleak." />
+    <feat type="Oriental Adventures page 65" name="Remain Conscious" desc="You have a tenacity of will that supports you  even when you are disabled or dying." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Remain Conscious" desc="You have a tenacity of will that supports you  even when things look bleak." />
+    <feat type="Draconomicon page 73" name="Rend" desc="You can rend opponents with your claws." />
+    <feat type="Ghostwalk page 37" name="Rend Ghost" desc="Your touch can maul the ectoplasm of another  ghost." />
+    <feat type="Serpent Kingdoms page 147" name="Rending Constriction" desc="You can pull grappled enemies apart." />
+    <feat type="Savage Species page 39" name="Rending Constriction" desc="You can pull grappled enemies apart." />
+    <feat type="Unearthed Arcana page 182" name="Renown" desc="You have a better chance of being recognized." />
+    <feat type="Complete Arcane page 82" name="Repeat Spell" desc="You can cast a spell that repeats on the following  round." />
+    <feat type="Deities and Demigods page 51" name="Repeat Spell" desc="The deity can cast a spell that repeats the  following round." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Repeat Spell" desc="You can cast a spell that repeats on the following  round." />
+    <feat type="Eberron Campaign Setting page 58" name="Repel Aberration" desc="Your Gatekeeper training allows you to keep  aberrations at bay." />
+    <feat type="Libris Mortis: The Book of the Dead page 29" name="Requiem" desc="Your bardic music affects undead creatures." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Requiem" desc="Your bardic music affects undead creatures." />
+    <feat type="Eberron Campaign Setting page 59" name="Research" desc="You can use your Knowledge skills to extract  information from books, scrolls, and other repositories of facts and figures." />
+    <feat type="Dragonlance Campaign Setting page 86" name="Reserves of Strength" desc="When you cast a spell, you can choose to increase  its effective caster level at the cost of exhausting yourself." />
+    <feat type="Unearthed Arcana page 94" name="Residual Rebound" desc="Sometimes spells cast at you rebound on the  caster instead." />
+    <feat type="Epic Level Handbook page 111" name="Resist Death" desc="You are capable of withstanding tremendous amounts  of damage without risk of instant death." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Resist Disease" desc="You have developed a natural resistance to diseases." />
+    <feat type="Shining South page 21" name="Resist Disease" desc="You have developed a natural resistance to diseases." />
+    <feat type="Dragonlance Campaign Setting page 86" name="Resist Dragonfear" desc="You are able to show courage in the presence  of dragons." />
+    <feat type="Ghostwalk page 37" name="Resist Ghost" desc="You are resistant to the effects of ghost powers." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Resist Poison" desc="Over years, some among your people carefully  expose themselves to poisons in controlled dosages in order to build up  immunity to their effects." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Resist Poison" desc="You have built up an immunity to the effects  of poisons by exposing yourself to controlled doses of them." />
+    <feat type="Oriental Adventures page 65" name="Resist Poison" desc="Your ancestor, Agasha Kitsuki, founded the fourth  family of the Dragon clan and a school for magistrates renowned for teaching  skills of investigation and deduction." />
+    <feat type="Player's Guide to Faerun page 43" name="Resist Poison" desc="Your people have become inured to many deadly  substances through controlled exposure or the simple hostility of your home  environment." />
+    <feat type="Oriental Adventures page 65" name="Resist Taint" desc="You are descended from Kuni, the founder of  the Kuni family, a scholar of -- and mighty warrior against -- the Shadowlands." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Resistance to Energy" desc="You channel the power of nature to resist a  particular energy type." />
+    <feat type="Book of Exalted Deeds page 45" name="Resounding Blow" desc="Your mightiest attacks cause your foes to tremble  before you." />
+    <feat type="Races of Destiny page 153" name="Resourceful Buyer" desc="You know where to look in a community for anything  you need." />
+    <feat type="Expanded Psionics Handbook page 51" name="Return Shot" desc="You can return incoming arrows, as well as crossbow  bolts, spears, and other projectile thrown weapons." />
+    <feat type="Savage Species page 39" name="Reverberation" desc="Your sonic attack is more potent than normal." />
+    <feat type="Shining South page 21" name="Rhinoceros Tribe Charge" desc="You use the power of the rhinoceros's charge  in battle." />
+    <feat type="Player's Handbook v.3.5 page 99" name="Ride-By Attack" desc="You are skilled at making fast attacks from  your mount." />
+    <feat type="Eberron Campaign Setting page 59" name="Right of Counsel" desc="You have the legal and sacral right to seek  advice from one of your ancestors, a deathless elf in Aerenal's City of  the Dead." />
+    <feat type="Epic Level Handbook page 66" name="Righteous Strike" desc="Your unarmed strikes are particularly damaging  to chaotic creatures." />
+    <feat type="Book of Exalted Deeds page 45" name="Righteous Wrath" desc="Your rage is empowered with divine fury." />
+    <feat type="Races of Faerun page 167" name="Rock Gnome Trickster" desc="Your glamers are particularly likely to fool  the senses of your target." />
+    <feat type="Races of Stone page 143" name="Rock Hurling" desc="You can throw rocks like a giant can." />
+    <feat type="Savage Species page 39" name="Roll With It" desc="You are adept at lessening the effects of blows." />
+    <feat type="Races of Destiny page 156" name="Roofwalker" desc="You are adept at moving and fighting on rooftops  and ledges." />
+    <feat type="Races of Stone page 143" name="Roots of the Mountain" desc="You can channel energy to make yourself immovable." />
+    <feat type="Complete Warrior page 105" name="Roundabout Kick" desc="You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick." />
+    <feat type="Oriental Adventures page 65" name="Roundabout Kick" desc="You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick." />
+    <feat type="Epic Level Handbook page 66" name="Ruinous Rage" desc="While in a rage, you can deal tremendous damage  to objects." />
+    <feat type="Player's Handbook v.3.5 page 99" name="Run" desc="You are fleet of foot." />
+    <feat type="Races of Faerun page 167" name="Runesmith" desc="You can fashion runes that take the place of  material components for your spells." />
+    <feat type="Complete Divine page 84" name="Sacred Boost" desc="You can channel positive energy to increase  the power of cure wounds spells cast near you." />
+    <feat type="Complete Divine page 84" name="Sacred Healing" desc="You can channel positive energy to grant nearby  living creatures the ability to recover form their wounds quickly." />
+    <feat type="Deities and Demigods page 51" name="Sacred Spell" desc="The deity's damaging spells are imbued with  divine power." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Sacred Spell" desc="Your damaging spells are imbued with divine  power." />
+    <feat type="Faiths &amp; Pantheons page 215" name="Sacred Spell" desc="Your damaging spells are imbued with divine  power." />
+    <feat type="Book of Exalted Deeds page 45" name="Sacred Strike" desc="Your sneak attack is enhanced by your unshakable  faith in a good-aligned deity." />
+    <feat type="Races of Faerun page 168" name="Sacred Tattoo" desc="You have been spiritually touched by one of  the god-kings of the Old Empires and bear his or her symbol in the form  of a tattoo in the shape of a holy symbol." />
+    <feat type="Complete Warrior page 108" name="Sacred Vengeance" desc="You can channel energy to deal extra damage  against undead in melee." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Sacred Vengeance" desc="You can channel energy to deal extra damage  against undead in melee." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Sacred Vitality" desc="You can channel positive energy to gain protection  from damage to your abilities or your life force." />
+    <feat type="Book of Exalted Deeds page 45" name="Sacred Vow" desc="You have willingly given yourself to the service  of a good deity or cause, denying yourself an ordinary life to better serve  you highest ideals." />
+    <feat type="Book of Vile Darkness page 50" name="Sacrificial Mastery" desc="The character is skilled at offering living  sacrifices to evil gods or fiends." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Saddleback" desc="Your people are as comfortable riding as walking." />
+    <feat type="Ghostwalk page 38" name="Saddleback" desc="You were raised among people who are as comfortable  riding as walking." />
+    <feat type="Oriental Adventures page 65" name="Saddleback" desc="You have a unique karmic tie to Moto Chai, one  of the greatest riders ever to live, even by Unicorn standards." />
+    <feat type="Player's Guide to Faerun page 43" name="Saddleback" desc="You've spent endless hours learning how to handle  a mount in a fight." />
+    <feat type="Stormwrack page 93" name="Sahuagin Flip" desc="You can safely attack and withdraw underwater." />
+    <feat type="Stormwrack page 93" name="Sailor's Balance" desc="You are experienced with the rolling decks of  the ship and maintain strong footing, even in a terrible storm." />
+    <feat type="Book of Exalted Deeds page 46" name="Sanctify Ki Strike" desc="Sacred power suffuses your unarmed strikes." />
+    <feat type="Book of Exalted Deeds page 46" name="Sanctify Martial Strike" desc="Sacred power suffuses your attacks with a certain  kind of weapon." />
+    <feat type="Book of Exalted Deeds page 46" name="Sanctify Natural Attack" desc="You can focus holy power into your natural attacks." />
+    <feat type="Complete Divine page 84" name="Sanctify Relic" desc="You can create magic items that are imbued with  a connection to your deity." />
+    <feat type="Stormwrack page 93" name="Sanctify Water" desc="You can call upon positive energy to momentarily  transform normal water around you into holy water." />
+    <feat type="Book of Exalted Deeds page 46" name="Sanctify Weapon" desc="You can focus holy power into your weapon." />
+    <feat type="Complete Arcane page 82" name="Sanctum Spell" desc="Your spells are especially potent on home ground." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 41" name="Sanctum Spell" desc="Your spells have a home ground advantage." />
+    <feat type="Sandstorm page 51" name="Sand Camouflage" desc="You can hide yourself in sand with a moment's  notice." />
+    <feat type="Sandstorm page 52" name="Sand Dancer" desc="While making another attack, you attempt to  blind a foe with thrown sand." />
+    <feat type="Sandstorm page 52" name="Sand Snare" desc="When you knock your foes into the sand, they  have a hard time regaining their feet." />
+    <feat type="Sandstorm page 52" name="Sand Spinner" desc="You spray sand with your acrobatic maneuvers." />
+    <feat type="Sandstorm page 52" name="Sandskimmer" desc="You are particularly adept at moving over sand." />
+    <feat type="Complete Adventurer page 114" name="Savage Grapple" desc="While transformed into the shape of a wild animal,  you can savagely tear at any creature that you manage to grapple." />
+    <feat type="Lords of Madness page 181" name="Scavenging Gullet" desc="The taint of the aberration in your blood has  gifted you with the ability to gain nourishment from things that others  would never consider as food." />
+    <feat type="Complete Adventurer page 114" name="Scent" desc="You can sharpen your sense of smell." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Scent" desc="Your olfactory senses are as sharp as the wolf's." />
+    <feat type="Oriental Adventures page 65" name="Scholar of Nature" desc="You are descended from Asako Hanasku, a great  scholar who threw himself into the study of medicine, herbs, and poison." />
+    <feat type="Champions of Ruin page 23" name="Scion of Sorrow" desc="You formally supplicate yourself to a powerful  yugoloth lord." />
+    <feat type="Sandstorm page 52" name="Scorpion's Grasp" desc="Like the scorpion, you can grab and hold your  prey." />
+    <feat type="Sandstorm page 53" name="Scorpion's Instincts" desc="You are hard to find in the waste." />
+    <feat type="Sandstorm page 53" name="Scorpion's Resolve" desc="Like the scorpion, you are not easily distracted." />
+    <feat type="Sandstorm page 53" name="Scorpion's Sense" desc="Like the scorpion, you sense other creatures  simply by perceiving their contact with the sand." />
+    <feat type="Stormwrack page 93" name="Scourge of the Seas" desc="You have a sinister reputation as a pirate and  can intimidate enemy captains by your mere presence." />
+    <feat type="Savage Species page 39" name="Scramble" desc="Your slippery ways allow you to evade a damaging  blow." />
+    <feat type="Epic Level Handbook page 66" name="Scribe Epic Scroll" desc="You can scribe scrolls of epic power." />
+    <feat type="Player's Handbook v.3.5 page 99" name="Scribe Scroll" desc="You can create scrolls, from which you or another  spellcaster can cast the scribed spells." />
+    <feat type="Expanded Psionics Handbook page 51" name="Scribe Tattoo" desc="You can create psionic tattoos, which store  powers within their designs." />
+    <feat type="Ghostwalk page 38" name="Sculpt Ghost Body" desc="You can reshape your ghost body's ectoplasm  to enhance one physical ability score at the expense of another." />
+    <feat type="Complete Arcane page 83" name="Sculpt Spell" desc="You can alter the area of your spells." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Sculpt Spell" desc="You can alter the shape of a spell's area." />
+    <feat type="Frostburn page 49" name="Sea Legs" desc="You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage." />
+    <feat type="Oriental Adventures page 65" name="Sea Legs" desc="You are descended from Yasuki Fumoki, a notorious  pirate who preyed on Crane merchant ships off the coast." />
+    <feat type="Stormwrack page 93" name="Sea Legs" desc="You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage." />
+    <feat type="Sandstorm page 53" name="Searing Spell" desc="Your fire spells are so hot that they can damage  creatures that normally have resistance or immunity to fire." />
+    <feat type="Races of Eberron page 120" name="Second Slam" desc="You have learned to use your form to the utmost  and can make two slam attacks." />
+    <feat type="Miniatures Handbook page 28" name="Second Wind" desc="You can shrug off minor wounds with ease." />
+    <feat type="Shining South page 21" name="Selective Spell" desc="You can screen allies from the effects of your  area spells." />
+    <feat type="Epic Level Handbook page 66" name="Self-Concealment" desc="When in combat, your form becomes blurry and  indistinct, making it difficult to land a blow against you." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Self-Sufficient" desc="You can take care of yourself in harsh environments  and situations." />
+    <feat type="Draconomicon page 106" name="Sense Weakness" desc="You can take advantage of subtle weaknesses  in your opponents' defenses." />
+    <feat type="Sandstorm page 53" name="Serpent Fang" desc="You are able to project your ki to strike  foes as though you had extended reach." />
+    <feat type="Eberron Campaign Setting page 60" name="Serpent Strike" desc="Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longspear." />
+    <feat type="Complete Divine page 84" name="Serpent's Venom" desc="You can deliver a toxic bite attack reminiscent  of the viper." />
+    <feat type="Lost Empires of Faerun page 9" name="Servant of the Fallen" desc="You keep alive the worship of a deity who has  died or vanished." />
+    <feat type="Book of Exalted Deeds page 46" name="Servant of the Heavens" desc="You swear allegiance to one of the Tome Archons  who rules the Seven Heavens, and in exchange gain power to act on their  behalf." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Shadow" desc="You have a better chance than most to trail  someone unnoticed." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Shadow" desc="You are good at following someone surreptitiously." />
+    <feat type="Planar Handbook page 42" name="Shadow Heritage" desc="You are descended from creatures native to the  Plane of Shadow." />
+    <feat type="Races of Eberron page 111" name="Shadow Marches Warmonger" desc="The ancient martial pride of your people grants  you mastery of their style of battle." />
+    <feat type="Races of Faerun page 168" name="Shadow Shield" desc="Your ancestors long battled the insidious influence  of shadow magic, and some of their descendants (including you) have a greater  resistance to its effects." />
+    <feat type="Races of Faerun page 168" name="Shadow Song" desc="A dark legacy of the Shadowking's ambitions  is the shadow of sorrow that cloaks many Tethyrian songs and ballads. Some  bards have learned to infuse their performances with the sense of loss and  suffering that suffuses the Shadow Weave." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Shadow Weave Magic" desc="You have discovered the dark and dangerous secret  of the Shadow Weave." />
+    <feat type="Player's Guide to Faerun page 43" name="Shadow Weave Magic" desc="You have discovered the dangerous secret of  the Shadow Weave." />
+    <feat type="Champions of Ruin page 22" name="Shadowform Familiar" desc="You can summon a familiar from the Plane of  Shadow." />
+    <feat type="Champions of Ruin page 22" name="Shadowstrike" desc="Due to your ties to the Plane of Shadow, you  strike more effectively in areas of dim illumination." />
+    <feat type="Draconomicon page 73" name="Shape Breath" desc="You can make the area of your breath weapon  a cone or a line, as you see fit." />
+    <feat type="Ghostwalk page 38" name="Shape Ectoplasm" desc="You can make equipment out of ectoplasm." />
+    <feat type="Races of Eberron page 111" name="Shaped Splash" desc="Your expertise with thrown weapons enables you  to use splash weapons more effectively." />
+    <feat type="Races of the Wild page 152" name="Shared Fury" desc="Your fearsome rage spurs your animal companion  to greater heights." />
+    <feat type="Complete Warrior page 105" name="Sharp-Shooting" desc="Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover." />
+    <feat type="Deities and Demigods page 52" name="Sharp-Shooting" desc="The deity's skill with ranged weapons lets it  score hits others would miss due to an opponent's cover." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Sharp-Shooting" desc="Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover." />
+    <feat type="Epic Level Handbook page 66" name="Shattering Strike" desc="You can shatter objects with your unarmed strike." />
+    <feat type="Ghostwalk page 38" name="Sherem-Lar Sorcery" desc="You are one of the Sherem-Lar, magically altered  in the womb to enhance your potential as a sorcerer." />
+    <feat type="Ghostwalk page 38" name="Sherezem-Lar Sorcery" desc="You are one of the Sherezem-Lar, an elite group  within the Sherem-Lar, head and shoulders above the others in power." />
+    <feat type="Complete Warrior page 105" name="Shield Charge" desc="You deal extra damage if you use your shield  as a weapon when charging." />
+    <feat type="Defenders of the Faith: A Guidebook to Clerics and Paladins page 20" name="Shield Charge" desc="You deal extra damage if you use your shield  as a weapon when charging." />
+    <feat type="Races of Faerun page 168" name="Shield Dwarf Warder" desc="You are a student of the protective magics of  the shield dwarves, learned at great cost during centuries of warfare and  wandering." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Shield Expert" desc="You use a shield as an off-hand weapon while  retaining its armor bonus." />
+    <feat type="Races of Eberron page 113" name="Shield of Thought" desc="You wield your spirit as both weapon and shield." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Shield Proficiency" desc="You are proficient with bucklers, small shields,  and large shields." />
+    <feat type="Complete Warrior page 105" name="Shield Slam" desc="You can use your shield to daze your opponent." />
+    <feat type="Heroes of Battle page 99" name="Shield Wall" desc="You are skilled in using shields when in formation  with other shield-bearers." />
+    <feat type="Races of Stone page 144" name="Shielded Axe" desc="You have mastered the style of fighting with  a dwarven waraxe and a handaxe while keeping a buckler strapped to your  offhand, and you have learned to use this unusual combination of weapons  and buckler to protect yourself while wielding both axes effectively." />
+    <feat type="Races of Stone page 144" name="Shielded Casting" desc="You are skilled at covering yourself with your  shield when casting spells in combat." />
+    <feat type="Races of Stone page 144" name="Shielded Manifesting" desc="You are skilled at covering yourself with your  shield when manifesting psionic powers in combat." />
+    <feat type="Miniatures Handbook page 28" name="Shieldmate" desc="You can protect those near you with your shield." />
+    <feat type="Races of Eberron page 115" name="Shifter Agility" desc="Your heritage of speed and ferocity has honed  your reflexes, allowing you to avoid attacks." />
+    <feat type="Eberron Campaign Setting page 60" name="Shifter Defense" desc="By delving deeper into your shifter heritage,  you have developed the ability to ignore a little damage from every attack." />
+    <feat type="Monster Manual III page 150" name="Shifter Defense" desc="By delving into your shifter heritage, you have  developed the ability to ignore a little damage from every attack." />
+    <feat type="Eberron Campaign Setting page 60" name="Shifter Ferocity" desc="You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury." />
+    <feat type="Races of Eberron page 115" name="Shifter Ferocity" desc="You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury." />
+    <feat type="Monster Manual III page 150" name="Shifter Instincts" desc="Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts." />
+    <feat type="Races of Eberron page 115" name="Shifter Instincts" desc="Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts." />
+    <feat type="Eberron Campaign Setting page 60" name="Shifter Multiattack" desc="You are adept at using your natural attack in  conjunction with another weapon." />
+    <feat type="Races of Eberron page 115" name="Shifter Savagery" desc="The bestial fury of your lycanthrope ancestors  allows you to deal devastating strikes with your natural weapons." />
+    <feat type="Races of Eberron page 115" name="Shifter Stamina" desc="Yours is a heritage of endurance and tenacity,  and you can shrug off bruises and fatigue." />
+    <feat type="Races of Eberron page 112" name="Ship Savvy" desc="Your heritage among the sailors and shipwrights  of Zilargo gives you an edge in shipboard combat." />
+    <feat type="Stormwrack page 93" name="Ship's Mage" desc="You form a potent supernatural bond with a ship.  Your spells have a more potent effect when cast aboard this ship." />
+    <feat type="Complete Warrior page 112" name="Shock Trooper" desc="You are adept at breaking up formations of soldiers  when you rush into battle." />
+    <feat type="Draconomicon page 73" name="Shock Wave" desc="You can strike the ground with your tail so  hard it knocks other creatures down." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Shot on the Run" desc="You are highly trained in skirmish ranged weapons  tactics." />
+    <feat type="Ghostwalk page 38" name="Shriveling Touch" desc="Choose one physical ability score. When you  touch a creature, you can cause permanent drain to this ability score." />
+    <feat type="Miniatures Handbook page 28" name="Sidestep" desc="You can move nimbly around the battlefield." />
+    <feat type="Expanded Psionics Handbook page 51" name="Sidestep Charge" desc="You are skilled at dodging past charging opponents  and taking advantage when they miss." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Signature Spell" desc="You are so familiar with a mastered spell that  you can convert other prepared spells into that spell." />
+    <feat type="Player's Guide to Faerun page 43" name="Signature Spell" desc="You are so familiar with a mastered spell that  you can convert other prepared spells into that spell." />
+    <feat type="Races of Stone page 144" name="Silencing Strike" desc="You can infuse your sneak attacks with the magical  essence of silence." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Silent Spell" desc="You can cast spells silently." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Silver Palm" desc="Your culture is based on haggling and the art  of the deal." />
+    <feat type="Player's Guide to Faerun page 43" name="Silver Palm" desc="Your culture is based on haggling and the art  of the deal." />
+    <feat type="Eberron Campaign Setting page 60" name="Silver Smite" desc="You wield the power of the Silver Flame to smite  evil." />
+    <feat type="Oriental Adventures page 65" name="Silver Tongue" desc="Your ancestor, Mirumoto Kaijuko, was the first  woman to become daimyo of the Mirumoto family." />
+    <feat type="Races of Eberron page 120" name="Silver Tracery" desc="Alchemical silver tracery covers your body,  allowing you to overcome the supernatural defenses of certain creatures  and protecting against some magical attacks." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Simple Weapon Proficiency" desc="You understand how to use all types of simple  weapons in combat." />
+    <feat type="Champions of Ruin page 22" name="Skewer Foe" desc="A ruthless combatant, you like to impale enemies  on spears and similar piercing weapons." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Skill Focus" desc="Choose a skill. You have a special knack with  that skill." />
+    <feat type="Lords of Madness page 45" name="Skilled Telekinetic" desc="A creature with this feat becomes so skilled  with its telekinesis ability that it can manipulate and use magic  items via telekinesis." />
+    <feat type="Races of Faerun page 168" name="Skyrider" desc="You have trained and served with the hippogriff  cavalry that guards the Great Rift." />
+    <feat type="Races of Destiny page 153" name="Smatterings" desc="You have a talent for acquiring languages --  at least enough of each one to get by." />
+    <feat type="Frostburn page 50" name="Smite Fiery Foe" desc="You can smite creatures with the fire subtype." />
+    <feat type="Forgotten Realms Campaign Setting page 37" name="Smooth Talk" desc="Your people are accustomed to dealing with strangers  and foreigners without needing to draw weapons to make their point." />
+    <feat type="Oriental Adventures page 66" name="Smooth Talk" desc="You are descended from Doji Taehime, a Crane  ambassador to the Scorpion court -- a courtier skilled at discovering falsehoods  and uncovering plots." />
+    <feat type="Player's Guide to Faerun page 43" name="Smooth Talk" desc="Your people rarely have to draw their weapons  to deal with potential adversaries." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Snake Blood" desc="The taint of the yuan-ti runs in your veins." />
+    <feat type="Player's Guide to Faerun page 43" name="Snake Blood" desc="The taint of the yuan-ti runs in your veins." />
+    <feat type="Monster Manual II page 18" name="Snatch" desc="The creature can grapple more easily with its  claws or bite." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Snatch" desc="You can grapple more easily with your claws  or bite." />
+    <feat type="Draconomicon page 73" name="Snatch and Swallow" desc="You can swallow creatures you have grabbed with  your bite attack." />
+    <feat type="Monster Manual v.3.5 page 304" name="Snatch Arrows" desc="The creature can grab opponents much smaller  than itself and hold them in its mouth or claw." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Snatch Arrows" desc="You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Snatch Arrows" desc="You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons." />
+    <feat type="Champions of Ruin page 22" name="Snatch Trophy" desc="You can quickly and skillfully collect a trophy  of your victory over a fallen foe." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Snatch Weapon" desc="You can disarm an opponent, then pluck the weapon  from midair." />
+    <feat type="Epic Level Handbook page 66" name="Sneak Attack of Opportunity" desc="Whenever your opponent lets his guard down,  you can make a sneak attack." />
+    <feat type="UE page 45" name="Snow Tiger Berserker" desc="You have learned how to pounce on your foes,  much like your totem spirit." />
+    <feat type="Frostburn page 50" name="Snowcasting" desc="You add ice or snow to your spell's components  to make them more powerful." />
+    <feat type="Frostburn page 50" name="Snowflake Wardance" desc="You are particularly adept at moving through  snow and over ice." />
+    <feat type="Frostburn page 50" name="Snowrunner" desc="You have mastered the snowflake wardance, a  mystical style of fighting with slashing weapons that allows you to leap  and almost seem to float haphazardly across the battlefield like a whirling,  razor-edged snowflake." />
+    <feat type="Races of Destiny page 153" name="Sociable Personality" desc="You are adroit at avoiding social gaffes." />
+    <feat type="Ghostwalk page 39" name="Solid Visage" desc="Your ghost body appears solid and alive." />
+    <feat type="Eberron Campaign Setting page 60" name="Song of the Heart" desc="Your bardic music reaches the depths of its  listeners' hearts." />
+    <feat type="Eberron Campaign Setting page 60" name="Soothe the Beast" desc="Echoing the music of creation, your music has  powers to calm animals." />
+    <feat type="Oriental Adventures page 66" name="Soul of Honor" desc="Your ancestor Shinjo Martera, the firstborn  son of Shinjo, was the living incarnation of bushido for the Unicorn,  utterly without fault or failing." />
+    <feat type="Oriental Adventures page 66" name="Soul of Loyalty" desc="Your ancestor, Mirumoto Tokeru, was renowned  for his loyalty to his twin brother, Ryudumu." />
+    <feat type="Oriental Adventures page 66" name="Soul of Sincerity" desc="You are descended from the famous Scorpion daimyo  Bayushi Tangen, author of Lies and Little Truths." />
+    <feat type="Complete Arcane page 83" name="Soul of the North" desc="You possess a magical understanding of the nature  of cold." />
+    <feat type="Races of Eberron page 120" name="Soulblade Warrior" desc="The spirit of a quori warrior grants you deadly  speed and combat prowess with your mind blade." />
+    <feat type="Races of Faerun page 168" name="Southern Magician" desc="Your magical studies in Mulan lands have taught  you spellcasting techniques unknown in the north that blur the line between  arcane and divine magic." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Speaking Wild Shape" desc="While in wild shape, you can communicate with  animals or elementals of the same kind as your current form." />
+    <feat type="Dragonlance Campaign Setting page 87" name="Spear of Doom" desc="Few can avoid death on your spearpoint when  you brace yourself for their attack." />
+    <feat type="Dragonlance Campaign Setting page 87" name="Spectacular Death Throes" desc="Your body seethes with unchecked power, promising  dire consequences to your killer." />
+    <feat type="Complete Divine page 90" name="Spectral Strike" desc="You can strike incorporeal creatures as if they  were solid." />
+    <feat type="Epic Level Handbook page 66" name="Spectral Strike" desc="You can strike incorporeal creatures as if they  were solid." />
+    <feat type="Expanded Psionics Handbook page 51" name="Speed of Thought" desc="The energy of your mind energizes the alacrity  of your body." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Spell Drain" desc="You can cast any spell that you drain from a  creature's mind." />
+    <feat type="Complete Divine page 84" name="Spell Focus" desc="Your spells with an alignment descriptor are  more potent than normal." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Spell Focus" desc="Choose a school of magic. Your spells of that  school are more potent than normal." />
+    <feat type="Book of Exalted Deeds page 46" name="Spell Focus (Good)" desc="Your spells with the good descriptor are more  potent than normal due to your relationship with the powers of good." />
+    <feat type="Magic of Faerun page 22" name="Spell Girding" desc="Your spells are particularly hardy, resisting  dispel checks more readily than normal." />
+    <feat type="Complete Arcane page 83" name="Spell Hand" desc="You possess a magical understanding of the manipulation  of force." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Spell Knowledge" desc="You add two additional arcane spells to your  repertoire." />
+    <feat type="Epic Level Handbook page 67" name="Spell Knowledge" desc="You add two additional arcane spells to your  repertoire." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Spell Mastery" desc="You are so intimately familiar with certain  spells that you don't need a spellbook to prepare them anymore." />
+    <feat type="Epic Level Handbook page 67" name="Spell Opportunity" desc="You can cast a touch spell as an attack of opportunity." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Spell Penetration" desc="Your spells are especially potent, breaking  through spell resistance more readily than normal." />
+    <feat type="Oriental Adventures page 66" name="Spell Power" desc="Your lineage traces back to the young shugenja  Kuni Osaku, who single-handedly held off a massive army of oni at the Battle  of the Cresting Wave." />
+    <feat type="Lost Empires of Faerun page 9" name="Spell Reprieve" desc="Your studies of the less restrictive arcane  traditions of old allow you to cast one spell from a prohibited school." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Spell Specialization" desc="You deal more damage with ray or energy missile  spells." />
+    <feat type="Epic Level Handbook page 67" name="Spell Stowaway" desc="Choose a spell-like ability you possess or a  spell you can cast. You gain the benefits of this magic whenever it is used  near you." />
+    <feat type="Magic of Faerun page 22" name="Spell Thematics" desc="Your spells have a distinct visual or auditory  effect in their manifestation." />
+    <feat type="Player's Guide to Faerun page 44" name="Spell Thematics" desc="Your spells manifest with a distinct theme or  appearance." />
+    <feat type="Oriental Adventures page 66" name="Spellcaster Support" desc="Your ancestor, Shiba Kaigen, was a samurai who  used his knowledge of spellcraft to help defend a mountain pass from a Lion  invasion." />
+    <feat type="Draconomicon page 74" name="Spellcasting Harrier" desc="Spellcasters you threaten find it difficult  to cast defensively." />
+    <feat type="Epic Level Handbook page 67" name="Spellcasting Harrier" desc="Spellcasters you threaten find it difficult  to cast defensively." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Spellcasting Prodigy" desc="You have an exceptional gift for magic." />
+    <feat type="Player's Guide to Faerun page 44" name="Spellcasting Prodigy" desc="You have an exceptional gift for magic." />
+    <feat type="Magic of Faerun page 23" name="Spellfire Wielder" desc="You are one of the rare people who have the  innate talent to control raw magic in the form of spellfire." />
+    <feat type="Races of Faerun page 168" name="Spell-Like Ability Focus" desc="Choose one of your spell-like abilities. This  attack becomes much more potent than normal." />
+    <feat type="Races of Stone page 144" name="Spellrazor" desc="You have mastered the style of combining a gnome  quickrazor with spellcasting." />
+    <feat type="Player's Guide to Faerun page 44" name="Spellwise" desc="You were raised in a land where mighty wizards  are common." />
+    <feat type="Player's Guide to Faerun page 176" name="Spider Bite" desc="You gain a poisonous bite like that of a spider." />
+    <feat type="Races of Eberron page 120" name="Spiked Body" desc="Your body is overlaid with hundreds of protruding  spikes that can deal great damage to foes." />
+    <feat type="Complete Warrior page 114" name="Spinning Halberd" desc="You have mastered the style of fighting with  a halberd." />
+    <feat type="Races of Faerun page 168" name="Spire Walking" desc="Iriaebor is justly known as the City of a Thousand  Spires, for fantastically bizarre, many-storied towers rise from all quarters  of the city and are tightly packed together. As a result, it is possible  to navigate Iriaebor via a network of arches, bridges, stairs, and leapable  gulfs far above the city streets. You are well versed in the skill of navigating  the skyroads of Iriaebor." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Spirited Charge" desc="You are trained at making a devastating mounted  charge." />
+    <feat type="Races of Eberron page 113" name="Spiritual Force" desc="Your forceful inner spirit allows you to deal  more damage with your mind blade." />
+    <feat type="Lords of Madness page 94" name="Spit Poison" desc="A creature with this feat can spit its poison  as a ranged touch attack." />
+    <feat type="Serpent Kingdoms page 147" name="Spit Venom" desc="You can spit venom in the manner of a spitting  cobra." />
+    <feat type="Draconomicon page 74" name="Split Breath" desc="You can split your breath weapon into a pair  of weaker effects." />
+    <feat type="Expanded Psionics Handbook page 51" name="Split Psionic Ray" desc="You can affect two targets with a single ray." />
+    <feat type="Complete Arcane page 83" name="Split Ray" desc="Your ray spells can affect an additional target." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Split Ray" desc="You can affect two targets with a single ray." />
+    <feat type="Eberron Campaign Setting page 61" name="Spontaneous Casting" desc="You can swap a prepared spell on the fly." />
+    <feat type="Epic Level Handbook page 67" name="Spontaneous Domain Access" desc="Select a domain of spells you have access to.  You can spontaneously convert spells into spells of this domain." />
+    <feat type="Complete Divine page 84" name="Spontaneous Healer" desc="You can use your spellcasting ability to spontaneously  cast cure spells." />
+    <feat type="Epic Level Handbook page 67" name="Spontaneous Spell" desc="Select a spell you can cast. You can spontaneously  convert spells of that spell's level into that spell." />
+    <feat type="Complete Divine page 85" name="Spontaneous Summoner" desc="You can spontaneously cast summon nature's  ally spells." />
+    <feat type="Complete Divine page 85" name="Spontaneous Wounder" desc="You can use your spellcasting ability to spontaneously  cast inflict spells." />
+    <feat type="Draconomicon page 74" name="Spreading Breath" desc="You can convert your breath weapon into a spread  effect." />
+    <feat type="Player's Handbook v.3.5 page 100" name="Spring Attack" desc="You are trained in fast melee attacks and fancy  footwork." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Spurn Death's Touch" desc="You can channel divine energy to remove some  of the harmful effects of attacks made by undead creatures." />
+    <feat type="Races of Eberron page 112" name="Stable Footing" desc="Because of your training and wariness, you are  skilled at keeping your feet in combat and able to move over difficult terrain  with ease." />
+    <feat type="Complete Adventurer page 112" name="Staggering Strike" desc="You can deliver a wound that hampers an opponent's  movement." />
+    <feat type="Races of Faerun page 169" name="Staggering Strike" desc="You are particularly adept at making cruel and  demoralizing sneak attacks." />
+    <feat type="Planar Handbook page 42" name="Stalwart Planar Ally" desc="The allies you summon from a specific plane  are tougher than normal." />
+    <feat type="Savage Species page 39" name="Stamp" desc="You can stamp the ground to crush and disrupt  opponents." />
+    <feat type="Expanded Psionics Handbook page 51" name="Stand Still" desc="You can prevent foes from fleeing or closing." />
+    <feat type="Lords of Madness page 181" name="Starspawn" desc="Your abnormal body and heritage has become more  pronounced. You grow membranous wings and are comfortable in extreme elevations." />
+    <feat type="Races of Stone page 144" name="Steady Concentration" desc="You are an expert at avoiding distractions and  focusing your mind, and you can concentrate clearly even in the most stressful  conditions." />
+    <feat type="Races of Stone page 144" name="Steady Mountaineer" desc="You are so good at climbing cliffs and leaping  across crevasses that distractions don't affect you." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Stealthy" desc="Your people are known for their stealthiness." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Stealthy" desc="You are particularly good at avoiding notice." />
+    <feat type="Stormwrack page 93" name="Steam Magic" desc="You are skilled at casting fiery spells into  the water, causing terrible gouts of scalding steam." />
+    <feat type="Unearthed Arcana page 94" name="Stench of the Dead" desc="The odor of decay hangs heavy on you, causing  others to gasp and retch." />
+    <feat type="Book of Exalted Deeds page 46" name="Stigmata" desc="You bear the marks of wounds on your body, as  sort of a living martyrdom." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Still Spell" desc="You can cast spells without gestures." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Stitched Flesh Familiar" desc="When you are ready and able to acquire a new  familiar, you may choose to gain a stitched flesh familiar." />
+    <feat type="Races of Faerun page 169" name="Stone Colossus" desc="You can focus a part of your power to increase  the toughness of your skin." />
+    <feat type="Races of Stone page 144" name="Stone Form" desc="You can use wild shape to assume a rocklike  form." />
+    <feat type="Races of Stone page 144" name="Stone Rage" desc="Your bond with the earth and tough hide makes  it easier for you to shrug off blows while you are raging." />
+    <feat type="Races of Faerun page 169" name="Stone Slide" desc="You have attuned yourself to stone to such an  extent that you can merge with it for a short time." />
+    <feat type="Underdark page 27" name="Stone Soul" desc="You were born with a dwarflike, innate sense  about rock, stone, and construction." />
+    <feat type="Races of Stone page 144" name="Stoneback" desc="You have studied the techniques of fighting  underground, and you can protect yourself from the dangers of multiple attackers  whenever you can put your back to a solid wall." />
+    <feat type="Races of Faerun page 169" name="Stoneblood" desc="Your blood is thick like cooling lava, making  it difficult for you to die after falling from injuries." />
+    <feat type="Races of Faerun page 169" name="Stoneshaper" desc="You have a deep and abiding tie to earth and  stone." />
+    <feat type="Races of Faerun page 169" name="Stonewalker Fist" desc="You are trained in an unarmed fighting style  that draws on your ability to pass through minerals as if they were air." />
+    <feat type="Frostburn page 50" name="Storm Magic" desc="You gain a boost in spellcasting power during  storms." />
+    <feat type="Stormwrack page 94" name="Storm Magic" desc="You gain a boost in spellcasting power during  storms." />
+    <feat type="Epic Level Handbook page 67" name="Storm of Throws" desc="You become a flurry of thrown weapons, targeting  all nearby opponents." />
+    <feat type="Player's Guide to Faerun page 44" name="Stormheart" desc="The sea is in your blood." />
+    <feat type="Dragonlance Campaign Setting page 87" name="Strafing Breath" desc="You can sustain your breath weapon when you  use it on the wing, covering a larger ground area in its effect." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Street Smart" desc="You have learned how to keep informed, ask questions,  and interact with the underworld without raising suspicion." />
+    <feat type="Player's Guide to Faerun page 44" name="Street Smart" desc="You know how to keep informed, ask questions,  and interact with the underworld without raising suspicions." />
+    <feat type="Oriental Adventures page 66" name="Strength of the Charger" desc="You share the spirit of Utaku Shiko, the founder  of the Utaku Battle Maiden tradition." />
+    <feat type="Oriental Adventures page 87" name="Strength of the Crab" desc="You claim descent from Hida, the first Crab." />
+    <feat type="Races of Eberron page 113" name="Strength of Two" desc="Your quori spirit gives you unmatched willpower." />
+    <feat type="Eberron Campaign Setting page 61" name="Strong Mind" desc="You are unusually hard to affect with psionic  powers and mind attacks." />
+    <feat type="Underdark page 27" name="Strong Mind" desc="You are unusually difficult to affect with psionic  powers and mind attacks." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Strong Soul" desc="The souls of your people are hard to separate  from their bodies." />
+    <feat type="Oriental Adventures page 66" name="Strong Soul" desc="You claim descent from Moto Soro, the simple  peasant who earned his place among samurai and founded the Moto family." />
+    <feat type="Player's Guide to Faerun page 44" name="Strong Soul" desc="You possess an innate resistance to fell magic  and supernatural attacks." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Stunning Fist" desc="You know how to strike opponents in vulnerable  areas." />
+    <feat type="Deities and Demigods page 52" name="Subdual Substitution" desc="The deity can modify a spell that uses energy  to deal damage to deal subdual damage instead." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Subdual Substitution" desc="You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead." />
+    <feat type="Book of Exalted Deeds page 46" name="Subduing Strike" desc="You are adept at striking to deal nonlethal  damage even with normal weapons." />
+    <feat type="Complete Adventurer page 112" name="Subsonics" desc="Your music can affect even those who do not  consciously hear it." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Subsonics" desc="Your music can affect even those who do not  consciously hear it." />
+    <feat type="Races of Destiny page 154" name="Subtle Sigil" desc="You are able to fade your sigils into invisibility,  but still tap into their magical energy." />
+    <feat type="Complete Arcane page 83" name="Sudden Empower" desc="You can cast a spell to greater effect without  special preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Empower" desc="You can cast one spell per day to greater effect  without special preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Energy Affinity" desc="You can modify a spell's energy type once per  day without special preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Enlarge" desc="You may cast one spell per day with a greater  range than normal without special preparation." />
+    <feat type="Complete Arcane page 83" name="Sudden Extend" desc="You can make a spell last longer than normal  without special preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Extend" desc="You can cast one spell per day with a longer  duration than normal without special preparation." />
+    <feat type="Complete Arcane page 83" name="Sudden Maximize" desc="You can cast a spell to maximum effect without  special preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Maximize" desc="Once per day you can cast a spell to maximum  effect without special preparation." />
+    <feat type="Complete Arcane page 83" name="Sudden Quicken" desc="You can cast a spell with a moment's thought  without special preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Quicken" desc="Once per day you can cast a spell with a moment's  thought without special preparation." />
+    <feat type="Complete Arcane page 83" name="Sudden Silent" desc="You can cast a spell silently without special  preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Silent" desc="Once per day you can cast a spell silently without  special preparation." />
+    <feat type="Complete Arcane page 83" name="Sudden Still" desc="You can cast a spell without gestures or special  preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Still" desc="Once per day you can cast a spell without gestures  without special preparation." />
+    <feat type="Complete Arcane page 83" name="Sudden Widen" desc="You can increase a spell's area without special  preparation." />
+    <feat type="Miniatures Handbook page 28" name="Sudden Widen" desc="Once per day you can increase the area of a  spell without special preparation." />
+    <feat type="Frostburn page 50" name="Sugliin Mastery" desc="You are a master at fighting with the massive  sugliin." />
+    <feat type="Races of Faerun page 169" name="Summon Earth Elemental" desc="Like many experienced deep gnomes, you have  developed the ability to summon earth elementals to help you with tasks." />
+    <feat type="Complete Warrior page 112" name="Sun School" desc="You have learned a number of esoteric martial  arts techniques inspired by the sun." />
+    <feat type="Stormwrack page 94" name="Sunken Song" desc="You can project your voice underwater." />
+    <feat type="Deities and Demigods page 52" name="Superior Expertise" desc="The deity has mastered the art of defense in  combat." />
+    <feat type="Faiths &amp; Pantheons page 215" name="Superior Expertise" desc="You have mastered the art of defense in combat." />
+    <feat type="Oriental Adventures page 66" name="Superior Expertise" desc="You have mastered the art of defense in combat." />
+    <feat type="Epic Level Handbook page 67" name="Superior Initiative" desc="You can react even more quickly than normal  in a fight." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Supernatural Blow" desc="Choose one favored enemy that is immune to critical  hits. You know how to place blows against this opponent for best effect." />
+    <feat type="Savage Species page 39" name="Supernatural Transformation" desc="You convert a spell-like ability to a supernatural  ability." />
+    <feat type="Draconomicon page 74" name="Suppress Weakness " desc="Your vulnerability to an energy type is reduced." />
+    <feat type="Player's Guide to Faerun page 45" name="Surefooted" desc="You are used to fighting on steep slopes and  treacherous surfaces." />
+    <feat type="Savage Species page 39" name="Surrogate Spellcasting" desc="You use substitute verbal and somatic components  when casting spells." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Survivor" desc="Your people thrive in regions that others find  uninhabitable, and excel at uncovering the secrets of the wilderness and  surviving to tell the tale." />
+    <feat type="Ghostwalk page 39" name="Survivor" desc="Your people thrive in a region that others find  uninhabitable, and you excel at uncovering the secrets of the wilderness  and surviving to tell the tale." />
+    <feat type="Player's Guide to Faerun page 45" name="Survivor" desc="Your people thrive in places that others find  almost uninhabitable, and you know many of the secrets of the wilderness." />
+    <feat type="Races of Faerun page 169" name="Svirfneblin Figment" desc="Your time underground has made you acutely aware  of even slight differences in sound and vision in caves that have never  seen the sun. Accordingly, your illusions are finely tuned and ultra-realistic." />
+    <feat type="Savage Species page 40" name="Swamp Stalker" desc="You are adapted to a marshy environment." />
+    <feat type="Epic Level Handbook page 67" name="Swarm of Arrows" desc="You can fire a veritable storm of arrows at  nearby opponents." />
+    <feat type="Complete Warrior page 105" name="Swarmfighting" desc="You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters." />
+    <feat type="Races of Faerun page 169" name="Swarmfighting" desc="You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters." />
+    <feat type="Sharn: City of Towers page 158" name="Swarm's Embrace" desc="You have a natural affinity for swarms and can  stand in the midst of a swarm with few harmful effects." />
+    <feat type="Player's Guide to Faerun page 45" name="Swift and Silent" desc="The shadows are your friends, and your footfalls  are whispers of death." />
+    <feat type="Races of Eberron page 116" name="Swiftwing Elite" desc="Your swiftwing shifter trait improves." />
+    <feat type="Complete Divine page 85" name="Swim Like a Fish" desc="You can breathe and swim underwater with grace." />
+    <feat type="Stormwrack page 94" name="Swim-By Attack" desc="You can attack in the middle of a fast pass  by your opponent." />
+    <feat type="Complete Adventurer page 112" name="Tactile Trapsmith" desc="You can rely on your rapid reflexes and nimble  fingers instead of your intellect when searching a room or when disabling  a trap." />
+    <feat type="Draconomicon page 74" name="Tail Constrict" desc="You can make constriction attacks with your  tail." />
+    <feat type="Serpent Kingdoms page 147" name="Tail Rattle" desc="Your tail gains a rattle like that of a serpent." />
+    <feat type="Draconomicon page 74" name="Tail Sweep Knockdown" desc="Your tail sweep attack knocks opponents prone." />
+    <feat type="Races of Eberron page 112" name="Talenta Warrior" desc="You have trained with the ancestral weapons  of the Talenta halflings and are particularly adept at striking from the  back of a dinosaur mount." />
+    <feat type="Expanded Psionics Handbook page 51" name="Talented" desc="You can overchannel powers with less cost to  yourself." />
+    <feat type="Races of Faerun page 170" name="Talfirian Song" desc="You can use the power of your bardic music to  enhance your illusion spells." />
+    <feat type="Shining South page 21" name="Tall Mouther Hunter" desc="Because of your cultural hatred for tall mouthers,  you have had specific training in how best to fight them." />
+    <feat type="Dungeon Master's Guide v.3.5 page 194" name="Tattoo Focus" desc="You bear the powerful magical tattoos of a Red  Wizard of Thay." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Tattoo Focus" desc="You bear the powerful magic tattoos of a Red  Wizard of Thay." />
+    <feat type="Player's Guide to Faerun page 45" name="Tattoo Focus" desc="You bear the powerful magical tattoos of a Red  Wizard of Thay." />
+    <feat type="Lords of Darkness page 189" name="Tattoo Magic" desc="You can create tattoos that store spells." />
+    <feat type="Races of Faerun page 170" name="Tattoo Magic" desc="You can create tattoos that store spells." />
+    <feat type="Ghostwalk page 39" name="Temper Ectoplasm" desc="You can make durable equipment out of ectoplasm." />
+    <feat type="Draconomicon page 74" name="Tempest Breath" desc="You can make your breath weapon strike with  the force of a windstorm." />
+    <feat type="Epic Level Handbook page 68" name="Tenacious Magic" desc="Choose one of your spells or spell-like abilities.  That magic cannot be dispelled, only suppressed." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Tenacious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
+    <feat type="Player's Guide to Faerun page 45" name="Tenacious Magic" desc="You can use the Shadow Weave to make your spells  harder for Weave users to dispel." />
+    <feat type="Dungeon Master's Guide v.3.5 page 210" name="Terrifying Rage" desc="While in a rage, you panic your opponents." />
+    <feat type="Epic Level Handbook page 68" name="Terrifying Rage" desc="While in a rage, you panic your opponents." />
+    <feat type="Oriental Adventures page 81" name="The Gentle Way Mastery" desc="You have mastered the martial arts style of  'The Gentle Way' -- a soft form emphasizing throws and movement." />
+    <feat type="Races of Faerun page 170" name="Theocrat" desc="You have the delicate touch needed to maintain  the favor of your patron deity and the political skills needed to survive  in the trenches of bureaucratic warfare common in the lands ruled by agents  of the Mulhorandi pantheon." />
+    <feat type="Lords of Madness page 23" name="Thicken Mucus" desc="An aboleth with this feat can produce mucus  that is thicker than normal, and other creatures find it difficult to swim  through." />
+    <feat type="Savage Species page 40" name="Thick-Skinned" desc="Your tough hide grants improved damage reduction." />
+    <feat type="Lords of Madness page 182" name="Thrall Bred" desc="Spawned in the breeding pits of the mind flayers  or the beholders, you have unusual strength and hardiness, as well as loyalty." />
+    <feat type="Book of Vile Darkness page 50" name="Thrall to Demon" desc="The character formally supplicates himself to  a demon prince." />
+    <feat type="Champions of Ruin page 23" name="Thrall to Demon" desc="You formally supplicate yourself to a demon  prince." />
+    <feat type="Complete Warrior page 114" name="Three Mountains" desc="You are a master of fighting with powerful bludgeoning  weapons." />
+    <feat type="Complete Warrior page 105" name="Throw Anything" desc="In your hands, any weapon becomes a deadly ranged  weapon." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Throw Anything" desc="In your hands, any weapon becomes a deadly ranged  weapon." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Thug" desc="Your people know how to get the jump on the  competition and push other people around." />
+    <feat type="Player's Guide to Faerun page 45" name="Thug" desc="You have a knack for getting the jump on the  competition and pushing other people around." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Thunder Twin" desc="You are one of the dwarven generation of twins  born after Moradin's Thunder Blessing in the Year of Thunder (1306 DC)." />
+    <feat type="Player's Guide to Faerun page 46" name="Thunder Twin" desc="You are one of the generation of dwarf twins  born after Moradin's Thunder Blessing in the Year of Thunder." />
+    <feat type="Savage Species page 40" name="Thunderclap" desc="You create a cone of deafening sound by clapping  two limbs together." />
+    <feat type="Epic Level Handbook page 68" name="Thundering Rage" desc="Your rage attacks can cause thunderous roars  that can deafen opponents." />
+    <feat type="Player's Guide to Faerun page 46" name="Tireless" desc="You don't know the meaning of the word 'quit.'" />
+    <feat type="Races of Stone page 145" name="Titan Fighting" desc="You have been trained to fight larger creatures,  and you are adept at dodging their attacks." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Tomb-Born Fortitude" desc="The power of undeath taints you, body and soul.  Its power has hardened your flesh and given it the foul look of the grave." />
+    <feat type="Libris Mortis: The Book of the Dead page 30" name="Tomb-Born Resilience" desc="The power of undeath taints you, deadening your  mind and body to the effects of mind-controlling magic, poison, and disease." />
+    <feat type="Libris Mortis: The Book of the Dead page 31" name="Tomb-Born Vitality" desc="The power of undeath taints you, body and soul.  Its power has removed your need to sleep and eat." />
+    <feat type="Libris Mortis: The Book of the Dead page 31" name="Tomb-Tainted Soul" desc="Your soul is tainted by the foul touch of undeath." />
+    <feat type="Stormwrack page 94" name="Toothed Blow" desc="You are able to hammer your foes more effectively  underwater." />
+    <feat type="Champions of Ruin page 23" name="Tormented Knight" desc="You are inexorably bound to the loathsome yugoloths  that lurk in the Barrens of Doom and Despair, and you strive to bring misery  and pain to all creatures that oppose them." />
+    <feat type="Eberron Campaign Setting page 61" name="Totem Companion" desc="Instead of an animal companion, you have your  totem magical beast as a companion." />
+    <feat type="Ghostwalk page 39" name="Touch Attack Specialization" desc="Choose one of your ghost touch attacks that  deals hit point damage, ability damage, or ability drain, such as Corrupting  Touch. You are especially good at using this touch attack." />
+    <feat type="Champions of Ruin page 22" name="Touch of Benevolence" desc="Despite your evil alignment, you are prone to  moments of benevolence and mercy." />
+    <feat type="Book of Exalted Deeds page 47" name="Touch of Golden Ice" desc="Your touch is poisonous to evil creatures." />
+    <feat type="Player's Guide to Faerun page 177" name="Touch of Hate" desc="Because you are favored by Bane, you can transform  animals into evil minions." />
+    <feat type="Complete Arcane page 83" name="Touch Spell Specialization" desc="You deal extra damage with touch spells." />
+    <feat type="Sandstorm page 53" name="Touchstone" desc="You forge a link with a power-rich location,  referred to as a touchstone site." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Toughness" desc="You are tougher than normal." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Tower Shield Proficiency" desc="You are proficient with tower shields." />
+    <feat type="Lords of Madness page 23" name="Toxic Mucus" desc="An aboleth with this feat can produce mucus  that is poisonous to other creatures." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Track" desc="You can follow the trails of creatures and characters  across most types of terrain." />
+    <feat type="Player's Handbook v.3.5 page 101" name="Trample" desc="You are trained in using your mount to knock  down opponents." />
+    <feat type="Complete Arcane page 84" name="Transdimensional Spell" desc="You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area." />
+    <feat type="Complete Divine page 85" name="Transdimensional Spell" desc="You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area." />
+    <feat type="UE page 45" name="Transdimensional Spell" desc="You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area." />
+    <feat type="WL page 16" name="Transfer Legacy" desc="You can temporarily transfer one of your legacy  item's abilities to another magic item." />
+    <feat type="Epic Level Handbook page 68" name="Trap Sense" desc="You can sense nearby traps even if not actively  searching for them." />
+    <feat type="Lost Empires of Faerun page 9" name="Trapmaster" desc="You have studied the funereal architecture and  lethal traps of a dozen long-dead cultures, which gives you an uncanny knack  for avoiding traps." />
+    <feat type="Savage Species page 40" name="Treefriend" desc="You are adapted to a forest environment." />
+    <feat type="Forgotten Realms Campaign Setting page 38" name="Treetopper" desc="Your people are at home in the trees and high  places, daring falls that paralyze most other folk in abject terror." />
+    <feat type="Player's Guide to Faerun page 46" name="Treetopper" desc="Your people are at home in the trees and high  places." />
+    <feat type="Dragonlance Campaign Setting page 87" name="Tremendous Charge" desc="You know how to use your mount's power to make  your lance attacks even more deadly." />
+    <feat type="Races of Stone page 145" name="Trivial Knowledge" desc="You have the ability to dredge up obscure knowledge  in appropriate situations." />
+    <feat type="Complete Divine page 86" name="True Believer" desc="Your deity rewards your unquestioning faith  and dedication." />
+    <feat type="Dungeon Master's Guide II page 232" name="Truebond" desc="Your bond to your chosen item becomes stronger." />
+    <feat type="Races of Eberron page 116" name="Truedive Elite" desc="Your truedive shifter trait improves." />
+    <feat type="Song and Silence: A Guidebook to Bards and Rogues page 40" name="Trustworthy" desc="Others feel comfortable telling you their secrets." />
+    <feat type="Races of Stone page 145" name="Tunnel Fighting" desc="You are adept at maneuvering and fighting in  tight spaces and underground passages." />
+    <feat type="Races of Stone page 145" name="Tunnel Riding" desc="You are particularly adept at maneuvering mounts  through tight spaces and underground passages." />
+    <feat type="Underdark page 27" name="Tunnelfighter" desc="You can fight more naturally in the cramped  and close quarters of caves and tunnels than usual." />
+    <feat type="Underdark page 27" name="Tunnelrunner" desc="You can move naturally in the cramped quarters  of caves and tunnels." />
+    <feat type="Races of Stone page 145" name="Turtle Dart" desc="You have mastered the style of fighting with  a short sword while wearing extremely heavy armor and carrying a large shield." />
+    <feat type="Expanded Psionics Handbook page 51" name="Twin Power" desc="You can manifest a power simultaneously with  another power just like it." />
+    <feat type="Complete Arcane page 84" name="Twin Spell" desc="You can simultaneously cast a single spell twice." />
+    <feat type="Forgotten Realms Campaign Setting page 39" name="Twin Spell" desc="You can cast a spell simultaneously with another  spell just like it." />
+    <feat type="Player's Guide to Faerun page 46" name="Twin Spell" desc="You can cast a spell simultaneously with another  spell just like it." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Twin Spell" desc="You can cast a spell simultaneously with another  spell just like it." />
+    <feat type="Forgotten Realms Campaign Setting page 39" name="Twin Sword Style" desc="You have mastered a style of defense that others  find frustrating." />
+    <feat type="Ghostwalk page 39" name="Twin Sword Style" desc="You have mastered a style of defense that others  find frustrating." />
+    <feat type="Player's Guide to Faerun page 46" name="Twin Sword Style" desc="You have mastered a defensive style based on  wielding a blade in each hand." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Two-Weapon Defense" desc="Your two-weapon fighting style bolsters your  defense as well as your offense." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Two-Weapon Fighting" desc="You can fight with a weapon in each hand. You  can make one extra attack each round with the second weapon." />
+    <feat type="Epic Level Handbook page 68" name="Two-Weapon Rend" desc="You can rend opponents when fighting with two  weapons." />
+    <feat type="Races of Eberron page 120" name="Unarmored Body" desc="Your body is crafted without its normal layer  of armor, trading off physical strength for magical potential." />
+    <feat type="Expanded Psionics Handbook page 52" name="Unavoidable Strike" desc="You can make an unarmed strike or use a natural  weapon against your foe as if delivering a touch attack." />
+    <feat type="Oriental Adventures page 66" name="Unbalancing Strike" desc="You can strike a humanoid opponent's joints  to knock him off balance." />
+    <feat type="Epic Level Handbook page 68" name="Uncanny Accuracy" desc="You can ignore anything less than total cover  or total concealment when using ranged weapons." />
+    <feat type="Savage Species page 40" name="Uncanny Scent" desc="You can pinpoint scents at a greater distance." />
+    <feat type="Expanded Psionics Handbook page 52" name="Unconditional Power" desc="Disabling conditions do not hold you back." />
+    <feat type="Eberron Campaign Setting page 61" name="Undead Empathy" desc="You are adept at communicating with and influencing  the undead." />
+    <feat type="Libris Mortis: The Book of the Dead page 31" name="Undead Leadership" desc="You gain the service of loyal undead followers." />
+    <feat type="Complete Divine page 90" name="Undead Mastery" desc="You can command a greater number of undead than  normal." />
+    <feat type="Epic Level Handbook page 68" name="Undead Mastery" desc="You can command a greater number of undead than  normal." />
+    <feat type="Races of the Wild page 152" name="Underfoot Combat" desc="You can enter the space that a foe at least  two size categories bigger than you occupies." />
+    <feat type="Races of Destiny page 155" name="Undying Fate" desc="You have pledged your unswerving obedience to  Wee Jas, and she in turn has granted you special insight into life and death." />
+    <feat type="Complete Divine page 90" name="Unholy Strike" desc="Your attacks deal great damage to good creatures." />
+    <feat type="Epic Level Handbook page 68" name="Unholy Strike" desc="Your attacks deal great damage to good creatures." />
+    <feat type="Libris Mortis: The Book of the Dead page 31" name="Unquenchable Flame of Life" desc="You are hardened to the attacks of the undead." />
+    <feat type="Expanded Psionics Handbook page 52" name="Up the Walls" desc="You can run on walls for brief distances." />
+    <feat type="Races of Destiny page 154" name="Urban Stealth" desc="You are particularly adept at moving quietly  and unnoticed through the city." />
+    <feat type="Eberron Campaign Setting page 61" name="Urban Tracking" desc="You can track the location of missing persons  or wanted individuals within communities." />
+    <feat type="Races of Destiny page 154" name="Urban Tracking" desc="You can track down the location of missing persons  or wanted individuals within communities." />
+    <feat type="Libris Mortis: The Book of the Dead page 31" name="Vampire Hunter" desc="Your knowledge of vampires has given you the  extraordinary ability to detect subtle signs of their presence and to resist  their dominating gaze ability." />
+    <feat type="City of Splendors: Waterdeep page 146" name="Veil of Cyric" desc="You have reconciled yourself to the unfortunate  truth that hard decisions and regrettable actions are necessary in the service  of your deity." />
+    <feat type="Eberron Campaign Setting page 62" name="Vermin Companion" desc="Instead of an animal companion, you have a vermin  creature as a companion." />
+    <feat type="Eberron Campaign Setting page 62" name="Vermin Shape" desc="You can use your wild shape ability to assume  vermin forms instead of animal forms." />
+    <feat type="Epic Level Handbook page 68" name="Vermin Wild Shape" desc="You can wild shape into vermin form." />
+    <feat type="Book of Vile Darkness page 50" name="Verminfriend" desc="Vermin regard the character better than they  would normally." />
+    <feat type="Complete Adventurer page 112" name="Versatile Performer" desc="You are skilled at many kinds of performances." />
+    <feat type="Heroes of Battle page 99" name="Veteran Knowledge" desc="You are capable of seeing potential battlefield  advantages where others cannot." />
+    <feat type="Champions of Ruin page 22" name="Via Negativa" desc="You can channel greater amounts of negative  energy into your inflict spells." />
+    <feat type="Savage Species page 40" name="Vicious Wound" desc="Damage you deal causes wounds that bleed excessively." />
+    <feat type="Book of Vile Darkness page 50" name="Vile Ki Strike" desc="The character can focus evil power into his  unarmed strike." />
+    <feat type="Book of Vile Darkness page 50" name="Vile Martial Strike" desc="The character can focus evil power in her weapon  blows." />
+    <feat type="Book of Vile Darkness page 50" name="Vile Natural Attack" desc="The character can focus evil power into his  natural attacks." />
+    <feat type="Book of Vile Darkness page 50" name="Violate Spell" desc="The character can transform one of his spells  into an evil spell, and the wounds the spell inflicts are tainted with the  foulest evil." />
+    <feat type="Book of Vile Darkness page 50" name="Violate Spell-Like Ability" desc="The creature's spell-like abilities are particularly  tainted with evil." />
+    <feat type="Savage Species page 40" name="Virulent Poison" desc="Your poison attack is more effective." />
+    <feat type="Epic Level Handbook page 68" name="Vorpal Strike" desc="Your unarmed strikes can behead your opponents." />
+    <feat type="Book of Exalted Deeds page 47" name="Vow of Abstinence" desc="You have taken a sacred vow to abstain from  alcoholic beverages, drugs, stimulants such as caffeine, and intoxication." />
+    <feat type="Book of Exalted Deeds page 47" name="Vow of Chastity" desc="You have taken a sacred vow to refrain from  marriage and sexual intercourse." />
+    <feat type="Book of Exalted Deeds page 47" name="Vow of Nonviolence" desc="You have taken a sacred vow to avoid violence  against humanoids." />
+    <feat type="Book of Exalted Deeds page 48" name="Vow of Obedience" desc="You have taken a sacred vow to live according  to the dictates of another, generally your superior in a religious order  or similar organization." />
+    <feat type="Book of Exalted Deeds page 48" name="Vow of Peace" desc="You have taken a sacred vow to abstain from  harming any living creature." />
+    <feat type="Book of Exalted Deeds page 48" name="Vow of Poverty" desc="You have taken a sacred vow to forswear material  possessions." />
+    <feat type="Book of Exalted Deeds page 48" name="Vow of Purity" desc="You have taken a sacred vow to avoid contact  with dead flesh." />
+    <feat type="UE page 45" name="Vremyonni Training" desc="You have had more than the typical amount of  training with the vremyonni, the Old Ones who research spells and  craft magic items for the Witches of Rashemen." />
+    <feat type="Eberron Campaign Setting page 62" name="Wand Mastery" desc="Wands are far more potent in your hands." />
+    <feat type="Complete Arcane page 84" name="Wandstrike" desc="You can channel the magical energy of a wand  through your melee attacks." />
+    <feat type="Eberron Campaign Setting page 62" name="Warden Initiate" desc="You have been trained in the ancient druidic  tradition of the Wardens of the Wood, a sect dedicated to protecting the  eastern plain and the great woods of the Eldeen Reaches." />
+    <feat type="Lords of Madness page 182" name="Warped Mind" desc="Your tainted form has altered the physical nature  of your brain, making you resistant to mental effects and more capable of  unleashing the power of your mind on others." />
+    <feat type="Oriental Adventures page 66" name="Warrior Instinct" desc="Your ancestor, Matsu Hitomi, was the most famous  female samurai of the early Empire." />
+    <feat type="Oriental Adventures page 66" name="Warrior Shugenja" desc="Your ancestor, Agasha Nodotai, was a shugenja  well versed in the code of bushido and the way of war." />
+    <feat type="Races of Faerun page 170" name="Water Adaptation" desc="You favor your aquatic elven parent and have  developed the ability to breathe and move about in water easily." />
+    <feat type="Stormwrack page 94" name="Water Adaptation" desc="You favor your aquatic elf parent and have developed  the ability to breathe and move about in water easily." />
+    <feat type="Planar Handbook page 42" name="Water Heritage" desc="You are descended from creatures native to the  Plane of Water." />
+    <feat type="Lords of Madness page 182" name="Waterspawn" desc="Your abnormal body and heritage has become more  pronounced. You have prominent fins and are supremely well adapted to the  icy deeps." />
+    <feat type="Complete Warrior page 106" name="Weakening Touch" desc="You can temporarily weaken an opponent with  your unarmed strike." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Weapon Finesse" desc="You are especially skilled at using weapons  that can benefit as much from Dexterity as from Strength." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Weapon Focus" desc="Choose one type of weapon. You can also choose  unarmed strike or grapple (or ray, if you are a spellcaster) as a weapon  for purposes of this feat. You are especially good with this weapon." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Axes)" desc="You understand how to use axes and axelike weapons." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Basic Weapons)" desc="You understand how to use a few basic weapons." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Bows)" desc="You understand how to use bows." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Claw Weapons)" desc="You understand how to use weapons strapped to  the hands." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Crossbows)" desc="You understand how to use crossbows." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Druid Weapons)" desc="You understand how to use weapons favored by  druids." />
+    <feat type="Unearthed Arcana page 95" name="Weapon Group (Exotic Double Weapon)" desc="You understand how to use the exotic double  weapons associated with the weapon groups that you have mastered." />
+    <feat type="Unearthed Arcana page 96" name="Weapon Group (Exotic Weapons)" desc="You understand how to use the exotic weapons  associated with the weapon groups that you have mastered." />
+    <feat type="Unearthed Arcana page 96" name="Weapon Group (Flails and Chains)" desc="You understand how to use flails and chain weapons." />
+    <feat type="Unearthed Arcana page 96" name="Weapon Group (Heavy Blades)" desc="You understand how to use large bladed weapons." />
+    <feat type="Unearthed Arcana page 96" name="Weapon Group (Light Blades)" desc="You understand how to use light bladed weapons." />
+    <feat type="Unearthed Arcana page 96" name="Weapon Group (Maces and Clubs)" desc="You understand how to use maces and clubs." />
+    <feat type="Unearthed Arcana page 97" name="Weapon Group (Monk Weapons)" desc="You understand how to use weapons normally favored  by monks." />
+    <feat type="Unearthed Arcana page 97" name="Weapon Group (Picks and Hammers)" desc="You understand how to use picks and hammers." />
+    <feat type="Unearthed Arcana page 97" name="Weapon Group (Polearms)" desc="You understand how to use polearms." />
+    <feat type="Unearthed Arcana page 97" name="Weapon Group (Slings and Thrown Weapons)" desc="You understand how to use slings and handheld  thrown weapons." />
+    <feat type="Unearthed Arcana page 97" name="Weapon Group (Spears and Lances)" desc="You understand how to use spears and javelins." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Weapon Specialization" desc="Choose one type of weapon for which you have  already selected the Weapon Focus feat. You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon." />
+    <feat type="Eberron Campaign Setting page 62" name="Whirling Steel Strike" desc="Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longsword." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Whirlwind Attack" desc="You can strike nearby opponents in an amazing,  spinning attack" />
+    <feat type="Draconomicon page 75" name="Whirlwind Tail Sweep" desc="You can sweep your tail in a circular arc." />
+    <feat type="Races of Destiny page 155" name="Whispered Secrets" desc="You revere the Maimed Lord and have devoted  your miserable, worthless life to learning but a few of the Whispered One's  secrets." />
+    <feat type="Races of Eberron page 112" name="White Scorpion Strike" desc="Your fists and feet sting like the dread white  scorpion and are particularly effective against undead." />
+    <feat type="Epic Level Handbook page 69" name="Widen Aura of Courage" desc="Your aura of courage is wider than normal." />
+    <feat type="Epic Level Handbook page 69" name="Widen Aura of Despair" desc="Your aura of despair is wider than normal." />
+    <feat type="Expanded Psionics Handbook page 52" name="Widen Power" desc="You can increase the area of your powers." />
+    <feat type="Deities and Demigods page 52" name="Widen Spell " desc="The deity can increase the area of its spells." />
+    <feat type="Magic of Faerun page 23" name="Widen Spell" desc="You can increase the area of your spells." />
+    <feat type="Player's Handbook v.3.5 page 102" name="Widen Spell" desc="You can increase the area of your spells." />
+    <feat type="Tome and Blood: A Guidebook to Wizards and Sorcerers page 42" name="Widen Spell" desc="You can increase the area of your spells." />
+    <feat type="Complete Warrior page 153" name="Wield Oversized Weapon" desc="You can use larger than normal weapons with  ease." />
+    <feat type="Lords of Madness page 182" name="Wild Talent" desc="Your mind wakes to a previously unrealized talent  for psionics." />
+    <feat type="Expanded Psionics Handbook page 52" name="Wild Talent" desc="Your mind wakes to a previously unrealized talent  for psionics." />
+    <feat type="Races of Eberron page 116" name="Wildhunt Elite" desc="Your shifter-enhanced instincts and senses allow  you to detect concealed and invisible creatures." />
+    <feat type="Book of Vile Darkness page 50" name="Willing Deformity" desc="Through scarification, self-mutilation, and  supplication to dark power, the character intentionally mars her own body." />
+    <feat type="Races of the Wild page 153" name="Winged Warrior" desc="You use your wings for more than just flying." />
+    <feat type="Monster Manual v.3.5 page 304" name="Wingover" desc="The creature can change direction quickly while  flying." />
+    <feat type="Monster Manual II page 18" name="Wingover" desc="The creature can change direction quickly while  flying." />
+    <feat type="Masters of the Wild: A Guidebook to Barbarians, Druids, and Rangers page 25" name="Wingover" desc="You change direction quickly once per round  while airborne." />
+    <feat type="Stormwrack page 94" name="Wingsinger" desc="You can use song or a wind instrument to compel  the winds to obey you." />
+    <feat type="Draconomicon page 75" name="Wingstorm" desc="You can flatten targets with blasts of air from  your wings." />
+    <feat type="Savage Species page 40" name="Wingstorm" desc="You can flatten targets with blasts of air from  your wings." />
+    <feat type="Frostburn page 50" name="Winter's Champion" desc="Your paladin spell list is enhanced." />
+    <feat type="Savage Species page 40" name="Winter's Child" desc="You are adapted to a cold environment." />
+    <feat type="Frostburn page 50" name="Winter's Mount" desc="Your special mount is native to the frostfell." />
+    <feat type="Underdark page 27" name="Wisdom Breeds Caution" desc="Not getting into a dangerous situation is generally  the wisest course, but if danger is unavoidable, you're prepared. You rely  more on caution and forethought than you do on physical prowess." />
+    <feat type="Ghostwalk page 39" name="Wise to Your Ways" desc="You are particularly resistant to the unusual  attacks of your favored enemy." />
+    <feat type="Ghostwalk page 39" name="Witchlight" desc="You can create witchlight, a harmless faint  light, on yourself or an object." />
+    <feat type="UE page 45" name="Wolf Berserker" desc="You have studied the fighting style of the wolf  and employ its tactics in combat." />
+    <feat type="Races of the Wild page 153" name="Wolfpack" desc="You can gain an extra advantage when you and  your allies can gang up on a foe." />
+    <feat type="Complete Divine page 86" name="Wolverine's Rage" desc="You can fly into a berserk rage when injured." />
+    <feat type="Races of the Wild page 154" name="Woodland Archer" desc="You have honed your archery ability in the wilds  of the forest." />
+    <feat type="Shining South page 21" name="Woodwise" desc="You are trained in fighting in woodlands and  know how to use the terrain to best advantage." />
+    <feat type="UE page 45" name="Woodwise" desc="You are trained in fighting in woodlands and  know how to use the terrain to best advantage." />
+    <feat type="Book of Exalted Deeds page 48" name="Words of Creation" desc="You have learned a few of the words that were  spoken to create the world." />
+    <feat type="Expanded Psionics Handbook page 52" name="Wounding Attack" desc="Your vicious attacks wound your foe." />
+    <feat type="Lost Empires of Faerun page 9" name="Wounding Spell" desc="Because you have studied the cruel arts of the  Athalantan magelords of old, you know how to cast spells that cause terrible,  bleeding wounds." />
+    <feat type="Races of the Wild page 152" name="Yondalla's Sense" desc="You display a shrewd perception of danger. Other  halflings say the blessing of Yondalla is upon you." />
+    <feat type="Complete Warrior page 106" name="Zen Archery" desc="Your intuition guides your hand when you use  a ranged weapon." />
+    <feat type="Sword and Fist: A Guidebook to Monks and Fighters page 9" name="Zen Archery" desc="Your intuition guides your hand when you use  a ranged weapon." />
+    <feat type="Complete Divine page 90" name="Zone of Animation" desc="You can channel negative energy to animate  undead." />
+    <feat type="Epic Level Handbook page 69" name="Zone of Animation" desc="You can channel negative energy to animate  undead." />
+    <feat type="Champions of Valor page 28" name="Broken One's Sacrifice" desc="Your dedication to Ilmater's philosophy has given you the power to take attacks directed at others." />
+    <feat type="Champions of Valor page 28" name="Carmendine Monk" desc="You have learned that study is just as important as insight to finding enlightenment." />
+    <feat type="Champions of Valor page 28" name="Defender of the Homeland" desc="You have sworn a sacred oath to protect your country from evil." />
+    <feat type="Champions of Valor page 28" name="Detect Shadow Weave User" desc="You can determine if a magic item or spellcaster is using the Weave or the Shadow Weave." />
+    <feat type="Champions of Valor page 29" name="Druuth Slayer" desc="You have studied the lore of the druuth (a cabal of doppelgangers led by a mind flayer) and know how to recognize and resist their powers." />
+    <feat type="Champions of Valor page 29" name="Duerran Metaform Training" desc="Your studies have shown you the way to link your psionics and your enlarge person spell-like ability." />
+    <feat type="Champions of Valor page 29" name="Duerran Stealth Training" desc="Your studies have shown you the way to link your psionics and your invisibility spell-like ability." />
+    <feat type="Champions of Valor page 29" name="From Smite to Song" desc="You can channel your destructive holy energy into powerful song magic for the glory of Milil." />
+    <feat type="Champions of Valor page 30" name="Initiate of Anhur" desc="You have been initiated into the greatest secrets of Anhur's church." />
+    <feat type="Champions of Valor page 30" name="Initiate of Arvoreen" desc="You have been initiated into the greatest secrets of Arvoreen's church." />
+    <feat type="Champions of Valor page 30" name="Initiate of Baravar Cloakshadow" desc="You have been initiated into the greatest secrets of Baravar Cloakshadow's church." />
+    <feat type="Champions of Valor page 30" name="Initiate of Eilistraee" desc="You have been initiated into the greatest secrets of Eilistraee's church." />
+    <feat type="Champions of Valor page 30" name="Initiate of the Holy Realm" desc="You have been initiated into the greatest secrets of one of the faiths of the Holy Realm (Chauntea, Helm, Lathander, Selune, or Sune)." />
+    <feat type="Champions of Valor page 30" name="Initiate of Horus-Re" desc="You have been initiated into the greatest secrets of Horus-Re's church." />
+    <feat type="Champions of Valor page 31" name="Initiate of Milil" desc="You have been initiated into the greatest secrets of Milil's church." />
+    <feat type="Champions of Valor page 31" name="Initiate of Nobanion" desc="You have been initiated into the greatest secrets of Nobanion's church." />
+    <feat type="Champions of Valor page 31" name="Initiate of Torm" desc="You have been initiated into the greatest secrets of Torm's church." />
+    <feat type="Champions of Valor page 32" name="Initiate of Tymora" desc="You have been initiated into the greatest secrets of Tymora's church." />
+    <feat type="Champions of Valor page 32" name="Knight of the Red Falcon" desc="Your military order has a legendary ability to survive against overwhelming odds." />
+    <feat type="Champions of Valor page 32" name="Knight of the Risen Scepter" desc="Your military order is dedicated to fighting Set and his minions, and even death cannot stop you from this task." />
+    <feat type="Champions of Valor page 32" name="Knight of Tyr's Holy Judgment" desc="You can draw upon the power of Tyr to sense and understand the law and to locate devils." />
+    <feat type="Champions of Valor page 33" name="Knight ot Tyr's Merciful Sword" desc="You can draw upon the power of Tyr to sense where you are needed." />
+    <feat type="Champions of Valor page 33" name="Mark of the Triad" desc="You have been initiated into the greatest secrets of the Triad, the godly triumvirate of Tyr, Torm, and Ilmater." />
+    <feat type="Champions of Valor page 33" name="Overcome Shadow Weave" desc="You understand the strengths and weaknesses of the Shadow Weave and are more resistant to its tricks." />
+    <feat type="Champions of Valor page 33" name="Paladin of the Noble Heart" desc="You are tasked by Ilmater to eliminate cruelty from the world, particularly that of Loviatar." />
+    <feat type="Champions of Valor page 33" name="Silver Blood" desc="You have magically or alchemically imbued your flesh and blood with silver, making you resistant to lycanthrope attacks." />
+    <feat type="Champions of Valor page 33" name="Silver Fang" desc="By following a ritual taught by the Fangshields, your natural attacks are suffused with the power of silver and are fully effective against lycanthropes." />
+    <feat type="Champions of Valor page 33" name="Smiting Power" desc="You use your smite ability to augment other combat maneuvers." />
+    <feat type="Champions of Valor page 34" name="Sword of the Arcane Order" desc="Members of your military order have a special connection with arcane magic." />
+    <feat type="Champions of Valor page 34" name="Sun Soul Monk" desc="Your training with this monk order gives you special powers depending on which sect you follow." />
+    <feat type="Heroes of Horror page 119" name="Archivist of Nature" desc="In addition to your studies of the darkness, you have spent time studying giants and fey." />
+    <feat type="Heroes of Horror page 119" name="Bane Magic" desc="Your spells deal extra damage to a particular type of creature." />
+    <feat type="Heroes of Horror page 120" name="Blood Calls to Blood" desc="Exploring the latent potential in your blood due to your fiendish descent, you learn how to better adapt to the mystical attacks of your forebears." />
+    <feat type="Heroes of Horror page 120" name="Corrupt Arcana" desc="You can prepare and cast corrupt spells." />
+    <feat type="Heroes of Horror page 120" name="Corrupt Spell Focus" desc="All spells you cast that have a corrupt component (such as call forth the beast, master's lament, or chain of sorrow) are more potent than normal." />
+    <feat type="Heroes of Horror page 120" name="Debilitating Spell" desc="By calling upon the taint within, you add a malign power to your offensive spells." />
+    <feat type="Heroes of Horror page 120" name="Debilitating Strike" desc="By calling upon the taint within, you add a malign power to your melee attacks." />
+    <feat type="Heroes of Horror page 121" name="Deformity (Skin)" desc="Due to a regimen of deliberate abuse, you have roughened your skin until it has grown as coarse and tough as rhino hide." />
+    <feat type="Heroes of Horror page 121" name="Deformity (Tall)" desc="Through long and painful stints on the rack, bolstered by the surgical implantation of various splints and struts, you have stretched yourself to well over 7 feet in height." />
+    <feat type="Heroes of Horror page 121" name="Deformity (Teeth)" desc="By filing your teeth to points and brutalizing your gums, you gain a hideous smile full of razor-sharp teeth that enable you to make a grisly bite attack." />
+    <feat type="Heroes of Horror page 121" name="Deformity (Tongue)" desc="Through protracted self-mutilation that involves frequently piercing your tongue and dipping it in acid, your tongue becomes hideous to behold but oddly sensitive to the environment." />
+    <feat type="Heroes of Horror page 121" name="Disease Immunity" desc="Whether due to prolonged exposure or natural hardiness, you have grown immune to some diseases and resistant to all others." />
+    <feat type="Heroes of Horror page 122" name="Draconic Archivist" desc="In addition to your studies of the darkness, you have spent time studying dragons and constructs." />
+    <feat type="Heroes of Horror page 122" name="Dreamtelling" desc="You can use your Knowledge (the planes) skill to interpret your dreams or the dreams of others, thus gleaning useful information and insights." />
+    <feat type="Heroes of Horror page 122" name="Eldritch Corruption" desc="You can add power to your spells or spell-like abilities at the expense of your companions' health." />
+    <feat type="Heroes of Horror page 122" name="Font of Life" desc="Your life-force is strong enough to make you highly resistant to all forms of energy drain and level loss." />
+    <feat type="Heroes of Horror page 123" name="Forbidden Lore" desc="You gain hideous insights into subjects not meant to be understood by mortal minds." />
+    <feat type="Heroes of Horror page 123" name="Greater Corrupt Spell Focus" desc="Your corrupt spells are now even more potent than they were before." />
+    <feat type="Heroes of Horror page 123" name="Haunting Melody" desc="You can use your music to inspire fear." />
+    <feat type="Heroes of Horror page 123" name="Improved Oneiromancy" desc="With the Improved Oneiromancy feat, you gain additional dream-related spellcasting abilities." />
+    <feat type="Heroes of Horror page 123" name="Lunatic Insight" desc="Your madness grants you insight and knowledge." />
+    <feat type="Heroes of Horror page 123" name="Mad Faith" desc="Your depravity has twisted the connection between you and your patron deity. You suffer flashes of insight interrupted by flashes of madness." />
+    <feat type="Heroes of Horror page 123" name="Master of Knowledge" desc="You have spent most of your life in study, and it comes naturally to you now." />
+    <feat type="Heroes of Horror page 123" name="Oneiromancy" desc="You gain a number of abilities and advantages related to dreams and magic." />
+    <feat type="Heroes of Horror page 124" name="Pure Soul" desc="Your faith or purity of mind overrides the evils within you. You are immune to taint." />
+    <feat type="Heroes of Horror page 124" name="Spirit Sense" desc="You can see and communicate with the souls of the recently departed." />
+    <feat type="Heroes of Horror page 124" name="Surge of Malevolence" desc="You empower yourself by drawing on the taint within." />
+    <feat type="Heroes of Horror page 124" name="Tainted Fury" desc="You can channel your physical corruption into a state of fury." />
+    <feat type="Heroes of Horror page 124" name="Touch of Taint" desc="One of your attack forms that normally deals ability damage, ability drain, or energy drain can also deal corruption or depravity." />
+    <feat type="Heroes of Horror page 124" name="Unnatural Will" desc="You have learned to focus your force of personality and inner strength to stand against fearful circumstances." />
+    <feat type="Heroes of Horror page 125" name="Willing Deformity" desc="Through scarification, self-mutilation, or supplication to dark powers, you intentionally mar your own body." />
+    <feat type="Magic of Eberron page 46" name="Augment Elemental" desc="Your knowledge of planar magic allows you to imbue your summoned elementals with extraordinary combat prowess and durability." />
+    <feat type="Magic of Eberron page 46" name="Cull Wand Essence" desc="You can focus the raw magical energy of a wand or staff into a beam of energy." />
+    <feat type="Magic of Eberron page 46" name="Deathless Fleshgrafter" desc="You can grow and graft the tissues and body parts of deathless creatures onto others, granting the recipients of your grafts new, potent abilities." />
+    <feat type="Magic of Eberron page 46" name="Dorje Mastery" desc="Psionic dorjes are more potent in your hands." />
+    <feat type="Magic of Eberron page 46" name="Dragon Prophesier" desc="Like the dragons, you seek to untangle and perceive the record of everything that has been, and more important, what will be." />
+    <feat type="Magic of Eberron page 46" name="Dragon Totem Focus" desc="Your focus allows you to enjoy the benefit of a dragon totem ritual longer than normal." />
+    <feat type="Magic of Eberron page 47" name="Dragon Totem Lorekeeper" desc="You have been instructed in how to perform the rituals of dragon totem magic." />
+    <feat type="Magic of Eberron page 47" name="Dragon Totem Scion" desc="You are naturally attuned to the magic of the dragon totem ritual." />
+    <feat type="Magic of Eberron page 47" name="Eldeen Plantgrafter" desc="You can create and apply plant grafts onto others, granting the recipients of your grafts new, potent abilities." />
+    <feat type="Magic of Eberron page 47" name="Elemental Grafter" desc="You can create and apply elemental grafts onto others, granting the recipients of your grafts new, potent abilities." />
+    <feat type="Magic of Eberron page 47" name="Elemental Helmsman" desc="You are more capable of piloting an elemental vessel." />
+    <feat type="Magic of Eberron page 47" name="Elemental Smite" desc="You can channel the energy associated with one of your elemental grafts into your melee attacks." />
+    <feat type="Magic of Eberron page 47" name="Etch Schema" desc="You can create a minor schema." />
+    <feat type="Magic of Eberron page 48" name="Heroic Companion" desc="Your luck extends to your companion creature." />
+    <feat type="Magic of Eberron page 48" name="Heroic Focus" desc="Despite the dangers all around, you can quickly regain your psionic focus." />
+    <feat type="Magic of Eberron page 49" name="Improved Homunculus" desc="You are adept at improving and modifying your homunculus. Whenever you advance your homunculus's Hit Dice, you can also imbue it with special supernatural abilities." />
+    <feat type="Magic of Eberron page 50" name="Prophecy's Artifex" desc="Your perception of the draconic Prophecy gives you insights that allow you to transcend the normal limits of magic item use." />
+    <feat type="Magic of Eberron page 50" name="Prophecy's Explorer" desc="Your perception of the draconic Prophecy imbues you with a preternatural sense of your surroundings, enabling you to move easily and quickly through dangerous areas." />
+    <feat type="Magic of Eberron page 50" name="Prophecy's Hero" desc="Your perception of the draconic Prophecy charges you with the will to prevail, providing you with the opportunity to see a way to victory even when the odds are stacked against you." />
+    <feat type="Magic of Eberron page 50" name="Prophecy's Mind" desc="You meld your perception of the draconic Prophecy with a mental focus that provides you with momentary warning when death is at hand." />
+    <feat type="Magic of Eberron page 50" name="Prophecy's Shaper" desc="Your perception of the draconic Prophecy is such that you can disrupt reality and make your spells more powerful than reality would normally allow." />
+    <feat type="Magic of Eberron page 50" name="Prophecy's Shepherd" desc="Your perception of the draconic Prophecy is such that you can alter the natural flow of the world by connecting your knowledge of life-force with the world around you." />
+    <feat type="Magic of Eberron page 51" name="Prophecy's Slayer" desc="Your perception of the draconic Prophecy includes a keen appreciation of life. You recognize how fragile and tenuous life truly is when balanced against your lethal foreknowledge." />
+    <feat type="Magic of Eberron page 51" name="Psiforged Body" desc="As a warforged, your body can be crafted using trace amounts of psionically resonant deep crystal, providing you with increased psionic power and the ability to store psionic energy in your body. If you take this feat, you will often be referred to as a psiforged." />
+    <feat type="Magic of Eberron page 51" name="Psionic Luck" desc="Your psionic focus improves your luck." />
+    <feat type="Magic of Eberron page 51" name="Psychic Rush" desc="You can occasionally manifest a psionic power with less effort." />
+    <feat type="Magic of Eberron page 51" name="Quicken Dragonmark" desc="You can use your dragonmark abilities more quickly." />
+    <feat type="Magic of Eberron page 51" name="Rapid Infusion" desc="You can imbue an item with an infusion more quickly than normal." />
+    <feat type="Magic of Eberron page 51" name="Symbiont Mastery" desc="You have stronger control over an attached symbiont than regular creatures, and you gain vitality for each symbiont attached to you." />
+    <feat type="Magic of Eberron page 51" name="Wand Surge" desc="You can squeeze more magic out of charged items." />
+    <feat type="Magic of Incarnum page 34" name="Azure Enmity" desc="You can channel incarnum to enhance your ability to deal damage to your favored enemies." />
+    <feat type="Magic of Incarnum page 34" name="Azure Talent" desc="The soul energy of incarnum increases your mental capacity." />
+    <feat type="Magic of Incarnum page 34" name="Azure Touch" desc="You can channel incarnum to enhance your abilit to heal." />
+    <feat type="Magic of Incarnum page 35" name="Azure Toughness" desc="You can use incarnumto boost your physical vigor." />
+    <feat type="Magic of Incarnum page 35" name="Azure Turning" desc="You can blast ndead with incarnum-purified positive energy." />
+    <feat type="Magic of Incarnum page 35" name="Azure Wild Shape" desc="You can channel incarnum to enhance your combat prowess while wild shaped." />
+    <feat type="Magic of Incarnum page 35" name="Bonus Essentia" desc="You are better able to harness your personal store of incarnum." />
+    <feat type="Magic of Incarnum page 35" name="Cerulean Fortitude" desc="You can use incarnum to boost your ability to resist effects that would adversely affect your health." />
+    <feat type="Magic of Incarnum page 35" name="Cerulean Reflexes" desc="You can use incarnum to boost your ability to avoid harm." />
+    <feat type="Magic of Incarnum page 35" name="Cerulean Will" desc="You can use incarnum to boost your willpower." />
+    <feat type="Magic of Incarnum page 35" name="Cobalt Charge" desc="You can channel incarnum to deal devastating strikes when charging." />
+    <feat type="Magic of Incarnum page 35" name="Cobalt Critical" desc="You can focus your spirit into your melee weapon attacks, dealing more damage with successful critical strikes." />
+    <feat type="Magic of Incarnum page 35" name="Cobalt Expertise" desc="By channeling the soul energy of weapon masters past, present, and future, you become more adept at maneuvers of skill and expertise." />
+    <feat type="Magic of Incarnum page 37" name="Cobalt Power" desc="By channeling the soul energy of brutal warriors past, present, and future, you become more capable of overcoming your enemies through sheer strength." />
+    <feat type="Magic of Incarnum page 37" name="Cobalt Precision" desc="You can focus your soul energy into your ranged attacks, dealing more damage with successful critical hits." />
+    <feat type="Magic of Incarnum page 37" name="Cobalt Rage" desc="You can channel incarnum to enhance your rage. When you do so, your eyes turn deep blue in color." />
+    <feat type="Magic of Incarnum page 37" name="Divine Soultouch" desc="You can channel positive or negative energy to imbue yourself with incarnum." />
+    <feat type="Magic of Incarnum page 38" name="Double Chakra" desc="One of your chakras becomes capable of holding more incarnum than it is normally capable of containing." />
+    <feat type="Magic of Incarnum page 38" name="Expanded Soulmeld Capacity" desc="Your soul's tie to incarnum allows you to maintain more essentia in a single soulmeld." />
+    <feat type="Magic of Incarnum page 38" name="Healing Soul" desc="You can draw upon the soul energy of incarnum to heal your wounds." />
+    <feat type="Magic of Incarnum page 38" name="Heart of Incarnum" desc="You tap into the power of your heart chakra to gain resilience." />
+    <feat type="Magic of Incarnum page 38" name="Improved Essentia Capacity" desc="Your capability of investing essentia improves." />
+    <feat type="Magic of Incarnum page 38" name="Incarnum-Fortified Body" desc="The incarnum within you strengthens your body's toughness, enabling you to withstand greater injury." />
+    <feat type="Magic of Incarnum page 38" name="Incarnum Resistance" desc="Your body, untainted by incarnum, is not easily affected by the power of soul energy." />
+    <feat type="Magic of Incarnum page 38" name="Incarnum Spellshaping" desc="You gain the ability to invest incarnum into your spellcasting." />
+    <feat type="Magic of Incarnum page 38" name="Indigo Strike" desc="You can channel incarnum to enhance your ability to deal damage with your skirmish attack, sneak attack or sudden strike." />
+    <feat type="Magic of Incarnum page 38" name="Midnight Augmentation" desc="You can augment a psionic power with your personal soul energy rather than mental energy." />
+    <feat type="Magic of Incarnum page 39" name="Midnight Dodge" desc="You can channel incarnum to enhance your ability to avoid attacks against you." />
+    <feat type="Magic of Incarnum page 39" name="Midnight Metamagic" desc="You can channel incarnum to alter your prepared spells." />
+    <feat type="Magic of Incarnum page 39" name="Necrocarnum Acolyte" desc="You have experienced the power of necrocarnum, a dark and twisted form of incarnum." />
+    <feat type="Magic of Incarnum page 39" name="Open Greater Chakra" desc="You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra." />
+    <feat type="Magic of Incarnum page 39" name="Open Least Chakra" desc="You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra." />
+    <feat type="Magic of Incarnum page 40" name="Open Lesser Chakra" desc="You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra." />
+    <feat type="Magic of Incarnum page 40" name="Psycarnum Blade" desc="You can forge your mind blade from a mixture of mental and soul energy, enabling you to deal devastating strikes with the weapon." />
+    <feat type="Magic of Incarnum page 40" name="Psycarnum Crystal" desc="Your psycrystal taps into the natural ebb and flow of incarnum, turning it into a small reservoir of soul energy." />
+    <feat type="Magic of Incarnum page 40" name="Psycarnum Infusion" desc="You transform your mental focus into a brief burst of soul energy." />
+    <feat type="Magic of Incarnum page 40" name="Sapphire Fist" desc="You can channel incarnum to enhance your ability to deliver stunning attacks." />
+    <feat type="Magic of Incarnum page 40" name="Sapphire Smite" desc="You can channel incarnum to enhance your ability to deal mighty blows." />
+    <feat type="Magic of Incarnum page 40" name="Sapphire Sprint" desc="Drawing on the soul energy of great runners of history, you infuse your body with incarnum to speed your steps." />
+    <feat type="Magic of Incarnum page 40" name="Shape Soulmeld" desc="You gain the ability to shape a single soulmeld." />
+    <feat type="Magic of Incarnum page 41" name="Share Soulmeld" desc="You can share a soulmeld with an ally with which you have a special bond." />
+    <feat type="Magic of Incarnum page 41" name="Soulsight" desc="You can attune your soul to sense living creatures near you." />
+    <feat type="Magic of Incarnum page 41" name="Soultouched Spellcasting" desc="By fusing your spells with incarnum, they become more capable of overcoming enemy magic and spell resistance." />
+    <feat type="Magic of Incarnum page 41" name="Split Chakra" desc="One of your chakras becomes capable of holding both a bound soulmeld and a magic item." />
+    <feat type="Magic of Incarnum page 41" name="Undead Meldshaper" desc="Despite having no soul of your own, you maintain the ability to channel incarnum through force of will alone." />
+    <feat type="Player's Guide to Eberron page 20" name="Aereni Focus" desc="From childhood you have studied one particular path, and these decades of devotion result in remarkable skill." />
+    <feat type="Player's Guide to Eberron page 20" name="Aerenal Arcanist" desc="Your family has studied wizardry for thousands of years." />
+    <feat type="Player's Guide to Eberron page 20" name="Aerenal Half-Life" desc="The Priests of Transition have guided you through strange rituals that left you poised between the world of the living and the dead." />
+    <feat type="Player's Guide to Eberron page 25" name="Perfect Reflection" desc="You are particularly skilled at mimicking the forms and mannerisms of others." />
+    <feat type="Player's Guide to Eberron page 35" name="Touch of Captivation" desc="You are sakah, and your fiendish gift allows you to captivate people around you." />
+    <feat type="Player's Guide to Eberron page 35" name="Touch of Deception" desc="You are sakah, and your fiend gift allows you to alter your appearance and trick others." />
+    <feat type="Player's Guide to Eberron page 35" name="Touch of Summoning" desc="You are sakah, and your fiendish gift allows you to summon fell creatures to do your bidding." />
+    <feat type="Player's Guide to Eberron page 36" name="Binding Brand" desc="You carry the brand of the binding flame, marking you as a warrior of the Ghaash'kala clans." />
+    <feat type="Player's Guide to Eberron page 48" name="Dragon's Insight" desc="You can call on the power of your dragonmark to enhance your natural abilities." />
+    <feat type="Player's Guide to Eberron page 48" name="Shield of Deneith" desc="You can channel the power of your Deneith dragonmark to defend yourself in battle." />
+    <feat type="Player's Guide to Eberron page 48" name="Swiftness of Orien" desc="You can draw on the power of your Mark of Passage to temporarily enhance your speed or the speed of your mount." />
+    <feat type="Player's Guide to Eberron page 49" name="Aberrant Dragonmark Gift" desc="Your aberrant dragonmark is especially potent." />
+    <feat type="Player's Guide to Eberron page 49" name="Aberrant Dragonmark Mystery" desc="You can use the power of your aberrant mark to enhance your magical abilities." />
+    <feat type="Player's Guide to Eberron page 49" name="Aberrant Dragonmark Vigor" desc="You can channel the energy of your aberrant mark to enhance your health." />
+    <feat type="Player's Guide to Eberron page 60" name="Ritual of Arcane Opposition" desc="You have been inured against the effects of arcane magic by a ritual of the Ashbound set." />
+    <feat type="Player's Guide to Eberron page 60" name="Ritual of Blight's Embrace" desc="You have been warded from the effects of poison and disease by a ritual of the Children of Winter, solidifying your bond with vermin." />
+    <feat type="Player's Guide to Eberron page 60" name="Ritual of the Timeless Soul" desc="You have been blessed by the faerie lords of Thelanis in a ritual of the Greensinger sect, and you temporarily slip from time's grasp." />
+    <feat type="Player's Guide to Eberron page 60" name="Ritual of the Woodland Bond" desc="You have formed a bond with the growth of the woods through a ritual of the Wardens of the Wood." />
+    <feat type="Player's Guide to Eberron page 75" name="Friends of the Tribes" desc="You are deeply familiar with the tribes of the Talenta Plains." />
+    <feat type="Player's Guide to Eberron page 75" name="Talenta Dinosaur Bond" desc="You have undergone grueling training on the dinosaur back and are skilled in the halfling techniques of fighting while mounted." />
+    <feat type="Player's Guide to Eberron page 75" name="Talenta Drifter" desc="Your extensive travels on the Talenta Plains give you an advantage while in that region." />
+    <feat type="Player's Guide to Eberron page 77" name="Galifaran Scholar" desc="You have made an exhaustive study of the history of Galifar, from the earliest roots of the Five Nations, through the formation of the united Kingdom of Galifar, and on to the Last War and the dissolution of the kingdom." />
+    <feat type="Player's Guide to Eberron page 83" name="Du'ulora Ancestor" desc="The tsucora are the most common of the quori, but they are not the only spirits in Dal Quor." />
+    <feat type="Player's Guide to Eberron page 83" name="Hashalaq Ancestor" desc="The hashalaq quori essence within you allows you to sense the emotions of others." />
+    <feat type="Player's Guide to Eberron page 86" name="Aberration Banemagic" desc="You can cast spells that do extra damage to aberrations." />
+    <feat type="Player's Guide to Eberron page 86" name="Indomitable Discipline" desc="Your strict mental discipline allows you to resist attempts to manipulate your thoughts." />
+    <feat type="Player's Guide to Eberron page 86" name="Unnatural Enemy" desc="You have been trained in the ways of aberrations, and you know how to recognize them and spot their weaknesses." />
+    <feat type="Player's Guide to Eberron page 109" name="Sudden Willow Strike" desc="Your monastic training allows great precision with your quarterstaff." />
+    <feat type="Player's Guide to Eberron page 119" name="Child of the Swamps" desc="You can find food and shelter in the deep swamps, and you can move more freely through the difficult terrain." />
+    <feat type="Player's Guide to Eberron page 122" name="Battlebred" desc="Due to traumatic experiences in past battles, the plane of Shavarath with its endless war seems never far from you." />
+    <feat type="Player's Guide to Eberron page 122" name="Chosen of the Deathless" desc="You carry with you an intimate familiarity with the positive energy that suffuses the City of the Dead." />
+    <feat type="Player's Guide to Eberron page 122" name="Manifest Druid" desc="You have a familiarity with the three manifest zones of the Eldeen Reaches and the powers of the planes to which they are linked." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of the Azure Sky" desc="You have learned to calculate the precise location of Syrania at any given time, and to use that knowledge to enhance spells you cast to grant flight." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of the Battleground" desc="You have learned to calculate the precise location of Shavarath at any given time, and to use that knowledge to enhance spells of battle that you cast." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of Chaos and Order" desc="You have learned to calculate the precise locations of Daanvi and Kythri at any given time, and to use that knowledge to imbue your spells with unusual regularity or strinking unpredictability -- or both." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of Day and Night" desc="You have learned to calculate the precise locations of Irian and Mabar at any given time, and to use that knowledge to enhance your manipulation of positive and negative energy." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of the Dead" desc="You have learned to calculate the precise location of Dolurrh at any given time, and to use that knowledge to capture the souls of creatures slain with your death spells." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of Dreams" desc="By physically exploring the realm of Dal Quor, you have learned to instill your spells with the stuff of dreams . . . and nightmares." />
+    <feat type="Player's Guide to Eberron page 125" name="Mastery of Faerie Enchantment" desc="You have learned to calculate the precise location of Thelanis at any given time, and to use that knowledge to improve your ability to control the minds of other creatures." />
+    <feat type="Player's Guide to Eberron page 126" name="Mastery of Ice and Fire" desc="You have learned to caclulate the precies locations of Fernia and Risia at any given time, and to use that knowledge to enhance cold and fire spells that you use." />
+    <feat type="Player's Guide to Eberron page 126" name="Mastery of Madness" desc="You have learned to reach magically to the ever-distant plane of Xoriat and draw some element of its madness into the world -- but these techniques come with some risk." />
+    <feat type="Player's Guide to Eberron page 126" name="Mastery of the Mists" desc="By learning of the intricate relationship between the Ethereal Plane and the Material Plane, you gain the ability to see and sometimes reach through the barrier between these two planes." />
+    <feat type="Player's Guide to Eberron page 126" name="Mastery of the Silver Void" desc="You have gained a deeper understanding of the Astral Plane and its relationship to the other planes of the cosmos. You can use that knowledge to more quickly access that plane." />
+    <feat type="Player's Guide to Eberron page 126" name="Mastery of Twilight Denizens" desc="You have learned to calculate the precise location of Lamannia at any given time, and to use that knowledge to summon more powerful creatures from that plane." />
+    <feat type="Player's Guide to Eberron page 126" name="Mastery of Twisted Shadow" desc="You gain the ability to reach into the Plane of Shadow when casting an illusion, concealing yourself in the raw shadowstuff drawn forth." />
+    <feat type="Player's Guide to Eberron page 135" name="Shifter Acrobatics" desc="Your heritage makes you agile and light-footed." />
+    <feat type="Player's Guide to Eberron page 135" name="Shifter Magnetism" desc="Your heritage gives you a strong animal presence." />
+    <feat type="Player's Guide to Eberron page 135" name="Shifter Stealth" desc="You can call upon your bestial heritage to increase your stealth." />
+    <feat type="Player's Guide to Eberron page 141" name="Bladebearer of the Valenar" desc="You have trained extensively with scimitars, including the Valenar double scimitar. You are adept at striking from horseback with the curved blades of the Valenar." />
+    <feat type="Player's Guide to Eberron page 141" name="Shield of Blades" desc="As a master of the double scimitar, you can weave a web of steel to protect yourself from attack." />
+    <feat type="Player's Guide to Eberron page 141" name="Spirit of the Stallion" desc="Your patron ancestor was a legendary cavalry soldier, and her spirit guides you and your mount." />
+    <feat type="Player's Guide to Eberron page 141" name="Valenar Trample" desc="You are trained in Valenar cavalry techniques emphasizing trampling your opponents into the ground." />
+    <feat type="Player's Guide to Eberron page 151" name="Shocking Fist" desc="Your slam attack can deal a shock." />
+    <feat type="Player's Guide to Eberron page 151" name="Overload Metabolism" desc="You can heal damage at a cost to your other physical attributes." />
+    <feat type="Power of Faerun page 46" name="Heretic of the Faith" desc="You stray significantly from the teachings of your faith." />
+    <feat type="Power of Faerun page 49" name="Prophet of the Divine" desc="Your communications with the divine manifest in a public fashion." />
+    <feat type="Power of Faerun page 53" name="Bane of Infidels" desc="In a church locked in eternal conflict with followers of another faith, you have learned to fight effectively against the infidels. You know their ways and how to beat them." />
+    <feat type="Power of Faerun page 58" name="Initiate of Amaunator" desc="You have been initiated into the greatest secrets of Amaunator's faith." />
+    <feat type="Power of Faerun page 158" name="Rulership" desc="You are a ruler of an economic, frontier, governmental, military, religious, transport, or other community." />
+    <feat type="Races of the Dragon page 98" name="Accelerate Metamagic" desc="You can apply a selected metamagic feat to your spells more quickly than normal." />
+    <feat type="Races of the Dragon page 98" name="Dragon Breath" desc="You can use your breath weapon as often as a normal dragon." />
+    <feat type="Races of the Dragon page 98" name="Dragon Tail" desc="Your draconic ancestry manifests as a muscular tail you can use in combat." />
+    <feat type="Races of the Dragon page 98" name="Dragon Trainer" desc="Your draconic nature gives you special insight into training dragons and draconic creatures." />
+    <feat type="Races of the Dragon page 100" name="Dragon Wings" desc="Your draconic ancestry manifests as a pair of wings that aid your jumps and allow you to glide." />
+    <feat type="Races of the Dragon page 100" name="Dragonwrought" desc="You were born a dragonwrought kobold, proof of your race's innate connection to dragons." />
+    <feat type="Races of the Dragon page 100" name="Extraordinary Trapsmith" desc="You are an expert at constructing mechanical traps." />
+    <feat type="Races of the Dragon page 100" name="Heavyweight Wings" desc="Your superior strength allows you to fly while heavily burdened." />
+    <feat type="Races of the Dragon page 100" name="Improved Dragon Wings" desc="Your draconic wings now grant you flight." />
+    <feat type="Races of the Dragon page 101" name="Kobold Endurance" desc="Thanks to your race's determination, you are capable of amazing feats of strength and stamina." />
+    <feat type="Races of the Dragon page 101" name="Kobold Foe Strike" desc="You are more effective in combat against your racial enemies." />
+    <feat type="Races of the Dragon page 101" name="Practical Metamagic" desc="You can apply a selected metamagic feat to your spells more easily." />
+    <feat type="Races of the Dragon page 101" name="Reinforced Wings" desc="You have strengthened the muscles of your wings." />
+    <feat type="Races of the Dragon page 101" name="Versatile Spellcaster" desc="You can use two lower-level spell slots to cast a spell one level higher." />
+    <feat type="Races of the Dragon page 101" name="Wyrmgrafter" desc="You can apply draconic grafts to other living creatures or to yourself." />
+    <feat type="Races of the Dragon page 101" name="Entangling Exhalation" desc="You can use your breath weapon to create an entangling mesh of energy." />
+    <feat type="Races of the Dragon page 101" name="Exhaled Barrier" desc="You can use your breath weapon to create a wall of energy." />
+    <feat type="Races of the Dragon page 102" name="Exhaled Immunity" desc="You can use your breath weapon to grant a willing creature immunity to energy." />
+    <feat type="Races of the Dragon page 102" name="Extra Exhalation" desc="You can use your breath weapon one more time per day than normal." />
+    <feat type="Races of the Dragon page 102" name="Furious Inhalation" desc="While raging, you can use your breath weapon to deal energy damage with your bite attacks." />
+    <feat type="Races of the Dragon page 102" name="Draconic Arcane Grace" desc="You can convert some of your arcane spell energy into a saving throw bonus." />
+    <feat type="Races of the Dragon page 102" name="Draconic Breath" desc="You can convert some of your arcane spell energy into a breath weapon." />
+    <feat type="Races of the Dragon page 102" name="Draconic Claw" desc="You develop natural weapons like those of your draconic ancestors." />
+    <feat type="Races of the Dragon page 102" name="Draconic Flight" desc="The secret of draconic flight has been revealed to you, granting you the ability to fly occasionally." />
+    <feat type="Races of the Dragon page 102" name="Draconic Heritage" desc="You have a greater connection with your draconic bloodline than others of your kind." />
+    <feat type="Races of the Dragon page 104" name="Draconic Legacy" desc="You have realized greater arcane power through your draconic heritage." />
+    <feat type="Races of the Dragon page 104" name="Draconic Persuasion" desc="Your arcane talents lend you a great deal of allure." />
+    <feat type="Races of the Dragon page 104" name="Draconic Power" desc="You have greater power when manipulating the energies of your heritage." />
+    <feat type="Races of the Dragon page 104" name="Draconic Presence" desc="When you use your magic, your mere presence can terrify those around you." />
+    <feat type="Races of the Dragon page 105" name="Draconic Resistance" desc="Your bloodline hardens your body against effects related to the nature of your progenitor." />
+    <feat type="Races of the Dragon page 105" name="Draconic Skin" desc="Your skin takes on a sheen, luster, and hardness related to your draconic ancestor." />
+    <feat type="Races of the Dragon page 105" name="Draconic Toughness" desc="Your draconic nature reinforces your body as you embrace your heritage." />
+    <feat type="Races of the Dragon page 105" name="Spell Rehearsal" desc="Casting the same spell several times in a row or at the same target enables you to perfect it." />
+    <feat type="Races of the Dragon page 105" name="Wing Expert" desc="You can use your wings to create a variety of effects." />
+    <feat type="Red Hand of Doom page 126" name="Divine Vigor" desc="You can channel energy to increase your speed and durability." />
+    <feat type="Red Hand of Doom page 126" name="Dragonthrall" desc="You have pledged your life to the service of evil dragonkind." />
+    <feat type="Tome of Magic page 72" name="Bind Vestige" desc="You know how to make pacts with otherworldly spirits called vestiges." />
+    <feat type="Tome of Magic page 73" name="Bind Vestige, Improved" desc="You can bind a wider range of vestiges." />
+    <feat type="Tome of Magic page 73" name="Defense against the Supernatural" desc="Your in-depth knowledge of supernatural forces grants you greater ability to resist their effects." />
+    <feat type="Tome of Magic page 73" name="Empower Supernatural Ability" desc="You can use a supernatural ability with greater effect than normal." />
+    <feat type="Tome of Magic page 73" name="Enlarge Supenatural Ability" desc="You can increase the range of a supernatural attack." />
+    <feat type="Tome of Magic page 73" name="Expel Vestige" desc="You can expel a vestige to which you are bound before the duration of its pact with you has expired." />
+    <feat type="Tome of Magic page 73" name="Extend Supernatural Ability" desc="You can cause a supernatural ability with a duration to last longer than normal." />
+    <feat type="Tome of Magic page 74" name="Favored Vestige" desc="Choose one vestige to which you have access. You establish a close, mystical affinity with that spirit." />
+    <feat type="Tome of Magic page 74" name="Favored Vestige Focus" desc="The supernatural abilities of your favored vestige are more potent than normal." />
+    <feat type="Tome of Magic page 74" name="Ignore Special Requirements" desc="The strange constraints that vestiges place on their summoning are meaningless to you." />
+    <feat type="Tome of Magic page 74" name="Improved Binding" desc="You are so adept at binding vestiges that you can contact powerful ones more easily than other soul binders can." />
+    <feat type="Tome of Magic page 74" name="Practiced Binder" desc="When you bind a vestige, you gain an additional power associated with it." />
+    <feat type="Tome of Magic page 74" name="Rapid Pact Making" desc="Your skill with pact magic lets you bind a vestige extremely quickly, even in the heat of combat." />
+    <feat type="Tome of Magic page 74" name="Rapid Recovery" desc="You can use the abilities of your favored vestige more frequently." />
+    <feat type="Tome of Magic page 74" name="Skilled Pact Making" desc="Your strong will serves you well when making pacts with vestiges." />
+    <feat type="Tome of Magic page 74" name="Sudden Ability Focus" desc="One of your special attacks becomes more potent than usual." />
+    <feat type="Tome of Magic page 75" name="Supernatural Crusader" desc="You are adept at fighting supernatural creatures." />
+    <feat type="Tome of Magic page 75" name="Supernatural Opportunist" desc="You are adept at exploiting a creature's momentary distraction while it activates its supernatural abilities." />
+    <feat type="Tome of Magic page 75" name="Widen Supernatural Ability" desc="You can increase the area of your supernatural abilities." />
+    <feat type="Tome of Magic page 136" name="Empower Mystery" desc="You can cast mysteries to greater effect." />
+    <feat type="Tome of Magic page 136" name="Enlarge Mystery" desc="You can cast mysteries farther than normal." />
+    <feat type="Tome of Magic page 136" name="Extend Mystery" desc="You can cast mysteries that last longer than normal." />
+    <feat type="Tome of Magic page 136" name="Favored Mystery" desc="The mystery you choose becomes easier to cast." />
+    <feat type="Tome of Magic page 136" name="Greater Path Focus" desc="Choose a path of shadow magic to which you have already applied the Path Focus feat. Your mysteries of that path are now even more potent." />
+    <feat type="Tome of Magic page 136" name="Line of Shadow" desc="You can cast a mystery without line of sight or line of effect to the target." />
+    <feat type="Tome of Magic page 136" name="Maximize Mystery" desc="You can cast mysteries to maximum effect." />
+    <feat type="Tome of Magic page 137" name="Nocturnal Caster" desc="You are empowered by darkness, making your abilities stronger at night." />
+    <feat type="Tome of Magic page 137" name="Path Focus" desc="Choose a path of shadow magic, such as Touch of Twilight. Your mysteries of that path are more potent than normal." />
+    <feat type="Tome of Magic page 137" name="Quicken Mystery" desc="You can cast a mystery with a moment's thought." />
+    <feat type="Tome of Magic page 137" name="Reach Mystery" desc="You can cast touch-range mysteries without touching the target." />
+    <feat type="Tome of Magic page 137" name="Shadow Cast" desc="Your shadow shimmers as you cast a spell and you seem to cast your mysteries from elsewhere." />
+    <feat type="Tome of Magic page 138" name="Shadow Familiar" desc="Noctumancers developed this feat in order to gain a mystical companion." />
+    <feat type="Tome of Magic page 138" name="Shadow Reflection" desc="Your shadow flickers and moves in an aggressive, independent manner, enabling you to avoid some attacks of opportunity." />
+    <feat type="Tome of Magic page 138" name="Shadow Vision" desc="Your senses grow so attuned with shadow that you gain a limited ability to see in natural and magical darkness." />
+    <feat type="Tome of Magic page 138" name="Still Mystery" desc="You can cast mysteries without gestures." />
+    <feat type="Tome of Magic page 138" name="Unseen Arrow" desc="Developed by shadowblades, this feat allows a member of that class to apply his unseen weapon abilities to thrown or projectile weapons." />
+    <feat type="Tome of Magic page 228" name="Empower Utterance" desc="Your utterances have more powerful effects." />
+    <feat type="Tome of Magic page 229" name="Enlarge Utterance" desc="You can project the power of an utterance to a greater distance." />
+    <feat type="Tome of Magic page 229" name="Extend Utterance" desc="Your utterances have a more lasting effect on the universe." />
+    <feat type="Tome of Magic page 229" name="Focused Lexicon" desc="Your utterances have greater effect against a certain type of creature." />
+    <feat type="Tome of Magic page 229" name="Minor Utterance of the Evolving Mind" desc="Your mastery of Truespeech has led you to the understanding necessary to perform a simple utterance from the Lexicon of the Evolving Mind." />
+    <feat type="Tome of Magic page 229" name="Obscure Personal Truename" desc="Truenames are notoriously difficult to pronounce, but yours is harder than most." />
+    <feat type="Tome of Magic page 229" name="Personal Truename Backlash" desc="Your personal truename is so charged with magic power that those who fail to speak it properly are warped by reality run amok." />
+    <feat type="Tome of Magic page 229" name="Truename Rebuttal" desc="You are particularly good at negating other truenamers' power with well-chosen truenames." />
+    <feat type="Tome of Magic page 229" name="Truename Research" desc="You have a knack for uncovering the personal truenames of friends and foes alike through study and investigation." />
+    <feat type="Tome of Magic page 229" name="Truename Training" desc="Unlike most of your peers, you have discovered the secret power of truenames." />
+    <feat type="Tome of Magic page 230" name="Utterance of the Evolving Mind" desc="Your further mastery of Truespeech allows you to wield its power more effectively against creatures." />
+    <feat type="Tome of Magic page 230" name="Utterance of the Crafted Tool" desc="As you strive for ever more mastery of Truespeech, you gain more power over the universe around you. You can now use the power of Truespeech to affect objects." />
+    <feat type="Tome of Magic page 230" name="Utterance of the Perfected Map" desc="The power of the Truespeech can alter the state of reality itself. Reaching toward this great power, you have mastered an utterance from the Lexicon of the Perfected Map." />
+    <feat type="Tome of Magic page 230" name="Utterance Focus" desc="You have a particular utterance you favor above others, and your enemies are less able to resist the power of your words." />
+    <feat type="Tome of Magic page 231" name="Quicken Utterance" desc="You can speak an utterance with just a moment's thought." />
+    <feat type="Tome of Magic page 231" name="Recitation of the Fortified State" desc="This recitation allows you to stand unyielding against the blows of your enemies." />
+    <feat type="Tome of Magic page 232" name="Recitation of the Meditative State" desc="This recitation gives you an unparalleled sense of serene calm." />
+    <feat type="Tome of Magic page 232" name="Recitation of Mindful State" desc="This recitation narrows and focuses your perception so you can concentrate on a delicate task at hand." />
+    <feat type="Tome of Magic page 232" name="Recitation of the Sanguine State" desc="This recitation purges all poisons from your body." />
+    <feat type="Tome of Magic page 232" name="Recitation of Vital State" desc="This recitation frees your body of disease and sickness." />
+    <feat type="Complete Psionic page 49" name="Dazzling Energy" desc="Your facility with energy is such that enemies are shaken by your prowess." />
+    <feat type="Complete Psionic page 49" name="Deep Vision" desc="Your mental focus helps you see farther with darkvision" />
+    <feat type="Complete Psionic page 49" name="Dire Flail Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: a dire flail." />
+    <feat type="Complete Psionic page 49" name="Dire Stun" desc="When you choose to stun your foe with your lurk augment ability, your foe might be stunned for a long time." />
+    <feat type="Complete Psionic page 49" name="Don  Mantle" desc="You gain the granted ability of a mantle you have tapped." />
+    <feat type="Complete Psionic page 49" name="Dromite Barrier" desc="You can convert uses of yourenergy ray psi-like ability into walls of energy." />
+    <feat type="Complete Psionic page 49" name="Dromite Ray" desc="You an use yourenergy ray psi-like ability more often." />
+    <feat type="Complete Psionic page 49" name="Duergar Expansion" desc="You can use yourexpansion psi-like ability more often." />
+    <feat type="Complete Psionic page 49" name="Duergar Invisibility" desc="You can use yourinvisibility psi-like ability more often." />
+    <feat type="Complete Psionic page 49" name="Dwarven Urgrosh Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: a dwarven urgrosh." />
+    <feat type="Complete Psionic page 50" name="Ectopic Form" desc="This feat allows you to create astral constructs with distinct appearances and specialties." />
+    <feat type="Complete Psionic page 52" name="Elan Repletion" desc="As an elan, you can sustain yourself with repletion longer than other members of your race." />
+    <feat type="Complete Psionic page 52" name="Elan Resilience" desc="As an elan, you can prevent greater amounts of damage than other members of your race." />
+    <feat type="Complete Psionic page 52" name="Elan Resistance, Enhanced" desc="As an elan, you can resist harmful effects more readily than other members of your race." />
+    <feat type="Complete Psionic page 52" name="Elan Retainment" desc="You can use your psionic metabolism to aid your ability to retain your psionic focus when you would otherwise expend it." />
+    <feat type="Complete Psionic page 52" name="Elemental Envoy" desc="This feat allows you to acquire an elemental steward." />
+    <feat type="Complete Psionic page 53" name="Energize Armor" desc="You can charge your armor with psionic energy, making it resistant to energy damage." />
+    <feat type="Complete Psionic page 53" name="Enervation Endurance" desc="When facing the aftermath of a wild surge, enervation doesn't sap your power points." />
+    <feat type="Complete Psionic page 53" name="Enhanced Beneficence" desc="Your psychic aura is larger than normal, reflecting your devotion to your deity." />
+    <feat type="Complete Psionic page 53" name="Envoy Cognizance" desc="When your elemental envoy is nearby, its associated energy enhances your ability to manifest energy powers." />
+    <feat type="Complete Psionic page 53" name="Euphoric Reduction" desc="Channel your euphoric surge into a boost for one of your skills." />
+    <feat type="Complete Psionic page 54" name="Extra Aura" desc="You gain the aura ability of a mantle you have donned." />
+    <feat type="Complete Psionic page 54" name="Focused Perception" desc="When you concentrate your faculties, your power of sight pierces the darkness." />
+    <feat type="Complete Psionic page 54" name="Focused Shield" desc="Your mental focus makes you more adept at using your shield." />
+    <feat type="Complete Psionic page 54" name="Focused Skill User" desc="You can take advantage of your psionic focus in new ways." />
+    <feat type="Complete Psionic page 54" name="Gestalt Anchor" desc="You have a strong bond to the psionic entity you host." />
+    <feat type="Complete Psionic page 54" name="Githyanki Charm" desc="You can leverage yourpsionic daze psi-like ability to gain greater control over subjects." />
+    <feat type="Complete Psionic page 54" name="Githyanki Control" desc="You can leverage yourfar hand psi-like ability to gain greater control over objects." />
+    <feat type="Complete Psionic page 54" name="Githyanki Dismissal" desc="You can leverage yourdimension door psi-like ability to gain greater control over other creatures' locations." />
+    <feat type="Complete Psionic page 54" name="Githyanki Ectoform" desc="You can leverage yourconcealing amorpha psi-like ability to gain greater control over your own body." />
+    <feat type="Complete Psionic page 54" name="Githzerai Burst" desc="You can leverage yourcat fall psi-like ability to gain greater control over yourself in your environment." />
+    <feat type="Complete Psionic page 54" name="Githzerai Feedback" desc="You can leverage yourinertial armor psi-like ability to further insulate yourself from harm." />
+    <feat type="Complete Psionic page 54" name="Githzerai Knock" desc="You can leverage yourconcussion blast psi-like ability to gain such fine control over manipulating force that you can open locks or sealed doors." />
+    <feat type="Complete Psionic page 55" name="Githzerai Link" desc="You can leverage yourpsionic daze psi-like ability to forge direct mental contact with another creature." />
+    <feat type="Complete Psionic page 55" name="Half-Giant Stomp" desc="You can use yourstomp psi-like ability more often." />
+    <feat type="Complete Psionic page 55" name="Half-Giant Thunderer" desc="You can use yourstomp psi-like ability to far greater effect." />
+    <feat type="Complete Psionic page 55" name="Instinctive Consummator" desc="You always make good on your threats." />
+    <feat type="Complete Psionic page 55" name="Invest Armor" desc="You can charge your armor with additional protective qualities." />
+    <feat type="Complete Psionic page 55" name="Lurk Augment, Extra" desc="You can use your lurk augment more often than normal." />
+    <feat type="Complete Psionic page 55" name="Lurk Augment, Ranged" desc="You can use some of your lurk augments in conjunction with a ranged attack." />
+    <feat type="Complete Psionic page 55" name="Lurk Master" desc="You are more skilled in augmenting your attack than your training would indicate." />
+    <feat type="Complete Psionic page 55" name="Maenad Fury" desc="You can use your outburst racial trait more often." />
+    <feat type="Complete Psionic page 55" name="Maenad Scream" desc="You can use yourenergy ray (sonic) psi-like ability more often." />
+    <feat type="Complete Psionic page 55" name="Maenad Deafening Scream" desc="You can use yourenergy ray (sonic) psi-like ability to better effect." />
+    <feat type="Complete Psionic page 55" name="Mantle Focus" desc="The powers from one of your mantles become more potent." />
+    <feat type="Complete Psionic page 56" name="Mental Juggernaut" desc="You are adroit at avoiding the mind blasting effects of certain psionic abilities and powers." />
+    <feat type="Complete Psionic page 56" name="Mind Cleave" desc="When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade." />
+    <feat type="Complete Psionic page 56" name="Mind Empowerment" desc="When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade." />
+    <feat type="Complete Psionic page 56" name="Mind Strike" desc="When you use your psychic strike ability, you deal more damage." />
+    <feat type="Complete Psionic page 57" name="Mind Strike, Swift" desc="You possess a deadly speed when charging your mind blade with psychic energy." />
+    <feat type="Complete Psionic page 57" name="Orc Double Axe Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: an orc double axe." />
+    <feat type="Complete Psionic page 57" name="Postpone Enervation" desc="You can postpone the onset of your psychic enervation." />
+    <feat type="Complete Psionic page 57" name="Practiced Manifester" desc="Choose a manifesting class that you possess. The powers you manifest from that class are more powerful." />
+    <feat type="Complete Psionic page 57" name="Privileged Energy" desc="You favor one specific energy type over all others." />
+    <feat type="Complete Psionic page 57" name="Psymbiot" desc="You gain benefits when you are near other psionic characters or creatures." />
+    <feat type="Complete Psionic page 57" name="Skin of the Construct" desc="You can wear an astral construct as if it were a second skin." />
+    <feat type="Complete Psionic page 57" name="Stygian Archon" desc="You sear the synapses of your mind with a scar of void and emptiness." />
+    <feat type="Complete Psionic page 58" name="Synad Multitask, Enhanced" desc="As a synad, your threefold mind grants you an additional opportunity to multitask." />
+    <feat type="Complete Psionic page 58" name="Tap Mantle" desc="You gain the ability to access the powers in a new mantle." />
+    <feat type="Complete Psionic page 58" name="Thri-Kreen Carapace" desc="Your carapace is harder than average." />
+    <feat type="Complete Psionic page 58" name="Thri-Kreen Claw" desc="You can use yourmetaphysical claw psi-like ability more often." />
+    <feat type="Complete Psionic page 58" name="Thri-Kreen Displacement" desc="You can use yourpsionic displacement psi-like ability more often." />
+    <feat type="Complete Psionic page 58" name="Thri-Kreen Poison" desc="You can use your poison bite more often." />
+    <feat type="Complete Psionic page 58" name="Two-Bladed Mind Blade" desc="When you reshape your mind blade, you can change it into an exotic weapon: a two-bladed sword." />
+    <feat type="Complete Psionic page 58" name="Volatile Escalation" desc="When you are attacked with a telepathic power, your innate wildness forces a higher mental price on your attacker." />
+    <feat type="Complete Psionic page 58" name="Volatile Leech" desc="You gain the power points your attacker wastes attacking you with a telepathic power." />
+    <feat type="Complete Psionic page 59" name="Xeph Burst, Extra" desc="You can use your burst racial trait more often." />
+    <feat type="Complete Psionic page 59" name="Xeph Celerity" desc="You can use your burst racial trait to gain an extra attack." />
+    <feat type="Complete Psionic page 59" name="Dorje Mastery" desc="Psionic dorjes are more potent in your hands." />
+    <feat type="Complete Psionic page 59" name="Dual Dorje" desc="You can fight with two dorjes at the same time." />
+    <feat type="Complete Psionic page 59" name="Hostile Mind, Improved" desc="You have mental defenses erected  against telepathic attacks." />
+    <feat type="Complete Psionic page 59" name="Psionic Mastery" desc="You are quick and certain in your efforts to defeat the psionic defenses and powers of others." />
+    <feat type="Complete Psionic page 60" name="Aggressive Mind" desc="The psionic entity you host gives you access to psi-like abilities capable of disrupting the mind of your enemy." />
+    <feat type="Complete Psionic page 60" name="Antagonist" desc="The psionic entity you host seeks to cause damage and mayhem, and you have powers to further that end." />
+    <feat type="Complete Psionic page 60" name="Defensive Shell" desc="The psionic entity living in your mind enables you to better resist attacks." />
+    <feat type="Complete Psionic page 60" name="Host Focus" desc="You can use a psi-like ability granted by a host feat an extra time each day." />
+    <feat type="Complete Psionic page 60" name="Pacifist" desc="You host a psionic entity that dislikes combat and provides you psi-like abilities to help you avoid a fight." />
+    <feat type="Complete Psionic page 60" name="Spiritual Force" desc="Your mind blade is an expression of your inner spirit." />
+    <feat type="Complete Psionic page 60" name="Strength of Two" desc="As the host of a formless psionic entity, you possess immense willpower." />
+    <feat type="Complete Psionic page 60" name="Telepathic Affinity" desc="The entity you host gives you the ability to better communicate with other creatures." />
+    <feat type="Complete Psionic page 61" name="Illithid Blast" desc="You can convert your pisonic energy into amind blast." />
+    <feat type="Complete Psionic page 61" name="Illithid Compulsion" desc="You can call upon your heritage and enhance your ability to manipulate the minds of other creatures." />
+    <feat type="Complete Psionic page 61" name="Illithid Enthusiast" desc="When you manipulate the minds of other creatures, you are heartened and emboldened by your success." />
+    <feat type="Complete Psionic page 61" name="Illithid Extraction" desc="Your acceptance of your illithid heritage is so encompassing that you have learned how to extract the brain of a helpless victim." />
+    <feat type="Complete Psionic page 61" name="Illithid Grapple" desc="You embrace more of your illithid heritage, and grow at least one long purplish tentacle that you can reveal and unfurl when you open your mouth." />
+    <feat type="Complete Psionic page 62" name="Illithid Heritage" desc="Somewhere in the deeps of time, your bloodline was polluted with illithid influence." />
+    <feat type="Complete Psionic page 62" name="Illithid Legacy" desc="You have realized greater psionic power through your illithid heritage." />
+    <feat type="Complete Psionic page 62" name="Illithid Legacy, Greater" desc="Your knowledge of psionic power has grown even further due to your illithid heritage." />
+    <feat type="Complete Psionic page 62" name="Illithid Skin" desc="Your skin takes on the glistening, rubbery, green-mauve consistency of your illithid parentage." />
+    <feat type="Complete Psionic page 62" name="Knockdown Power" desc="You can manifest powers that knock creatures off their feet." />
+    <feat type="Complete Psionic page 62" name="Linked Power" desc="You can link a power to the power you manifest in this round so that it goes off next round." />
+    <feat type="Complete Psionic page 63" name="Metapower" desc="You can permanently modify a psionic power you know with a metapsionic feat." />
+    <feat type="Complete Psionic page 63" name="Paraelemental Power" desc="When using a power that allows you to choose a type of energy, you have a wider range of possible choices owing to your ability to mix energy with matter." />
+    <feat type="Complete Psionic page 63" name="Phrenic Leech" desc="Psionic foes damaged by your power are also mentally drained." />
+    <feat type="Complete Psionic page 64" name="Stygian Power" desc="Psionic powers you manifest that utilize negative energy are branded with an imprint of fear." />
+    <feat type="Complete Psionic page 64" name="Transdimensional Power" desc="You can manifest powers that affect targets lurking in coexistent planes and extradimensional spaces whose entrances fall within the power's area." />
+    <feat type="Player's Handbook II page 71" name="Acrobatic Strike" desc="Your dexterous maneuvers and skilled acrobatics allow you to slip past a foe's defenses and deliver an accurate strike against him." />
+    <feat type="Player's Handbook II page 71" name="Active Shield Defense" desc="Your expert use of your shield allows you to strike at vulnerable foes even when you forgo your own attacks in favor of defense." />
+    <feat type="Player's Handbook II page 71" name="Adaptable Flanker" desc="When you and an ally team up against a foe, you know how to maximize the threat your ally poses to ruin your target's defenses." />
+    <feat type="Player's Handbook II page 74" name="Agile Shield Fighter" desc="You are skilled in combining your shield bash attack with an armed strike. When you use your shield in unison with a weapon, your training allows you to score telling blows with both." />
+    <feat type="Player's Handbook II page 74" name="Arcane Accompaniment" desc="You infuse your performance with magical energy, allowing its effects to continue even as you attend to other tasks." />
+    <feat type="Player's Handbook II page 74" name="Arcane Consumption" desc="You can sacrifice your physical health to strengthen a spell. This process leaves you wracked with pain, but the enhanced energy you draw from the spell might provide the margin between victory and defeat." />
+    <feat type="Player's Handbook II page 74" name="Arcane Flourish" desc="You use your magical abilities to improve your performance talents." />
+    <feat type="Player's Handbook II page 74" name="Arcane Thesis" desc="You have studied a single spell in-depth." />
+    <feat type="Player's Handbook II page 75" name="Arcane Toughness" desc="You draw upon the power of your magic to sustain yourself, allowing you to continue fighting long after your physical body has failed you." />
+    <feat type="Player's Handbook II page 75" name="Armor Specialization" desc="Through long wear and hours of combat, you have trained your body to believe in its armor." />
+    <feat type="Player's Handbook II page 75" name="Battle Dancer" desc="You strike at your foes in time with the music you sing or in cadence with an oration you deliver." />
+    <feat type="Player's Handbook II page 75" name="Bonded Familiar" desc="You enjoy a stronger than normal magical bond with your familiar, granting you access to two special abilities." />
+    <feat type="Player's Handbook II page 75" name="Bounding Assault" desc="You can move and attack with superior speed and power." />
+    <feat type="Player's Handbook II page 76" name="Brutal Strike" desc="You can batter foes senseless with your mace, morningstar, quarterstaff, or flail." />
+    <feat type="Player's Handbook II page 76" name="Combat Acrobat" desc="Your acrobatics and agility in combat allow you to maneuver across the battlefield with ease." />
+    <feat type="Player's Handbook II page 76" name="Combat Familiar" desc="Your familiar is skilled in delivering attack spells againstyour foes." />
+    <feat type="Player's Handbook II page 77" name="Combat Tactician" desc="You excel at approaching an opponent from an unexpected direction to deliver deadly attacks." />
+    <feat type="Player's Handbook II page 77" name="Cometary Collision" desc="You are a thunderbolt of destruction on the battlefield." />
+    <feat type="Player's Handbook II page 77" name="Companion Spellbond" desc="You form a special magical link with your animal companion, allowing you to share spells with it over a greater distance." />
+    <feat type="Player's Handbook II page 77" name="Crossbow Sniper" desc="You are skilled in lining up accurate, deadly shots with your crossbow." />
+    <feat type="Player's Handbook II page 78" name="Crushing Strike" desc="You wield a bludgeoning weapon with superior power, allowing you to batter aside an opponent's defenses." />
+    <feat type="Player's Handbook II page 78" name="Cunning Evasion" desc="When an area attack detonates around you, you use the chaos and flash of energy to duck out of sight." />
+    <feat type="Player's Handbook II page 78" name="Dampen Spell" desc="From the lowliest prestidigitator to the most august hierophant, spellcasters both arcane and divine recognize the power of counterspelling." />
+    <feat type="Player's Handbook II page 78" name="Deadeye Shot" desc="You carefully line up a ranged attack, timing it precisely so that you hit your opponent when his guard is down." />
+    <feat type="Player's Handbook II page 78" name="Defensive Sweep" desc="You sweep your weapon through the area you threaten, warding away opponents and forcing them to move away or suffer a fearsome blow." />
+    <feat type="Player's Handbook II page 78" name="Driving Attack" desc="When you strike an opponent with a piercing weapon, the brutal impact of your strike sends him sprawling." />
+    <feat type="Player's Handbook II page 78" name="Elven Spell Lore" desc="You have studied the mighty arcane traditions of the elven, granting you insight into the intricate workings of magic and the theoretical structures behind spells." />
+    <feat type="Player's Handbook II page 79" name="Fade into Violence" desc="While the chaos of battle swirls around you, you rely on your ability to slip into the background to avoid your enemy's notice." />
+    <feat type="Player's Handbook II page 79" name="Fiery Fist" desc="By channeling your kienergy, you sheathe your limbs in magical fire." />
+    <feat type="Player's Handbook II page 79" name="Fiery KiDefense" desc="You channel your kienergy into a cloak of flame that injures any who attempt to strike you." />
+    <feat type="Player's Handbook II page 79" name="Flay" desc="When fighting unarmored opponents, you excel at twisting your weapon just before impact." />
+    <feat type="Player's Handbook II page 79" name="Grenadier" desc="You are skilled in using grenadelike weapons." />
+    <feat type="Player's Handbook II page 79" name="Hindering Opportunist" desc="When you have a chance to strike a distracted foe, you instead use that opportunity to aid or protect an ally against him." />
+    <feat type="Player's Handbook II page 79" name="Intimidating Strike" desc="You make a display of your combat prowess designed to strike terror in your foe." />
+    <feat type="Player's Handbook II page 80" name="Indomitable Soul" desc="Your physical toughness translates into greater mental resiliency." />
+    <feat type="Player's Handbook II page 80" name="Keen-Eared Scout" desc="Your sharp sense of hearing allows you to determine much more about your surroundings." />
+    <feat type="Player's Handbook II page 80" name="KiBlast" desc="You focus your kiinto a ball of energy that you can hurl at an opponent." />
+    <feat type="Player's Handbook II page 80" name="Leap of the Heavens" desc="Your excellent athletic ability and superior conditioning allow you to make near-superhuman leaps." />
+    <feat type="Player's Handbook II page 80" name="Lunging Strike" desc="You make a single attack against a foe who stands just beyond your reach." />
+    <feat type="Player's Handbook II page 80" name="Lurking Familiar" desc="Your familiar hides within the folds of your robe or takes cover behind you as your opponents close in." />
+    <feat type="Player's Handbook II page 80" name="Mad Foam Rager" desc="You fight with the rage that only a rabid badger or a beer-addled dwarf can bring to bear." />
+    <feat type="Player's Handbook II page 80" name="Master Manipulator" desc="Your words are your weapons." />
+    <feat type="Player's Handbook II page 81" name="Melee Evasion" desc="Your speed, agility, and talent for intelligent fighting allow you to avoid your opponent's blows." />
+    <feat type="Player's Handbook II page 81" name="Melee Weapon Mastery" desc="You have mastered a wide range of weapons." />
+    <feat type="Player's Handbook II page 81" name="Overwhelming Assault" desc="If you attack a foe who does nothing to turn aside your attack, you press forward with an indomitable strike." />
+    <feat type="Player's Handbook II page 81" name="Penetrating Shot" desc="You send a powerful shot cleaving through your enemies." />
+    <feat type="Player's Handbook II page 82" name="Ranged Weapon Mastery" desc="You have mastered a wide range of weapons." />
+    <feat type="Player's Handbook II page 82" name="Rapid Blitz" desc="You charge across the battlefield, combining your speed and fighting ability to move and attack with unmatched skill." />
+    <feat type="Player's Handbook II page 82" name="Robilar's Gambit" desc="By offering Robilar's Gambit, you absorb damage to place yourself in an advantageous position." />
+    <feat type="Player's Handbook II page 82" name="Shield Sling" desc="You can hurl your shield as a deadly missile, turning it from a defensive item to a crushing, thrown weapon." />
+    <feat type="Player's Handbook II page 82" name="Shield Specialization" desc="You are skilled in using a shield, allowing you to gain greater defensive benefits from it." />
+    <feat type="Player's Handbook II page 82" name="Shield Ward" desc="You use your shield like a wall of steel and wood." />
+    <feat type="Player's Handbook II page 82" name="Short Haft" desc="You have trained in polearm fighting alongside your comrades in arms, sometimes reaching past them while they shield you, and sometimes shielding them while they attack from behind you." />
+    <feat type="Player's Handbook II page 82" name="Slashing Flurry" desc="You swing your weapon with uncanny speed, slicing apart a foe in the blink of an eye." />
+    <feat type="Player's Handbook II page 83" name="Spectral Skirmisher" desc="You have trained extensively in the use of magic that renders you invisible." />
+    <feat type="Player's Handbook II page 83" name="Spell-Linked Familiar" desc="You and your familiar can share spell energy, allowing your familir to cast a limited number of spells each day." />
+    <feat type="Player's Handbook II page 83" name="Stalwart Defense" desc="You excel at aiding your allies in battle. When an opponent attempts to strike one of them, you make a quick, distracting motion to ruin the foe's efforts." />
+    <feat type="Player's Handbook II page 83" name="Steadfast Determination" desc="Your physical durability allows you to shrug off attacks that would cripple a lesser person." />
+    <feat type="Player's Handbook II page 83" name="Telling Blow" desc="When you strike an opponent's vital areas, you draw on your ability to land crippling blows to make the most of your attack." />
+    <feat type="Player's Handbook II page 83" name="Trophy Collector" desc="A belt of minotaur fur, a hood of cloaker wing-skin, and an amulet fashioned from a petrified dragon's eye -- these are the intimidating symbols of your trade." />
+    <feat type="Player's Handbook II page 84" name="Tumbling Feint" desc="When you move near an opponent, your acrobatic maneuvers leave him confused and unable to properly defend himself." />
+    <feat type="Player's Handbook II page 84" name="Two-Weapon Pounce" desc="When you charge an opponent while wielding two weapons, you can make two quick attacks." />
+    <feat type="Player's Handbook II page 84" name="Two-Weapon Rend" desc="You wield two weapons with an artisan's precision." />
+    <feat type="Player's Handbook II page 85" name="Vatic Gaze" desc="Your arcane studies have brought forth your nascent talent to sense magical auras and the power that others are capable of wielding." />
+    <feat type="Player's Handbook II page 85" name="Versatile Unarmed Strike" desc="You employ a variety of unarmed fighting styles, allowing you to alter the type of damage your attacks deal." />
+    <feat type="Player's Handbook II page 85" name="Vexing Flanker" desc="You excel at picking apart an opponent's defenses when your allies also threaten them." />
+    <feat type="Player's Handbook II page 85" name="Wanderer's Diplomacy" desc="Many halflings journey far and wide across the world, spending no more than a few months in one place." />
+    <feat type="Player's Handbook II page 85" name="Water Splitting Stone" desc="You channel your kienergy to splinter the defenses of creatures whose tough hides or magical natures normally allow them to shrug off your blows." />
+    <feat type="Player's Handbook II page 85" name="Weapon Supremacy" desc="You are a grandmaster in the use of your chosen weapon." />
+    <feat type="Player's Handbook II page 86" name="Ritual Blessing" desc="You call upon the powers of goodness and light to bless your allies." />
+    <feat type="Player's Handbook II page 86" name="Ritual Blood Bonds" desc="You invest your allies with the mighty power of your toten, god, or similar divine entity." />
+    <feat type="Player's Handbook II page 86" name="Combat Awareness" desc="When you maintain your combat focus, you have an uncanny ability to sense the ebb and flow of your opponents' vitality." />
+    <feat type="Player's Handbook II page 87" name="Combat Defense" desc="The state of keen focus and mental discipline you attain in combat allows you to shift the focus of yoru defense from one opponent to another with careful, precise maneuvers." />
+    <feat type="Player's Handbook II page 87" name="Combat Focus" desc="The way of the warrior requires more than simple, brute strength." />
+    <feat type="Player's Handbook II page 87" name="Combat Stability" desc="When you maintain your combat focus, you become difficult to dislodge." />
+    <feat type="Player's Handbook II page 87" name="Combat Strike" desc="Your intense, focused state allows you to see the one critical moment in a battle when you hang suspended between victory and defeat." />
+    <feat type="Player's Handbook II page 88" name="Combat Vigor" desc="When you maintain your combat focus, your clarity of purpose and relentless drive allow you to overcome your body's frailties." />
+    <feat type="Player's Handbook II page 88" name="Divine Armor" desc="You call upon your deity to protect you in your hour of need by wreathing you in divine power that wards off your enemies' attacks." />
+    <feat type="Player's Handbook II page 88" name="Divine Fortune" desc="With a quick prayer, you channel divine energy to help resist a spell, poison, or other deadly effect." />
+    <feat type="Player's Handbook II page 88" name="Divine Justice" desc="You can channel divine energy to turn your foe's strength against him, striking him with the same force that he used against you." />
+    <feat type="Player's Handbook II page 88" name="Divine Ward" desc="You create a channel of divine energy between yourself and a willing ally." />
+    <feat type="Player's Handbook II page 89" name="Profane Aura" desc="You call upon the dark powers you worship to fill the area around you with a dreadful mist that obscures sight." />
+    <feat type="Player's Handbook II page 89" name="Sacred Healing" desc="You can channel divine energy to aid in your efforts to tend to a comrade's injuries, sickness, or other conditions." />
+    <feat type="Player's Handbook II page 89" name="Sacred Purification" desc="You serve as a conduit of divine energy, filling the area around you with power that aids the living and saps the undead." />
+    <feat type="Player's Handbook II page 89" name="Sacred Radiance" desc="You channel divine energy to fill the area around you with a soothing, gentle radiance." />
+    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Aura" desc="The power of your sorcerous heritage shines through, allowing you to infuse the area around you with a menacing aura." />
+    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Heritage" desc="Your ancestry manifests in the form of several special abilities." />
+    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Lance" desc="You can channel your arcane energy into a bolt of power that is baneful to evil creatures." />
+    <feat type="Player's Handbook II page 90" name="Celestial Sorcerer Lore" desc="The power of your ancestry grants you access to a variety of new spells." />
+    <feat type="Player's Handbook II page 91" name="Celestial Sorcerer Wings" desc="You channel your inborn magical abilities to spawn a pair of spectral, magical wings that glow with majestic power." />
+    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Eyes" desc="Your eyes glow with infernal fire, allowing you to see through magical darkness." />
+    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Heritage" desc="Your innate magic derives from infernal ancestors." />
+    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Howl" desc="You channel the fury of your infernal ancesters into a thunderous roar that blasts your enemies with sonic power." />
+    <feat type="Player's Handbook II page 91" name="Infernal Sorcerer Resistance" desc="You are as tough and resilient as an infernal monstrosity, allowing you to shrug off acid and cold damage." />
+    <feat type="Player's Handbook II page 91" name="Blistering Spell" desc="Your fire spells sear the flesh from your enemies' bones, leaving them wracked with pain." />
+    <feat type="Player's Handbook II page 91" name="Earthbound Spell" desc="You bind a spell into the rock and soil, leaving it there until an opponent stumbles across it." />
+    <feat type="Player's Handbook II page 91" name="Flash Frost Spell" desc="Your spells that use cold and ice to damage your foes leave behind a thin layer of slippery frost." />
+    <feat type="Player's Handbook II page 92" name="Imbued Summoning" desc="Your summoning spells gain an element of surprise." />
+    <feat type="Player's Handbook II page 92" name="Smiting Spell" desc="You can channel the energy of a touch spell into a weapon, causing the spell to discharge when you strike an opponent." />
+    <feat type="Player's Handbook II page 92" name="Blood-Spiked Charger" desc="You throw yourself into the fray, using your spiked armor and spiked shield to tear your opponents to pieces." />
+    <feat type="Player's Handbook II page 93" name="Combat Cloak Expert" desc="You are adept at turning your cloak into a vital part of your combat repertoire." />
+    <feat type="Player's Handbook II page 93" name="Combat Panache" desc="Your glowing personality and sharp performance abilities allow you to navigate the battlefield on sheer chutzpah alone." />
+    <feat type="Player's Handbook II page 94" name="Einhander" desc="You excel at wielding a one-handed weapon while carrying nothing in your off hand." />
+    <feat type="Player's Handbook II page 94" name="Mad Alchemist" desc="You are an expert at using alchemical items." />
+    <feat type="Player's Handbook II page 94" name="Shadow Striker" desc="You melt into the shadows, hiding from your enemies until the time is right." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 83" name="Abyss-Bound Soul [Vile]" desc="You have pledged your immortal soul to a particular demon lord in return for a gift that aids your evil works in life." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 83" name="Blood War Conscript [Vile]" desc="Your evil brand indicates your rank in the armies of the Blood War and infuses you with fury." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 84" name="Chaotic Spell Recall [Abyssal Heritor]" desc="A few choice spells never stray far from your mind." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 84" name="Claws of the Beast [Abyssal Heritor]" desc="Your hands are twisted like claws. This deformity allows you to deal more damage than usual with your unarmed strikes and sneak attacks." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Cloak of the Obyrith [Abyssal Heritor]" desc="The chaos of the Abyss suffuses your being, as it does the ancient obyriths." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Dark Speech [Vile]" desc="You learn a smattering of the language of truly dark power." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demonic Conduit [Vile]" desc="Your evil brand incorporates blasphemous runes and sigils that augment magical attacks you make against lawful and/or good targets." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demonic Skin [Abyssal Heritor]" desc="Your skin has rough, scaly patches that enhance your natural armor." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demonic Sneak Attack [Abyssal Heritor]" desc="You know exactly how to twist the blade to get the most out of your sneak attacks." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Demon Mastery" desc="You are particularly skilled at summoning demons and convincing them to serve you." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 85" name="Evil Brand [Vile]" desc="You are physically marked forever as the servant of an evil power greater than yourself -- in this case, a demon lord. The symbols is unquestionable in its perversity, depicting a depravity so unthinkable that all who see it know beyond a doubt that you serve the lords of the Abyss." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Extract Demonic Essence" desc="You can draw upon the living essence of a willing or captured demon to fuel the creation of items or the casting of potent spells." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Eyes of the Abyss [Abyssal Heritor]" desc="Your eyes glow with an inner fire of some unusual color. This glow increases your perception and allows you to see in the dark." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Heart of the Nabassu" desc="Your ancestry traces back to a place where the Abyss meets the Negative Energy Plane." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Keeper of Forbidden Lore [Abyssal Heritor]" desc="A shred of demonic racial memory grants you knowledge of numerous ancient magical secrets." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 86" name="Ordered Chaos" desc="You are an unusually lawful Abyssal heritor." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Otherworldly Countenance [Abyssal Heritor]" desc="You are either stunningly beautiful or wretchedly hideous. Either way, your appearance can be terribly unsettling to others upon whom you focus your attentions." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Poison Healer" desc="Poison isn't always bad for you." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Poison Talons [Abyssal Heritor]" desc="Your claws drip with poison." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Precognitive Visions [Abyssal Heritor]" desc="You periodically experience visions from the near future." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Primordial Scion [Abyssal Heritor]" desc="The Abyss beckons. . . ." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Thrall to Demon [Vile]" desc="You formally become a supplicant to a demon lord. In return for your obedience, you gain a small measure of that demon lord's power." />
+    <feat type="Fiendish Codex I: Hordes of the Abyss page 87" name="Vestigial Wings [Abyssal Heritor]" desc="A pair of vestigial wings sprouts from your shoulders." />
+    <feat type="Monster Manual IV page 202" name="Ability Focus" desc="A particular special ability of a creature with this feat is more potent than normal." />
+    <feat type="Monster Manual IV page 202" name="Awesome Blow" desc="A creature with this feat can choose to deliver blows that send its smaller opponents flying like bowling pins." />
+    <feat type="Monster Manual IV page 202" name="Clinging Breath" desc="This feat enables a creature's breath weapon to cling to creatures and continue to affect them after it has breathed." />
+    <feat type="Monster Manual IV page 202" name="Craft Construct [Item Creation]" desc="A creature with this feat can create golems and other magic automatons that obey its orders." />
+    <feat type="Monster Manual IV page 202" name="Flyby Attack" desc="A creature with this feat can attack on the wing." />
+    <feat type="Monster Manual IV page 202" name="Githyanki Battlecaster" desc="A creature with this feat ignores arcane spell failure chances when wearing light armor." />
+    <feat type="Monster Manual IV page 202" name="Githyanki Dragonrider [Racial]" desc="A creature with this feat has a knack for getting along with red dragons." />
+    <feat type="Monster Manual IV page 203" name="Improved Natural Attack" desc="The natural attacks of a creature with this feat are more dangerous than its size and type would otherwise dictate." />
+    <feat type="Monster Manual IV page 203" name="Improved Toughness" desc="A creature with this feat is significantly tougher than normal." />
+    <feat type="Monster Manual IV page 203" name="Lingering Breath" desc="The breath weapon of a creature with this feat forms a lingering cloud." />
+    <feat type="Monster Manual IV page 203" name="Multiattack" desc="A creature with this feat is adept at using all its natural weapons at once." />
+    <feat type="Monster Manual IV page 203" name="Powerful Charge" desc="A creature with this feat can charge with extra force." />
+    <feat type="Monster Manual IV page 203" name="Quicken Spell-Like Ability" desc="A creature with this feat can employ a spell-like ability with a moment's thought." />
+    <feat type="Secrets of Xen'drik page 134" name="Blessed of Vulkoor [Racial]" desc="A scorpion-shaped birthmark denotes you as one of the chosen of Vulkoor." />
+    <feat type="Secrets of Xen'drik page 134" name="Drow Scorpion Warrior [Racial, Tactical]" desc="Your study of the ways of the scorpion grants you special tactics." />
+    <feat type="Secrets of Xen'drik page 134" name="Drow Skirmisher [Racial]" desc="Your experience with the guerrilla-style combat of the deep jungle grants you mastery of the weapons of the drow." />
+    <feat type="Secrets of Xen'drik page 134" name="Earthquake Stomp" desc="Your thunderous steps allow you to knock smaller enemies off their feet." />
+    <feat type="Secrets of Xen'drik page 134" name="Echoing Spell [Metamagic]" desc="Your spells return after you cast them, although with lessened effects." />
+    <feat type="Secrets of Xen'drik page 135" name="Elder Giant Magic" desc="You have learned a technique developed by ancient giant spellcasters, allowing you to channel additional power in your spells." />
+    <feat type="Secrets of Xen'drik page 135" name="Giant Banemagic" desc="You can cast spells that deal additional damage to giants." />
+    <feat type="Secrets of Xen'drik page 135" name="Jungle Veteran" desc="You have a knack for surviving in harsh environments and avoiding the deadly ambushes of natives." />
+    <feat type="Secrets of Xen'drik page 135" name="Mysterious Magic" desc="Your study of unconventional magic gives your spells an odd appearance and makes them difficult to identify." />
+    <feat type="Secrets of Xen'drik page 135" name="Rending Claws" desc="Your expertise with scorpion claw gauntlets allows you to tear apart your opponents with deadly precision." />
+    <feat type="Dragons of Faerun page 47" name="Breath of Unlife [Metabreath]" desc="Your breath weapon contains the chill of undeath." />
+    <feat type="Dragons of Faerun page 50" name="Transdimensional Breath [Psionic]" desc="Your breath weapon affects bordering planes." />
+    <feat type="Dragons of Faerun page 57" name="Follower of the Scaly Way" desc="You are an adherent of Sammaster's teachings." />
+    <feat type="Dragons of Faerun page 92" name="Servant of a Dragon Ascendant" desc="You formally supplicate yourself to an immortal dragon quasi-deity." />
+    <feat type="Dragons of Faerun page 92" name="Initiate of Tchazzar" desc="You have been initiated into the greatest mysteries of Tchazzar's church." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 28" name="Adaptive Style" desc="With just a short period of meditation, you can change your maneuvers and tactics to meet the threat you currently face." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 28" name="Avenging Strike" desc="Your strength of will and strong sense of justice allow you to smite your foes." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 28" name="Blade Meditation" desc="You have learned a meditation that grants you insight into the martial disciplines you have studied." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Desert Fire" desc="The power of the Desert Wind surges through you, and you find power in the motion of the hot winds and shifting sands that you can channel into your Desert Wind strikes." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Desert Wind Dodge" desc="Your training in the Desert Wind discipline allows you to dance across the battlefield like a blistering sirocco." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Devoted Bulwark" desc="Because of your staunch devotion to your cause and your Devoted Spirit training, you can stand your ground even in the face of an enemy's resounding attack." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 29" name="Divine Spirit [Divine]" desc="The fervor and dedication of the Devoted Spirit discipline, combined with your fanatical adherence to a divine power, turns you into a font of spiritual energy." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 30" name="Evasive Reflexes" desc="When an opponent gives you an opening in combat, you know exactly what to do: slip away." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 30" name="Extra Granted Maneuver" desc="You are especially devout or insightful, and you have more control over which of your martial maneuvers are currently granted than other crusaders." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 30" name="Extra Readied Maneuver" desc="You are an unusually perspicacious student of the Sublime Way, and you find it easy to keep a large number of maneuvers ready for use." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Falling Sun Attack" desc="The discipline of the Setting Sun teaches you how to turn an opponent's strengths into weaknesses." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Instant Clarity [ Psionic]" desc="You have sharpened your concentration to the point that you can focus your psionic abilities with just an instant's thought." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Ironheart Aura" desc="Your strength of spirit and martial training inspires those around you." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Martial Stance" desc="You have mastered the fundamentals of a martial discipline, and you are now able to master one of its stances." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 31" name="Martial Study" desc="By studying the basics of a martial discipline, you learn to focus you kiand perfect the form needed to use a maneuver." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Psychic Renewal [Psionic]" desc="Your mental strength and psionic abilities allow you to focus your mind on combat and use your most devastating maneuvers more frequently." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Rapid Assault" desc="Your fighting style emphasizes taking foes down with quick, powerful blows." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Scribe Martial Script [Item Creation]" desc="You know the secret of creating martial scripts -- small slips of paper into which you infuse your own martial power and skill." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Shadow Blade" desc="In the course of your training in the Shadow Hand discipline, you learn to use your natural agility and speed to augment your attacks with certain weapons." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Shadow Trickster" desc="Your mastery of the Shadow Hand discipline lets you augment your illusion spells with the stuff of shadow." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Song of the White Raven" desc="The White Raven discipline shows you how to rouse dedication and fervor within your allies' hearts." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Snap Kick" desc="You have continued to hone your unarmed combat skills, and you deal more damage with your unarmed strikes." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 32" name="Stone Power" desc="The principles of the Stone Dragon discipline teach you how to gather and focus your raw, physical strength into an attack." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Sudden Recovery" desc="You can instantly recover your focus, balance, and personal energy after using a martial maneuver." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Superior Unarmed Strike" desc="Your unarmed strikes have become increasingly deadly, enabling you to strike your foes in their most vulnerable areas." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Tiger Blooded" desc="The Tiger Claw discipline teaches students to mimic the rampant, feral qualities of a wild animal." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Unnerving Calm" desc="You know that the secret to defeating your enemies lies within the still center of your own mind." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="Vital Recovery" desc="Preparing yourself to execute more of your maneuvers gives you the chance to catch a quick second wind and recover from damage you have sustained in the fight." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 33" name="White Raven Defense" desc="The White Raven discipline has taught you to shine as a gleaming beacon of hope and endurance amid the chaos of battle." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 34" name="Clarion Commander" desc="On the battlefield, you are a natural leader." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 34" name="Distant Horizon" desc="An initiate of the Setting Sun sometimes learns a set of combat maneuvers to create the Distant Horizon fighting form." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 34" name="Faith Unswerving" desc="The initiate of the Devoted Spirit knows that his fanaticism and devotion to a cause are enough to carry him through almost anything." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Gloom Razor" desc="The teachings of the Shadow Hand discipline allow you to confuse your enemies." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Perfect Clarity of Mind and Body" desc="Your mastery of the Diamond Mind discipline allows you to tap into reserves of spiritual and physical strength that other warriors cannot imagine using." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Reaping Talons" desc="When fighting with the Tiger Claw discipline's preferred weapons, you can use a variety of combat options that maximize the benefits of wielding two weapons." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 35" name="Scorching Sirocco" desc="As a student of the Desert Wind, the burning fury of the desert sirocco is at your command." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 36" name="Shards of Granite" desc="Like the great Stone Dragon, you hammer through your opponents' defenses using raw, brutal strength." />
+    <feat type="Tome of Battle: The Book of Nine Swords page 36" name="Stormguard Warrior" desc="The Stormguard Warrior feat encompasses a number of the more advanced tactics and techniques you would use as a student of the Iron Heart school." />
+    <feat type="Dragon Magic page 15" name="Armor of Scales [Ceremony]" desc="You imbue a target with the protection of a dragon's blade." />
+    <feat type="Dragon Magic page 15" name="Black Dragon Lineage [Draconic]" desc="You have attuned yourself to your black dragon ancestry and can poison foes with your touch." />
+    <feat type="Dragon Magic page 15" name="Blue Dragon Lineage [Draconic]" desc="You have learned to harness the power of your blue dragon ancestry and can hurl orbs of lightning." />
+    <feat type="Dragon Magic page 16" name="Brass Dragon Lineage [Draconic]" desc="You have unlocked the power of your brass dragon ancestry and can put foes to sleep with ease." />
+    <feat type="Dragon Magic page 16" name="Bronze Dragon Lineage [Draconic]" desc="You have tapped into your bronze dragon blood and can channel arcane energy to repel foes." />
+    <feat type="Dragon Magic page 16" name="Copper Dragon Lineage [Draconic]" desc="You have learned to channel the powers of your copper dragon ancestry to hinder your enemies' mobility." />
+    <feat type="Dragon Magic page 16" name="Double Draconic Aura" desc="You can project two draconic auras simultaneously." />
+    <feat type="Dragon Magic page 16" name="Draconic Armor [Draconic]" desc="You learn to block damage from successful attacks, lessening the blows with spell energy." />
+    <feat type="Dragon Magic page 16" name="Draconic Aura" desc="You can tap into the raw power of dragons to create a variety of potent auras around you." />
+    <feat type="Dragon Magic page 17" name="Draconic Heritage [Draconic]" desc="You have a greater connection with your draconic bloodline than others of your kind." />
+    <feat type="Dragon Magic page 17" name="Draconic Knowledge [Draconic]" desc="Your draconic blood lets you access ancient draconic knowledge." />
+    <feat type="Dragon Magic page 17" name="Draconic Senses [Draconic]" desc="Your draconic blood grants you great sensory powers." />
+    <feat type="Dragon Magic page 17" name="Draconic Vigor [Draconic]" desc="You gain some of the vitality of your draconic ancestry when casting spells." />
+    <feat type="Dragon Magic page 17" name="Dragonfire Assault [Draconic]" desc="You can augment your most powerful melee attacks with draconic power." />
+    <feat type="Dragon Magic page 17" name="Dragonfire Channeling [Draconic]" desc="You channel draconic fire through your holy symbol." />
+    <feat type="Dragon Magic page 17" name="Dragonfire Inspiration [Draconic]" desc="You can channel the power of your draconic ancestry into the attacks of your allies." />
+    <feat type="Dragon Magic page 18" name="Dragonfire Strike [Draconic]" desc="You can call upon your innate draconic powers to augment certain weapon attacks." />
+    <feat type="Dragon Magic page 18" name="Dragontouched [Draconic]" desc="You have a trace of draconic power, a result of dragons in your ancestry or a spiritual connection between you and the forces of dragonkind." />
+    <feat type="Dragon Magic page 19" name="Gold Dragon Lineage [Draconic]" desc="You can harness the legacy of your gold dragon ancestry to protect your allies." />
+    <feat type="Dragon Magic page 19" name="Heart of Dragons [Ceremony]" desc="You imbue your allies with draconic power." />
+    <feat type="Dragon Magic page 20" name="Initiate of Aasterinian [Initiate]" desc="You live for the moment, reveling in new experiences without fear of consequence." />
+    <feat type="Dragon Magic page 20" name="Initiate of Astilabor [Initiate]" desc="You share your deity's desire to acquire and protect treasure, and she has recognized this by granting you an edge in achieving these goals." />
+    <feat type="Dragon Magic page 20" name="Initiate of Bahamut [Initiate]" desc="The Platinum Dragon has entrusted you with great power in the battle against evil." />
+    <feat type="Dragon Magic page 20" name="Initiate of Falazure [Initiate]" desc="Your celebration of death and decay has opened up new magical secrets involving the living and undead." />
+    <feat type="Dragon Magic page 20" name="Initiate of Garyx [Initiate]" desc="You channel the cleansing fire of destruction, as wielded by your deity." />
+    <feat type="Dragon Magic page 21" name="Initiate of Hlal [Initiate]" desc="Fueled by faith in your deity, your audacity and bravery truly know no bounds." />
+    <feat type="Dragon Magic page 21" name="Initiate of Io [Initiate]" desc="Your deity has entrusted you with the responsibility of tending to dragonkind." />
+    <feat type="Dragon Magic page 21" name="Initiate of Lendys [Initiate]" desc="Your dedication to justice grants you the ability to ferret out and punish wrongdoers." />
+    <feat type="Dragon Magic page 21" name="Initiate of Tamara [Initiate]" desc="You wield the twin powers of mercy and death in service to your draconic patron." />
+    <feat type="Dragon Magic page 21" name="Initiate of Tiamat [Initiate]" desc="Your homage to the creator of evil dragonkind has been rewarded with physical and mental power." />
+    <feat type="Dragon Magic page 21" name="Red Dragon Lineage [Draconic]" desc="The fiery blood of red dragons runs within your veins, allowing you to produce flames from thin air." />
+    <feat type="Dragon Magic page 22" name="Silver Dragon Lineage [Draconic]" desc="You are the descendant of silver dragons and can harness your ancestors' power to paralyze your opponents." />
+    <feat type="Dragon Magic page 22" name="Slayer of Dragons [Ceremony]" desc="You protect your allies from the ravages they are sure to face while hunting dragons." />
+    <feat type="Dragon Magic page 22" name="White Dragon Lineage [Draconic]" desc="Your veins run with the savage blood of white dragons, allowing you to whyp yourself into a ragelike state." />
+    <feat type="Dragon Magic page 22" name="Words of Draconic Power [Ceremony]" desc="You tap into the great tradition of draconic magic to enhance the words of your allies." />
+    <feat type="Faiths of Eberron page 145" name="Action Healing" desc="You can spend an action point to enhance your healing power." />
+    <feat type="Faiths of Eberron page 145" name="Ancestral Whispers" desc="Through intense focus and divine energies, you can hear the advice of past ancestors." />
+    <feat type="Faiths of Eberron page 145" name="Ceremonial Empowerment" desc="Your divine might increases on your patron's holy days." />
+    <feat type="Faiths of Eberron page 145" name="Construct Grafter [Item Creation]" desc="You can apply construct grafts to other living creatures or to yourself." />
+    <feat type="Faiths of Eberron page 145" name="Divine Alacrity [Divine]" desc="You can channel divine energies into your own body, increasing your speed." />
+    <feat type="Faiths of Eberron page 146" name="Divine Countermagic [Divine]" desc="You channel divine energies to counter spells." />
+    <feat type="Faiths of Eberron page 146" name="Divine Warrior [Divine]" desc="Through divine power, you wield your deity's favored weapon to devastating effect." />
+    <feat type="Faiths of Eberron page 147" name="Domain Spontaneity [Divine]" desc="You are so familiar with one of your domains that you can convert other prepared spells into spells from that domain." />
+    <feat type="Faiths of Eberron page 147" name="Frantic Rage" desc="Your divine madness allows you to channel your fury into frenetic agility rather than might." />
+    <feat type="Faiths of Eberron page 147" name="Heroic Channeling [Divine]" desc="You can call on your personal strength of will to channel positive or negative energy into divine feats." />
+    <feat type="Faiths of Eberron page 147" name="Heroic Devotion [Divine]" desc="Your devotion to your faith allows you to manipulate fate at the expense of some spellcasting ability." />
+    <feat type="Faiths of Eberron page 147" name="Lucid Channeling" desc="When you invite a celestial into your body, you open your mind completely to the divine spirit." />
+    <feat type="Faiths of Eberron page 147" name="Nightbringer Initiate" desc="You have been trained in the ways of the Nightbringers, a new offshoot of the Children of Winter." />
+    <feat type="Faiths of Eberron page 147" name="Sacred Resilience" desc="You can channel divine energies to protect your allies from harm." />
+    <feat type="Faiths of Eberron page 148" name="Touch of Silver" desc="Your devotion to the Silver Flame allows you to burn the Church's foes with holy energies." />
+    <feat type="Faiths of Eberron page 148" name="Unquenchable Flame of Life" desc="You are hardened to the attacks of the undead." />
+    <feat type="Faiths of Eberron page 148" name="Unyielding Bond of Soul" desc="You are hardened to the attacks of the beings of other worlds." />
+    <feat type="Faiths of Eberron page 148" name="Worldly Focus" desc="Your belief in the omnipresence of the gods is so strong, you can channel your spells through the environment rather than a holy symbol." />
+    <feat type="Faiths of Eberron page 148" name="Wrest Possession" desc="If you resist control by a possessing fiend, you can attempt to seize control of its abilities." />
+    <feat type="Expedition to Castle Ravenloft page 200" name="Enduring Life" desc="You can ignore the effect of negative levels for a short time." />
+    <feat type="Expedition to Castle Ravenloft page 200" name="Lasting Life" desc="You can shed negative levels with an act of will." />
+    <feat type="Expedition to Castle Ravenloft page 205" name="Favored in Guild" desc="You are an active and valued member of your guild." />
+    <feat type="Complete Mage page 37" name="Acidic Splatter" desc="You can channel magical energy into orbs of acid." />
+    <feat type="Complete Mage page 37" name="Alacritous Cogitation" desc="You can leave a prepared spell slot open to spontaneously cast a spell." />
+    <feat type="Complete Mage page 39" name="Aquatic Breath [Reserve]" desc="Your reservoir of magic allows you to breathe normally even underwater." />
+    <feat type="Complete Mage page 39" name="Battlecaster Defense [Tactical]" desc="You have mastered techniques for taking full advantage of spells in melee while remaining unharmed." />
+    <feat type="Complete Mage page 40" name="Battlecaster Offense [Tactical]" desc="You cunningly mix melee combat and spellcasting to increase the potency of both." />
+    <feat type="Complete Mage page 40" name="Blade of Force [Reserve]" desc="You can surround a weapon with a short-lived aura of force." />
+    <feat type="Complete Mage page 40" name="Borne Aloft [Reserve]" desc="You can channel the magic of the winds to briefly grant you flight." />
+    <feat type="Complete Mage page 40" name="Captivating Melody" desc="You can expend some of your musical abilities to increase the potency of your enchantment or illusion spells." />
+    <feat type="Complete Mage page 40" name="Clap of Thunder [Reserve]" desc="You can deliver a thunderous roar with a touch." />
+    <feat type="Complete Mage page 40" name="Cloudy Conjuration" desc="Your conjured creations and summoned beings appear in a puff of sickening black smoke, and you vanish in a cloud of the same when you teleport." />
+    <feat type="Complete Mage page 40" name="Clutch of Earth [Reserve]" desc="You briefly increase the earth's pull on the target creature." />
+    <feat type="Complete Mage page 41" name="Dazzling Illusion" desc="Casting illusions causes the air about you to be filled with flashing colors that dazzle your foes." />
+    <feat type="Complete Mage page 41" name="Defending Spirit" desc="Your watchful spirit helps keep you safe in combat." />
+    <feat type="Complete Mage page 41" name="Delay Potion" desc="You can drink a potion and postpone its effects." />
+    <feat type="Complete Mage page 41" name="Dimensional Jaunt" desc="With a single step, you can cross an entire room." />
+    <feat type="Complete Mage page 41" name="Dimensional Reach [Reserve]" desc="You can transport small objects to you with an act of will." />
+    <feat type="Complete Mage page 41" name="Drowning Glance [Reserve]" desc="With a look, you create a small but incapacitating amount of water in the subject's lungs." />
+    <feat type="Complete Mage page 42" name="Elemental Adept" desc="You can spontaneously cast a spell of the element you have mastered." />
+    <feat type="Complete Mage page 42" name="Energy Abjuration" desc="Casting an abjuration spell grants you protection from energy damage." />
+    <feat type="Complete Mage page 42" name="Energy Gestalt [Tactical]" desc="You have learned to combine multiple energy effects to great advantage." />
+    <feat type="Complete Mage page 42" name="Face-Changer [Reserve]" desc="Your mastery of illusions allows you to subtly alter your appearance at whim." />
+    <feat type="Complete Mage page 42" name="Favored Magic Foe" desc="Through study, you have learned how best to defend yourself against your favored enemies' spells and how to best affect them with your own." />
+    <feat type="Complete Mage page 42" name="Fearsome Necromancy" desc="Creatures subjected to your necromantic spells feel the chill of fear." />
+    <feat type="Complete Mage page 43" name="Fey Heritage [Heritage]" desc="You are descended from creatures native to the fey realms. You are naturally resistant to the most common effects produced by" />
+    <feat type="Complete Mage page 43" name="Fey Legacy [Heritage]" desc="The magical powers of your ancestors manifest in you." />
+    <feat type="Complete Mage page 43" name="Fey Power [Heritage]" desc="Your fey heritage augments the power of certain types of magic." />
+    <feat type="Complete Mage page 43" name="Fey Presence [Heritage]" desc="You share your ancestor's knack for playing tricks on the minds of others." />
+    <feat type="Complete Mage page 43" name="Fey Skin [Heritage]" desc="Your fey heritage guards you against all weapons except those crafted from the dreaded cold iron." />
+    <feat type="Complete Mage page 43" name="Fiendish Heritage [Heritage]" desc="You are descended from creatures native to the Lower Planes." />
+    <feat type="Complete Mage page 43" name="Fiendish Legacy [Heritage]" desc="The magical powers of your ancestors manifest in you." />
+    <feat type="Complete Mage page 43" name="Fiendish Power [Heritage]" desc="Your fiendish heritage augments the power of certain types of magic." />
+    <feat type="Complete Mage page 43" name="Fiendish Presence [Heritage]" desc="You share your ancestors' ability to tamper with the minds of weak-minded fools." />
+    <feat type="Complete Mage page 43" name="Fiendish Resistance [Heritage]" desc="Your bloodline inures you against corrosion and fire." />
+    <feat type="Complete Mage page 43" name="Fiery Burst [Reserve]" desc="You channel your magical talent into a blast of fire." />
+    <feat type="Complete Mage page 44" name="Hasty Spirit" desc="Your watchful spirit lends you a burst of speed in times of great need." />
+    <feat type="Complete Mage page 44" name="Hurricane Breath [Reserve]" desc="The power of elemental air you hold in your mind allows you to exhale the wind." />
+    <feat type="Complete Mage page 44" name="Insightful Divination" desc="Casting a divination spell grants you an uncanny insight into danger." />
+    <feat type="Complete Mage page 44" name="Invisible Needle [Reserve]" desc="You can create tiny darts of force." />
+    <feat type="Complete Mage page 44" name="Magic Device Attunement" desc="You have a knack for activating familiar magic items." />
+    <feat type="Complete Mage page 44" name="Magic Disruption [Reserve]" desc="You can use your powers of abjuration to interfere with other casters' spells." />
+    <feat type="Complete Mage page 44" name="Magic Sensitive [Reserve]" desc="You literally see the emanations of magic around you." />
+    <feat type="Complete Mage page 44" name="Master of Undeath" desc="You can control an undead that you create . . . for a time." />
+    <feat type="Complete Mage page 44" name="Melodic Casting" desc="You can weave your music and magic together into a single perfect voice." />
+    <feat type="Complete Mage page 45" name="Metamagic School Focus" desc="You are unusually skilled at modifying the effects of a particular school of magic." />
+    <feat type="Complete Mage page 45" name="Metamagic Spell Trigger" desc="You can apply metamagic feats you know to spell effects from magic items you activate with a spell trigger." />
+    <feat type="Complete Mage page 45" name="Metamagic Vigor [Tactical]" desc="The energy you pour into increasing the power of your spells feeds back upon itself in an ever-increasing cycle." />
+    <feat type="Complete Mage page 45" name="Minor Shapeshift [Reserve]" desc="Your mastery of shapeshifting magic allows you to reshape your flesh in small but significant ways." />
+    <feat type="Complete Mage page 45" name="Mystic Backlash [Reserve]" desc="With a touch, your magic corrupts the spells of your enemy." />
+    <feat type="Complete Mage page 46" name="Piercing Evocation" desc="Your evocation spells ignore an amount of energy resistance." />
+    <feat type="Complete Mage page 46" name="Ranged Recall" desc="Your magical ranged attacks rarely miss." />
+    <feat type="Complete Mage page 46" name="Rapid Metamagic" desc="You possess an uncanny mastery of your magic, enabling you to modify spells on the fly much faster than others can." />
+    <feat type="Complete Mage page 46" name="Residual Magic [Tactical]" desc="You can use the lingering energy from a spell you cast to boost the effect of a later spell." />
+    <feat type="Complete Mage page 47" name="Retributive Spell [Metamagic]" desc="You can keep a spell in reserve to use when a foe causes you harm." />
+    <feat type="Complete Mage page 47" name="Shadow Veil [Reserve]" desc="You draw wisps of darkness across your enemy's eyes, obscuring the world around him." />
+    <feat type="Complete Mage page 47" name="Sickening Grasp [Reserve]" desc="You wreak havoc with the inner organs of a target, causing it to grow ill." />
+    <feat type="Complete Mage page 47" name="Somatic Weaponry" desc="You are adept at performing somatic spell components while your hands are occupied." />
+    <feat type="Complete Mage page 47" name="Storm Bolt [Reserve]" desc="The electrical energy contained within your magic rages inside you, begging to be released." />
+    <feat type="Complete Mage page 47" name="Summon Elemental [Reserve]" desc="You can channel the summoning power you hold to briefly bring forth an elemental servant." />
+    <feat type="Complete Mage page 48" name="Sunlight Eyes [Reserve]" desc="The bright magic within you allows you to see through the darkest shadow." />
+    <feat type="Complete Mage page 48" name="Touch of Distraction [Reserve]" desc="Your touch briefly clouds the mind of a foe, impeding its efforts." />
+    <feat type="Complete Mage page 48" name="Toughening Transmutation" desc="Casting a transmutation spell briefly transforms your skin or that of an ally into sterner stuff." />
+    <feat type="Complete Mage page 48" name="Unsettling Enchantment" desc="Your enchantment spells cloud the minds of even those who would otherwise resist their effects." />
+    <feat type="Complete Mage page 48" name="Vengeful Spirit" desc="Your watchful spirit takes revenge on foes that have harmed you." />
+    <feat type="Complete Mage page 48" name="Wind-Guided Arrows [Reserve]" desc="Your mastery of the wind allows you to alter the flight of a ranged weapon." />
+    <feat type="Complete Mage page 48" name="Winter's Blast [Reserve]" desc="The frozen magic within you can burst forth in a hail of frost." /></feats>
--- a/data/dnd35/dnd35weapons.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/dnd35weapons.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,299 +1,299 @@
-<weapons version="01.02">
-<footnotes>
-<c txt="Shuriken don't get str bonus, 3/attack; don't mark t" ></c>
-<c txt="monkWeap unarmed base, monk att/round, and other monk attack mods" ></c>
-<c txt="fn field for a weapon stands for 'footnotes'" ></c>
-<f mark="b" txt="classified as a bow or sling, str penalty applies " ></f>
-<f mark="c" txt="set for charge weapon, 2x dam when set Vs charging opponent." ></f>
-<f mark="C" txt="2x damaged when used on charge (may need to be mounted) " ></f>
-<f mark="d" txt="Classified as a double weapon." ></f>
-<f mark="m" txt="Monks get special 'Monk Weapon'advantages. " ></f>
-<f mark="o" txt="+2 opposed attack rolls wrt disarming/being disarmed on fail." ></f>
-<f mark="r" txt="Classified as a reach weapon, can strike at 6-10, but cannot strike 0-5" ></f>
-<f mark="R" txt="Classified as a special reach weapon, can strike at 0-10" ></f>
-<f mark="s" txt="Weapon can only do subdual damage." ></f>
-<f mark="t" txt="Classified as a thrown (or throwable) weapon by PH,standard thrown characteristics will be applied" ></f>
-<f mark="T" txt="Weapon can be used for making trip attacks." ></f>
-<f mark="X" txt="Custom weapon, should have appropriate footnotes added." ></f>
-</footnotes>
-<weapon mod="0" fn="" name="Antimatter rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="6d10" critical="x2" range="10" weight="10" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Axe, orc double" cost="60" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x3" range="0" weight="25" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="t" name="Axe, throwing" cost="8" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x2" range="10" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Battleaxe" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="7" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Blowgun" cost="1" category="Asian Weapons-Ranged" size="Small" damage="1" critical="x2" range="10" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Chain, spiked" cost="25" category="Exotic Weapons-Melee" size="Large" damage="2d4" critical="x2" range="0" weight="15" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="t" name="Club" cost="0" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="10" weight="3" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, hand" cost="100" category="Exotic Weapons-Ranged" size="Tiny" damage="1d4" critical="19-20/x2" range="30" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, heavy" cost="50" category="Simple Weapons-Ranged" size="Medium" damage="1d10" critical="19-20/x2" range="120" weight="9" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, light" cost="35" category="Simple Weapons-Ranged" size="Small" damage="1d8" critical="19-20/x2" range="80" weight="6" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, repeating" cost="250" category="Exotic Weapons-Ranged" size="Medium" damage="1d8" critical="19-20/x2" range="80" weight="16" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="t" name="Dagger" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="19-20/x2" range="10" weight="1" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Dagger, punching" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x3" range="0" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Dart" cost="0" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="20" weight="0" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Falchion" cost="75" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="18-29/x2" range="0" weight="16" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="doT" name="Flail, dire" cost="90" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x2" range="0" weight="20" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Flail, heavy" cost="15" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="20" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Flail, light" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="5" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Flamer" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d6*" critical="-" range="20" weight="8" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Flurry of Blows(Monk Med)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="0" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Flurry of Blows(Monk Small)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="0" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Gauntlet" cost="2 gp" category="Simple Weapons-Melee" size="Unarmed" damage="*" critical="*" range="0" weight="2" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Gauntlet, spiked" cost="5" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="r" name="Glaive" cost="8" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Greataxe" cost="20" category="Martial Weapons-Melee" size="Large" damage="1d12" critical="x3" range="0" weight="20" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Greatclub" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x2" range="0" weight="10" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Greatsword" cost="50" category="Martial Weapons-Melee" size="Large" damage="2d6" critical="19-20/x2" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Grenade launcher" cost="-1" category="Modern Weapons-Ranged" size="Large" damage="*" critical="*" range="200" weight="12" type="*" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="rT" name="Guisarme" cost="9" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="Ts" name="Halberd" cost="10" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="P&amp;S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="tc" name="Halfspear" cost="1" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x3" range="20" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Hammer, gnome hooked" cost="20" category="Exotic Weapons-Melee" size="Medium" damage="1d6/1d4" critical="x3/x4" range="0" weight="6" type="B&amp;P" >
-<description >for proper treatment, read PH pg 101</description >
-</weapon>
-<weapon mod="0" fn="t" name="Hammer, light" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x2" range="20" weight="2" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Handaxe" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Javelin" cost="1" category="Simple Weapons-Ranged" size="Medium" damage="1d6" critical="x2" range="30" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Kama" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Kama, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Katana" cost="400" category="Exotic Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
-    <description >Always masterwork</description >
-</weapon>
-<weapon mod="0" fn="" name="Katana, used 2 handed" cost="400" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
-    <description >Always masterwork</description >
-</weapon>
-<weapon mod="0" fn="" name="Kukri" cost="8" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="18-29/x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oTR" name="Kusari-gama" cost="10" category="Asian Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="0" weight="3" type="S" >
-    <description >like a spiked chain</description >
-</weapon>
-<weapon mod="0" fn="Cr" name="Lance, heavy" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="C" name="Lance, light" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Laser pistol" cost="-1" category="Futuristic Weapons-Ranged" size="Small" damage="2d10" critical="x2" range="100" weight="2" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Laser rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d20" critical="x2" range="200" weight="7" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Longbow" cost="75" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="100" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Longbow, composite" cost="100" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="110" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="rc" name="Longspear" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d8" critical="x3" range="0" weight="9" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Longsword" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="19-20/x2" range="0" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Mace, heavy" cost="12" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="12" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Mace, light" cost="5" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="6" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Morningstar" cost="8" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="8" type="B&amp;P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Musket" cost="500" category="Renaissance Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="150" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Net" cost="20" category="Exotic Weapons-Ranged" size="Medium" damage="0" critical="0" range="10" weight="10" type="-" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Nunchaku" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
-<description >
-</description >
-</weapon>
-<weapon mod="0" fn="m" name="Nunchaku, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pick, heavy" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="x4" range="0" weight="6" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pick, light" cost="4" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x4" range="0" weight="4" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pistol" cost="250" category="Renaissance Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="50" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pistol, automatic" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="150" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pistol, revolver" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="100" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Quarterstaff" cost="0" category="Simple Weapons-Melee" size="Large" damage="1d6" critical="x2" range="0" weight="4" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="ro" name="Ranseur" cost="10" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Rapier" cost="20" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Rifle, automatic" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="250" weight="12" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Rifle, repeater" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="200" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="s" name="Sap" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d6s" critical="x2" range="0" weight="3" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Scattergun" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="*" critical="*" range="10" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Scimitar" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Scythe" cost="18" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x4" range="0" weight="12" type="P&amp;S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Shortbow" cost="30" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="60" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Shortbow, composite" cost="75" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="70" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="tc" name="Shortspear" cost="2" category="Simple Weapons-Melee" size="Large" damage="1d8" critical="x3" range="20" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Shuriken" cost="1" category="Exotic Weapons-Ranged" size="Tiny" damage="1" critical="x2" range="100" weight="0" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Siangham" cost="3" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Siangham, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sickle" cost="6" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Sling" cost="1d4" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="50" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="s" name="Strike, unarmed (med)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d3" critical="x2" range="0" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="s" name="Strike, unarmed (small)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d2" critical="x2" range="0" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sword, bastard" cost="35" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sword, bastard used 2 handed" cost="35" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sword, short" cost="10" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Sword, two-bladed" cost="100" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="19-20/X2" range="0" weight="30" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="ct" name="Trident" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="10" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="dc" name="Urgrosh, dwarven" cost="50" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d6" critical="x3" range="0" weight="15" type="S&amp;P" >
-<description >see PH pg 103 for proper treatment </description >
-</weapon>
-<weapon mod="0" fn="m" name="UnArmed(Monk Med)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="00" type="S&amp;P" >
-<description >An unArmed strike does more dmg as a monk</description >
-</weapon>
-<weapon mod="0" fn="m" name="UnArmed(Monk Small)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="00" type="S&amp;P" >
-<description >An unArmed strike does more dmg as a monk</description >
-</weapon>
-<weapon mod="0" fn="" name="Wakizashi" cost="300" category="Asian Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="S" >
-<description >Always masterwork</description >
-</weapon>
-<weapon mod="0" fn="" name="Waraxe, dwarven" cost="30" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Waraxe, dwarven used 2handed" cost="30" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Warhammer" cost="12" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="8" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Whip" cost="1" category="Exotic Weapons-Ranged" size="Small" damage="1d2s" critical="x2" range="15" weight="2" type="S" >
-<description >range15, maxrange15, no penalties to max range; ineffective Vs armor or +3 natural adjustment PH pg 104 </description >
-</weapon>
-</weapons>
+<weapons version="01.02">
+<footnotes>
+<c txt="Shuriken don't get str bonus, 3/attack; don't mark t" ></c>
+<c txt="monkWeap unarmed base, monk att/round, and other monk attack mods" ></c>
+<c txt="fn field for a weapon stands for 'footnotes'" ></c>
+<f mark="b" txt="classified as a bow or sling, str penalty applies " ></f>
+<f mark="c" txt="set for charge weapon, 2x dam when set Vs charging opponent." ></f>
+<f mark="C" txt="2x damaged when used on charge (may need to be mounted) " ></f>
+<f mark="d" txt="Classified as a double weapon." ></f>
+<f mark="m" txt="Monks get special 'Monk Weapon'advantages. " ></f>
+<f mark="o" txt="+2 opposed attack rolls wrt disarming/being disarmed on fail." ></f>
+<f mark="r" txt="Classified as a reach weapon, can strike at 6-10, but cannot strike 0-5" ></f>
+<f mark="R" txt="Classified as a special reach weapon, can strike at 0-10" ></f>
+<f mark="s" txt="Weapon can only do subdual damage." ></f>
+<f mark="t" txt="Classified as a thrown (or throwable) weapon by PH,standard thrown characteristics will be applied" ></f>
+<f mark="T" txt="Weapon can be used for making trip attacks." ></f>
+<f mark="X" txt="Custom weapon, should have appropriate footnotes added." ></f>
+</footnotes>
+<weapon mod="0" fn="" name="Antimatter rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="6d10" critical="x2" range="10" weight="10" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Axe, orc double" cost="60" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x3" range="0" weight="25" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="t" name="Axe, throwing" cost="8" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x2" range="10" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Battleaxe" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="7" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Blowgun" cost="1" category="Asian Weapons-Ranged" size="Small" damage="1" critical="x2" range="10" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Chain, spiked" cost="25" category="Exotic Weapons-Melee" size="Large" damage="2d4" critical="x2" range="0" weight="15" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="t" name="Club" cost="0" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="10" weight="3" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, hand" cost="100" category="Exotic Weapons-Ranged" size="Tiny" damage="1d4" critical="19-20/x2" range="30" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, heavy" cost="50" category="Simple Weapons-Ranged" size="Medium" damage="1d10" critical="19-20/x2" range="120" weight="9" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, light" cost="35" category="Simple Weapons-Ranged" size="Small" damage="1d8" critical="19-20/x2" range="80" weight="6" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, repeating" cost="250" category="Exotic Weapons-Ranged" size="Medium" damage="1d8" critical="19-20/x2" range="80" weight="16" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="t" name="Dagger" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="19-20/x2" range="10" weight="1" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Dagger, punching" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x3" range="0" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Dart" cost="0" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="20" weight="0" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Falchion" cost="75" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="18-29/x2" range="0" weight="16" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="doT" name="Flail, dire" cost="90" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x2" range="0" weight="20" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Flail, heavy" cost="15" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="20" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Flail, light" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="5" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Flamer" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d6*" critical="-" range="20" weight="8" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Flurry of Blows(Monk Med)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="0" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Flurry of Blows(Monk Small)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="0" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Gauntlet" cost="2 gp" category="Simple Weapons-Melee" size="Unarmed" damage="*" critical="*" range="0" weight="2" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Gauntlet, spiked" cost="5" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="r" name="Glaive" cost="8" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Greataxe" cost="20" category="Martial Weapons-Melee" size="Large" damage="1d12" critical="x3" range="0" weight="20" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Greatclub" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x2" range="0" weight="10" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Greatsword" cost="50" category="Martial Weapons-Melee" size="Large" damage="2d6" critical="19-20/x2" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Grenade launcher" cost="-1" category="Modern Weapons-Ranged" size="Large" damage="*" critical="*" range="200" weight="12" type="*" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="rT" name="Guisarme" cost="9" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="Ts" name="Halberd" cost="10" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="P&amp;S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="tc" name="Halfspear" cost="1" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x3" range="20" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Hammer, gnome hooked" cost="20" category="Exotic Weapons-Melee" size="Medium" damage="1d6/1d4" critical="x3/x4" range="0" weight="6" type="B&amp;P" >
+<description >for proper treatment, read PH pg 101</description >
+</weapon>
+<weapon mod="0" fn="t" name="Hammer, light" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x2" range="20" weight="2" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Handaxe" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Javelin" cost="1" category="Simple Weapons-Ranged" size="Medium" damage="1d6" critical="x2" range="30" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Kama" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Kama, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Katana" cost="400" category="Exotic Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
+    <description >Always masterwork</description >
+</weapon>
+<weapon mod="0" fn="" name="Katana, used 2 handed" cost="400" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
+    <description >Always masterwork</description >
+</weapon>
+<weapon mod="0" fn="" name="Kukri" cost="8" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="18-29/x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oTR" name="Kusari-gama" cost="10" category="Asian Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="0" weight="3" type="S" >
+    <description >like a spiked chain</description >
+</weapon>
+<weapon mod="0" fn="Cr" name="Lance, heavy" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="C" name="Lance, light" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Laser pistol" cost="-1" category="Futuristic Weapons-Ranged" size="Small" damage="2d10" critical="x2" range="100" weight="2" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Laser rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d20" critical="x2" range="200" weight="7" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Longbow" cost="75" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="100" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Longbow, composite" cost="100" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="110" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="rc" name="Longspear" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d8" critical="x3" range="0" weight="9" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Longsword" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="19-20/x2" range="0" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Mace, heavy" cost="12" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="12" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Mace, light" cost="5" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="6" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Morningstar" cost="8" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="8" type="B&amp;P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Musket" cost="500" category="Renaissance Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="150" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Net" cost="20" category="Exotic Weapons-Ranged" size="Medium" damage="0" critical="0" range="10" weight="10" type="-" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Nunchaku" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
+<description >
+</description >
+</weapon>
+<weapon mod="0" fn="m" name="Nunchaku, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pick, heavy" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="x4" range="0" weight="6" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pick, light" cost="4" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x4" range="0" weight="4" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pistol" cost="250" category="Renaissance Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="50" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pistol, automatic" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="150" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pistol, revolver" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="100" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Quarterstaff" cost="0" category="Simple Weapons-Melee" size="Large" damage="1d6" critical="x2" range="0" weight="4" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="ro" name="Ranseur" cost="10" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Rapier" cost="20" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Rifle, automatic" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="250" weight="12" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Rifle, repeater" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="200" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="s" name="Sap" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d6s" critical="x2" range="0" weight="3" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Scattergun" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="*" critical="*" range="10" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Scimitar" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Scythe" cost="18" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x4" range="0" weight="12" type="P&amp;S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Shortbow" cost="30" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="60" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Shortbow, composite" cost="75" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="70" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="tc" name="Shortspear" cost="2" category="Simple Weapons-Melee" size="Large" damage="1d8" critical="x3" range="20" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Shuriken" cost="1" category="Exotic Weapons-Ranged" size="Tiny" damage="1" critical="x2" range="100" weight="0" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Siangham" cost="3" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Siangham, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sickle" cost="6" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Sling" cost="1d4" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="50" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="s" name="Strike, unarmed (med)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d3" critical="x2" range="0" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="s" name="Strike, unarmed (small)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d2" critical="x2" range="0" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sword, bastard" cost="35" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sword, bastard used 2 handed" cost="35" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sword, short" cost="10" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Sword, two-bladed" cost="100" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="19-20/X2" range="0" weight="30" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="ct" name="Trident" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="10" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="dc" name="Urgrosh, dwarven" cost="50" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d6" critical="x3" range="0" weight="15" type="S&amp;P" >
+<description >see PH pg 103 for proper treatment </description >
+</weapon>
+<weapon mod="0" fn="m" name="UnArmed(Monk Med)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="00" type="S&amp;P" >
+<description >An unArmed strike does more dmg as a monk</description >
+</weapon>
+<weapon mod="0" fn="m" name="UnArmed(Monk Small)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="00" type="S&amp;P" >
+<description >An unArmed strike does more dmg as a monk</description >
+</weapon>
+<weapon mod="0" fn="" name="Wakizashi" cost="300" category="Asian Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="S" >
+<description >Always masterwork</description >
+</weapon>
+<weapon mod="0" fn="" name="Waraxe, dwarven" cost="30" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Waraxe, dwarven used 2handed" cost="30" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Warhammer" cost="12" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="8" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Whip" cost="1" category="Exotic Weapons-Ranged" size="Small" damage="1d2s" critical="x2" range="15" weight="2" type="S" >
+<description >range15, maxrange15, no penalties to max range; ineffective Vs armor or +3 natural adjustment PH pg 104 </description >
+</weapon>
+</weapons>
--- a/data/dnd35/feats.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd35/feats.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2939 +1,2939 @@
-[Creature Type] Trainer^AE^73^You are skilled at training a particular type  of creature.
-Aberrant Dragonmark^ECS^47^Although you are not a recognized member of  one of the dragonmarked families, you have manifested a dragonmark.
-Aberration Banemagic^LoM^178^You can cast spells that do additional damage  to aberrations.
-Aberration Blood^LoM^178^One of your ancestors was an aberration and  has passed the taint of its aberrant physiology down through the generations  to you.
-Aberration Wild Shape^LoM^178^Thanks to your heritage, you have learned to  channel your inhuman bloodline into your shapeshifting power.
-Ability Focus^MM^303^Choose one of the creature's special attacks.  This attack becomes more potent than normal.
-Ability Focus^MM2^18^One of the creature's special attacks is more  potent than normal.
-Ability Focus^MM3^206^The special attack of a creature with this feat  is more potent than normal.
-Ability Focus^SS^30^Choose one of your spell-like abilities. This  attack becomes much more potent than normal.
-Able Learner^RD^150^You have great aptitude for learning.
-Able Sniper^RW^148^You are accomplished at remaining unseen when  you're sniping with a ranged weapon.
-Accurate Jaunt^UA^92^You have an instinctive sense of interplanar  travel.
-Acheron Flurry^PlH^37^You master the secret technique developed by  Acheron-native special forces of limiting a foe's options in hand-to-hand  combat.
-Acrobatic^PH^89^You have excellent body awareness and coordination.
-Acrobatic^SaS^38^You have excellent body awareness and coordination.
-Action Boost^ECS^47^You have the ability to alter your luck drastically  in dire circumstances.
-Action Surge^ECS^50^By spending 2 action points, you can perform  an additional action in a round.
-Adamantine Body^ECS^50^At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction.
-Adamantine Body^MM3^192^At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction.
-Adamantine Body^RE^118^At the cost of mobility, your warforged body  can be crafted with a layer of adamantine that provides formidable protective  armor and some damage reduction.
-Additional Magic Item Space^EL^50^You can wear more magic items.
-Adroit Flyby Attack^Dr^67^You can make flyby attacks and get out of reach  quickly.
-Aerenal Beastmaster^RE^105^As an elf of Aerenal, you consider baboons sacred  animals and they serve you obediently.
-Aerial Reflexes^RW^148^Your aerial agility allows you to avoid dangerous  effects while airborne.
-Aerial Superiority^RW^148^You can use your flying ability to gain an advantage  against landbound foes or airborne foes that you can outmaneuver.
-Aftersight^Rac^160^You have a trace of the Sight in your blood,  which enables you to pick up echoes of the past, both wondrous and terrible.
-Agile^PH^89^You are particularly flexible and poised.
-Agile Athlete^RW^148^You rely on your agility to perform athletic  feats, rather than brute strength.
-Agile Tyrant^LoM^44^A creature with this feat develops longer, more  flexible eyestalks than its kin. This extra flexibility allows it to bring  additional eye rays to bear against its foes.
-Agony Touch^Gh^28^Choose one physical ability score. When you  touch a creature, you can deal damage to this ability score.
-Air Heritage^PlH^37^You are descended from creatures native to the  Elemental Plane of Air.
-Alertness^PH^89^You have finely tuned senses.
-Aligned Attack^XPH^41^Your melee or ranged attack overcomes your opponent's  alignment-based damage reduction and deals additional damage.
-Allied Defense^ShS^19^You are good at protecting nearby allies.
-Alluring^SaS^38^Others have an inexplicable urge to believe  your every word.
-Altitude Adaptation^Fr^45^Your body adapts quickly to changes in altitude,  preventing you from suffering as much from altitude sickness.
-Anarchic Heritage^PlH^38^You are descended from creatures native to the  planes of chaos.
-Ancestral Guidance^RE^105^The spirit of your patron ancestor guides your  hands and thoughts in times of trouble.
-Ancestral Knowledge^RS^136^You have a strong connection to the ancestors  of your clan, giving you understanding and knowledge beyond the mortal realms.
-Ancestral Relic^BE^39^You own an ancestral heirloom and can invest  it with increasing power.
-Ancestral Spirit^Rac^161^You have ties to the long-dead spirit of one  of your clan's ancestors, who whispers ancient words of wisdom into your  mind in times of need.
-Animal Affinity^PH^89^You are good with animals.
-Animal Control^MW^20^You can channel the power of nature to gain  mastery over animal creatures.
-Animal Defiance^MW^20^You can channel the power of nature to drive  off animals.
-Animal Friend^BE^41^Animals respond favorably to the aura of goodness  that exudes from you.
-Animal Friends^Rac^161^Your ability to speak with animals has  allowed you to befriend an animal as a permanent ally.
-Ankheg Tribe Ambush^ShS^19^You have learned how to hide and spring to attack,  much like the ankhegs that roam the plains where you hunt.
-Antipsionic Magic^XPH^41^Your spells are more potent when used against  psionic characters and creatures.
-Anvil of Thunder^CW^112^You have mastered the style of fighting with  hammer and axes at the same time, and have learned to deal thunderous blows  with this unique pairing of weapons.
-Appraise Magic Value^CAd^103^Your ability to determine an item's worth and  your knowledge of magic allow you to determine the exact properties of a  magic item without the use of the identify spell or similar magic.
-Apprentice^DMG2^176^A character with this feat has apprenticed himself  to a master in order to speed his learning and bolster his skills.
-Aquatic Shot^Sto^90^You have developed the technique of firing a  ranged weapon into or through the water with better accuracy than normal,  striking at just the right angle to allow it to slice through the obstruction  with precision.
-Aquatic Spellcasting^LoM^178^You know how to cast spells that work equally  well in or out of water.
-Arachnid Rider^Rac^161^You are trained in the art of employing spiders  as steeds.
-Arcane Defense^CAr^73^Choose a school of magic, such as illusion.  You can resist spells from that school better than normal.
-Arcane Defense^TB^38^Choose a school of magic. You can resist spells  from that school better than normal.
-Arcane Disciple^CD^79^Choose a deity, and then select a domain available  to clerics of that deity. You can learn to cast spells associated with that  domain as arcane spells.
-Arcane Insight^RD^154^By immersing yourself in the teachings of Boccob,  you have unearthed magical secrets and gained special insight into arcane  spellcasting.
-Arcane Manipulation^LE^6^You are learned in the arcane ways of Netheril,  where masters of magic once molded and shaped arcane energy to their own  will.
-Arcane Mastery^CAr^73^You are quick and certain in your efforts to  defeat the arcane defenses and spells of others.
-Arcane Preparation^CAr^73^You can prepare an arcane spell ahead of time,  just as a wizard does.
-Arcane Preparation^FRCS^33^You can prepare an arcane spell ahead of time,  just as a wizard does.
-Arcane Preparation^PG^32^You can prepare an arcane spell ahead of time,  just as a wizard does.
-Arcane Preparation^TB^38^You can prepare an arcane spell ahead of time,  just as a wizard does.
-Arcane Schooling^FRCS^33^In your homeland, all who show some skill at  the Art may receive training as a wielder of magic.
-Arcane Schooling^PG^33^In your homeland, all who show some skill at  the Art may receive training as arcane spellcasters.
-Arcane Strike^CW^96^You can channel arcane energy into your melee  attacks.
-Arcane Transfiguration^LE^6^Drawing upon forgotten lore, you broaden your  arcane studies and master a school of magic previously prohibited to you.
-Arctic Adaptation^Rac^161^You have adapted to the snowbound environment  of the arctic reaches of Faerun.
-Area Attack^SS^30^You can wield improvised weapons to attack several  spaces at once.
-Armor Proficiency (Heavy)^PH^89^You are proficient with heavy armor.
-Armor Proficiency (Light)^PH^89^You are proficient with light armor.
-Armor Proficiency (Medium)^PH^89^You are proficient with medium armor.
-Armor Skin^CW^151^Your skin becomes like armor.
-Armor Skin^EL^50^Your skin becomes like armor.
-Art of Fascination^OA^60^You claim descent from Kakita Wayozu, whose  art was so great it is said that she helped create an alternate world.
-Arterial Strike^CW^96^Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss.
-Arterial Strike^SaS^38^Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss.
-Artic Priest^Fr^46^You can swap out prepared spells to cast spell  to aid in exploring and surviving in frostfell areas.
-Artist^FRCS^33^You come from a culture in which the arts, philosophy,  and music have a prominent place in society.
-Artist^OA^61^You claim descent from Doji, who was known as  a creator of culture and civilization.
-Artist^PG^33^Your people are renowned for their skill at  story and song.
-Ascetic Hunter^CAd^105^You have gone beyond the bounds of your monastic  training to incorporate new modes of bringing the unlawful to justice.
-Ascetic Knight^CAd^105^You belong to a special order of religious monks  that teaches its adherents that self-enlightenment and honorable service  grow from the same well of purity.
-Ascetic Magic^CAd^105^You practice an unusual martial art that mixes  self-taught spellcasting and melee attacks to great effect.
-Ascetic Rogue^CAd^106^You have gone beyond the bounds of your monastic  training to incorporate new modes of stealthy combat.
-Ashbound^ECS^50^You have been trained in the druidic traditions  of the Ashbound, seeing yourself as one of nature's avengers.
-Assume Supernatural Ability^SS^30^You learn to use a supernatural ability of an  assumed form.
-Athletic^PH^89^You have a knack for athletic endeavors.
-Athletic^SaS^38^You're physically fit and adept at outdoor sports.
-Attention to Detail^OA^61^You are descended from Akodo's advisor Ikoma  -- a historian, judge, and storyteller.
-Attune Gem^Mag^21^You can magically imbue gems to hold a spell  until triggered.
-Attune Magic Weapon^ECS^50^Through your study of magic weapons, you have  become adept at eking every advantage out of their enhanced qualities.
-Augment Healing ^CD^79^You can increase your healing ability.
-Augment Summoning^Mag^21^Your summoned creatures are better than normal.
-Augment Summoning^PH^89^Your summoned creatures are more powerful than  normal.
-Augment Summoning^TB^39^Your summoned creatures are more powerful than  normal.
-Augmented Alchemy^CAd^191^You can create alchemical items and substances  that are much more powerful than normal.
-Augmented Alchemy^EL^50^You can create alchemical items and substances  that are much more powerful than normal.
-Auspicious Marking^RS^136^Your [goliath] skin patterns indicate that fate  has marked you for greatness, and the patterns shift slowly to take new  forms.
-Automatic Quicken Spell^CAr^191^You can cast any of your lesser spells with  a moment's thought.
-Automatic Quicken Spell^EL^50^You can cast any of your lesser spells with  a moment's thought.
-Automatic Silent Spell^CAr^191^You can cast any of your lesser spells silently.
-Automatic Silent Spell^EL^51^You can cast any of your lesser spells silently.
-Automatic Still Spell^CAr^191^You can cast any of your lesser spells without  gestures.
-Automatic Still Spell^EL^51^You can cast any of your lesser spells without  gestures.
-Autonomous^XPH^41^You have a knack for psionic self-sufficiency.
-Awaken Frightful Presence^Dr^67^You gain frightful presence.
-Awaken Spell Resistance^Dr^67^You gain spell resistance.
-Awesome Blow^MM^303^The creature can choose to deliver blows that  send its smaller opponents flying like bowling pins.
-Awesome Blow^MM3^206^A creature with this feat can choose to deliver  blows that send its smaller opponents flying like bowling pins.
-Axeshield^Und^24^You know how to defend yourself with a battleaxe.
-Axespike^RS^137^You have mastered the art of fighting in spiked  armor while wielding a greataxe. You blend greataxe blows and armor spike  attacks into one constant, deadly attack form.
-Axethrower^PG^33^You have learned how to hurl weapons to deadly  effect.
-Axiomatic Heritage^PlH^38^You are descended from creatures native to the  planes of law.
-Axiomatic Strike^CW^96^You can turn your fist into an instrument of  law.
-Axiomatic Strike^PG^135^Your attacks deal incredible damage to chaotic  creatures.
-Azerblood^Rac^161^You are descended from the shield dwarves of  Clan Azerkyn, who once ruled the Adamant Kingdom of Xothaerin beneath western  Amn. The blood of the azer runs thick in your veins.
-Baleful Moan^LM^24^Your hollow cry strikes fear into the hearts  of the living.
-Ballista Proficiency^HB^96^You have trained in ballista operation.
-Bane of Enemies^EL^51^Your attacks deal great damage to your favored  enemies.
-Bane of the Unclean^LoM^44^A creature with this feat hates aberrant beholders  so strongly that it gains bonuses when fighting them.
-Barbed Stinger^SK^144^Your stinger is unusually difficult to dislodge.
-Batrider^Rac^161^You are highly skilled in the art of flying  dire bats, a common form of transportation among the shield dwarves of the  Far Hills.
-Battle Caster^CAr^75^Building on your existing training allows you  to avoid the chance of arcane spell failure when you wear armor heavier  than normal.
-Battle Casting^RW^148^You have a knack for staying out of harm's way  when casting spells.
-Battle Hardened^RS^137^Your extensive battle experience has left you  incredibly calm and composed, even in the heat of battle.
-Battle Jump^UE^42^You know how to launch a devastating attack  from above by dropping onto your opponent.
-Battlefield Inspiration^MH^25^You inspire courage in your allies.
-Battleshifter Training^RE^116^Your shifter fighting instincts grant you a  sophisticated blend of defensive techniques and controlled attacks.
-Bear Fang^CW^112^You have mastered the fierce style of fighting  with axe and dagger at the same time.
-Beast Companion^EL^51^You can befriend a beast.
-Beast Shape^ECS^50^You call upon the power of your beast totem  to physically change your form.
-Beast Totem^ECS^51^In the druidic custom of your people, you have  claimed a kind of magical beast as your totem -- a patron, protector, and  source of strength.
-Beast Wild Shape^EL^51^You can wild shape into magical beast form.
-Beasthide Elite^ECS^51^Your shifter trait improves.
-Beckon the Frozen^Fr^47^Creatures you summon are infused with cold energy  and have the cold subtype.
-Bestial Hide^LoM^179^Your skin is thicker, scalier, or furrier than  normal.
-Bind Elemental^ECS^51^You can craft magic items that use bound elementals  for special effects, including weapons, armor, airships, and elemental galleons.
-Black Lore of Moil^CAr^75^Your study of the sinister knowledge and spellcasting  techniques of the long-dead Nightlords of Moil makes your necromancy spells  especially potent.
-Blackwater Invocation^Sto^91^You can call upon negative energy to infuse  normal water around you, transforming it into the dark, cold water found  at the bottom of the deepest ocean trenches.
-Bladebearer of the Valenar^RE^107^Your extensive training makes you especially  adept with the curved blades of the Valenar.
-Bladeproof Skin^UA^92^Your skin has a degree of protection from even  the sharpest edge.
-Blazing Berserker^Sa^49^When you enter your rage, your body becomes  infused with fire.
-Blessed by Tem-Et-Nu^Sa^49^Tem-Et-Nu has marked you as having an important  destiny in her temple.
-Blessed of the Seven Sisters^PG^176^As a result of a personal connection to one  of the Seven Sisters, you have a taste of Mystra's special favor.
-Blind-Fight^PH^89^You know how to fight in melee without being  able to see your foes.
-Blinding Speed^EL^51^You can trigger short bursts of great speed.
-Blindsense^CAd^114^You can sense creatures that you cannot see.
-Blindsight^MW^21^Your senses are as keen as the bat's.
-Blindsight, 5-Foot Radius^SF^5^You sense opponents in the darkness.
-Blindsight, 5-Foot Radius^DD^49^The deity senses opponents in the darkness.
-Block Arrow^HB^96^You can block incoming arrows with your shield.
-Blood of the Warlord^Rac^161^You can influence a large number of orcs.
-Blood Sorcerer^OA^61^You are descended from Yogo, the Scorpion shugenja  who was the first guardian of the Black Scrolls of Fu Leng.
-Blooded^FRCS^33^Enemies find it difficult to catch you off guard.
-Blooded^PG^35^You know what it means to fight for your life,  and you understand the value of quick wits and quicker reactions when blades  are bared and deadly spells are chanted.
-Bloodline of Fire^FRCS^34^You are descended from the efreet who ruled  Calimshan for two millennia.
-Bloodline of Fire^PG^35^You are descended from the efreet who ruled  Calimshan long ago.
-Bloodsoaked Intimidate^CR^17^Your bloody and vicious approach to combat makes  you a fearsome foe.
-Blowhard^SS^31^You can blow targets over with your breath.
-Boar's Ferocity^CD^79^You can continue fighting even at the brink  of death.
-Body Fuel^XPH^41^You can expand your power point total at the  expense of your health.
-Body Pouch^SK^144^You can open a cavity in your body without harm  to yourself and use it to carry or conceal items or creatures.
-Bolster Resistance^LM^25^Undead you raise or create are more resistant  to turning than normal.
-Bonus Breath^SS^31^You can use your breath weapons one more time  per day than you normally could.
-Bonus Domain^CD^89^You have access to one additional domain of  spells.
-Bonus Domain^EL^51^You have access to one additional domain of  spells.
-Boomerang Daze^RE^108^You can daze the targets of your boomerang attacks.
-Boomerang Ricochet^RE^108^You can strike up to two foes with a single  boomerang throw.
-Boost Construct^XPH^43^Your astral constructs have more abilities.
-Boost Spell Resistance^BV^47^By making a deal with an evil power, the character  makes himself even more resistant to magic.
-Boost Spell-Like Ability^BV^47^One of the creature's spell-like abilities is  harder to resist than it otherwise would be.
-Born Duelist^OA^61^You claim descent from Mirumoto, one of the  first two samurai to join Togashi in his meditative retreat.
-Born Flyer^RW^148^You can fly as though born to do it.
-Born of the Three Thunders^CAr^76^You have learned to marry the power of lightning  and thunder in your electricity and sonic spells.
-Bowslinger^Und^24^You can ready ranged weapons surprisingly quickly.
-Brachiation^CAd^106^You can swing through trees like a monkey.
-Brachiation^MW^21^You move through trees like a monkey.
-Breadth of Knowledge^UA^92^Your time spent plumbing the depths of magic  knowledge has resulted in a treasure trove of obscure facts.
-Breathing Link^Rac^161^You can allow a person adjacent to you to breathe  water.
-Breathing Link^Sto^92^You can allow a person adjacent to you to breathe  water.
-Brew Potion^PH^89^You can create potions, which carry spells within  themselves.
-Bright Sigil^RD^150^You have established a greater degree of control  over your sigils. When you concentrate, you can emit strong illumination  from the glowing symbols that surround your head.
-Brutal Throw^CAd^106^You have learned how to hurl weapons to deadly  effect.
-Brute Fighting^RE^116^Your extensive training with two-handed weapons  is revealed through brutally effective tactics.
-Bullheaded^FRCS^34^The stubbornness and determination of your kind  is legendary.
-Bullheaded^PG^37^The stubbornness and determination of your kind  are legendary.
-Bulwark of Defense^EL^51^Your defensive stance bonuses increase.
-Burrow Friend^RS^137^Your natural rapport with burrowing mammals  improves.
-Burrowing Power^XPH^43^Your powers sometimes bypass barriers.
-Calishite Elementalist^Rac^161^You are a student of the Calishite tradition  of elemental magic and have mastered its mysterious lore. You may choose  to specialize in air magic or fire magic.
-Call of the Undying^RE^108^You call upon the power of the Undying Court  to instantly recall a previously cast spell.
-Caravanner^Rac^162^You are skilled at leading caravans along established  trade routes.
-Catfolk Pounce^RW^148^You can rush unaware foes and deliver several  attacks before they have a chance to respond.
-Caustic Adaptation^Und^24^Long have your ancestors hunted and been hunted  in the depths. Natural selection has given your blood an unpalatable, acidic  quality.
-Cavalry Charger^CW^108^Fighting from the back of a steed is second  nature to you.
-Caver^Und^24^You are knowledgeable about the secrets of the  subterranean world and wise in its ways.
-Celestial Bloodline^Rac^162^Some of your latent abilities have matured.
-Celestial Familiar^BE^41^As long as you are able to acquire a new familiar,  you may receive a celestial as a familiar.
-Celestial Heritage^PlH^38^You are descended from creatures native to the  Upper Planes
-Celestial Mount^BE^42^Your special mount is a true creature of the  heavens.
-Celestial Summoning Specialist^PlH^38^You can select from a larger number of options  when summoning good creatures.
-Centaur Trample^RW^148^You have trained to use your large body and  unique physiology against your foes. You have learned how to knock down  opponents and ride over them in combat.
-Chain Power^XPH^44^You can manifest powers that arc to hit other  targets in addition to the primary target.
-Chain Spell^CAr^76^You can cast spells that arc to other targets  in addition to your primary target.
-Chain Spell^TB^39^You can cast spells that arc to other targets  in addition to your primary target.
-Chakram Ricochet^CR^17^You can hurl a chakram so that it strikes two  enemies instead of one.
-Chameleon Hide^SK^144^You can alter the hue of your scales to match  the surrounding terrain.
-Channel Charge^LE^7^You can power a charged magic item with your  own magical ability.
-Channel Legacy^WL^13^You can call upon the hidden strength within  your legacy item to empower yourself for a single spectacular effort.
-Channeled Rage^RD^150^You can focus your rage to counter charms and  compulsions.
-Chant of Fortitude^CAd^113^You can channel the power of your bardic music  to sustain your allies, allowing them to function even after receiving wounds  that would cause others to falter.
-Chaotic Mind^XPH^44^The turbulence of your thoughts prevents others  from gaining insight into your actions.
-Chaotic Rage^EL^51^Your rage is particularly damaging to lawful  creatures.
-Chariot Archery^SF^78^You are skilled at using ranged weapons from  a chariot.
-Chariot Charge^SF^79^You are skilled at charging with your chariot.
-Chariot Combat^SF^78^You are skilled in chariot combat.
-Chariot Sideswipe^SF^79^You are skilled at using your chariot's scythe  blades against foes.
-Chariot Trample^SF^78^You are trained in using your chariot to knock  down opponents.
-Charlatan^SaS^38^You're adept at fooling people. You know how  to tell them just what they want to hear.
-Charm Immunity^SK^145^You are immune to charm effects.
-Charm Resistance^SK^145^You can resist charm effects better than you  otherwise could.
-Cheetah Tribe Sprint^ShS^19^You have learned the secret of lightning-fast  running from the cheetah that roams the plains where you live.
-Cheetah's Speed^CD^79^You can run with the speed of the cheetah.
-Child of Winter^ECS^51^You are trained in the druidic traditions of  the Children of Winter, an Eldeen Reaches sect that embraces death and decay.
-Chink in the Armor^SaS^38^You are an expert at slipping a weapon between  armor plates or into seams.
-Choke Hold^OA^61^You have learned the correct way to apply pressure  to render an opponent unconscious.
-Chondathan Missionary^Rac^162^Your training has emphasized spells that help  you spread the word of your faith.
-Chosen of Iborighu^Fr^47^You gain features that identify you as an ally  to the church of Iborighu and grant you supernatural qualities.
-Chosen Weapon Specialization^PG^135^You deal more damage than normal when wielding  your deity's chosen weapon.
-Circle Kick^SF^5^You kick multiple opponents with the same attack  action.
-Circle Magic^Gh^29^You know how to use your connection to Galaedros  the Wood God to channel magical power to another spellcaster of your faith.
-City Slicker^RD^150^You are very familiar with city life and the  inner workings of your hometown.
-Clan Prestige^RS^137^Your actions have brought you some measure of  fame and respect from your clan, whether from battle prowess or years of  service to the clan.
-Cleave^PH^92^You can follow through with powerful blows.
-Clever Wrestling ^CW^97^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
-Clever Wrestling^Dr^103^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
-Clever Wrestling^MW^22^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
-Clever Wrestling^Sto^92^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
-Cliffwalk Elite^ECS^52^Your shifter trait improves.
-Cliffwalk Elite^RE^113^Your cliffwalk shifter trait improves.
-Climb Like an Ape^CAd^114^You can improve your climbing ability.
-Clinging Breath^Dr^67^Your breath weapon clings to creatures and continues  to affect them in the round after you breath.
-Cloak Dance^XPH^44^You are skilled at using optical tricks to make  yourself seem to be where you are not.
-Closed Mind^XPH^44^Your mind is better able to resist psionics  than normal.
-Close-Quarters Fighting^Rac^162^You are skilled at resisting grapple attacks  from creatures that usually grapple opponents.
-Close-Quarters Fighting^CW^97^You are skilled at fighting at close range and  resisting grapple attempts.
-Close-Quarters Fighting^Dr^103^You are skilled at fighting at close range and  resisting grapple attempts.
-Close-Quarters Fighting^SF^5^You are skilled at fighting at close range and  resisting grapple attacks.
-Cobra Head^SK^145^You can extend the skin of your neck into a  cobra hood.
-Cold Endurance^Fr^47^You can exist with ease in low-temperature environments.
-Cold Focus^Fr^47^Your cold spells are more potent than normal.
-Cold Iron Tracery^RE^119^Cold-forged iron that runs through your body  allows you to overcome the supernatural defenses of certain creatures and  protecting against some magical attacks.
-Cold Spell Specialization^Fr^47^You do additional damage with cold spells.
-Collegiate Wizard^CAr^181^You have undergone extensive training in a formal  school for wizards.
-Colossal Wild Shape^EL^52^You can wild shape into animals of Colossal  size.
-Combat Archery^CW^151^You can fire a bow in melee safely.
-Combat Archery^EL^52^You can fire a bow in melee safely.
-Combat Brute^CW^110^You employ strength and leverage to great effect  in battle.
-Combat Casting^PH^92^You are adept at casting spells in combat.
-Combat Expertise^PH^92^You are trained at using your combat skill for  defense as well as offense.
-Combat Insight^CW^151^Your keen intellect allows you to place melee  attacks where they will deal the most damage.
-Combat Intuition^CAd^106^Your keen understanding of your opponent's moves  and your instinctive feel for the flow of combat enable you to shrewdly  assess your opponent's combat capabilities.
-Combat Manifestation^XPH^44^You are adept at manifesting powers in combat.
-Combat Reflexes^PH^92^You can respond quickly and repeatedly to opponents  who let their defenses down.
-Communicator^CAr^76^You possess a magical understanding of the essence  of language.
-Complementary Insight^RD^150^You get more out of having skills that work  well together.
-Conductivity^UA^92^You have crude control over electricity effects  near you.
-Confound the Big Folk^RW^153^You excel when battling foes bigger than you  are.
-Consecrate Spell^BE^42^You can imbue your spells with the raw energy  of good, by the grace of a celestial power.
-Consecrate Spell^CD^79^You can imbue your spells with the raw energy  of good.
-Consecrate Spell Trigger^BE^42^You can channel holy power through a spell trigger  item, such as a wand or staff.
-Consecrate Spell-Like Ability^BE^42^You can channel holy power into your spell-like  abilities.
-Construct Lock^RE^119^Your knowledge of construct nature allows you  to deal extra damage to or even immobilize such foes.
-Contagious Paralysis^LM^25^Your paralyzing attack is contagious.
-Control Visage^Gh^29^Your ghost body is shaped as if you were alive  and unharmed, and you can control what your ghost body appears to wear.
-Controlled Immolation^UA^92^If you catch on fire, the flames don't hurt  you.
-Controlled Respiration^SS^31^You can stay out of water longer than you otherwise  could.
-Cool Head^OA^61^You are descended from the great diplomat Ide,  who was chosen to be the voice of Shinjo in all dealings with strangers.
-Cooperative Spell^CAr^76^You can cast spells to greater effect in conjunction  with the same spell cast by another individual.
-Cooperative Spell^TB^39^You can cast spells to greater effect in conjunction  with the same spell cast by another individual.
-Coordinated Shot^HB^96^You are extraordinarily talented at making ranged  attacks past your allies.
-Coordinated Strike^RW^149^You and your animal companion or special mount  can coordinate your melee attacks to gain an advantage in combat.
-Cormanthyran Moon Magic^LE^7^You have mastered the ancient elven techniques  of drawing power from Sehanine Moonbow's light.
-Cornered Rat^DCS^85^You can go from piteous groveling to a murderous  fury in the blink of an eye.
-Corpse Malevolence^Gh^29^You can possess and animate dead bodies.
-Corpsecrafter^LM^25^Undead you raise or create are tougher than  normal.
-Corrupt Arcane Studies^Gh^29^You have dabbled in strange magic that has increased  your power but adversely affected your mind.
-Corrupt Spell^BV^47^The character can transform one of her spells  into a thing of evil due to a deal she makes with an evil power.
-Corrupt Spell^CD^79^You can transform one of your spells into an  evil version of itself.
-Corrupt Spell^CR^17^You can transform one of your spells into a  thing of evil due to a deal you make with an evil power.
-Corrupt Spell-Like Ability^BV^48^One of the creature's spell-like abilities is  powered by evil. A dark pact provides the creature with unholy energy.
-Corrupted Wild Shape^LM^25^You have learned to use the necromantic energy  that powers your undead form to overcome the inability of undead creatures  to wild shape.
-Corrupting Touch^Gh^29^Your touch can damage creatures.
-Cosmopolitan^FRCS^34^Your exposure to the thousand forking paths  of the city has taught you things you ordinarily would never have uncovered.
-Cosmopolitan^PG^37^You've been lied to more times than you can  count.
-Cougar's Vision^CAd^114^You can see in the dark like a cat.
-Courageous Rally^HB^97^You can rally demoralized foes with your bardic  music.
-Courteous Magocracy^FRCS^34^You were raised in a land where mighty wizards  order affairs.
-Cover Your Tracks^ShS^20^You are good at masking your route, making it  difficult for others to track you.
-Craft Aboleth Glyph^LoM^22^An aboleth with this feat can create magic glyphs  that store spells or have specialized effects of their own.
-Craft Alchemical Item^UA^99^You are capable of creating alchemical items  and substances.
-Craft Cognizance Crystal^XPH^44^You can create psionic cognizance crystals  that store power points.
-Craft Construct^MM^303^The creature can create golems and other magic  automatons that obey its orders.
-Craft Construct^MM3^206^A creature with this feat can create golems  and other magic automatons that obey its orders
-Craft Contingent Spell^CAr^77^You know how to attach semipermanent spells  to a creature and set them to activate under certain conditions.
-Craft Contingent Spell^UE^42^You know how to create contingent spells, which  are semipermanent spells that can be 'worn' and activated under certain  conditions.
-Craft Crystal Weapon^OA^61^You can create magic weapons from Kuni crystal,  which is deadly to creatures of the Shadowlands.
-Craft Dorje^XPH^44^You can create slender crystal wands called  dorjes that manifest powers when charges are expended.
-Craft Epic Magic Arms and Armor^EL^52^You can craft magic arms and armor of epic power.
-Craft Epic Rod^EL^52^You can craft magic rods of epic power.
-Craft Epic Staff^EL^52^You can craft magic staffs of epic power.
-Craft Epic Wondrous Item^EL^52^You can craft wondrous items of epic power.
-Craft Magic Arms and Armor^PH^92^You can create magic weapons, armor, and shields.
-Craft Masterwork Armor^UA^99^You are trained in the creation of fine armor  and shields.
-Craft Masterwork Ranged Weapon^UA^99^You are trained in the creation of fine ranged  weapons and ammunition.
-Craft Masterwork Weapon^UA^99^You are trained in the creation of fine melee  and thrown weapons.
-Craft Psicrown^XPH^44^You can create psicrowns, which have multiple  psionic effects.
-Craft Psionic Arms and Armor^XPH^44^You can create psionic weapons, armor, and shields.
-Craft Psionic Construct^XPH^45^You can create golems and other psionic automatons  that obey your orders.
-Craft Psionic Seal^LoM^69^A creature with this feat can create psionic  glyphs or symbols that hold spells or psionic powers until triggered.
-Craft Rod^PH^92^You can create magic rods, which have varied  magical effects.
-Craft Rune Circle^RS^137^You can create rune circles, stationary magic  items that hold a variety of spells and effects.
-Craft Scepter^LE^8^You know the ancient Netherese secret of creating  magic scepters.
-Craft Skull Talisman^Fr^47^You can create skull talismans, which carry  spells within themselves.
-Craft Staff^PH^92^You can create magic staffs, each of which has  multiple magical effects.
-Craft Talisman^OA^61^You can create magic fetishes, single-use magic  items that hold spells until triggered.
-Craft Universal Item^XPH^45^You can create universal psionic items.
-Craft Wand^PH^92^You can create wands, which hold spells.
-Craft Wondrous Item^PH^92^You can create a wide variety of magic items.
-Craven^CR^17^Like most sly rogues, you are a dangerous coward.  However, your sneak attacks deal more damage than normal.
-Create Infusion^MW^22^You store a divine spell within a specially  prepared herb.
-Create Portal^FRCS^34^You have learned the ancient craft of creating  a portal.
-Crescent Moon^CW^113^You have mastered the style of fighting with  sword and dagger.
-Crowd Tactics^RD^156^You are adept at moving through and fighting  in crowds.
-Crush^SS^31^Like a dragon, you can hurl your body onto opponents  to deal tremendous damage.
-Cumbrous Dodge^SS^31^You have a chance to dodge attacks that hit  you, but at a cost.
-Cumbrous Fortitude^SS^31^You have a greater chance than normal to resist  attacks against your vitality, but at a cost.
-Cumbrous Reflexes^SS^31^You have a greater chance to resist attacks  against your agility, but at a cost.
-Cumbrous Will^SS^31^You have a greater chance to resist attacks  against your willpower, but at a cost.
-Cunning Sidestep^Dr^103^You have a better than normal chance to avoid  being bull rushed or tripped.
-Curative Legacy^WL^14^Your item's legacy is so linked with your aura  that it restores your health each time it is activated.
-Curling Wave Strike^Sto^92^Mimicking the forceful power of the wave, you  can trip multiple foes as part of the same strike.
-Dallah Thaun's Luck^RW^149^You can rely on a good dose of luck to get you  through almost any scrape.
-Damage Reduction^CW^151^You can shrug off some damage from attacks.
-Damage Reduction^EL^52^You can shrug off some damage from attacks.
-Dancing Blade^Gh^30^You have an energetic fighting style modeled  after traditional Salkirian dancing.
-Dancing with Shadows^RE^117^You have studied shesan talarash dasyannah,  the martial dance of the kalashtar.
-Danger Sense^CAd^106^You are one twitchy individual.
-Danger Sense^MH^25^You are one twitchy mother goose.
-Darguun Mauler^RE^108^The memory of your people's lost glory drives  your brutal mastery of the weapons of Darguun.
-Dark Speech^BV^48^The character learns a smattering of the language  of truly dark power.
-Darkstalker^LoM^179^You have learned how to stalk and surprise creatures  whose senses are very different from those of a humanoid.
-Dash^CW^97^You can move faster than normal.
-Dash^MH^25^You can move faster than normal.
-Dash^SaS^38^You move faster than normal for your race.
-Daunting Presence^LM^25^You are skilled at inducing fear in your opponents.
-Daunting Presence^MH^25^You are skilled at inducing fear in your opponents.
-Dauntless^PG^37^You can stand up to greater punishment than  most and still keep going.
-Daylight Adaptation^PG^37^You have accustomed yourself to the painful  sunlight of the surface world.
-Daylight Adaptation^RE^108^You have grown accustomed to living in the surface  world, such that bright light no longer blinds or dazzles you.
-Daylight Adaptation^FRCS^34^Through long exile from the shadowed homelands  of your kind, you have learned to endure the painful sunlight of the surface  world.
-Deadly Chill^LM^25^Undead you raise or create deal more damage  than normal.
-Deadly Poison^SK^145^Your poison attack deals more damage than normal.
-Deadly Poison^SS^31^Your poison attack deals more damage than normal.
-Deadly Precision^XPH^45^You empty your mind of all distracting emotion,  becoming an instrument of deadly precision.
-Deadly Spittle^SK^145^You can use your spit attack against multiple  opponents.
-Deafening Song^EL^52^Your bardic music deafens those nearby.
-Death Blow^CAd^106^You waste no time in dealing with downed foes.
-Death Blow^SF^6^You waste no time in dealing with downed foes.
-Death Frenzy^LoM^22^When an aboleth takes this feat, its sense of  immortality rebels against the very concept of death.
-Death Master^LM^26^Foes are especially afraid of your critical  hits.
-Death of Enemies^EL^52^You can instantly slay your favored enemies  with a single strike.
-Deceitful^PH^93^You have a knack for disguising the truth.
-Deep Denizen^SS^32^You are adapted to a subterranean environment.
-Deep Impact^XPH^45^You can strike your foe with a melee weapon  as if making a touch attack.
-Deep Vision^RS^137^Your mental focus helps you see farther with  darkvision.
-Deepening Darkness^Rac^162^Your inherent ability to create darkness is  more powerful than normal.
-Deepspawn^LoM^179^Your body undergoes a shocking degeneration  into something that is strikingly inhuman.
-Defensive Archery^RW^150^You can avoid attacks of opportunity when making  ranged attacks while threatened.
-Defensive Strike^CW^97^You can turn a strong defense into a powerful  offense.
-Defensive Strike^OA^62^You can turn a strong defense into a powerful  offense.
-Defensive Throw^CW^97^You can use your opponent's weight, strength,  and momentum against her, deflecting her attack and throwing her to the  ground.
-Defensive Throw^OA^62^You can use your opponent's  weight, strength, and momentum against her, deflecting her attack and throwing  her to the ground.
-Deflect Arrows^PH^93^You can deflect incoming arrows, as well as  crossbow bolts, spears, and other projectile or thrown weapons.
-Deflective Armor^RS^137^Your armor shields you from touch attacks as  well as regular blows.
-Deformity (Clawed Hands)^BV^48^Because of intentional self-mutilation, the  character has deformed arms and hands ending in sharp claws.
-Deformity (Eyes)^BV^48^The character has either drilled a hole in her  forehead trying to add a third eye, or she has supernaturally scarred one  of her regular eyes.
-Deformity (Face)^BV^48^Because of intentional self-mutilation, the  character has a hideous face.
-Deformity (Gaunt)^BV^48^Through intentional starvation and macabre operations,  the character is grossly underweight.
-Deformity (Obese)^BV^48^Through intentional gorging and general gluttony,  the character is obese.
-Deft Hands^PH^93^You have exceptional manual dexterity.
-Deft Opportunist^CAd^106^You are prepared for the unexpected.
-Deft Opportunist^MH^25^You are prepared for the unexpected.
-Deft Strike^CAd^106^You can place attacks at weak points in your  opponent's defenses.
-Deft Strike^Dr^103^You can place attacks at weak points in your  opponent's defenses.
-Delay Power^XPH^45^You can manifest powers that go off up to 5  rounds later.
-Delay Spell^CAr^77^You can cast spells that take effect after a  short delay of your choosing.
-Delay Spell^FRCS^34^You can cast spells that take effect after a  short delay of your choosing.
-Delay Spell^PG^37^You can cast spells that take effect after a  short delay of your choosing.
-Delay Spell^TB^39^You can cast spells that take effect after a  short delay of your choosing.
-Demonsworn Knight^CR^22^A scornful champion of the demon princes, you  detest and oppose devils and other creatures that refuse to heed the call  of chaos.
-Desert Dweller^SS^32^You are adapted to a desert environment.
-Destruction Retribution^LM^26^Undead you raise or create harbor a retributive  curse that is unleashed if they are destroyed.
-Destructive Rage^CW^97^You can shatter barriers and objects when enraged.
-Destructive Rage^MW^22^You shatter barriers and objects when enraged.
-Detach^SS^32^You can remove a part of your body and use it  as a ranged weapon.
-Devastating Critical^Dr^68^Choose one type of melee weapon, such as a claw  or bite. With that weapon, you are capable of killing any creature with  a single strike.
-Devastating Critical^EL^53^Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you are capable of killing any creature with  a single strike.
-Devoted Inquisitor^CAd^107^Your faithful service to your patron deity involves  training and methods that many paladins consider questionable.
-Devoted Performer^CAd^107^You have foregone the pursuit of frivolous musical  talents, instead entering religious training in service of honor and justice.
-Devoted Tracker^CAd^108^You have found a balance between your woodland  training and your devotion to religious training, blending these two aspects  into one seamless whole.
-Dexterous Fortitude^EL^53^You are able to resist physical attacks with  exceptional agility.
-Dexterous Will^EL^53^You are able to resist compelling effects with  exceptional agility.
-Diehard^Gh^30^You can remain conscious after attacks that  would fell others.
-Diehard^PH^93^You can remain conscious after attacks that  would fell others.
-Diligent^PH^93^Your meticulousness allows you to analyze minute  details that others miss.
-Diminutive Wild Shape^EL^53^You can wild shape into animals of Diminutive  size.
-Dinosaur Hunter^RE^108^Your extraordinary knowledge of dinosaurs grants  you a special aptitude for tracking and hunting them.
-Dinosaur Wrangler^RE^108^You are attuned to dinosaurs and possess a special  bond with them.
-Dire Charge^Dr^68^You can make a full attack as part of a charge.
-Dire Charge^EL^53^You can make a full attack as part of a charge.
-Dire Flail Smash^CR^17^You have mastered the style of fighting with  the dire flail and have learned to deal thunderous blows with the weapon.
-Dirty Fighting^SF^6^You know the brutal and effective fighting tactics  of the streets and back alleys.
-Dirty Rat^CR^20^You are quite adept at slipping under a foe's  guard while he's distracted.
-Disciple of Darkness^BV^49^The character formally supplicates himself to  an archdevil.
-Disciple of Darkness^CR^23^You formally supplicate yourself to an archdevil.  In return for this obedience, you gain a small measure of the archdevil's  power.
-Disciple of the Sun^CD^80^You can destroy undead instead of merely turning  them.
-Discipline^FRCS^34^Your people are admired for their single-minded  determination and clarity of purpose.
-Discipline^OA^62^Your ancestor, Naka Kaeteru, was the first Grand  Master of all the elements, a master of meditation and contemplation.
-Discipline^PG^38^Your people are admired for their single-minded  determination and clarity of purpose.
-Disentangler^Rac^162^Thanks to the teachings of Thard Harr, you have  practiced evading the attacks of jungle plants.
-Disguise Spell^CAd^108^You can cast spells without observers noticing.
-Disguise Spell^DD^50^The deity can cast spells without observers  noticing it.
-Disguise Spell^SaS^38^You can cast spells without observers noticing.
-Disintegration Finesse^LoM^44^A creature with this feat can use disintegrate  effects to affect smaller, more exacting areas.
-Disjunction Ray^LoM^45^A beholder with this feat can narrow its antimagic  cone down to an eye ray that disjoins magic.
-Distant Shot^EL^53^You can target a thing you can see with a ranged  weapon.
-Disturbing Visage^RE^117^You can change your features to chilling effect.
-Dive for Cover^CAd^108^You can dive behind cover or drop to the ground  quickly enough to avoid many area effects.
-Diverse Background^RD^156^You have a wide and diverse background, giving  you a greater understanding of different occupations.
-Divine Accuracy^LM^26^You can channel positive energy to give your  allies' melee attacks another chance to strike true against incorporeal  creatures.
-Divine Cleansing ^CW^106^You can channel energy to improve your allies'  ability to resist attacks against their vitality and health.
-Divine Cleansing^DF^19^You can channel energy to improve you and your  allies' ability to resist poison and curses.
-Divine Damage Reduction^RS^137^You can channel energy to give yourself a small  amount of protection from weapons.
-Divine Energy Focus^Gh^30^You have a gift for channeling positive or negative  energy.
-Divine Metamagic^CD^80^You can channel energy into some of your divine  spells to make them more powerful.
-Divine Might^CW^106^You can channel energy to increase the damage  you deal in combat.
-Divine Might^DD^50^The deity can channel energy to increase its  damage in combat.
-Divine Might^DF^19^You can channel energy to increase the damage  you deal in combat.
-Divine Might^FP^214^You can channel energy to increase your damage  in combat.
-Divine Resistance^CW^106^You can channel energy to temporarily reduce  damage you and your allies take from some sources.
-Divine Resistance^DF^19^You can channel energy to temporarily reduce  damage you and your allies take from some sources.
-Divine Shield^CW^106^You can channel energy to make your shield more  effective for either offense or defense.
-Divine Shield^DF^19^You can channel energy to make your shield more  effective for either offense or defense.
-Divine Spell Penetration^PG^135^Choose one component of your alignment. Any  divine spells of that alignment that you cast are more capable of defeating  spell resistance than normal.
-Divine Spell Power^CD^80^You can channel positive or negative energy  to enhance your divine spellcasting ability.
-Divine Spellshield^RS^137^You can channel energy to help your allies resist  spells and spell-like effects.
-Divine Vengeance^DD^50^The deity can channel energy to do additional  damage in combat against undead.
-Divine Vengeance^DF^20^You can channel energy to deal additional damage  against undead in melee.
-Divine Vengeance^FP^214^You channel energy to do additional energy damage  in combat against undead.
-Divine Vigor^CW^108^You can channel energy to increase your speed  and durability.
-Divine Vigor^DF^20^You can channel energy to increase your speed  and Constitution.
-Diving Charge^RW^150^You can dive down at a target to deal a devastating  strike.
-Dodge^PH^93^You are adept at dodging blows.
-Domain Focus^CD^80^You have mastered the subtle intricacies of  the divine power you've devoted yourself to.
-Domain Spontaneity ^CD^80^You are so familiar with one of your domains  that you can convert other prepared spells into spells from that domain.
-Doomspeak^CR^20^You can demoralize an enemy with horrible condemnations  and grim portents of impending doom.
-Double Hit^MH^25^You can react with your off hand to make an  additional attack along with an attack of opportunity.
-Double Steel Strike^ECS^52^Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the two-bladed  sword.
-Double Wand Wielder^CAr^77^You can activate two wands at the same time.
-Draconian Breath Weapon^DCS^85^You have harnessed your draconic heritage and  can attack with a dragonlike breath weapon.
-Draconic Breath^CAr^77^You can convert your arcane spells into a breath  weapon.
-Draconic Claw^CAr^77^You develop the natural weapons of your draconic  ancestors.
-Draconic Flight^CAr^77^The secret of draconic flight is revealed to  you, granting you the ability to fly occasionally.
-Draconic Heritage^CAr^77^You have greater connection with your distant  draconic bloodline.
-Draconic Knowledge^Dr^69^You are attuned to nature and the elements and  can draw on deep wells of knowledge.
-Draconic Legacy^CAr^78^You have realized greater arcane power through  your draconic heritage.
-Draconic Power^CAr^78^You have greater power manipulating the energies  of your heritage.
-Draconic Presence^CAr^78^When you use your magic, your mere presence  can terrify those around you.
-Draconic Resistance^CAr^78^Your bloodline hardens your body against the  energy type of your progenitor.
-Draconic Skin^CAr^78^Your skin takes on the sheen, luster, and hardness  of your draconic parentage.
-Dragon Cohort^Dr^104^You gain the service of a loyal dragon ally.
-Dragon Familiar^Dr^104^When you are able to acquire a new familiar,  you may select a wyrmling dragon as a familiar.
-Dragon Hunter ^Dr^104^You have made a special study of dragons and  know how to defend against a dragon's attacks.
-Dragon Hunter Bravery ^Dr^104^You resist dragons' frightful presence, and  your mere presence helps others resist as well.
-Dragon Hunter Defense^Dr^104^Your insight into the tactics and abilities  of dragons grants you awareness of how best to avoid their magical attacks.
-Dragon Rage^ECS^52^You call upon the power of your dragon totem  to enhance your barbarian rage.
-Dragon Steed^Dr^105^You have earned the service of a loyal draconic  steed.
-Dragon Totem^ECS^52^As a proud warrior of the barbarian tribes of  Argonnessen and Seren, you have claimed one of the true dragon types as  your totem -- a patron, protector, and source of strength.
-Dragon Wild Shape^Dr^105^You can take the form of a dragon.
-Dragon Wild Shape^EL^53^You can take the form of a dragon.
-Dragonbane^Dr^105^You have made a special study of dragons and  are adept at pulling off deliberate attacks that take advantage of a dragon's  weak spots.
-Dragoncrafter^Dr^105^You can make special weapons, armor, and other  items using parts of dragons as materials.
-Dragondoom^Dr^105^You have learned how to place blows against  a dragon that deal tremendous damage.
-Dragonfoe^Dr^105^You have learned how to attack dragons more  effectively than most other individuals.
-Dragonfriend^Dr^105^You are a known and respected ally of dragons.
-Dragon's Toughness^MW^22^You are incredibly tough.
-Dragonsong ^Dr^105^Your song or poetics echo the power of the dragonsong,  an ancient style of vocal performance created by dragons in the distant  past.
-Dragonthrall^Dr^105^You have pledged your life to the service of  evil dragonkind.
-Draw from the Land^UE^43^You can draw strength and sustenance from the  land itself.
-Dread Tyranny^RD^154^A devoted student of Hextor's militant teachings,  you are skilled at intimidating and dominating weaker beings.
-Dreadful Wrath^PG^38^You are terrible to behold in battle, and few  foes have the heart to face you without quailing
-Dreamsight Elite^RE^113^Your dreamsight shifter trait improves.
-Drift Magic^Sa^49^You can tap the power of drift magic.
-Drow Eyes^Rac^162^You have trained your eyes to see in the dark  as well as your full drow ancestors.
-Drow Skirmisher^RE^109^Your experience with the guerrilla-style combat  of the deep jungle grants you mastery of the weapons of the drow.
-Dual Strike^CAd^108^You are an expert skirmisher skilled at fighting  with two weapons.
-Dual Strike^SF^6^Your combat teamwork makes you a more dangerous  foe.
-Duergar Mindshaper^Rac^162^You are accomplished at using the power of your  mind to overcome weaker personalities.
-Dungeoneer's Intuition^CSW^144^You can sense when things don't feel right,  and you have a knack for avoiding deadly traps and ambushes.
-Durable Form^LoM^180^You are much more resilient than the fragile  humanoids that do not share your aberrant heritage.
-Dust Cloud^SS^33^You can sweep dust into the air to hide from  opponents.
-Dwarf's Toughness^MW^22^You are tougher than you were before.
-Dwarven Armor Proficiency^RS^138^You are familiar with exotic armor of dwarven  manufacture and understand how to use it properly.
-Eagle Claw Attack^CW^97^Your superior insight allows you to strike objects  with impressive force.
-Eagle Claw Attack^OA^62^Your unarmed attacks can shatter objects.
-Eagle Claw Attack^SF^6^Your unarmed attacks shatter objects.
-Eagle Tribe Vision^ShS^20^You have keen eyesight reminiscent of the giant  eagles that fly over your tribal lands.
-Eagle's Fury^Sa^49^You know how to wield the eagle's claw with  deadly speed.
-Eagle's Wings^CD^80^You can take wing and fly with the grace of  an eagle.
-Earth Adept^RS^138^You are in tune with the ground at your feet,  making you more dangerous in the shifting conditions of combat.
-Earth Fist^RS^138^Your bond with the earth and martial training  has imbued your fists with the qualities of cold iron.
-Earth Heritage^PlH^38^You are descended from creatures native to the  Elemental Plane of Earth.
-Earth Master^RS^138^You are in tune with the ground at your feet,  helping you anticipate your opponent's movements in combat.
-Earth Power^RS^138^You draw psionic energy from raw stone.
-Earth Sense^RS^138^You are in tune with the earth beneath you.
-Earth Spell^RS^138^You draw magical power from the earth beneath  your feet.
-Earth's Embrace^CW^97^You can crush opponents when you grapple them.
-Earth's Embrace^OA^62^You can crush opponents when you grapple them.
-Earth's Warding^RS^139^You can channel energy to infuse your skin with  the strength of the earth.
-Ecclesiarch^ECS^52^You command a degree of respect in your church's  hierarchy.
-Ectoplasm^Gh^30^You can create ectoplasm, a gooey physical manifestation  of base supernatural spiritual energy.
-Education^ECS^52^Some lands hold the pen in higher regard than  the sword.
-Education^FRCS^34^In your youth you received the benefit of several  years of more or less formal schooling.
-Education^Gh^31^In your youth you received the benefit of several  years of more or less formal schooling.
-Education^PG^38^You hail from a land where the pen is held in  higher regard than the sword.
-Efficient Item Creation^EL^53^Select an item creation feat. You can create  magic items using that feat much more quickly than normal.
-Eldritch Linguist^Rac^162^You have a deep understanding of how words themselves  have their own kind of magic, and a mastery of the secret syntax of power.
-Elemental Bloodline^Rac^163^You have taken on some of the aspects of the  type of element that infuses your flesh.
-Elemental Healing^CD^80^You can channel elemental energy to heal creatures  of a specific elemental subtype.
-Elemental Smiting^CD^81^You can channel elemental energy to deal extra  damage to creatures tied to a specific element.
-Elemental Spellcasting^PlH^39^Choose an element. You cast spells with that  descriptor more effectively than normal.
-Elephant's Hide^CD^81^You can thicken your skin to the toughness of  an elephant's.
-Elf Dilettante^RW^150^Throughout the long years of your life, you  have developed a talent for doing just about anything.
-Elfhunter^Und^25^Because of your cultural hatred for elves, you  have had specific training in how best to fight them.
-Elusive Target ^CW^110^Trying to land a blow against you can be a maddening  experience.
-Embed Spell Focus^Dr^69^You can embed focus components required for  your spells into your body.
-Empower Legacy^WL^14^You can use one of your item's legacy abilities  to greater effect.
-Empower Power^XPH^46^You can manifest powers to greater effect.
-Empower Spell^PH^93^You can cast spells to greater effect.
-Empower Spell-Like Ability^BV^49^The creature can use a spell-like ability with  greater effect.
-Empower Spell-Like Ability^MM^303^The creature can use a spell-like ability with  greater effect than normal.
-Empower Spell-Like Ability^MM3^206^A creature with this feat can use a spell-like  ability with greater effect than normal.
-Empower Spell-Like Ability^SS^33^You can use a spell-like ability with greater  effect than normal.
-Empower Turning^CD^81^You can turn or rebuke more undead with a single  turning attempt.
-Empower Turning^DF^20^You can turn or rebuke more undead with a single  turning attempt.
-Empower Turning^FP^214^You can turn or rebuke more undead with a single  turning attempt.
-Empower Turning^Gh^31^You can turn or rebuke more undead with a single  turning attempt.
-Empower Turning^LM^26^You can turn or rebuke greater numbers of undead  with a single turning attempt.
-Empowered Ability Damage^LM^26^Your ability damage (or ability drain) special  attack is more potent than normal.
-Empty Hand Mastery^OA^80^You have mastered the martial arts style of  'Empty Hand' -- a hard form emphasizing strikes with the hand.
-Enchanting Song^RS^139^You can channel the power of your bardic music  to temporarily increase the power of your enchantment spells.
-Endurance^PH^93^You are capable of amazing feats of stamina.
-Endure Blows^Dr^70^You are adept at lessening the effects of blows.
-Endure Sunlight^LM^26^Your vulnerability to sunlight is reduced.
-Enduring Life^LM^26^You can ignore the effect of negative levels  for a short time.
-Energize Armor^RS^139^You can charge your armor with psionic energy,  making it resistant to energy damage.
-Energize Spell^LM^26^Your spells channel positive energy to deal  extra damage to undead creatures, but are less effective against other opponents.
-Energy Admixture^CAr^78^You can modify a spell that uses one type of  energy to add an equal amount of another energy type.
-Energy Admixture^TB^39^You can modify a spell that uses one type of  energy to mix in an equal amount of another type of energy.
-Energy Affinity^MH^25^You can modify a spell that uses one type of  energy to use another type of energy.
-Energy Resistance^EL^53^You can resist the effects of a chosen type  of energy.
-Energy Substitution^CAr^79^You can modify an energy-based spell to use  another type of energy instead.
-Energy Substitution^DD^50^The deity can modify a spell that uses energy  to use another type of energy.
-Energy Substitution^Mag^21^You can modify a spell that uses one type of  energy to use another type of energy.
-Energy Substitution^TB^40^You can modify a spell that uses one type of  energy to use another type of energy.
-Enervate Spell^LM^26^Your spells channel negative energy to deal  extra damage to undead creatures, but are less effective against unliving  opponents.
-Enervating Touch^Gh^31^Your touch can bestow negative levels upon creatures.
-Enervative Healing^Rac^163^You can use the life energy of an opponent to  heal yourself.
-Enhance Effect^PG^135^You can change the characteristics of a persistent  spell effect that is already in place.
-Enhance Item^EL^114^You can increase the minimum DC for saving throws  of magic items that you
-Enhance Spell^CAr^191^You can increase the power limit of your damage-dealing  spells.
-Enhance Spell^EL^53^You can increase the power limit of your damage-dealing  spells.
-Enhanced Adhesive^Und^25^The natural adhesive you secrete becomes stickier.
-Enhanced Power Sigils^RD^152^Your illumian power sigils are more powerful  than normal.
-Enlarge Breathe^Dr^70^Your breath weapon is larger than normal.
-Enlarge Mucus Cloud^LoM^22^An aboleth with this feat can extend its mucus  cloud into a wider area.
-Enlarge Power^XPH^46^You can manifest powers farther than normal.
-Enlarge Spell^PH^94^You can cast spells farther than normal.
-Entangling Spell^CR^20^Your spell releases residual eldritch power  that entangles your enemies.
-Epic Combat Expertise ^CW^151^You have extraordinary talent at using your  combat skill for defense.
-Epic Counterspell^PG^135^You can counterspell any number of spells each  round.
-Epic Devotion^CD^89^Choose an alignment component different from  your own alignment. You are particularly resistant to spells of that alignment.
-Epic Devotion^PG^135^Choose an alignment component that you do not  possess. You are particularly resistant to spells with that descriptor.
-Epic Dodge^CAd^191^You are able to evade attacks with exceptional  agility.
-Epic Dodge^EL^54^You are able to evade attacks with exceptional  agility.
-Epic Endurance^EL^54^You are capable of legendary feats of stamina.
-Epic Expanded Knowledge^XPH^34^You learn another power.
-Epic Fortitude^Dr^70^You have tremendously high fortitude.
-Epic Fortitude^EL^54^You have tremendously high fortitude.
-Epic Inspiration^EL^54^Your bardic music provides greater inspiration  than normally possible.
-Epic Leadership^EL^54^You attract more powerful cohorts and followers  than normally possible.
-Epic Prowess^CW^151^You have great skill in combat.
-Epic Prowess^EL^54^You gain great skill in combat.
-Epic Psionic Focus^XPH^34^You can expend your psionic focus to greater  effect.
-Epic Reflexes^Dr^70^You have tremendously fast reflexes.
-Epic Reflexes^EL^54^You have tremendously fast reflexes.
-Epic Reputation^CAd^191^Your reputation provides great bonuses on interactions  with others.
-Epic Reputation^EL^54^Your reputation provides great bonuses on interactions  with others.
-Epic Skill Focus^CAd^191^Choose a skill, such as Move Silently. You have  a legendary knack with that skill.
-Epic Skill Focus^EL^54^Choose a skill, such as Move Silently. You have  a legendary knack with that skill.
-Epic Speed^EL^54^You can move much more quickly than a normal  person.
-Epic Spell Focus ^CAr^192^Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal.
-Epic Spell Focus^EL^54^Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal.
-Epic Spell Penetration^CAr^192^Your spells are tremendously potent, breaking  through spell resistance with ease.
-Epic Spell Penetration^EL^54^Your spells are tremendously potent, breaking  through spell resistance with ease.
-Epic Spellcasting^EL^55^You can create and cast spells that transcend  the most powerful existing spells.
-Epic Spellfire Wielder^PG^136^You can store more spellfire energy levels than  normal.
-Epic Sunder^CW^151^You are preternaturally tough.
-Epic Toughness^CW^151^You are specially good at using one chosen type  of weapon.
-Epic Toughness^EL^55^You are preternaturally tough.
-Epic Weapon Focus ^CW^151^You deal extra damage when attacking objects.
-Epic Weapon Focus^EL^55^Choose one type of weapon, such as a greataxe.  You are especially good at using this weapon.
-Epic Weapon Specialization^EL^55^Choose one type of weapon, such as a greataxe.  You deal extraordinary damage wielding this weapon.
-Epic Will^Dr^70^You have tremendously strong willpower.
-Epic Will^EL^55^You have tremendously strong willpower.
-Eschew Materials ^DD^50^The deity can cast spells without material components.
-Eschew Materials^EL^69^You can cast spells without material components.
-Eschew Materials^FP^214^You can cast spells without material components.
-Eschew Materials^LD^189^You can cast spells without material components.
-Eschew Materials^Mag^22^You can cast spells without material components.
-Eschew Materials^PH^94^You can cast spells without relying on material  components.
-Eschew Materials^TB^40^You can cast spells without material components.
-Eternal Strength^RD^155^You have taken Kord's fighting ways to heart.  Throwing yourself into every brawl, you draw upon your mighty deity's strength.
-Ethereal Sidestep^Gh^31^You can teleport yourself a short distance.
-Ethran^FRCS^34^You have been initiated into the secrets of  the Witches of Rashemen as a member of the Ethran, the 'untried.'
-Ethran^PG^38^You have been initiated into  the secrets of the Witches of Rashemen as a member of the Ethran, the 'untrained.'
-Ettercap Berserker^UE^43^The intense physical training required to join  your lodge has made you tougher.
-Evil Brand^BV^49^The character is physically marked forever as  a servant of an evil power or as a villain.
-Evil Brand^CR^23^You are physically marked forever as a servant  of an evil power or as a villain.
-Evil Embraced^CR^23^You embrace the power of your fiendish patron  and call upon that power in moments of great need.
-Eviscerator^LM^26^The allies of your foes are especially afraid  of your critical hits.
-Exalted Companion^BE^42^Instead of an animal companion, you have a magical  beast of good alignment.
-Exalted Smite^BE^42^Your smite ability is empowered with holy energy.
-Exalted Spell Resistance^BE^42^You are particularly resistant to evil spells.
-Exalted Turning^BE^42^You turn undead with such power that affected  undead take damage.
-Exalted Wild Shape^BE^42^You can use your wild shape ability to take  the form of a good-aligned magical beast.
-Exceptional Artisan^ECS^52^You are an expert at creating magic items faster  than usual.
-Exceptional Deflection^EL^55^You can deflect any type of ranged attack.
-Exotic Armor Proficiency^RS^139^Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly.
-Exotic Armor Proficiency^Und^25^Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly.
-Exotic Shield Proficiency^RS^139^Choose an exotic shield. You are proficient  with that type of exotic shield.
-Exotic Weapon Proficiency^PH^94^Choose a type of exotic weapon. You understand  how to use that type of exotic weapon in combat.
-Expanded Aura of Courage^HB^97^Your aura of courage protects more allies than  normal.
-Expanded Knowledge^XPH^46^You learn another power.
-Expanded Possession^Gh^31^You can ride or possess an additional type of  creature.
-Expeditious Dodge^RW^150^You're good at avoiding attacks while moving  quickly.
-Expert Siege Engineer^HB^97^You are particularly skilled at operating siege  weapons, such as catapults and battering rams.
-Expert Swimmer^Sto^92^You swim like a fish. You can stay underwater  far longer than others of your race, and you are at home in the water.
-Expert Tactician^CAd^109^Your tactical skills work to your advantage.
-Expert Tactician^SaS^38^Your tactical skills work to your advantage.
-Expert Tactician^SF^6^Your tactical skills work to your advantage.
-Explosive Spell^CAr^79^You can cast spells that blast creatures off  their feet.
-Explosive Spell^UE^43^You can cast spells that blast creatures off  their feet.
-Extend Power^XPH^46^You can manifest powers that last longer than  normal.
-Extend Rage^CW^97^You are able to maintain your rage longer than  most.
-Extend Rage^ECS^52^You are able to maintain your rage longer than  most.
-Extend Spell^PH^94^You can cast spells that last longer than normal.
-Extend Spreading Breath^Dr^70^You can convert your breath weapon into a spread  effect that can be used at range.
-Extended Life Span^EL^56^You are exceptionally long-lived.
-Extended Rage^MW^22^Your rage lasts longer than it normally would.
-Extended Rage^UE^43^Your rage lasts longer than it normally would.
-Extended Reach^SS^34^Your flexible body allows you to reach farther  than normal.
-Extra Domain Spell^MH^26^You have chosen to be more specialized in a  particular domain.
-Extra Edge^CAr^79^Your ability to deal spell damage is particularly  striking.
-Extra Favored Enemy^Gh^32^You select an additional favored enemy.
-Extra Favored Enemy^MW^22^You select an additional favored enemy.
-Extra Followers^HB^97^Your charismatic magnetism attracts even more  followers to your banner.
-Extra Invocation^CAr^79^You learn an additional invocation.
-Extra Item Space^SS^34^You can wear more magic items than are normally  allowed.
-Extra Music^CAd^109^You can use your bardic music more often than  you otherwise could.
-Extra Music^DD^50^The deity can use its bardic songs more often  than it otherwise could.
-Extra Music^ECS^52^You can use your bardic music more often than  you otherwise could.
-Extra Music^SaS^39^You can use your bardic music more often than  you otherwise could.
-Extra Rage^CW^98^You may rage more frequently than normal.
-Extra Rage^MW^22^You rage more frequently than you normally would.
-Extra Rings^ECS^53^Your familiarity with forging magic rings allows  you to make use of more rings than normal.
-Extra Shifter Trait^ECS^53^You manifest a second shifter trait while shifting.
-Extra Shifter Trait^MM3^150^You manifest a second shifter trait while shifting.
-Extra Shifter Trait^RE^114^You manifest a second shifter trait while shifting.
-Extra Silence^RS^139^You can generate a field of silence more often  than other whisper gnomes can.
-Extra Slot^CAr^79^You can cast an additional spell.
-Extra Slot^Gh^32^You can cast an extra spell.
-Extra Slot^TB^40^You can cast an extra spell.
-Extra Smiting^CW^98^You can make more smite attacks.
-Extra Smiting^DF^20^You can make more smite attacks.
-Extra Spell^CAr^79^You learn an additional spell.
-Extra Spell^TB^40^You can learn one more spell.
-Extra Spell Secret^CAr^80^You learn an additional spell secret.
-Extra Stunning^CW^98^You gain extra stunning attacks.
-Extra Stunning Attacks^SF^6^You gain extra stunning attacks when fighting  unarmed.
-Extra Turning^PH^94^You can turn or rebuke creatures more often  than normal.
-Extra Wild Shape^CD^81^You can use wild shape more frequently than  you normally could.
-Extra Wild Shape^Gh^32^You can use wild shape more frequently than  you normally could.
-Extra Wild Shape^MW^22^You use wild shape more frequently than you  normally could.
-Extra Wild Shape^Und^25^You can use wild shape more frequently than  you normally could.
-Extraordinary Artisan^ECS^53^You are an expert at creating magic items at  a lower cost than usual.
-Extraordinary Concentration^CAd^109^Your mind is so focused that you can cast spells  even while concentrating on another spell.
-Extraordinary Spell Aim^CAd^109^You can shape a spell's area to exclude one  creature from its effects.
-Eyes in the Back of Your Head^CW^98^Your superior battle sense helps minimize the  threat of flanking.
-Eyes in the Back of Your Head^DD^50^The deity's superior battle sense helps minimize  the threat of flanking attacks.
-Eyes in the Back of Your Head^SF^6^Your superior battle sense helps minimize the  threat of flanking.
-Eyes of Light^Rac^163^You can focus the holy power within you to create  a beam of destructive light energy.
-Eyes to the Sky^UA^93^You have an instinctive sense of when someone  is magically watching you.
-Fade^Gh^32^You can make your ghost body more diaphanous  and difficult to detect.
-Faith in the Frost^Fr^48^You channel frozen energies from your deity  when you turn or rebuke creatures.
-Falling Far Strike^OA^62^You have mastered the art of striking a nerve  that blinds a humanoid opponent.
-False Pretenses^UA^93^Those who try to charm you get an unpleasant  surprise.
-Familiar Concentration^LE^8^In the tradition of Narfell's ancient summoners,  your familiar can concentrate to maintain spells for you.
-Familiar Spell^DMG^209^Your familiar can cast a spell.
-Familiar Spell^EL^56^Your familiar can use one of your spells as  a spell-like ability.
-Familiar Spell^Und^25^You are so well acquainted with the spells you  have mastered that you can store the prepared spells in the mind of your  familiar.
-Far Horizons^RD^155^By dedicating yourself to the philosophies of  Fharlanghn, you have become a more world-wise and capable traveler.
-Far Shot^PH^94^You can get greater distance out of a ranged  weapon.
-Fast Healing^Dr^70^You heal your wounds very quickly.
-Fast Healing^EL^56^You heal your wounds very quickly.
-Fast Wild Shape^CD^81^You assume your wild shape faster and more easily  than you otherwise could.
-Fast Wild Shape^Gh^32^You can assume your wild shape faster and more  easily than you normally could.
-Fast Wild Shape^MW^22^You assume your wild shape faster and more easily  than you otherwise could.
-Faster Healing^CW^98^You recover faster than normal.
-Faster Healing^MW^22^You recover faster than others do.
-Favored Critical^MW^23^You know how to hit your favored enemies where  it hurts.
-Favored in House^ECS^53^You are a member of one of the dragonmarked  mercantile houses and wield some influence in that house.
-Favored of the Companions^BE^43^You swear allegiance to the Talisid or one of  the Five Companions, the paragons of the guardinals, and in exchange gain  power to act on their behalf.
-Favored of the Zulkirs^PG^176^Through your position of prestige among the  Red Wizards, you have gained access to secrets of evil magic known to few  outside the zulkirs themselves.
-Favored Power Attack^CW^98^You are able to deal more damage against your  favored enemies.
-Fearless^PG^38^You are a stranger to fear.
-Fearless Destiny^RD^152^Your grand destiny allows you to avoid death.
-Fearsome and Fearless^OA^62^You claim descent from the first Akodo, the  paragon of samurai virtue.
-Feign Weakness^SF^6^You capitalize on your foe's perceptions of  your unarmed status.
-Fell Animate^LM^26^Living foes slain by your spell may rise as  zombies.
-Fell Drain^LM^27^Living foes damaged by your spell also gain  a negative level.
-Fell Frighten^LM^27^Living foes damaged by your spell are also shaken.
-Fell Shot^XPH^46^You can strike your foe with a ranged weapon  as if making a touch attack.
-Fell Weaken^LM^27^Living foes damaged by your spell are also weakened.
-Feral Animal Companion^CR^20^You can enslave a feral animal and adopt it  as your animal companion.
-Fiendish Bloodline^Rac^163^Some of your latent abilities, inherited from  an unusually powerful fiendish ancestor, have matured.
-Fiendish Heritage^PlH^39^You are descended from creatures native to the  Lower Planes.
-Fiendish Summoning Specialist^PlH^39^You can select from a larger number of options  when summoning evil creatures.
-Fiery Spell^Sa^49^Your fire magic is bolstered, further scorching  your enemies.
-Filth Eater^Sh^157^You are highly resistant to the effects of disease  and can usually eat spoiled food without suffering ill effects.
-Final Strike^SS^34^Your death throes are destructive.
-Fine Wild Shape^EL^56^You can wild shape into animals of Fine size.
-Fire Heritage^PlH^39^You are descended from creatures native to the  Elemental Plane of Fire.
-Fist of the Heavens^BE^43^Your stunning attack is empowered by celestial  might.
-Fists of Iron^CW^99^You have learned the secrets of imbuing your  unarmed attacks with extra force.
-Fists of Iron^OA^62^You have learned the secrets of imbuing your  unarmed attacks with extra force.
-Fists of Iron^SF^6^You have learned the secrets of imbuing your  unarmed attacks with extra force.
-Flay Foe^CR^20^You are skilled at flaying the flesh from your  enemy's bones.
-Fleet of Foot^CW^99^You run nimbly, able to turn corners without  losing momentum.
-Fleet of Foot^DD^50^The deity runs so nimbly that it can turn corners  without losing momentum.
-Fleet of Foot^PG^38^You are extraordinarily swift.
-Fleet of Foot^SaS^39^You run so nimbly that you can turn corners  without losing momentum.
-Flensing Strike^ECS^53^You have studied a martial style practiced by  monks devoted to the Mockery, which has taught you to cut your opponent's  skin in a very painful way.
-Flick of the Wrist^CW^99^With a single motion, you can draw a light weapon  and make a devastating attack.
-Flick of the Wrist^RW^150^With a single motion, you can draw a light weapon  and make a devastating attack.
-Flick of the Wrist^SaS^39^With a single motion, you can draw a light weapon  and make a devastating attack.
-Fling Ally^RS^139^You can launch your comrades into the air as  if they were thrown weapons.
-Fling Enemy^RS^140^When you're wrestling a foe, you can lift him  into the air and hurl him.
-Fling Enemy^SS^34^You can pick up an opponent and fling it.
-Flyby Attack^MM^303^The creature can attack on the wing.
-Flyby Attack^MM2^18^The creature can attack on the wing.
-Flyby Attack^MM3^206^A creature with this feat can attack on the  wing.
-Flyby Attack^Mon^9^The creature can attack on the wing.
-Flyby Attack^MW^23^You attack while on the wing.
-Flyby Breath^DCS^85^You can employ your breath weapon in a high-speed  attack pass.
-Flying Fish Leap^Sto^92^You can hurl yourself out of the water with  ease.
-Flying Kick^CW^99^You literally leap into battle, dealing devastating  damage.
-Flying Kick^OA^62^You literally leap into battle, dealing devastating  damage.
-Focused Antimagic^LoM^45^A beholder with this feat can focus the antimagic  of its central eye to target a single person or object.
-Focused Mind^RW^151^When you have the opportunity to concentrate  on a task, you usually do very well at it.
-Focused Shield^RS^140^Your mental focus makes you more adept at using  your shield.
-Focused Sunder^XPH^46^You can sense the stress points on others' weapons.
-Foe Hunter^FRCS^34^In lands threatened by evil nonhumans, many  warriors learn ways to fight effectively against these creatures.
-Foe Hunter^Gh^32^You have been trained in the methods of fighting  various kinds of yuan-ti.
-Foe Hunter^PG^38^In a land threatened by fierce raiders, you  have learned to fight effectively against certain foes.
-Foe Specialist^MH^26^You are trained at how to damage a particular  type of foe.
-Foot and Fist Mastery^OA^80^You have mastered the martial arts style of  'Foot and Fist' -- a hard form emphasizing strikes with the hands and feet.
-Force of Personality^CAd^109^You have cultivated an unshakable belief in  your self-worth.
-Force of Will^XPH^46^You are able to resist psionic attacks with  extreme force of will.
-Forceful Staff Style^Gh^32^You can stun people with your quarterstaff and  push them around after you stun them.
-Forest Gnome Phantasist^Rac^163^You can protect your forest home with a variety  of phantasms and patterns to befuddle your foes.
-Forester^FRCS^35^You are knowledgeable about the secrets of the  forest and wise in its ways.
-Forester^PG^39^You are one with Faerun's mighty forests.
-Forge Epic Ring^EL^56^You can craft magic rings of epic power.
-Forge Ring^PH^94^You can create magic rings, which have varied  magical effects.
-Forgeheart^PG^39^Because you are inured to the hellish heat of  your homeland, you are resistant to blasts of fire that would damage other  creatures.
-Forked Tongue^SK^145^You speak with a honeyed voice that bends listeners  to your will.
-Formation Expert^CW^110^You are trained at fighting in ranks and files.
-Fortify Spell^CAr^80^You cast spells that more easily penetrate spell  resistance.
-Fortify Spell^UE^43^You can cast spells that easily penetrate spell  resistance.
-Freezing the Lifeblood^CW^99^You can paralyze a humanoid opponent with an  unarmed attack.
-Freezing the Lifeblood^OA^62^You can paralyze a humanoid opponent with an  unarmed attack.
-Freezing Touch^Gh^33^Your touch is supernaturally cold.
-Frightful Moan^Gh^33^You can unleash a moan that panics creatures  near you.
-Frightful Presence^Dr^106^Like a dragon, your mere presence can terrify  those around you.
-Frightful Presence^Gh^33^Your very presence can cause others to be stricken  with fear.
-Frostfell Prodigy^Fr^48^You gain additional bonus spells in cold regions.
-Frozen Berserker^Fr^48^When you enter your barbarian rage, your body  becomes infused with cold energy.
-Frozen Magic^Fr^48^Your cold spells are more powerful when you  cast them in a cold region.
-Frozen Wild Shape^Fr^48^You can assume the form of magical beasts with  the cold subtype.
-Full Manifestation^Gh^33^You can manifest fully when you would otherwise  be forced to be incorporeal.
-Furious Charge^PG^39^Your people are known for their love of battle,  and they rarely waste time in meeting a foe blade-to-blade.
-Gap of the Serpent^SS^35^You can swallow larger creatures than normal.
-Gape of the Serpent^SK^146^Like a snake, you can stretch your mouth to  an outlandish extent to accommodate immense prey.
-Gargantuan Wild Shape^EL^56^You can wild shape into animals of Gargantuan  size.
-Gatekeeper Initiate^ECS^54^You have been trained in the ancient druidic  tradition of the Gatekeepers, founded originally to ward off an extraplanar  assault by aberrations.
-Genie Lore^Rac^163^You have studied centuries of Calishite lore  regarding geniekind.
-Gestalt Anchor^RE^112^Your strong bond to your quori spirit allows  you and your kalashtar allies to move and act as a fluid unit.
-Ghost Attack^XPH^46^Your deadly strikes against incorporeal foes  always hit their mark.
-Ghost Flight^Gh^33^Your fully manifested ghost body can fly.
-Ghost Glide^Gh^33^Your fully manifested ghost body can slowly  fly.
-Ghost Hand^Gh^33^You can move small objects in a limited manner  when you are a ghost.
-Ghost Healing^Gh^33^You can transfer some of your own ectoplasm  to another ghost to heal it.
-Ghost Ride^Gh^33^You can hide within the physical body of a living  creature, perceiving the world through its senses, but without the ability  to control the host.
-Ghost Scarred^LM^27^You are adept at fighting incorporeal undead.
-Ghost Smiting^Gh^34^You can use your smite ability to smite ghosts.
-Ghostly Grasp^LM^27^You can handle corporeal objects even while  corporeal.
-Ghost-Touch Spell^Gh^34^You know how to tune your damaging spells to  affect ghosts without harming other creatures.
-Giantbane^CW^111^You are trained in fighting foes larger than  you are.
-Giant's Toughness^MW^23^You are amazingly tough.
-Gift of Discernment^PG^176^You can rely on your conscience to steer you  away from evil deeds.
-Gift of Faith^BE^43^You have an unusual capacity to trust in divine  providence working all things for the good.
-Gift of Grace^BE^43^You can improve the saving throws of your allies  by sharing some of your divine grace.
-Gift of Tongues^Gh^34^You have an intuitive talent for learning languages.
-Gift of Tongues^Rac^163^You have an intuitive talent for learning languages.
-Gifted General^OA^62^Your ancestor Daidoji Yurei, an ancient daimyo  of the Daidoji family, was a gifted general -- the first in Rokugan to use  guerilla warfare.
-Glorious Weapons^CD^82^You can channel positive or negative energy  to imbue your allies' weapons with an alignment.
-Gnoll Ferocity^RW^151^You embody the savage ferocity of your people.  When you fly into a berserk rage, you can bite opponents with your powerful  jaws.
-Gnome Foe Killer^RS^140^Your battle techniques against your racial foes  improve.
-Goad ^CAd^109^You are skilled at inducing opponents to attack  you.
-Goad^MH^26^You are skilled at inducing opponents to attack  you.
-Goad^RS^140^You are skilled at inducing opponents to attack  you.
-Godsight^LE^8^You enjoy the special blessing of a deity of  the Mulhorandi pantheon, who has granted you unerring powers of perception.
-Gold Dwarf Dweomersmith^Rac^163^You have learned the secrets of gold dwarf magic  that creates or enhances weapons.
-Gorebrute Elite^RE^114^Your mighty charge attack can knock down foes.
-Graft Flesh^FF^207^You can apply a certain type of graft to other  living creatures or to yourself.
-Graft Flesh^LM^27^You can apply a certain type of graft to other  living creatures or to yourself.
-Graft Flesh^LoM^216^You can apply a certain type of graft to other  living creatures or to yourself.
-Graft Illithid Flesh^Und^25^You can apply illithid grafts to other living  creatures or to yourself.
-Graft Yuan-Ti Flesh^SK^146^You can apply yuan-ti grafts to other living  creatures or to yourself.
-Grand Malevolence^Gh^34^You can possess multiple creatures and control  their actions.
-Grappling Block^OA^63^You can catch and pin an opponent's weapon with  your bare hands.
-Grass Trekker^SS^35^You are adapted to a plains environment.
-Great Bite^ECS^54^You know how to hit where it hurts with your  fangs.
-Great Captain^Sto^92^You are a master pilot and battle leader; your  crew anticipates your every command and leaps to do your bidding.
-Great Charisma^EL^56^Your powers of persuasion and leadership are  greater than normal.
-Great Cleave^PH^94^You can wield a melee weapon with such power  that you can strike multiple times when you fell your foes.
-Great Constitution^EL^56^Your health and endurance are greater than normal.
-Great Crafter^OA^63^Your ancestor, Kaiu, was the first and greatest  blacksmith of the Crab clan.
-Great Dexterity^EL^56^Your agility and coordination are greater than  normal.
-Great Diplomat^OA^63^You are descended from Asako, one of the companions  of the first Phoenix, a great healer, diplomat, and warrior.
-Great Flyby Attack^SS^35^You can make multiple flyby attacks in a round.
-Great Fortitude^PH^94^You are tougher than normal.
-Great Intelligence^EL^56^Your powers of reason and learning are greater  than normal.
-Great Rend^ECS^54^You know how to hit where it hurts with your  claws.
-Great Smiting^DMG^209^Your smite attacks are much more powerful than  normal.
-Great Smiting^EL^56^Your smite attacks are much more powerful than  normal.
-Great Stag Berserker^UE^43^Your fighting style employs aggressive charges  in the manner of your lodge's totem animal.
-Great Stamina^OA^63^Your ancestor, Daidoji Masashigi, gave his life  defending the Kaiu Wall alongside the Crab at the Battle of the Landbridge.
-Great Strength^EL^57^Your muscle and physical power are greater than  normal.
-Great Teamwork^OA^63^You are a descendant of Hida Banuken, the Crab  champion who oversaw the construction of the Kaiu Wall during the battle  of the Cresting Wave.
-Great Wisdom^EL^57^Your willpower and insight are greater than  normal.
-Greater Ki Shout^OA^63^Your ki shout can panic your opponents.
-Greater Cold Focus^Fr^48^Your cold spells are now even more potent than  before.
-Greater Dragonmark^ECS^54^You have a greater dragonmark.
-Greater Heavy Armor Optimization^RS^141^You have mastered the use of heavy armor, maximizing  its protective qualities while moving more easily in it.
-Greater Kiai Shout^CW^99^You kiai shout can panic your opponents.
-Greater Legacy^WL^14^You awaken the most powerful abilities of a  specific item of legacy.
-Greater Manyshot^XPH^47^You are skilled at firing many arrows at once,  even at different opponents.
-Greater Mighty Roar^SS^35^You unsettle opponents with a dreadful roar  as you attack.
-Greater Multigrab^SK^146^You can grapple enemies effortlessly with your  natural weapons.
-Greater Multigrab^SS^35^You can grapple enemies effortlessly with your  natural weapons.
-Greater Multiweapon Fighting^DD^50^A deity with three or more hands can fight with  a weapon in each hand.
-Greater Multiweapon Fighting^EL^69^A creature with three or more hands can fight  with a weapon in each hand.
-Greater Multiweapon Fighting^SS^35^A creature with three or more arms can fight  with a weapon in each hand. The creature can make up to three attacks per  round with each extra weapon.
-Greater Power Penetration^XPH^47^Your powers are especially potent at breaking  through power resistance.
-Greater Power Specialization^XPH^47^You deal more damage with your powers.
-Greater Powerful Charge^ECS^54^You can charge with extra force.
-Greater Powerful Charge^MH^27^You can charge with extra force.
-Greater Psionic Endowment^XPH^47^You can use meditation to focus your powers.
-Greater Psionic Fist^XPH^47^You can charge your unarmed strike or natural  weapon with additional damage potential.
-Greater Psionic Shot^XPH^47^You can charge your ranged attacks with additional  damage potential.
-Greater Psionic Weapon^XPH^47^You can charge your melee weapon with additional  damage potential.
-Greater Resiliency^CW^99^Your extraordinary resilience to damage increases.
-Greater Resiliency^MW^23^Your extraordinary resilience to damage increases.
-Greater Shifter Defense^ECS^54^By delving deeper into your shifter heritage,  you develop the ability to ignore some damage from every attack.
-Greater Spell Focus^DD^50^The deity chooses a school of magic to which  it already has applied the Spell Focus feat.
-Greater Spell Focus^EL^69^Choose a school of magic, such as illusion.  Your spells of that school are far more potent than normal.
-Greater Spell Focus^FRCS^35^Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal.
-Greater Spell Focus^PH^94^Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal.
-Greater Spell Focus^TB^40^Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal.
-Greater Spell Penetration^DD^50^The deity's spells are especially potent, defeating  spell resistance more readily than normal.
-Greater Spell Penetration^EL^69^Your spells are especially potent, defeating  spell resistance more readily than normal.
-Greater Spell Penetration^FRCS^35^Your spells are especially potent, defeating  spell resistance more readily than normal.
-Greater Spell Penetration^PH^94^Your spells are remarkably potent, breaking  through spell resistance more readily than normal.
-Greater Spell Penetration^TB^40^Your spells are especially potent, breaking  through spell resistance more readily than normal.
-Greater Two-Weapon Defense^CW^100^When fighting with two weapons, your defenses  are extraordinarily strong.
-Greater Two-Weapon Fighting^DD^50^The deity is a master at fighting two-handed.
-Greater Two-Weapon Fighting^EL^69^You are a master at fighting two-handed.
-Greater Two-Weapon Fighting^MW^23^You are a master at fighting two-handed.
-Greater Two-Weapon Fighting^PH^95^You are a master at fighting two-handed.
-Greater Weapon Focus^PH^95^Choose one type of weapon for which you have  already selected Weapon Focus. You can also choose unarmed strike or grapple  as your weapon for purposes of this feat. You are especially good at using  this weapon.
-Greater Weapon Specialization^PH^95^Choose one type of weapon for which you have  already selected Weapon Specialization You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon.
-Greater Witchlight^Gh^34^Your witchlight can last longer, become hotter,  or give off more light.
-Green Bond^Gh^35^You have an empathic bond with one of the spirit  trees around Manifest
-Green Ear^CAd^110^Your bardic music can affect plant creatures.
-Green Ear^SaS^39^Your bardic music and virtuoso performance affect  plants and plant creatures.
-Greenbound Summoning^LE^8^You are learned in a long-forgotten manner of  summoning once practiced by Eaerlanni elves of the High Forest.
-Greensinger Initiate^ECS^54^You have embraced the druidic traditions of  the Greensingers, a chaotic Eldeen Reaches sect with close ties to the fey.
-Grell Alchemy^LoM^114^A creature that has this feat has studied the  alien and disturbing arcane lore of the grell, and understands the magical  and physical laws by which their spells and devices function.
-Grim Visage^Rac^163^Your eyes have seen a lot, and now they show  everyone that you aren't to be trifled with. Even glib people stammer in  your presence.
-Grizzly's Claws^CD^82^You can grow claws as sharp as those of a bear.
-Group Inspiration^CAd^192^Your bardic powers can inspire more allies than  normal.
-Group Inspiration^EL^57^You can inspire competence or greatness in more  than one ally simultaneously.
-Guardian Spirit^CAr^80^Your watchful spirit is more capable than normal.
-Guerrilla Scout^HB^97^You know how to use your senses to greater effect.
-Guerrilla Warrior^HB^97^You know how to move stealthily, even when armored.
-Halruuan Adept^ShS^20^You have studied the old cooperative spellcasting  traditions of Halruaa, and you are well-versed in the rites and arcana of  Halruuan magic.
-Hammer Fist^Rac^164^You are trained in an unarmed fighting style  that emphasizes a two-handed strike.
-Hammer's Edge^CW^113^You are a master of the style of fighting with  a hammer and sword at the same time.
-Hamstring^CW^100^You can wound your opponents' legs, hampering  their movement.
-Hamstring^SaS^39^You can wound an opponent's legs, hampering  his or her movement.
-Hand of Tyr^CSW^145^You have sacrificed your right hand to Tyr,  the Maimed God, proving your resilience and strength of spirit.
-Hands of a Healer^BE^43^You can heal more damage than normal by laying  on hands.
-Hardened Flesh^LM^27^Undead you raise or create can better handle  themselves in a fight.
-Harem Trained^Rac^164^You have been trained to serve as a jhasin (if  male) or jhasina (if female) and are well versed in song, music, dance,  art, the recitation of great literature, the art of massage, and other duties  of the harem.
-Haunting Appearance^Gh^35^You can make your ghost body assume a terrifying  appearance that can frighten observers.
-Haunting Melody^ECS^54^You can use your music to inspire fear.
-Haunting Voice^Gh^35^You can make your voice originate from another  location.
-Hawk's Vision^CAd^114^You can improve your visual acuity.
-Headlong Rush^Rac^164^You charge your foes with immense force, heedless  of your own safety.
-Healing Factor^ECS^55^When your current period of shifting ends, you  heal a limited amount of damage.
-Healing Factor^MM3^150^When your current period of shifting ends, you  heal a limited amount of damage.
-Healing Flames^Rac^164^You can draw energy from open flames to heal  yourself.
-Hear the Unseen^CAd^110^Your sense of hearing is so acute that you can  partially pinpoint an opponent's location by sound, allowing you to strike  even if the opponent is concealed or displaced.
-Heat Endurance^Sa^50^Either as a result of growing up in the waste,  or by training your body and mind to ignore the effects of searing heat,  you can exist with ease in high-temperature environments.
-Heat Tolerance^ShS^20^You are used to living in hot, humid conditions.
-Heavy Armor Optimization^RS^141^You have trained extensively in heavy armor,  and you have learned to take advantage of the protection it offers.
-Heavy Lithoderms^RS^141^You have stony growths on your skin that afford  you protection against attacks.
-Heighten Breath^Dr^70^Your breath weapon is even more deadly than  normal.
-Heighten Spell^PH^95^You can cast a spell as if it were a higher-level  spell than it actually is.
-Heighten Spell-Like Ability^CAr^80^You can use a spell-like ability as if it were  a higher spell-level equivalent than it actually is.
-Heighten Turning^DF^20^You can affect more powerful undead with your  turning or rebuking attempts.
-Heighten Turning^FP^214^You can affect more powerful undead with your  turning or rebuking attempts.
-Heighten Turning^Gh^35^You can affect more powerful undead with your  turning or rebuking attempts.
-Heighten Turning^LM^27^You can affect more powerful undead with your  turning or rebuking attempts.
-Hellbound Knight^CR^23^A devoted disciple of the Nine Hells, you have  sworn to strike down creatures that oppose law and threaten tyranny.
-Heroic Destiny^RD^152^You have a destiny to fulfill.
-Heroic Metamagic^RE^109^In times of great need, you can call upon a  heroic reserve of power to strengthen your spells.
-Heroic Spirit^ECS^55^You have a larger reservoir of luck than the  average hero.
-High Sword Low Axe^CW^113^You have mastered the style of fighting with  a sword and axe at the same time.
-Highborn Drow^Rac^164^You have learned how to tap into the advanced  magical abilities of your drow noble heritage.
-Highborn Drow^Und^25^You have learned how to tap into the advanced  magical abilities available to you through your drow noble heritage.
-Hin Wandermage^Rac^164^You have a natural affinity for spells that  take you from place to place.
-Hindering Song^EL^57^Your bardic music interferes with opposing spellcasters.
-Hold the Line^CW^100^You are trained in defensive techniques against  charging opponents.
-Hold the Line^DD^51^The deity is trained in defensive techniques  against charging opponents.
-Hold the Line^SF^7^You are trained in defensive techniques against  charging opponents.
-Hold the Line^ShS^20^You are trained in defensive techniques against  charging opponents.
-Holy Ki Strike^BE^44^Your unarmed attacks deal extra damage to evil  creatures.
-Holy Radiance^BE^44^You can increase the intensity of the light  surrounding you to damage undead creatures.
-Holy Strike^CD^89^Your attacks deal great damage to evil creatures.
-Holy Strike^EL^57^Your attacks deal great damage to evil creatures.
-Holy Subdual^BE^44^You can turn bonus damage into nonlethal damage.
-Honest Merchant^OA^63^Your ancestor, Bayushi Tesaguri, was the son  of Bayushi Junzen, Scorpion Clan Champion.
-Honor-Bound^DCS^86^Keeping your word and upholding your honor is  of great importance to you.
-Horrific Appearance^Gh^35^You can blast creatures with your simple appearance.
-Horse Nomad^FRCS^35^You have been raised in a culture that relies  upon riding and shooting for survival.
-Horse Nomad^PG^39^You have been raised in a culture that relies  upon riding and shooting.
-Hostile Mind^XPH^47^Your mind recoils violently against those who  use psionics against you.
-Hover^MM^304^The creature can come to a halt in midair.
-Hover^MM2^18^The creature can halt its forward motion while  flying, regardless of maneuverability.
-Hulking Brute ^DCS^86^You possess a truly impressive stature.
-Human Heritage^RD^152^Your human heritage is more prominent than in  others of your kind.
-Hurling Charge^MH^27^You are trained in using thrown weapons as part  of a charge attack.
-Hyena Tribe Hunter^ShS^20^You have learned the secrets of hunting from  the hyena that roams the lands where your tribe wanders.
-Iaijutsu Master^OA^63^You are not only descended from Kakita, the  greatest duelist ever to have lived, but you share a karmic tie to his spirit.
-Ice Harmonics^Fr^48^Your summon spells work better in the frostfell  if you summon native creatures.
-Ice Troll Berserker^UE^44^When raging, your skin becomes very thick and  tough like the ice trolls that plague parts of your homeland.
-Icy Calling^Fr^48^You can use your voice to shatter ice.
-Ignore Material Components^EL^57^You need not use any material components in  casting spells.
-Imprint Stone^XPH^47^You can create power stones to store psionic  powers.
-Improve Bull Rush^PH^95^You know how to push opponents back.
-Improved Aid^OA^63^You are descended from Hida Tadaka, the great  Crab daimyo who gave his life to avert a war between his clan and the Lion.
-Improved Alignment-Based Casting^EL^57^Your spells of a particular alignment are more  powerful than normal.
-Improved Arrow of Death^EL^57^Your arrows of death are harder to resist.
-Improved Assume Supernatural Ability^SS^35^You gain skills using a supernatural ability  of an assumed form.
-Improved Aura of Courage^EL^57^Your aura of courage is stronger than normal.
-Improved Aura of Despair^EL^57^Your aura of despair is wider than normal.
-Improved Buckler Defense^CW^100^You can attack with an off-hand weapon while  retaining a buckler's shield bonus to your Armor Class.
-Improved Cohort^HB^98^You attract a more powerful cohort than you  normally would.
-Improved Cold Endurance^Fr^48^Your training and natural hardiness have improved  your natural resistance to cold temperatures.
-Improved Combat Casting^CAr^192^You heighten your ability to cast spells while  threatened without fear of being attacked.
-Improved Combat Casting^EL^57^You can cast spells while threatened without  fear of being attacked.
-Improved Combat Expertise^CW^100^You have mastered the art of defense in combat.
-Improved Combat Reflexes^EL^57^You can respond to any number of opponents who  let their defenses down.
-Improved Control Visage^Gh^35^You can change your ghost form's appearance.
-Improved Cooperative Metamagic^PG^136^Your ability to enhance an ally's spell during  casting is expanded.
-Improved Counterspell^EL^70^You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency.
-Improved Counterspell^FRCS^35^You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency.
-Improved Counterspell^PH^95^You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency.
-Improved Critical^PH^95^Choose one type of weapon. With that weapon,  you know how to hit where it hurts.
-Improved Damage Reduction^ECS^55^You gain damage reduction or improve your existing  damage reduction.
-Improved Darkvision^EL^58^Your ability to see in the dark is greater than  normal.
-Improved Death Attack^EL^58^Your death attack is harder to overcome.
-Improved Deflection^Gh^35^You are adept at deflecting things before they  strike you.
-Improved Disarm^PH^95^You know how to disarm opponents in melee combat.
-Improved Diversion^CAd^110^You can create a diversion to hide quickly and  with less effort.
-Improved Draconian Breath Weapon^DCS^86^You have mastered your draconic heritage and  improved on your innate breath weapon.
-Improved Elemental Heritage^PlH^40^You have manifested an even stronger tie to  your elemental ancestor, resulting in a minor resistance to elemental effects.
-Improved Elemental Wild Shape ^DMG^209^You can take the form of a larger variety of  elementals than normal.
-Improved Elemental Wild Shape^EL^58^You can take the form of a greater variety of  elementals than normal.
-Improved Energy Drain^LM^27^You draw extra power from your energy-drained  victims.
-Improved Energy Resistance^Rac^164^Choose one form of energy to which you have  a natural (not spell- or item-generated) resistance. Your inherent resistance  to this kind of energy is more effective than normal.
-Improved Familiar^CW^100^This feat allows spellcasters to acquire a new  familiar from a nonstandard list, but only when they could normally acquire  a new familiar.
-Improved Familiar^FRCS^35^So long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list.
-Improved Familiar^PG^39^Refer to the Improved Familiar feat description  on page 200 of the Dungeon Master's Guide.
-Improved Familiar^Rac^165^See the discussion of the Improved Familiar  feat in Chapter 1 of the Forgotten Realms Campaign Setting. Table A-5 shows  additional improved familiars from this book that are available with this  feat.
-Improved Familiar^SK^146^Refer to the Improved Familiar feat description  in the Dungeon Master's Guide.
-Improved Familiar^TB^40^As long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list.
-Improved Favored Enemy^CW^101^You know how to hit your favored enemies where  it hurts.
-Improved Favored Enemy^DMG^210^Gain bonuses against favored enemies.
-Improved Favored Enemy^EL^58^You gain bonuses against favored enemies.
-Improved Feint^PH^95^You are skilled at misdirecting your opponent's  attention in combat.
-Improved Fiendish Servant^CR^20^You gain the service of a powerful fiendish  animal servitor.
-Improved Flight^CAd^110^You gain greater maneuverability when flying  than you would normally have.
-Improved Flight^MW^23^You gain greater maneuverability when flying  than you would normally have.
-Improved Flight^Rac^165^You gain greater maneuverability when flying  than you would normally have.
-Improved Flight^RW^151^You have gained greater maneuverability when  flying than you would normally have.
-Improved Flight Item (Item Creation)^Sh^157^You have learned to make use of the manifest  zone in Sharn to craft magic items that grant superior flight.
-Improved Flyby Attack^EL^70^The creature can attack on the wing with increased  mobility.
-Improved Flyby Attack^SS^36^You can attack on the wing with increased mobility.
-Improved Fortification^ECS^55^You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits.
-Improved Fortification^MM3^192^You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits.
-Improved Frosty Touch^Fr^49^Your frosty touch causes more cold damage.
-Improved Ghost Flight^Gh^35^Your ghost body can fly rapidly.
-Improved Grapple ^DD^51^The deity is skilled in martial arts that emphasize  holds and throws.
-Improved Grapple^OA^63^You are skilled in martial arts that emphasize  holds and throws.
-Improved Grapple^PH^95^You are skilled at grappling opponents.
-Improved Grapple^UE^44^You are skilled in martial arts that emphasize  holds and throws.
-Improved Heat Endurance^Sa^50^You can survive even in the most extreme natural  heat conditions.
-Improved Heighten Spell^EL^58^You can cast a spell at any level above its  own.
-Improved Initiative^PH^96^You can react more quickly than normal in a  fight.
-Improved Ki Strike^EL^58^You can strike opponents with great damage reduction.
-Improved Levitation^Rac^165^You have learned to use part of your levitate  spell-like ability at a time, allowing multiple uses with a shorter duration.
-Improved Levitation^Und^25^You have learned to use only part of your levitate  spell-like ability at a time, allowing multiple uses with shorter duration.
-Improved Low Blow^Rac^165^You are especially good at using the Low Blow  feat.
-Improved Low-Light Vision^EL^58^The range of your low-light vision is greater  than normal.
-Improved Maneuverability^Dr^70^Your maneuverability in flight improves.
-Improved Manifestation^EL^58^You can manifest psionic powers more powerful  than the normal limits of manifestation.
-Improved Manifestation^XPH^34^You increase your power point reserve.
-Improved Manyshot^EL^58^You can fire even more arrows as a single attack  against a nearby target.
-Improved Metamagic^DMG^210^You can cast spells using metamagic feats more  easily than normal.
-Improved Metamagic^EL^59^You can cast spells using metamagic feats more  easily than normal.
-Improved Metapsionics^XPH^34^You can manifest powers using metapsionic feats  more often than normal.
-Improved Mounted Archery^CW^101^You can make ranged attacks from a mount almost  as well as you can from the ground.
-Improved Multiattack^Dr^70^You are particularly adept at using all your  natural weapons at once.
-Improved Multiattack^EL^70^The creature is particularly adept at using  all its natural weapons at once.
-Improved Multiattack^SS^36^You are particularly adept at using all your  natural weapons at once.
-Improved Multiweapon Fighting^DD^51^A deity with three or more hands can fight with  a weapon in each hand.
-Improved Multiweapon Fighting^EL^70^A creature with three or more hands can fight  with a weapon in each hand.
-Improved Multiweapon Fighting^SS^36^You are expert at fighting with a weapon in  each of your three or more hands. You can make up to two attacks per round  with each off-hand weapon.
-Improved Natural Armor^MM^304^The creature's natural armor is thicker and  harder than that of other of its kind.
-Improved Natural Armor^MM3^206^The natural armor of a creature with this feat  is thicker and harder than normal for its kind.
-Improved Natural Armor^Rac^165^Your skin is even tougher than that of most  of your kind.
-Improved Natural Attack^ECS^55^One of a creature's natural attacks is more  dangerous than its type and size would otherwise indicate.
-Improved Natural Attack^MM^304^The creature's natural attacks are more dangerous  than its size and type would otherwise dictate.
-Improved Natural Attack^MM3^206^The natural attacks of a creature with this  feat are more dangerous than its size and type would otherwise dictate.
-Improved Outer Planar Heritage^PlH^40^Your ancestral tie to the Outer Planes manifests  as an ability to deal damage with your natural attacks as if they matched  the alignment of your ancestors.
-Improved Overrun^PH^96^You are skilled at knocking down opponents.
-Improved Overrun^SF^7^You are trained in knocking over opponents that  are smaller than you.
-Improved Paralysis^LM^27^You are better at paralyzing your victims.
-Improved Poltergeist Hand^Gh^36^You can move a large object at a distance when  you are a ghost.
-Improved Precise Shot^PH^96^Your ranged attacks can ignore the effects of  cover or concealment.
-Improved Psicrystal^XPH^47^You can upgrade your psicrystal.
-Improved Rapid Shot^CW^101^You are an expert at firing weapons with exceptional  speed.
-Improved Rapidstrike^Dr^70^You can make multiple attacks with a natural  weapon.
-Improved Resiliency^RE^119^You gain a construct's resistance to nonlethal  damage.
-Improved Resist Dragonfear^DCS^86^You are able to demonstrate great courage in  the presence of dragons.
-Improved Rock Hurling^RS^141^Your accuracy and effectiveness with thrown  rocks improves.
-Improved Scent^SS^36^You can detect and track creatures by smell  at greater distances than normal.
-Improved Shield Bash^DF^20^You can push opponents back by bashing them  with your shield.
-Improved Shield Bash^PH^96^You can bash with a shield while retaining its  shield bonus to your Armor Class.
-Improved Shieldmate^MH^27^You have an outstanding ability to protect those  near you with your shield.
-Improved Sigil (Aesh)^RD^152^You tap into your aesh power sigil to  gain enhanced accuracy with your favored melee weapons.
-Improved Sigil (Hoon)^RD^152^You tap into your hoon power sigil to  help survive deadly conditions.
-Improved Sigil (Krau)^RD^153^You tap into your krau power sigil to  augment the energy of your magical utterances.
-Improved Sigil (Naen)^RD^153^You tap into your naen power sigil to  see through illusions and resist language-based effects.
-Improved Sigil (Uur)^RD^153^You tap into your uur power sigil to  gain enhanced accuracy with ranged weapons.
-Improved Sigil (Vaul)^RD^153^You tap into your vaul power sigil to  resist mental effects.
-Improved Skirmish^CAd^192^Your combat mobility improves.
-Improved Smiting^CD^82^Your smite attacks deal more damage to specific  foes, and can damage creature with alignment-based damage reduction.
-Improved Snatch^Dr^71^You can make snatch attacks against bigger opponents  than other creatures can.
-Improved Snatch Spell^PG^136^When you take over a spell from another spellcaster,  you gain more control over its effect.
-Improved Sneak Attack^DMG^210^Your sneak attacks are more deadly than normal.
-Improved Sneak Attack^EL^59^Your sneak attacks are more deadly than normal.
-Improved Speed ^Dr^71^You are faster than others of your kind.
-Improved Spell Capacity^DMG^210^You can prepare spells that exceed the normal  limits of spellcasting.
-Improved Spell Capacity^Dr^71^You can prepare spells that exceed the normal  limits of spellcasting.
-Improved Spell Capacity^EL^59^You can prepare spells that exceed the normal  limits of spellcasting.
-Improved Spell Resistance^EL^60^Your innate resistance to magical effects increases.
-Improved Spellpool Access^PG^136^You can use your spellpool access to call spells  of greater than normal power.
-Improved Spit^SK^146^You can spit farther than normal.
-Improved Stunning Fist^DMG^210^Your stunning attack is more powerful.
-Improved Stunning Fist^EL^60^Your stunning attack is more powerful.
-Improved Sudden Strike^CAd^192^Your ability to strike unaware foes improves.
-Improved Sunder^DD^51^The deity is adept at placing its attacks precisely  where it wants them to land.
-Improved Sunder^EA^42^You are adept at placing your attacks precisely  where you want them to land.
-Improved Sunder^PH^96^You are skilled at attacking your opponents'  weapons and shields, as well as other objects.
-Improved Sunder^SF^7^You are adept at placing your attacks precisely  where you want them to land.
-Improved Swimming^CAd^110^You can swim faster than you normally could.
-Improved Swimming^MW^23^You swim faster than you normally could.
-Improved Toughness^CW^101^You are significantly tougher than normal.
-Improved Toughness^LM^27^You are significantly tougher than normal.
-Improved Toughness^MM3^207^A creature with this feat is significantly tougher  than normal.
-Improved Trip^PH^96^You are trained not only in tripping opponents  safely but also following through with an attack.
-Improved Turn Resistance^Gh^36^You are better able to resist the channeling  of positive or negative energy by clerics and similar classes.
-Improved Turn Resistance^LM^27^You have a better than normal chance to resist  turning.
-Improved Turn Resistance^SS^36^You have a better than normal chance to resist  turning.
-Improved Turning^PH^96^Your turning or rebuking attempts are more powerful  than normal.
-Improved Two-Weapon Defense^CW^101^You gain a significant defensive advantage while  fighting with two weapons.
-Improved Two-Weapon Fighting^PH^96^You are an expert in fighting two-handed.
-Improved Unarmed Strike^PH^96^You are skilled at fighting while unarmed.
-Improved Weapon Familiarity^CW^101^You are familiar with all exotic weapons common  to your people.
-Improved Weapon Familiarity^RS^141^You are familiar with all exotic weapons common  to your people.
-Improved Web^SS^36^You gain additional utility from your webs.
-Improved Whirlwind Attack^EL^60^You become a blurry whirlwind of attacks, striking  out at all enemies near your position.
-Incite Rage^EL^60^You can incite allies into a rage.
-Incorporeal Form^Gh^36^You can become incorporeal even when you would  otherwise be forced to manifest fully.
-Incorporeal Spell Targeting^Gh^36^You know how to cast your spells so they're  more likely to affect incorporeal creatures.
-Incorporeal Target Fighting^Gh^36^You know how to fight incorporeal creatures  in melee.
-Ineluctable Echo^UA^93^Those who use words of power around you hear  the sound of their own voices.
-Infernal Bargainer^Rac^165^You are comfortable making deals with powerful  entities from the Lower Planes.
-Infinite Deflection^EL^61^You can deflect an infinite number of projectiles.
-Inhuman Reach^LoM^180^Your arms elongate, allowing you to touch the  floor with your hands.
-Inhuman Vision^LoM^180^You possess the inhuman eyes of some strange  creature.
-Initiate of Ghaunadaur^CR^23^You have learned the dread secrets of the god  of oozes, slimes, jellies, and outcasts.
-Initiate of Gruumsh^CR^24^The singular eye of the great orc god Gruumsh  watches over you.
-Initiate of Kossuth^CR^24^You have faced the fierce elemental flame and  unlocked some of the secrets of Kossuth's church.
-Initiate of Loviatar^CR^24^With great pain comes great power. This and  other secrets you have learned from the church of Loviatar.
-Initiate of Loviatar^ShS^20^You have been initiated into the greatest secrets  of Loviatar's church.
-Initiate of Shar^CR^24^You have been initiated into the greatest secrets  of Shar's church.
-Initiate of Shar^CSW^145^You have been initiated into the greatest secrets  of Shar's church.
-Initiate of Varae^CR^25^You fervently worship Varae, the serpentine  goddess, and guard well the secrets of your faith.
-Innate Spell^CAr^80^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
-Innate Spell^FRCS^36^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
-Innate Spell^PG^39^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
-Innate Spell^TB^41^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
-Inquisitor^XPH^48^You know when others lie.
-Inscribe Epic Runes^PG^136^You can inscribe runes of epic power.
-Inscribe Rune^FRCS^36^You can create magic runes that hold spells  until triggered.
-Inscribe Rune^PG^40^You can create magic runes that hold spells  until triggered.
-Inside Connection^RD^153^Choose a specific organization. You have strong  personal connections within that organization, as well as insight into its  membership.
-Insidious Magic^FRCS^36^You can use the Shadow Weave to make your spells  harder for Weave users to detect.
-Insidious Magic^PG^40^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
-Insightful^CAr^80^You possess a magical understanding of the workings  of arcane detection.
-Insightful Reflexes^CAd^110^Your keen intellect allows you an uncanny knack  for evading dangerous effects.
-Inspirational Leadership^HB^98^Your cohort and followers are exceptionally  faithful to your cause.
-Inspire Excellence^EL^61^You can improve the abilities of your comrades  through your performance.
-Inspire Spellpower^RS^141^You can use your bardic music to increase the  power of your allies' spells.
-Instant Reload^EL^61^Choose one type of crossbow, such as heavy crossbow.  You can fire that type of crossbow as fast as a bow.
-Instantaneous Rage^CW^102^You activate your rage instantly.
-Instantaneous Rage^MW^23^You activate your rage instantly.
-Intensify Spell^EL^61^You can cast spells with exceptionally great  effect.
-Intimidating Rage^CW^102^Your rage engenders fear in your opponents.
-Intimidating Rage^MW^24^Your rage engenders fear in your opponents.
-Intuitive Attack^BE^44^You fight by faith more than brute strength.
-Inured to Energy^SS^36^You can resist energy attacks more efficiently  than normal.
-Invest Armor^RS^141^You can charge your armor with additional protective  qualities.
-Investigate^ECS^55^You can use the Search skill to find and analyze  clues at the scene of a crime or a mystery.
-Investigator^PH^96^You have a knack for finding information.
-Involuntary Rage^SS^36^Extreme pain drives you berserk.
-Iron Mind^Rac^165^You are descended from duergar who escaped enslavement  by the illithids. The blood of these psionic-resistant former thralls runs  thick in your veins.
-Iron Will^PH^97^You have a stronger will than normal.
-Ironskin Chant^CAd^113^You can channel the power of your bardic music  to enable yourself to ignore minor injuries.
-Ironwood Body^RE^119^Your body is crafted with a layer of hard ironwood  that cushions blows.
-Irresistible Gaze^SK^146^Your gaze attack is more potent than normal.
-Irresistible Gaze^SS^37^Your gaze attack is more potent than normal.
-Item Reprieve^LE^8^You learn how to use items from a school of  magic previously prohibited to you.
-Jack of All Trades^CAd^110^You have picked up a smattering of even the  most obscure skills.
-Jack of All Trades^DD^51^The deity has picked up a smattering of even  the most obscure skills.
-Jack of All Trades^FP^214^You've picked up a smattering of even the most  obscure skills.
-Jack of All Trades^SaS^40^You've picked up a smattering of even the most  obscure skills.
-Jaws of Death^RE^119^Gnashing teeth and a powerful set of jaws allow  you to bite foes.
-Jergal's Pact^LE^8^You have made a bargain with Jergal, seneschal  to the god of death.
-Jester's Magic^CSW^145^You are a skilled master of magical jests, capable  of inciting audiences to laughter or lulling them to sleep.
-Jotunbrud^Rac^166^You are descended from the giants who ruled  the mountain-spanning empire of Ostoria in ages past, and possess a truly  impressive stature.
-Judged by Aurifar^Sa^50^Aurifar, the Caliph of the Sky, has judged you,  and he shows you special favor.
-Jungle Stamina^Rac^166^You are acclimated to the disease-ridden jungles  of southwestern Faerun.
-Kalashtar Thoughtshifter^RE^118^You have learned to control your mind blade  for maximum impact in battle.
-Kami's Intuition^OA^63^You are descended from Shinjo, the first Unicorn,  the kindest and most compassionate of the kami.
-Karmic Strike^CW^102^You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you.
-Karmic Strike^OA^63^You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you.
-Karmic Twin^OA^64^You are descended from Bayushi, the first Scorpion,  whos love for his daughter proved his final downfall.
-Keen Intellect^OA^64^You are descended from Agasha, the founder of  the original Dragon shugenja school, a shugenja known for her keen intellect  and powers of observation.
-Keen Strike^EL^61^Your unarmed strikes become as sharp as blades.
-Ki Shout^OA^64^You can bellow forth a ki-empowered shout  that strikes terror into your enemies.
-Kiai Shout^CW^102^You can bellow forth a shout that strikes terror  into your enemies.
-Kihu-Sherem Guardian^Gh^36^You are one of the Kihu-Sherem, magically altered  in the womb to allow you to better protect the sorcerers of your homeland.
-Killoren Ancient^RW^151^You favor the killoren aspect of the ancient.
-Killoren Destroyer^RW^151^You favor the killoren aspect of the destroyer.
-Killoren Hunter^RW^151^You favor the killoren aspect of the hunter
-Knifefighter^PG^40^You're an expert at using weapons in a grapple.
-Knight of Stars ^BE^44^You swear allegiance to the Court of Stars,  the paragons of the eladrin, and in exchange gain power to act on their  behalf.
-Knight Training^ECS^56^You are part of a knightly order that combines  the divine calling of the paladin class with another form of training.
-Knockback^RS^142^By putting your bulk behind a blow, you can  push your enemy backward.
-Knock-Down^DD^51^The deity's mighty blows can knock foes off  their feet.
-Knock-Down^SF^7^Your mighty blows can knock foes off their feet.
-Landlord^SB^10^By knowing the right nobles, making contacts  with masons and artisans, or performing great deeds for a liege-lord, you  have resources that help you build and expand your stronghold.
-Landwalker^Rac^166^You can survive out of water for a longer period  of time than most of your kind.
-Landwalker^Sto^92^You can survive out of water for a longer period  of time than most of your kind.
-Large and In Charge^Dr^71^You can prevent opponents from closing inside  your reach.
-Large and in Charge^SF^61^You can prevent opponents from closing inside  your reach.
-Lasting Inspiration^DMG^210^Your songs continue to inspire allies long after  your words have faded.
-Lasting Inspiration^EL^61^Your songs continue to inspire allies long after  your words have faded.
-Lasting Life^LM^28^You can shed negative levels with an act of  will.
-Law Inviolate^RD^155^Your unshakable faith in St. Cuthbert allows  you to better apprehend fugitives or overcome villains who transgress the  law.
-Leadership^PH^97^You are the sort of person others want to follow,  and you have done some work attempting to recruit cohorts and followers.
-Leap Attack^CAd^110^You can combine a powerful charge and a mighty  leap into one devastating attack.
-Least Dragonmark^ECS^56^You have a least dragonmark.
-Least Legacy^WL^14^You awaken the basic abilities of a specific  item of legacy.
-Legacy Focus^WL^15^Your item's legacy abilities are more potent  than normal.
-Legendary Acrobat^CAd^192^You can balance and tumble much more easily  than a normal person.
-Legendary Artisan^ECS^56^You have mastered the method of creating magic  items.
-Legendary Climber^CAd^192^You can climb rapidly much more easily than  a normal person.
-Legendary Climber^EL^61^You can climb rapidly much more easily than  a normal person.
-Legendary Commander^EL^62^You attract and lead great armies of followers  through sheer force of personality.
-Legendary Leaper^CAd^192^You can cover great distances with only a brief  start.
-Legendary Leaper^EL^62^You can jump much farther than normal for your  size.
-Legendary Rider^CW^152^You can ride a mount in combat with ease, even  bareback.
-Legendary Rider^EL^62^You can ride any mount without penalty (even  bareback) and can control any mount in combat.
-Legendary Tracker^CAd^192^You can track prey across or through the water,  or even through the air.
-Legendary Tracker^EL^62^You can track prey across or through the water,  or even through the air.
-Legendary Wrestler^EL^62^You are exceptionally proficient at grappling.
-Lesser Dragonmark^ECS^56^You have a lesser dragonmark.
-Lesser Legacy^WL^15^You awaken more powerful abilities of a specific  item of legacy.
-Lichloved^BV^49^By repeatedly committing perverted sex acts  with the undead, the character gains dread powers.
-Life Drain^LM^28^You drain additional life energy from your foes.
-Life Leech^UA^93^You automatically try to steal the last bit  of life energy from anyone nearby.
-Lifebond^LM^28^Select a specific living creature that is friendly  to you. You create a special bond with that creature.
-Lifesense^LM^28^You see the light that all living creatures  emit.
-Light of Aurifar^Sa^51^Undead that you turn or rebuke immolate.
-Light to Daylight^Rac^166^Your inherent ability to create light is more  powerful than normal.
-Lightbringer^Rac^166^You can channel positive energy into your spells  so that they glow with holy power.
-Lightfeet^RW^151^You have an incredibly soft step, making it  difficult to track or hear you.
-Lightning Fists^SF^7^Your skill and agility allow you to attempt  a series of blindingly fast blows.
-Lightning Mace^CW^113^You are a master of fighting with two maces  at the same time.
-Lightning Reflexes^PH^97^You have faster than normal reflexes.
-Lingering Breath^Dr^71^Your breath weapon forms a lingering cloud.
-Lingering Damage^EL^62^Your sneak attacks continue to deal damage even  after you strike.
-Lingering Song^CAd^111^Your inspirational bardic music stays with the  listeners long after the last note has died away.
-Lingering Song^SaS^40^Your bardic music stays with the listeners long  after the last note has died away.
-Lingering Spell^CR^20^Residual eldritch energy from your spell continues  to harm your enemies after the spell's main effect has expired.
-Lion Spy^OA^64^Your ancestor, Akodo Shinju, was the greatest  spy of the Lion clan.
-Lion Tribe Warrior^ShS^20^You have learned how to pounce on your foes,  like the lion that roams your lands.
-Lion's Pounce^CD^82^You can deliver a terrible attack at the end  of a charge.
-Live My Nightmare^UA^94^Those who magically pry into your mind become  privy to your most frightening dreams.
-Lliira's Blessing^PG^176^Thanks to the favor of the goddess of freedom,  you are difficult to restrain.
-Lolth's Blessing^Rac^166^The Spider Queen has blessed you with additional  magical abilities.
-Lolth's Meat^Und^26^Like all drow raised in cities that are ruled  by Lolth's priestesses, you know that you exist only to provide your goddess  with food and pleasure. This knowledge lends you a certain bloodthirsty  readiness.
-Long Reach^UE^44^You know how to use your great stature to reach  an opponent more than 5 feet away with a spearlike weapon.
-Longstride Elite^ECS^57^Your shifter trait improves.
-Longstride Elite^RE^114^Your longstride shifter trait improves.
-Longtooth Elite^RE^114^Your longtooth shifter trait improves.
-Lord of the Uttercold^CAr^80^Through careful study of the Elemental Planes  and their interactions with the Negative Energy Plane, you have learned  to wield the uttercold.
-Low Blow^Rac^166^You can get underfoot and attack creatures larger  than you.
-Low Profile^UA^182^You are less famous than others of your class  and level, or you wish to maintain a less visible presence than others of  your station.
-Luck of Heroes^FRCS^36^Your land is known for producing heroes; you  receive a luck bonus on all saving throws.
-Luck of Heroes^OA^64^You are descended from the quick-footed and  quick-witted Hiruma, the archetypal hunter and scout.
-Luck of Heroes^PG^40^Your land is known for producing heroes.
-Lunar Magic^CSW^146^Your spells and spell-like abilities are tied  to the phase of the moon, rising and falling with the strength of Selune.
-Lycanthropic Spell^FP^214^You cast spells while in your lycanthropic animal  form.
-Lyric Spell^CAd^113^You can channel the power of your bardic music  into your magic, allowing you to expend uses of your bardic music ability  to cast spells.
-Mage Slayer^CAr^81^You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly.
-Mage Slayer^MH^27^You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly.
-Magic in the Blood^OA^64^You claim a karmic link with Iuchi, one of the  most resourceful shugenjas in early Rokugan.
-Magic in the Blood^PG^40^You have a knack for getting the most out of  your innate magic abilities.
-Magic of the Land^RW^152^Your intimate understanding of the natural world  allows you to imbue your spells with life-giving magical power from the  land itself.
-Magical Aptitude^PH^97^You have a knack for magical endeavors.
-Magical Artisan^FRCS^36^You have mastered the method of creating certain  magic items.
-Magical Artisan^OA^64^You are descended from Asahina Yajinden, a shugenja  of Crane clan who became the greatest lieutenant of the dread sorcerer Iuchiban.
-Magical Artisan^PG^41^You have mastered the method of creating a certain  kind of magic item.
-Magical Beast Wild Shape^CD^90^You can wild shape into magical beast form.
-Magical Beast Wild Shape^EL^62^You can wild shape into magical beast form.
-Magical Training^FRCS^36^Every crafter and laborer knows a cantrip or  two to ease her work.
-Magical Training^PG^41^You come from a land where cantrips are taught  to all who have the aptitude to learn magic.
-Magistrate's Mind^OA^64^You claim descent from Soshi Saibankan, a great  Scorpion judge who helped establish the Empire's institution of Emerald  magistrates.
-Malevolence^Gh^36^You can possess a creature and control its actions.
-Malign Spell Focus^BV^49^The character's spells that have the evil descriptor  are more potent than normal due to a deal she makes with an evil power.
-Malign Spell Focus^CR^20^Your evil spells are more potent than normal  due to a deal forged with an evil power.
-Manifest Flight^Sh^157^You have learned to make use of the manifest  zone in Sharn to improve your natural ability to fly.
-Manifest Leap^Sh^157^You have learned to make use of the manifest  zone in Sharn to increase your ability to jump and reduce the damage you  take when you fall.
-Mantis Leap^SF^7^You deliver a powerful attack after making a  jump.
-Many Masks^OA^64^You are descended from Shosuro Furuyari, an  important Scorpion playwright.
-Manyshot^EL^70^You can fire multiple arrows as a single attack  against a nearby target.
-Manyshot^PH^97^You can fire multiple arrows simultaneously  against a nearby target.
-Mark of Hleid^Fr^49^You bear a mark that identifies you as an ally  of the church of Hleid and grants you supernatural qualities.
-Markings of the Blessed^RS^142^Your skin markings shift into a pattern that  resists a wide array of harmful effects in times of trouble.
-Markings of the Hunter^RS^142^Your skin markings shift into a pattern that  makes you hard to get the drop on.
-Markings of the Magi^RS^142^Your skin markings shift into a pattern that  denotes you as having strong magical talent.
-Markings of the Maker^RS^142^Your skin markings shift into a pattern that  gives you fate's edge when using skills.
-Markings of the Warrior^RS^142^Your skin markings have shifted over time into  a pattern that gives you fate's deathly accuracy in times of trouble.
-Martial Throw^MH^27^You can switch positions with an opponent you  hit in melee by throwing that opponent.
-Martial Weapon Proficiency^PH^97^Choose a type of martial weapon. You understand  how to use that type of martial weapon in combat.
-Master Legacy^WL^15^You temporarily gain access to legacy abilities  beyond your normal reach.
-Master Linguist^RE^109^You have a broad knowledge of language.
-Master Staff^CAr^192^You can activate a staff without using a charge.
-Master Staff^EL^62^You can activate a staff without using a charge.
-Master Wand^CAr^192^You can activate a wand without using a charge.
-Master Wand^EL^62^You can activate a wand without using a charge.
-Maximize Breath^Dr^71^You can take a full-round action to use your  breath weapon to maximum effect.
-Maximize Power^XPH^48^You can manifest powers to maximum effect.
-Maximize Spell^PH^97^You can cast spells to maximum effect.
-Maximize Spell-Like Ability^CAr^81^You can use a spell-like ability at its maximum  effect.
-Meditation of War Mastery^OA^81^You have mastered the martial arts style of  'Meditation of War' -- a hard/soft form emphasizing weapon use and strikes  to pressure points.
-Memory Eater^LoM^22^An aboleth with this feat is particularly adept  at extracting memories and knowledge from the bodies of those it consumes.
-Menacing Demeanor^RD^155^You can tap into your savage heritage to improve  your intimidation techniques.
-Mental Leap^XPH^48^You can make amazing jumps.
-Mental Resistance^XPH^48^Your mind is armored against mental intrusion.
-Mentor^DMG2^176^A character who takes this feat has offered  his knowledge and skill to a lower-level NPC and takes that NPC on as an  apprentice.
-Mercantile Background^FRCS^36^You come from a family that excels at a particular  trade and knows well the value of any kind of trade good or commodity.
-Mercantile Background^PG^41^You come from a wealthy family with numerous  contacts in the trading costers and craft guilds of Faerun's bustling cities.
-Metallurgy^Rac^166^You are skilled in the act of metallurgy, creating  metal alloys both for their appearance and their properties.
-Metamagic Song^RS^142^You can channel the power of your bardic music  into your magic, allowing you to pay the cost of metamagic feats by spending  uses of your bardic music ability.
-Metamorphic Transfer^XPH^48^You can gain a supernatural ability of a metamorphed  form.
-Metanode Spell^CR^25^You cast metamagic spells to greater effect  in nodes to which you are attuned than elsewhere.
-Metanode Spell^Und^26^You cast metamagic spells to greater effect  in earth nodes than elsewhere.
-Metaray^LoM^45^A beholder with this feat can apply the effects  of metamagic feats to its eye rays.
-Might Makes Right^Rac^166^Your great strength draws more followers.
-Mighty Leaping^SS^37^You have developed your leg muscles and trained  yourself to make mighty leaps.
-Mighty Rage^EL^63^Your rage becomes even more powerful than normal.
-Mighty Roar^SS^37^You unsettle opponents with a dreadful roar  as you attack.
-Mighty Works Mastery I^OA^80^You have mastered the initial secrets of the  'Mighty Works' martial arts style -- a hard/soft form emphasizing locks  and hand strikes.
-Mighty Works Mastery II^OA^80^You have mastered the deeper secrets of the  'Mighty Works' martial arts style.
-Militia^FRCS^36^You served in a local militia, training with  weapons suitable for use on the battlefield.
-Militia^Gh^37^You served in a local militia, training with  weapons suitable for use on the battlefield.
-Militia^PG^41^Your people rely on a well-trained and well-armed  militia to defend their land.
-Mind Over Body^FRCS^37^The arcane spellcasters of some lands have learned  to overcome the frailties of the body with the unyielding power of the mind.
-Mind Over Body^PG^41^The aesthetics and mystics of your homeland  have learned to overcome the frailties of the body with the unyielding power  of the mind.
-Mind Over Body^XPH^48^Your ability damage heals more rapidly.
-Mindsight^LoM^126^A creature that has this feat possesses innate  telepathic ability that allows it to precisely pinpoint other thinking beings  within range of its telepathy.
-Minor Malevolence^Gh^37^You can possess a creature for a short while  and control its actions.
-Misleading Song^RS^142^You can channel the power of your bardic music  to temporarily increase the power of your illusion spells.
-Mithral Body^ECS^57^A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness.
-Mithral Body^MM3^192^A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness.
-Mithral Body^RE^119^Your warforged body can be crafted with a layer  of mithral that provides some protection without hindering speed or gracefulness.
-Mithral Fluidity^ECS^57^Your movements are smoother and more fluid than  those of other warforged.
-Mithral Fluidity^MM3^192^Your movements are smoother and more fluid than  those of other warforged.
-Mobile Defense^EL^63^You can adjust your position while maintaining  a defensive stance.
-Mobile Spell-Casting^CAd^111^Your focused concentration allows you to move  while casting a spell.
-Mobility^PH^98^You are skilled at dodging past opponents and  avoiding blows.
-Momentary Alteration^UA^94^You can briefly transform yourself into a second  form, acquiring its physical qualities.
-Monastic Training^ECS^57^You are part of an order that combines the monastic  discipline of the monk class with another form of training.
-Monkey Grip^CW^103^You are able to use a larger weapon than other  people your size.
-Monkey Grip^SF^7^You use a wider variety of sizes of weapons.
-Moradin's Smile^RS^142^Through the favor of Moradin, you are skilled  at interacting with others.
-Mortalbane^BV^49^The creature can make a spell-like ability particularly  deadly to mortals.
-Mortifying Attack^CR^20^Those who witness your brutal death attack are  unnerved and jarred by the experience.
-Mother Cyst^LM^28^You gain the ability to cast necrotic cyst spells  by growing a cyst of your own.
-Mountain Warrior^RS^142^You are adept at fighting on the uneven ground  of mountainous terrain.
-Mountaineer^Fr^49^You are a particularly gifted explorer and mountain  climber.
-Mounted Archery^PH^98^You are skilled at using ranged weapons while  mounted.
-Mounted Combat^PH^98^You are skilled in mounted combat.
-Mounted Mobility^HB^98^You are skilled at dodging past opponents while  mounted.
-Mounting Casting^MH^27^You are skilled at casting spells while riding  a mount.
-Mror Stalwart^RE^109^You have been trained to make devastating strikes  with the weapons of the dwarves of the Mror Holds.
-Multiattack^MM^304^The creature is adept at using all its natural  weapons at once.
-Multiattack^MM2^18^The creature is adept at using all its natural  weapons at once.
-Multiattack^MM3^207^A creature with this feat is adept at using  all its natural weapons at once.
-Multiattack^Mon^9^The creature is adept at using all its natural  weapons at once.
-Multiattack^MW^24^You are adept at using all your natural weapons  at once.
-Multicultural^SaS^40^You blend in well with members of another race.
-Multidexterity^MM2^18^The creature is adept at using all its hands  in combat.
-Multidexterity^Mon^9^The creature is adept at using all its hands  in combat.
-Multidexterity^MW^24^You are skilled at utilizing all your hands  in combat.
-Multigrab^SK^146^You can grapple enemies more firmly than normal  with your natural attacks.
-Multigrab^SS^37^You can grapple enemies more firmly than normal  with your natural attacks.
-Multilingual^LE^8^You have an uncanny knack for languages.
-Multisnatch^Dr^72^You can grapple enemies more firmly with only  one of your natural attacks.
-Multispell^EL^63^You can cast an additional quickened spell in  a round.
-Multitasking^SF^62^You can perform different tasks with different  limbs.
-Multitasking^SS^37^You can perform different tasks with different  limbs.
-Multivoice^SS^37^If you have two or more heads, you can cast  more spells than usual in a round.
-Multiweapon Fighting^MM^304^A creature with three or more hands can fight  with a weapon in each hand.
-Multiweapon Fighting^MM2^18^A creature with three or more hands can fight  with a weapon in each hand.
-Multiweapon Fighting^Mon^9^A creature with three or more hands can fight  with a weapon in each hand.
-Multiweapon Rend^EL^63^You can rend opponents when fighting with more  than two limbs.
-Music of Growth^ECS^57^Your music can enhance the power of animals  and plant creatures.
-Music of Making^ECS^57^Echoing the music of creation, your own performance  enhances any process of creation.
-Music of the Gods^EL^63^You can use your bardic music to influence creatures  immune to mind-affecting effects.
-Music of the Outer Spheres^LoM^181^You can use your bardic music to create discordant,  insane sounds.
-Mutable Body^RE^110^Your enhanced control over your shapechanging  ability grants you extra power from transmutation spells.
-Mutilator^CR^20^After striking down your enemy in battle, you  can skillfully mutilate the corpse to prevent others from raising it from  the dead.
-Narrow Mind^XPH^48^Your ability to concentrate is as keen as an  arrowhead, allowing you to gain your psionic focus even in the most turbulent  situations.
-Narrowed Gaze^SK^146^Your gaze attack has a limited field of effect.
-Narrowed Gaze^SS^37^Your gaze attack has a limited field of effect.
-Natural Bond^CAd^111^Your bond with your animal companion is exceptionally  strong.
-Natural Bully^CR^21^You easily terrify weaker adversaries.
-Natural Heavyweight^PlH^40^You are descended from creatures native to a  plane of heavy gravity.
-Natural Leader^HB^98^You have a natural commanding presence.
-Natural Scavenger^ShS^21^You are particularly adept at finding food while  on the move.
-Natural Spell^Gh^37^You can cast spells while in wild shape or shifted  form.
-Natural Spell^MW^24^You cast spells while in a wild shape.
-Natural Spell^PH^98^You can cast spells while in a wild shape.
-Natural Trickster^RS^143^You have greater natural access to your race's  powers of illusion.
-Naturalized Denizen^UA^94^You are unusually anchored to your location.
-Nauseating Touch^Gh^37^When you touch a living creature, you can make  it nauseated.
-Necromantic Might^LM^28^Undead you control gain benefits when they are  near you.
-Necromantic Presence^LM^28^Undead you control are harder to turn when they  are near you.
-Necropolis Born^CAr^81^You possess a magical understanding of the essence  of mortal dread.
-Necropotent^LM^29^Your special melee or ranged attack with one  type of weapon is especially effective against undead.
-Necrotic Reserve^LM^29^You are not immediately destroyed when your  hit points fall to 0 or lower.
-Negative Energy Burst^CD^90^You can use your rebuke/command undead ability  to unleash a burst of negative energy.
-Negative Energy Burst^EL^63^You can use your rebuke/command undead ability  to unleash a burst of negative energy.
-Negotiator^PH^98^You are good at gauging and swaying attitudes.
-Nemesis^BE^44^You are the holy bane of creatures of a particular  type.
-Neraph Charge^PlH^40^You master the Limbo-native neraph martial art  of motion camouflage when you charge your foe.
-Neraph Throw^PlH^40^You master the Limbo-native neraph martial art  of motion camouflage for your thrown weapons.
-Net and Trident^CW^114^You are a master of fighting with the net and  the trident.
-Netherese Battle Curse^LE^8^You can channel your own arcane energy into  a powerful curse upon those who dare to face you in battle.
-Night Haunt^CAr^81^You possess a magical understanding of the workings  of the unseen.
-Nimble Bones^LM^29^Undead you raise or create are faster and more  nimble than normal.
-Nimble Fingers^PH^98^You are adept at manipulating small, delicate  objects.
-Nimbus of Light^BE^44^You are cloaked in the radiant light that marks  you as a servant of the purest ideals.
-Nobody's Fool^Rac^166^You have an uncommon streak of skepticism and  common sense, and have a knack for discerning falsehood from truth.
-Node Defense^CR^25^You can use the magical power of a node to defend  yourself from harm.
-Node Defense^Und^26^You can use the magical power of a node to defend  yourself from harm.
-Node Sensitive^CR^25^You can perceive a node just by passing near  it.
-Node Sensitive^Und^26^You can perceive an earth node just by passing  near it.
-Node Spellcasting^CR^25^You have discovered the secret of the magic  of a particular type of node.
-Node Spellcasting^Und^26^You have discovered the secret of node magic.
-Node Store^CR^26^You can store a prepared spell in a node to  which you are attuned.
-Node Store^Und^26^You can store a prepared spell in an earth node.
-Nomadic Trekker^ShS^21^You are particularly efficient at overland movement  across the great grasslands.
-Nonlethal Substitution^BE^44^You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead.
-Nonlethal Substitution^CAr^81^You can modify an energy spell to deal nonlethal  damage.
-Nonverbal Spell^PlH^40^You can cast spells that have verbal components  without actually verbalizing the words.
-Nymph's Kiss^BE^44^By maintaining an intimate relationship with  a good-aligned fey, you gain some of the characteristics of fey.
-Oaken Resilience^CD^82^You can take on the sturdiness of the mighty  oak.
-Obscure Lore^CAd^111^You are a treasure trove of little-known information.
-Obscure Lore^SaS^40^You are a treasure trove of little-known information.
-Obtain Familiar^CAr^81^You gain a familiar.
-Ocular Spell^LoM^181^Your study of the terrible powers of the beholder  has given you insight into new ways to prepare and cast spells.
-Off-Hand Parry^MW^24^You use your off-hand weapon to defend against  melee attacks.
-Off-Hand Parry^SF^7^You use your off-hand weapon to defend against  melee attacks.
-Old Salt^Sto^93^You are an old hand at shipboard life, having  mastered the myriad skills that are required of the experience sailor. Additionally,  you have an eye for the weather.
-Omniscient Whispers^UA^94^A constant, barely audible muttering echoes  in your ears, usually beyond your comprehension. But if you focus all your  energy on listening, you sometimes catch a sentence or two that bears directly  on your current situation.
-Oni's Bane^OA^64^Your ancestor, Isawa Akuma, was a Phoenix shugenja  who sought to understand the mystery of identity.
-Open Minded^XPH^48^You are naturally able to reroute your memory,  mind, and skill expertise.
-Open Minded^CAd^111^You are naturally able to reroute your memory  and skill expertise.
-Opportunity Power^XPH^48^You can make power-enhanced attacks of opportunity.
-Oral History^Rac^167^You are well versed in the art of storytelling  and the oral history of your culture.
-Otherworldly^PG^41^Your folk are known for their mystic power and  seem to transcend their mortal forms.
-Outsider Wings^Rac^167^You have sprouted wings appropriate to your  heritage, revealing the power of your supernatural bloodline.
-Overchannel^XPH^49^You burn your life force to strengthen your  powers.
-Overcome Weakness^Dr^72^You can overcome an innate vulnerability through  sheer willpower.
-Overhead Thrust^Dr^106^You can deal a nasty attack to anything that  tries to crush or run over you.
-Oversized Two-Weapon Fighting^CAd^111^You are adept at wielding larger than normal  weapons in your off hand.
-Overwhelming Critical^DMG^210^Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit.
-Overwhelming Critical^Dr^72^Choose one type of melee weapon, such as a claw  or bite. With that weapon, you deal more damage on a critical hit.
-Overwhelming Critical^EL^63^Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit.
-Owlbear Berserker^UE^44^Your fighting style emulates the owlbear, the  totem beast of your berserker lodge.
-Pain Mastery^SS^37^Injuries send you into a fury, increasing your  physical power.
-Pain Touch^CW^103^You cause intense pain in an opponent with a  successful stunning attack.
-Pain Touch^OA^64^You cause intense pain in an opponent with a  successful stunning attack.
-Pain Touch^SF^8^You cause intense pain in an opponent with a  successful stunning attack.
-Parrying Shield^LoM^181^You have studied advanced techniques for battling  foes whose attacks normally bypass armor.
-Path of Shadows^RE^110^You can use dancelike maneuvers to aid your  defense.
-Peak Hopper^SS^37^You are adapted to a hilly or mountainous environment.
-Penetrating Damage Reduction^EL^63^You can bypass a creature's damage reduction.
-Perfect Health^EL^63^You are immune to normal diseases and common  poisons.
-Perfect Multiweapon Fighting^EL^63^A creature with three or more hands can fight  with a weapon in each hand.
-Perfect Two-Weapon Fighting^CW^152^You can attack with your off-hand weapon as  frequently as with your primary weapon.
-Perfect Two-Weapon Fighting^EL^64^You can attack with your off-hand weapon as  frequently as with your primary weapon.
-Permanent Emanation^EL^64^One of your personal emanation spells becomes  permanent.
-Pernicious Magic^FRCS^37^You can use the Shadow Weave to make your spells  harder for Weave users to counter.
-Pernicious Magic^PG^42^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
-Persistent Spell^CAr^81^You can make a spell last all day.
-Persistent Spell^DD^51^The deity makes one of its spells last all day.
-Persistent Spell^FRCS^37^You make one of your spells last all day.
-Persistent Spell^PG^42^You can make a spell last all day.
-Persistent Spell^TB^41^You make one of your spells last all day.
-Persona Immersion^RE^110^Your assumption of another's physical identity  grants you defenses against mental intrusion.
-Personal Touchstone^PlH^41^You draw more power form one of the planar touchstone  locations to which you have forged a link.
-Persuasive^PH^98^You have a way with words and body language.
-Persuasive^SaS^40^You could sell a tindertwig hat to a troll.
-Pervasive Gaze^SK^146^Your gaze attack is more effective than normal.
-Pervasive Gaze^SS^37^Your gaze attack is more effective than normal.
-Petrification Immunity^SK^147^You are immune to petrification effects.
-Petrification Resistance^SK^147^You can resist petrification effects better  than you otherwise could.
-Phalanx Fighting^CW^103^You are trained in fighting in close formation  with your allies.
-Phalanx Fighting^LD^189^You are trained in fighting in close formation  with your allies.
-Pharaoh's Fist^Sa^51^Your unarmed strikes echo with thunder, stunning  your foe and those nearby.
-Photosynthetic Skin^UA^94^Your skin toughens when it draws energy from  the sun.
-Pierce Magical Concealment^CAr^81^You ignore the miss chance provided by certain  magical effects.
-Pierce Magical Protection^CAr^82^You can overcome the magical protections of  your enemies.
-Pierce the Darkness^RS^143^You can channel positive energy to temporarily  increase the range of your darkvision.
-Piercing Cold^Fr^49^Your cold spells are so cold that they can damage  creatures normally resistant or immune to cold.
-Piercing Gaze^SK^147^Your gaze attack has a greater range than normal.
-Piercing Gaze^SS^38^Your gaze attack has a greater range than normal.
-Piercing Sight^RS^143^Your fundamental familiarity with illusion allows  you to better recognize them.
-Pin Shield^CW^103^You know how to get inside your opponent's guard  by pinning his shield out of the way.
-Pin Shield^SF^8^You know how to get inside your opponent's guard  by pinning his shield out of the way.
-Pious Defense^CD^86^Your connection to a greater power sometimes  gives you flashes of insight that keep you safe.
-Pious Soul^CD^86^By adhering to the precepts of your religion  or philosophy, you gain an extra edge when you need it most.
-Pious Spellsurge^CD^87^You can use the strength of your faith to augment  a spell cast at a critical juncture.
-Plague Resistant^Rac^167^You are descended from the handful of combatants  who fought on the Fields of Nun and survived Chondath's Rotting War in 902  DR.
-Planar Familiar^PlH^41^When you are ready and able to acquire a new  familiar, you may choose one of several nonstandard familiars.
-Planar Touchstone^PlH^41^Forge a link between you and power-rich planar  locations, referred to as planar touchstones.
-Planar Turning^DMG^210^You can turn or rebuke outsiders.
-Planer Turning^EL^64^You can turn or rebuke outsiders.
-Planetouched Animal Affinity^Rac^167^You have a special affinity for a kind of animal  associated with your deity ancestor.
-Plant Control^DD^51^The deity can channel the power of nature to  gain mastery over plant creatures.
-Plant Control^MW^24^You channel the power of nature to gain mastery  over plant creatures.
-Plant Defiance^DD^51^The deity can channel the power of nature to  drive off or stop plant creatures.
-Plant Defiance^MW^24^You channel the power of nature to drive off  plant creatures.
-Plant Wild Shape^EL^65^You can wild shape into plant form.
-Plunging Shot^HB^99^You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you.
-Plunging Shot^RW^152^You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you.
-Point Blank Shot^PH^98^You are skilled at making well-placed shots  with ranged weapons at close range.
-Poison Immunity^BV^49^After prolonged exposure to a poison or toxin,  the character has rendered himself immune to it.
-Poison Immunity^CR^21^After prolonged exposure to a poison or toxin,  you have rendered yourself immune to it.
-Poison Immunity^SK^147^You can ignore the effects of poison.
-Poison Immunity^SS^38^You can ignore the effects of poison.
-Poison Resistance^SK^147^You can resist poison better than you otherwise  could.
-Poison Resistance^SS^38^You can resist poison better than you otherwise  could.
-Polar Chill^UA^94^You can call forth the cold of the arctic regions,  making movement and fighting difficult for the unprepared.
-Poltergeist Hand^Gh^37^You can move small objects in a limited manner  at a distance when you are a ghost.
-Poltergeist Rage^Gh^37^You can throw heavy objects with the power of  your mind.
-Polyglot^CAd^192^You can speak, read, and write all languages.
-Polyglot^EL^65^You can speak, read, and write all languages.
-Portal Master^PG^42^You are especially proficient at creating portals.
-Portal Sensitive^Und^27^You can perceive a portal just by passing  near it.
-Positive Energy Aura^CD^90^You automatically turn (or even destroy) lesser  undead.
-Positive Energy Aura^EL^65^You automatically turn (or even destroy) lesser  undead.
-Positive Energy Resistance^LM^29^You are resistant to the damage dealt by positive  energy effects.
-Power Attack^PH^98^You can make exceptionally powerful melee attacks.
-Power Attack - Iaijutsu^OA^64^Your ancestor, Kakita Rensei, was a renowned  duelist whose strength was legendary.
-Power Attack - Shadowlands^OA^65^You are descended from Kaiu Gineza, the engineer  who not only helped construct the tomb of Iuchiban, but also remained in  the tomb to set the last trap.
-Power Climb^Dr^72^If you fly in a straight line, you can gain  altitude in flight more easily than others.
-Power Critical^CW^103^Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts.
-Power Critical^DD^51^The deity chooses one kind of weapon, such as  a longsword or greataxe. With this weapon, the deity knows how to hit where  it hurts when it counts.
-Power Critical^MW^24^Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts.
-Power Dive^Dr^72^You can fall upon an opponent from the sky.
-Power Dive^SS^38^You can fall upon an opponent from the sky.
-Power Knowledge^XPH^34^You add two additional powers to your list of  powers known.
-Power Lunge^EA^50^Your ferocious attack may catch an opponent  unprepared.
-Power Lunge^Gh^37^Your ferocious attack may catch an opponent  unprepared.
-Power Lunge^SF^8^Your ferocious attack may catch an opponent  unprepared.
-Power Penetration^XPH^49^Your powers are especially potent at breaking  through power resistance.
-Power Specialization^XPH^49^You deal more damage with your powers.
-Power Throw^CAd^111^You have learned how to hurl weapons to deadly  effect.
-Powerful Bite^LoM^23^An aboleth with this feat develops jaws that  are much more muscular than normal, allowing it to bite more efficiently.
-Powerful Charge^ECS^57^You can charge with extra force.
-Powerful Charge^MH^27^You can charge with extra force.
-Powerful Charge^MM3^207^A creature with this feat can charge with extra  force.
-Powerful Voice^OA^65^You are karmically linked to Utaku, Shinjo's  most trusted lieutenant and devoted bodyguard.
-Powerful Wild Shape^RS^143^You retain your powerful build while in wild  shape form.
-Practiced Cohort^HB^99^Your cohort works well as part of your team.
-Practiced Spellcaster^CAr^82^Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful.
-Practiced Spellcaster^CD^82^Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful.
-Precise Shot^PH^98^You are skilled at timing and aiming ranged  attacks.
-Precise Swing^ECS^58^You can ignore most obstacles when making a  melee attack against an opponent.
-Precocious Apprentice^CAr^181^Your master has shown you the basics of a spell  beyond the normal limits of your experience and training.
-Prehensile Tail^SK^147^You can use your tail to manipulate objects.
-Prehensile Tail^SS^38^You can use your tail to manipulate objects.
-Priest of the Waste^Sa^51^You can swap out prepared spells for others  that aid in exploring and surviving in wastelands.
-Primeval Wild Shape^Fr^49^Your wild shape forms are stronger than normal.
-Primitive Caster^Fr^49^You use screeches, wild gesticulations, and  extra material components to give your spells additional power.
-Primitive Caster^Rac^167^You use screeches, wild gesticulations, and  extra material components to give your spells additional powers.
-Profane Boost^CD^84^You can channel negative energy to increase  the power of inflict wounds spells cast near you.
-Profane Lifeleech^LM^29^You can channel negative energy to draw the  life force from nearby living creatures.
-Profane Outburst^CR^21^With a horrendous release of divine energy,  you steel your undead allies and minions against harm.
-Profane Vigor^LM^29^You can channel negative energy to heal nearby  undead allies of physical damage.
-Prone Attack^CW^103^You can attack from a prone position without  penalty.
-Prone Attack^OA^65^You attack from a prone position without penalty.
-Prone Attack^SF^8^You attack from a prone position without penalty.
-Proportionate Wild Shape^MW^24^You use wild shape to become animals of your  own size even if your wild shape ability would normally exclude that size  category.
-Protected Destiny^RD^153^Your heroic destiny is guarded against the whims  of misfortune.
-Psicrystal Affinity^XPH^49^You have created a psicrystal.
-Psicrystal Containment^XPH^49^Your psicrystal has advanced enough that it  can hold a psionic focus that you store within it.
-Psicrystal Power^XPH^34^Your psicrystal can manifest a power.
-Psionic Affinity^XPH^49^You have a knack for psionic endeavors.
-Psionic Body^XPH^49^Your mind reinforces your body.
-Psionic Charge^XPH^50^You can charge in crooked line.
-Psionic Dodge^XPH^50^You are proficient at dodging blows.
-Psionic Endowment^XPH^50^You can endow your manifestations with more  concentrated focus.
-Psionic Fist^XPH^50^You can charge your unarmed strike or natural  weapon with additional damage potential.
-Psionic Hole^XPH^50^You are anathema to psionic creatures and characters.
-Psionic Meditation^XPH^50^You can focus your mind faster than normal,  even under duress.
-Psionic Shot^XPH^50^You can charge your ranged attacks with additional  damage potential.
-Psionic Talent^XPH^50^You gain additional power points to supplement  those you already had.
-Psionic Weapon^XPH^50^You can charge your melee weapon with additional  damage potential.
-Puff Torso^SK^147^You can puff out your skin to appear larger  and more threatening.
-Pulverize Foe^CR^21^You enjoy smashing your opponents into submission.
-Purify Spell^BE^44^You can charge your damaging spells with celestial  energy that leaves good creatures unharmed.
-Purify Spell Trigger^BE^45^You can channel holy power through a spell trigger  item, such as a wand or staff.
-Purify Spell-Like Ability^BE^45^You can charge your damaging spell-like abilities  with celestial energy that leaves good creatures unharmed.
-Pursue^ECS^58^You have the ability to follow in an opponent's  wake.
-Pushback^MH^27^You can knock opponents back when you hit them  in melee.
-Pyro^SaS^40^You're good at lighting objects and opponents  on fire.
-Quell the Profane^BE^45^Your mightiest attacks weaken evil foes.
-Quick Change^RE^110^You can quickly alter your features and physiology.
-Quick Change^SS^38^You can shift to an alternate form faster and  more easily than you otherwise could.
-Quick Draw^PH^98^You can draw weapons with startling speed.
-Quick Reconnoiter^CAd^112^You can learn a lot of information from just  a quick scan of an area or object.
-Quick Recovery^LoM^181^It's hard to keep you down for long. You have  a talent for shaking off effects that leave others unable to act.
-Quick Staff^CW^114^You have mastered the style of fighting with  a quarterstaff.
-Quicken Breath^Dr^73^You can loose your breath weapon with but a  thought.
-Quicken Legacy^WL^15^You can activate one of your item's legacy abilities  with a moment's thought.
-Quicken Manifestation^LM^29^You can manifest from the Ethereal Plane with  a moment's thought.
-Quicken Power^XPH^50^You can manifest a power with a moment's thought.
-Quicken Spell^PH^98^You can cast a spell with a moment's thought.
-Quicken Spell-Like Ability^BV^49^The creature can use a spell-like ability with  a moment's thought.
-Quicken Spell-Like Ability^MM^304^The creature can employ a spell-like ability  with a moment's thought.
-Quicken Spell-like Ability^MM2^18^The creature can use a spell-like ability with  a moment's thought.
-Quicken Spell-Like Ability^MM3^207^A creature with this feat can employ a spell-like  ability with a moment's thought.
-Quicken Spell-Like Ability^SS^38^You can use a spell-like ability with a moment's  thought.
-Quicken Turning^CD^84^You can turn or rebuke undead with a moment's  thought.
-Quicken Turning^DF^20^You can turn or rebuke undead with a moment's  thought.
-Quicken Turning^FP^215^You can turn or rebuke undead with a moment's  thought.
-Quicken Turning^Gh^37^You can turn or rebuke undead with a moment's  thought.
-Quicken Turning^LM^29^You can turn or rebuke undead with a moment's  thought.
-Quicker Than the Eye^SaS^40^Your hands can move so quickly that observers  don't see what you've done.
-Quickslime^LoM^23^The slime attack of an aboleth with this feat  is particularly fast and difficult to resist.
-Racial Emulation^RE^110^You can emulate a humanoid more closely with  your minor change shape ability.
-Radiant Fire^RD^155^Pelor has ignited your faith and conviction,  making you better able to fight the creatures of darkness.
-Ragewild Fighting^RE^118^You have mastered a merciless form of combat  that emphasizes using brute strength to shatter your foes.
-Raging Luck^ECS^58^When raging, you have a greater ability to alter  your luck than most others do.
-Rampaging Bull Rush^RS^143^You can use brute force to slam into and knock  down your enemies.
-Ranged Disarm^CW^103^You can disarm a foe from a distance.
-Ranged Inspiration^EL^65^You can use your bardic music at a greater range  than normal.
-Ranged Pin^CW^104^You can perform a ranged grapple attempt against  an opponent not adjacent to you.
-Ranged Smite Evil^BE^45^You smite ability can be channeled through your  ranged weapon.
-Ranged Spell Specialization^CAr^82^You deal more damage with ranged touch attack  spells.
-Ranged Sunder^CW^104^You can attack an opponent's weapon from a distance.
-Rapid Breath^SS^39^You do not have to wait as long to reuse your  breath weapons as you normally would.
-Rapid Inspiration^EL^66^You can inspire your allies with bardic music  more quickly than normal.
-Rapid Metabolism^XPH^50^Your wounds heal rapidly.
-Rapid Reload^EL^70^You reload a crossbow more quickly than normal.
-Rapid Reload^PH^99^Choose a type of crossbow. You can reload a  crossbow of that type more quickly than normal.
-Rapid Reload^SF^9^You reload a crossbow more quickly than normal.
-Rapid Shot^PH^99^You can use ranged weapons with exceptional  speed.
-Rapid Spell^CD^84^You can cast spells with long casting times  more quickly.
-Rapid Stunning^CW^104^You can use your stunning attacks in rapid succession.
-Rapid Swimming^Rac^167^You are one with the water.
-Rapid Swimming^Sto^93^You are one with the water.
-Rapidstrike^Dr^73^You can attack more than once with a natural  weapon.
-Raptor School^CW^111^You know martial arts techniques inspired by  hunting birds.
-Rashemi Elemental Summoning^UE^45^You may summon Rashemen's native elementals  in any situation where you could summon an air or earth elemental.
-Rattlesnake Strike^Sa^51^Having observed the ways of a desert viper,  you have learned to use ki in a fashion similar to poison.
-Razing Strike^CAd^112^You have mastered the art of delivering precise  strikes against nonliving creatures while channeling spell energy through  your melee attacks.
-Razorclaw Elite^RE^114^Your razorclaw shifter trait improves.
-Reach Bite^LoM^23^An aboleth with this feat can extend its jaws  and esophagus out from its body to make attacks beyond its normal reach.
-Reach Spell^CD^84^You can cast touch spells without touching the  spell recipient.
-Reach Spell^DD^51^The deity can cast touch spells without touching  the spell recipient.
-Reach Spell^DF^20^You can cast touch spells without touching the  spell recipient.
-Reach Spell^FP^215^You can cast touch spells without touching the  spell recipient.
-Reactive Countersong^EL^66^You can use countersong as a reaction to a sonic  or language-dependent magical attack.
-Reactive Counterspell^Mag^22^You can react quickly to counterspells cast  by opponents.
-Reactive Counterspell^PG^42^You can react quickly to counter  spells cast by opponents.
-Reactive Shifting^RE^115^You can shift with a mere thought.
-Ready Shot^HB^99^You can make devastating attacks with ranged  weapons against charging opponents.
-Reaping Spell^CR^21^The dark energy of your spell devours the soul  of any creature killed by it.
-Reckless Charge^MH^27^You can charge with wild abandon.
-Reckless Offense^XPH^51^You can shift your focus from defense to offense.
-Reckless Offensive^EA^41^You lower your guard in order to make a telling  attack.
-Reckless Offensive^Rac^167^You lower your guard in order to make a telling  attack.
-Reckless Rage^RS^143^You are considered extreme even among other  barbaric warriors, and you enter a deeper state of rage than others.
-Reckless Wand Wielder^CAr^82^You can increase the effectiveness of spells  cast from a wand.
-Recognize Impostor^ECS^58^You are extremely skilled at spotting imposters.
-Recover Breath^Dr^73^You wait less time before being able to use  your breath weapon again.
-Reflect Arrows^EL^66^You reflect ranged attacks back upon the attacker.
-Relic Hunter^RE^111^You possess great knowledge of the relics and  crafts of the ancient cultures of Eberron.
-Remain Conscious^MW^25^You have the tenacity of will that supports  you even when things look bleak.
-Remain Conscious^OA^65^You have a tenacity of will that supports you  even when you are disabled or dying.
-Remain Conscious^SF^9^You have a tenacity of will that supports you  even when things look bleak.
-Rend^Dr^73^You can rend opponents with your claws.
-Rend Ghost^Gh^37^Your touch can maul the ectoplasm of another  ghost.
-Rending Constriction^SK^147^You can pull grappled enemies apart.
-Rending Constriction^SS^39^You can pull grappled enemies apart.
-Renown^UA^182^You have a better chance of being recognized.
-Repeat Spell^CAr^82^You can cast a spell that repeats on the following  round.
-Repeat Spell^DD^51^The deity can cast a spell that repeats the  following round.
-Repeat Spell^TB^41^You can cast a spell that repeats on the following  round.
-Repel Aberration^ECS^58^Your Gatekeeper training allows you to keep  aberrations at bay.
-Requiem^LM^29^Your bardic music affects undead creatures.
-Requiem^SaS^40^Your bardic music affects undead creatures.
-Research^ECS^59^You can use your Knowledge skills to extract  information from books, scrolls, and other repositories of facts and figures.
-Reserves of Strength^DCS^86^When you cast a spell, you can choose to increase  its effective caster level at the cost of exhausting yourself.
-Residual Rebound^UA^94^Sometimes spells cast at you rebound on the  caster instead.
-Resist Death^EL^111^You are capable of withstanding tremendous amounts  of damage without risk of instant death.
-Resist Disease^MW^25^You have developed a natural resistance to diseases.
-Resist Disease^ShS^21^You have developed a natural resistance to diseases.
-Resist Dragonfear^DCS^86^You are able to show courage in the presence  of dragons.
-Resist Ghost^Gh^37^You are resistant to the effects of ghost powers.
-Resist Poison^FRCS^37^Over years, some among your people carefully  expose themselves to poisons in controlled dosages in order to build up  immunity to their effects.
-Resist Poison^MW^25^You have built up an immunity to the effects  of poisons by exposing yourself to controlled doses of them.
-Resist Poison^OA^65^Your ancestor, Agasha Kitsuki, founded the fourth  family of the Dragon clan and a school for magistrates renowned for teaching  skills of investigation and deduction.
-Resist Poison^PG^43^Your people have become inured to many deadly  substances through controlled exposure or the simple hostility of your home  environment.
-Resist Taint^OA^65^You are descended from Kuni, the founder of  the Kuni family, a scholar of -- and mighty warrior against -- the Shadowlands.
-Resistance to Energy^MW^25^You channel the power of nature to resist a  particular energy type.
-Resounding Blow^BE^45^Your mightiest attacks cause your foes to tremble  before you.
-Resourceful Buyer^RD^153^You know where to look in a community for anything  you need.
-Return Shot^XPH^51^You can return incoming arrows, as well as crossbow  bolts, spears, and other projectile thrown weapons.
-Reverberation^SS^39^Your sonic attack is more potent than normal.
-Rhinoceros Tribe Charge^ShS^21^You use the power of the rhinoceros's charge  in battle.
-Ride-By Attack^PH^99^You are skilled at making fast attacks from  your mount.
-Right of Counsel^ECS^59^You have the legal and sacral right to seek  advice from one of your ancestors, a deathless elf in Aerenal's City of  the Dead.
-Righteous Strike^EL^66^Your unarmed strikes are particularly damaging  to chaotic creatures.
-Righteous Wrath^BE^45^Your rage is empowered with divine fury.
-Rock Gnome Trickster^Rac^167^Your glamers are particularly likely to fool  the senses of your target.
-Rock Hurling^RS^143^You can throw rocks like a giant can.
-Roll With It^SS^39^You are adept at lessening the effects of blows.
-Roofwalker^RD^156^You are adept at moving and fighting on rooftops  and ledges.
-Roots of the Mountain^RS^143^You can channel energy to make yourself immovable.
-Roundabout Kick^CW^105^You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick.
-Roundabout Kick^OA^65^You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick.
-Ruinous Rage^EL^66^While in a rage, you can deal tremendous damage  to objects.
-Run^PH^99^You are fleet of foot.
-Runesmith^Rac^167^You can fashion runes that take the place of  material components for your spells.
-Sacred Boost^CD^84^You can channel positive energy to increase  the power of cure wounds spells cast near you.
-Sacred Healing^CD^84^You can channel positive energy to grant nearby  living creatures the ability to recover form their wounds quickly.
-Sacred Spell^DD^51^The deity's damaging spells are imbued with  divine power.
-Sacred Spell^DF^20^Your damaging spells are imbued with divine  power.
-Sacred Spell^FP^215^Your damaging spells are imbued with divine  power.
-Sacred Strike^BE^45^Your sneak attack is enhanced by your unshakable  faith in a good-aligned deity.
-Sacred Tattoo^Rac^168^You have been spiritually touched by one of  the god-kings of the Old Empires and bear his or her symbol in the form  of a tattoo in the shape of a holy symbol.
-Sacred Vengeance^CW^108^You can channel energy to deal extra damage  against undead in melee.
-Sacred Vengeance^LM^30^You can channel energy to deal extra damage  against undead in melee.
-Sacred Vitality^LM^30^You can channel positive energy to gain protection  from damage to your abilities or your life force.
-Sacred Vow^BE^45^You have willingly given yourself to the service  of a good deity or cause, denying yourself an ordinary life to better serve  you highest ideals.
-Sacrificial Mastery^BV^50^The character is skilled at offering living  sacrifices to evil gods or fiends.
-Saddleback^FRCS^37^Your people are as comfortable riding as walking.
-Saddleback^Gh^38^You were raised among people who are as comfortable  riding as walking.
-Saddleback^OA^65^You have a unique karmic tie to Moto Chai, one  of the greatest riders ever to live, even by Unicorn standards.
-Saddleback^PG^43^You've spent endless hours learning how to handle  a mount in a fight.
-Sahuagin Flip^Sto^93^You can safely attack and withdraw underwater.
-Sailor's Balance^Sto^93^You are experienced with the rolling decks of  the ship and maintain strong footing, even in a terrible storm.
-Sanctify Ki Strike^BE^46^Sacred power suffuses your unarmed strikes.
-Sanctify Martial Strike^BE^46^Sacred power suffuses your attacks with a certain  kind of weapon.
-Sanctify Natural Attack^BE^46^You can focus holy power into your natural attacks.
-Sanctify Relic^CD^84^You can create magic items that are imbued with  a connection to your deity.
-Sanctify Water^Sto^93^You can call upon positive energy to momentarily  transform normal water around you into holy water.
-Sanctify Weapon^BE^46^You can focus holy power into your weapon.
-Sanctum Spell^CAr^82^Your spells are especially potent on home ground.
-Sanctum Spell^TB^41^Your spells have a home ground advantage.
-Sand Camouflage^Sa^51^You can hide yourself in sand with a moment's  notice.
-Sand Dancer^Sa^52^While making another attack, you attempt to  blind a foe with thrown sand.
-Sand Snare^Sa^52^When you knock your foes into the sand, they  have a hard time regaining their feet.
-Sand Spinner^Sa^52^You spray sand with your acrobatic maneuvers.
-Sandskimmer^Sa^52^You are particularly adept at moving over sand.
-Savage Grapple^CAd^114^While transformed into the shape of a wild animal,  you can savagely tear at any creature that you manage to grapple.
-Scavenging Gullet^LoM^181^The taint of the aberration in your blood has  gifted you with the ability to gain nourishment from things that others  would never consider as food.
-Scent^CAd^114^You can sharpen your sense of smell.
-Scent^MW^25^Your olfactory senses are as sharp as the wolf's.
-Scholar of Nature^OA^65^You are descended from Asako Hanasku, a great  scholar who threw himself into the study of medicine, herbs, and poison.
-Scion of Sorrow^CR^23^You formally supplicate yourself to a powerful  yugoloth lord.
-Scorpion's Grasp^Sa^52^Like the scorpion, you can grab and hold your  prey.
-Scorpion's Instincts^Sa^53^You are hard to find in the waste.
-Scorpion's Resolve^Sa^53^Like the scorpion, you are not easily distracted.
-Scorpion's Sense^Sa^53^Like the scorpion, you sense other creatures  simply by perceiving their contact with the sand.
-Scourge of the Seas^Sto^93^You have a sinister reputation as a pirate and  can intimidate enemy captains by your mere presence.
-Scramble^SS^39^Your slippery ways allow you to evade a damaging  blow.
-Scribe Epic Scroll^EL^66^You can scribe scrolls of epic power.
-Scribe Scroll^PH^99^You can create scrolls, from which you or another  spellcaster can cast the scribed spells.
-Scribe Tattoo^XPH^51^You can create psionic tattoos, which store  powers within their designs.
-Sculpt Ghost Body^Gh^38^You can reshape your ghost body's ectoplasm  to enhance one physical ability score at the expense of another.
-Sculpt Spell^CAr^83^You can alter the area of your spells.
-Sculpt Spell^TB^42^You can alter the shape of a spell's area.
-Sea Legs^Fr^49^You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage.
-Sea Legs^OA^65^You are descended from Yasuki Fumoki, a notorious  pirate who preyed on Crane merchant ships off the coast.
-Sea Legs^Sto^93^You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage.
-Searing Spell^Sa^53^Your fire spells are so hot that they can damage  creatures that normally have resistance or immunity to fire.
-Second Slam^RE^120^You have learned to use your form to the utmost  and can make two slam attacks.
-Second Wind^MH^28^You can shrug off minor wounds with ease.
-Selective Spell^ShS^21^You can screen allies from the effects of your  area spells.
-Self-Concealment^EL^66^When in combat, your form becomes blurry and  indistinct, making it difficult to land a blow against you.
-Self-Sufficient^PH^100^You can take care of yourself in harsh environments  and situations.
-Sense Weakness^Dr^106^You can take advantage of subtle weaknesses  in your opponents' defenses.
-Serpent Fang^Sa^53^You are able to project your ki to strike  foes as though you had extended reach.
-Serpent Strike^ECS^60^Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longspear.
-Serpent's Venom^CD^84^You can deliver a toxic bite attack reminiscent  of the viper.
-Servant of the Fallen^LE^9^You keep alive the worship of a deity who has  died or vanished.
-Servant of the Heavens^BE^46^You swear allegiance to one of the Tome Archons  who rules the Seven Heavens, and in exchange gain power to act on their  behalf.
-Shadow^MW^25^You have a better chance than most to trail  someone unnoticed.
-Shadow^SaS^40^You are good at following someone surreptitiously.
-Shadow Heritage^PlH^42^You are descended from creatures native to the  Plane of Shadow.
-Shadow Marches Warmonger^RE^111^The ancient martial pride of your people grants  you mastery of their style of battle.
-Shadow Shield^Rac^168^Your ancestors long battled the insidious influence  of shadow magic, and some of their descendants (including you) have a greater  resistance to its effects.
-Shadow Song^Rac^168^A dark legacy of the Shadowking's ambitions  is the shadow of sorrow that cloaks many Tethyrian songs and ballads. Some  bards have learned to infuse their performances with the sense of loss and  suffering that suffuses the Shadow Weave.
-Shadow Weave Magic^FRCS^37^You have discovered the dark and dangerous secret  of the Shadow Weave.
-Shadow Weave Magic^PG^43^You have discovered the dangerous secret of  the Shadow Weave.
-Shadowform Familiar^CR^22^You can summon a familiar from the Plane of  Shadow.
-Shadowstrike^CR^22^Due to your ties to the Plane of Shadow, you  strike more effectively in areas of dim illumination.
-Shape Breath^Dr^73^You can make the area of your breath weapon  a cone or a line, as you see fit.
-Shape Ectoplasm^Gh^38^You can make equipment out of ectoplasm.
-Shaped Splash^RE^111^Your expertise with thrown weapons enables you  to use splash weapons more effectively.
-Shared Fury^RW^152^Your fearsome rage spurs your animal companion  to greater heights.
-Sharp-Shooting^CW^105^Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover.
-Sharp-Shooting^DD^52^The deity's skill with ranged weapons lets it  score hits others would miss due to an opponent's cover.
-Sharp-Shooting^SF^9^Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover.
-Shattering Strike^EL^66^You can shatter objects with your unarmed strike.
-Sherem-Lar Sorcery^Gh^38^You are one of the Sherem-Lar, magically altered  in the womb to enhance your potential as a sorcerer.
-Sherezem-Lar Sorcery^Gh^38^You are one of the Sherezem-Lar, an elite group  within the Sherem-Lar, head and shoulders above the others in power.
-Shield Charge^CW^105^You deal extra damage if you use your shield  as a weapon when charging.
-Shield Charge^DF^20^You deal extra damage if you use your shield  as a weapon when charging.
-Shield Dwarf Warder^Rac^168^You are a student of the protective magics of  the shield dwarves, learned at great cost during centuries of warfare and  wandering.
-Shield Expert^SF^9^You use a shield as an off-hand weapon while  retaining its armor bonus.
-Shield of Thought^RE^113^You wield your spirit as both weapon and shield.
-Shield Proficiency^PH^100^You are proficient with bucklers, small shields,  and large shields.
-Shield Slam^CW^105^You can use your shield to daze your opponent.
-Shield Wall^HB^99^You are skilled in using shields when in formation  with other shield-bearers.
-Shielded Axe^RS^144^You have mastered the style of fighting with  a dwarven waraxe and a handaxe while keeping a buckler strapped to your  offhand, and you have learned to use this unusual combination of weapons  and buckler to protect yourself while wielding both axes effectively.
-Shielded Casting^RS^144^You are skilled at covering yourself with your  shield when casting spells in combat.
-Shielded Manifesting^RS^144^You are skilled at covering yourself with your  shield when manifesting psionic powers in combat.
-Shieldmate^MH^28^You can protect those near you with your shield.
-Shifter Agility^RE^115^Your heritage of speed and ferocity has honed  your reflexes, allowing you to avoid attacks.
-Shifter Defense^ECS^60^By delving deeper into your shifter heritage,  you have developed the ability to ignore a little damage from every attack.
-Shifter Defense^MM3^150^By delving into your shifter heritage, you have  developed the ability to ignore a little damage from every attack.
-Shifter Ferocity^ECS^60^You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury.
-Shifter Ferocity^RE^115^You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury.
-Shifter Instincts^MM3^150^Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts.
-Shifter Instincts^RE^115^Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts.
-Shifter Multiattack^ECS^60^You are adept at using your natural attack in  conjunction with another weapon.
-Shifter Savagery^RE^115^The bestial fury of your lycanthrope ancestors  allows you to deal devastating strikes with your natural weapons.
-Shifter Stamina^RE^115^Yours is a heritage of endurance and tenacity,  and you can shrug off bruises and fatigue.
-Ship Savvy^RE^112^Your heritage among the sailors and shipwrights  of Zilargo gives you an edge in shipboard combat.
-Ship's Mage^Sto^93^You form a potent supernatural bond with a ship.  Your spells have a more potent effect when cast aboard this ship.
-Shock Trooper^CW^112^You are adept at breaking up formations of soldiers  when you rush into battle.
-Shock Wave^Dr^73^You can strike the ground with your tail so  hard it knocks other creatures down.
-Shot on the Run^PH^100^You are highly trained in skirmish ranged weapons  tactics.
-Shriveling Touch^Gh^38^Choose one physical ability score. When you  touch a creature, you can cause permanent drain to this ability score.
-Sidestep^MH^28^You can move nimbly around the battlefield.
-Sidestep Charge^XPH^51^You are skilled at dodging past charging opponents  and taking advantage when they miss.
-Signature Spell^FRCS^37^You are so familiar with a mastered spell that  you can convert other prepared spells into that spell.
-Signature Spell^PG^43^You are so familiar with a mastered spell that  you can convert other prepared spells into that spell.
-Silencing Strike^RS^144^You can infuse your sneak attacks with the magical  essence of silence.
-Silent Spell^PH^100^You can cast spells silently.
-Silver Palm^FRCS^37^Your culture is based on haggling and the art  of the deal.
-Silver Palm^PG^43^Your culture is based on haggling and the art  of the deal.
-Silver Smite^ECS^60^You wield the power of the Silver Flame to smite  evil.
-Silver Tongue^OA^65^Your ancestor, Mirumoto Kaijuko, was the first  woman to become daimyo of the Mirumoto family.
-Silver Tracery^RE^120^Alchemical silver tracery covers your body,  allowing you to overcome the supernatural defenses of certain creatures  and protecting against some magical attacks.
-Simple Weapon Proficiency^PH^100^You understand how to use all types of simple  weapons in combat.
-Skewer Foe^CR^22^A ruthless combatant, you like to impale enemies  on spears and similar piercing weapons.
-Skill Focus^PH^100^Choose a skill. You have a special knack with  that skill.
-Skilled Telekinetic^LoM^45^A creature with this feat becomes so skilled  with its telekinesis ability that it can manipulate and use magic  items via telekinesis.
-Skyrider^Rac^168^You have trained and served with the hippogriff  cavalry that guards the Great Rift.
-Smatterings^RD^153^You have a talent for acquiring languages --  at least enough of each one to get by.
-Smite Fiery Foe^Fr^50^You can smite creatures with the fire subtype.
-Smooth Talk^FRCS^37^Your people are accustomed to dealing with strangers  and foreigners without needing to draw weapons to make their point.
-Smooth Talk^OA^66^You are descended from Doji Taehime, a Crane  ambassador to the Scorpion court -- a courtier skilled at discovering falsehoods  and uncovering plots.
-Smooth Talk^PG^43^Your people rarely have to draw their weapons  to deal with potential adversaries.
-Snake Blood^FRCS^38^The taint of the yuan-ti runs in your veins.
-Snake Blood^PG^43^The taint of the yuan-ti runs in your veins.
-Snatch^MM2^18^The creature can grapple more easily with its  claws or bite.
-Snatch^MW^25^You can grapple more easily with your claws  or bite.
-Snatch and Swallow^Dr^73^You can swallow creatures you have grabbed with  your bite attack.
-Snatch Arrows^MM^304^The creature can grab opponents much smaller  than itself and hold them in its mouth or claw.
-Snatch Arrows^PH^100^You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons.
-Snatch Arrows^SF^9^You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons.
-Snatch Trophy^CR^22^You can quickly and skillfully collect a trophy  of your victory over a fallen foe.
-Snatch Weapon^SaS^40^You can disarm an opponent, then pluck the weapon  from midair.
-Sneak Attack of Opportunity^EL^66^Whenever your opponent lets his guard down,  you can make a sneak attack.
-Snow Tiger Berserker^UE^45^You have learned how to pounce on your foes,  much like your totem spirit.
-Snowcasting^Fr^50^You add ice or snow to your spell's components  to make them more powerful.
-Snowflake Wardance^Fr^50^You are particularly adept at moving through  snow and over ice.
-Snowrunner^Fr^50^You have mastered the snowflake wardance, a  mystical style of fighting with slashing weapons that allows you to leap  and almost seem to float haphazardly across the battlefield like a whirling,  razor-edged snowflake.
-Sociable Personality^RD^153^You are adroit at avoiding social gaffes.
-Solid Visage^Gh^39^Your ghost body appears solid and alive.
-Song of the Heart^ECS^60^Your bardic music reaches the depths of its  listeners' hearts.
-Soothe the Beast^ECS^60^Echoing the music of creation, your music has  powers to calm animals.
-Soul of Honor^OA^66^Your ancestor Shinjo Martera, the firstborn  son of Shinjo, was the living incarnation of bushido for the Unicorn,  utterly without fault or failing.
-Soul of Loyalty^OA^66^Your ancestor, Mirumoto Tokeru, was renowned  for his loyalty to his twin brother, Ryudumu.
-Soul of Sincerity^OA^66^You are descended from the famous Scorpion daimyo  Bayushi Tangen, author of Lies and Little Truths.
-Soul of the North^CAr^83^You possess a magical understanding of the nature  of cold.
-Soulblade Warrior^RE^120^The spirit of a quori warrior grants you deadly  speed and combat prowess with your mind blade.
-Southern Magician^Rac^168^Your magical studies in Mulan lands have taught  you spellcasting techniques unknown in the north that blur the line between  arcane and divine magic.
-Speaking Wild Shape^MW^25^While in wild shape, you can communicate with  animals or elementals of the same kind as your current form.
-Spear of Doom^DCS^87^Few can avoid death on your spearpoint when  you brace yourself for their attack.
-Spectacular Death Throes^DCS^87^Your body seethes with unchecked power, promising  dire consequences to your killer.
-Spectral Strike^CD^90^You can strike incorporeal creatures as if they  were solid.
-Spectral Strike^EL^66^You can strike incorporeal creatures as if they  were solid.
-Speed of Thought^XPH^51^The energy of your mind energizes the alacrity  of your body.
-Spell Drain^LM^30^You can cast any spell that you drain from a  creature's mind.
-Spell Focus^CD^84^Your spells with an alignment descriptor are  more potent than normal.
-Spell Focus^PH^100^Choose a school of magic. Your spells of that  school are more potent than normal.
-Spell Focus (Good)^BE^46^Your spells with the good descriptor are more  potent than normal due to your relationship with the powers of good.
-Spell Girding^Mag^22^Your spells are particularly hardy, resisting  dispel checks more readily than normal.
-Spell Hand^CAr^83^You possess a magical understanding of the manipulation  of force.
-Spell Knowledge^DMG^210^You add two additional arcane spells to your  repertoire.
-Spell Knowledge^EL^67^You add two additional arcane spells to your  repertoire.
-Spell Mastery^PH^100^You are so intimately familiar with certain  spells that you don't need a spellbook to prepare them anymore.
-Spell Opportunity^EL^67^You can cast a touch spell as an attack of opportunity.
-Spell Penetration^PH^100^Your spells are especially potent, breaking  through spell resistance more readily than normal.
-Spell Power^OA^66^Your lineage traces back to the young shugenja  Kuni Osaku, who single-handedly held off a massive army of oni at the Battle  of the Cresting Wave.
-Spell Reprieve^LE^9^Your studies of the less restrictive arcane  traditions of old allow you to cast one spell from a prohibited school.
-Spell Specialization^TB^42^You deal more damage with ray or energy missile  spells.
-Spell Stowaway^EL^67^Choose a spell-like ability you possess or a  spell you can cast. You gain the benefits of this magic whenever it is used  near you.
-Spell Thematics^Mag^22^Your spells have a distinct visual or auditory  effect in their manifestation.
-Spell Thematics^PG^44^Your spells manifest with a distinct theme or  appearance.
-Spellcaster Support^OA^66^Your ancestor, Shiba Kaigen, was a samurai who  used his knowledge of spellcraft to help defend a mountain pass from a Lion  invasion.
-Spellcasting Harrier^Dr^74^Spellcasters you threaten find it difficult  to cast defensively.
-Spellcasting Harrier^EL^67^Spellcasters you threaten find it difficult  to cast defensively.
-Spellcasting Prodigy^FRCS^38^You have an exceptional gift for magic.
-Spellcasting Prodigy^PG^44^You have an exceptional gift for magic.
-Spellfire Wielder^Mag^23^You are one of the rare people who have the  innate talent to control raw magic in the form of spellfire.
-Spell-Like Ability Focus^Rac^168^Choose one of your spell-like abilities. This  attack becomes much more potent than normal.
-Spellrazor^RS^144^You have mastered the style of combining a gnome  quickrazor with spellcasting.
-Spellwise^PG^44^You were raised in a land where mighty wizards  are common.
-Spider Bite^PG^176^You gain a poisonous bite like that of a spider.
-Spiked Body^RE^120^Your body is overlaid with hundreds of protruding  spikes that can deal great damage to foes.
-Spinning Halberd^CW^114^You have mastered the style of fighting with  a halberd.
-Spire Walking^Rac^168^Iriaebor is justly known as the City of a Thousand  Spires, for fantastically bizarre, many-storied towers rise from all quarters  of the city and are tightly packed together. As a result, it is possible  to navigate Iriaebor via a network of arches, bridges, stairs, and leapable  gulfs far above the city streets. You are well versed in the skill of navigating  the skyroads of Iriaebor.
-Spirited Charge^PH^100^You are trained at making a devastating mounted  charge.
-Spiritual Force^RE^113^Your forceful inner spirit allows you to deal  more damage with your mind blade.
-Spit Poison^LoM^94^A creature with this feat can spit its poison  as a ranged touch attack.
-Spit Venom^SK^147^You can spit venom in the manner of a spitting  cobra.
-Split Breath^Dr^74^You can split your breath weapon into a pair  of weaker effects.
-Split Psionic Ray^XPH^51^You can affect two targets with a single ray.
-Split Ray^CAr^83^Your ray spells can affect an additional target.
-Split Ray^TB^42^You can affect two targets with a single ray.
-Spontaneous Casting^ECS^61^You can swap a prepared spell on the fly.
-Spontaneous Domain Access^EL^67^Select a domain of spells you have access to.  You can spontaneously convert spells into spells of this domain.
-Spontaneous Healer^CD^84^You can use your spellcasting ability to spontaneously  cast cure spells.
-Spontaneous Spell^EL^67^Select a spell you can cast. You can spontaneously  convert spells of that spell's level into that spell.
-Spontaneous Summoner^CD^85^You can spontaneously cast summon nature's  ally spells.
-Spontaneous Wounder^CD^85^You can use your spellcasting ability to spontaneously  cast inflict spells.
-Spreading Breath^Dr^74^You can convert your breath weapon into a spread  effect.
-Spring Attack^PH^100^You are trained in fast melee attacks and fancy  footwork.
-Spurn Death's Touch^LM^30^You can channel divine energy to remove some  of the harmful effects of attacks made by undead creatures.
-Stable Footing^RE^112^Because of your training and wariness, you are  skilled at keeping your feet in combat and able to move over difficult terrain  with ease.
-Staggering Strike^CAd^112^You can deliver a wound that hampers an opponent's  movement.
-Staggering Strike^Rac^169^You are particularly adept at making cruel and  demoralizing sneak attacks.
-Stalwart Planar Ally^PlH^42^The allies you summon from a specific plane  are tougher than normal.
-Stamp^SS^39^You can stamp the ground to crush and disrupt  opponents.
-Stand Still^XPH^51^You can prevent foes from fleeing or closing.
-Starspawn^LoM^181^Your abnormal body and heritage has become more  pronounced. You grow membranous wings and are comfortable in extreme elevations.
-Steady Concentration^RS^144^You are an expert at avoiding distractions and  focusing your mind, and you can concentrate clearly even in the most stressful  conditions.
-Steady Mountaineer^RS^144^You are so good at climbing cliffs and leaping  across crevasses that distractions don't affect you.
-Stealthy^FRCS^38^Your people are known for their stealthiness.
-Stealthy^PH^101^You are particularly good at avoiding notice.
-Steam Magic^Sto^93^You are skilled at casting fiery spells into  the water, causing terrible gouts of scalding steam.
-Stench of the Dead^UA^94^The odor of decay hangs heavy on you, causing  others to gasp and retch.
-Stigmata^BE^46^You bear the marks of wounds on your body, as  sort of a living martyrdom.
-Still Spell^PH^101^You can cast spells without gestures.
-Stitched Flesh Familiar^LM^30^When you are ready and able to acquire a new  familiar, you may choose to gain a stitched flesh familiar.
-Stone Colossus^Rac^169^You can focus a part of your power to increase  the toughness of your skin.
-Stone Form^RS^144^You can use wild shape to assume a rocklike  form.
-Stone Rage^RS^144^Your bond with the earth and tough hide makes  it easier for you to shrug off blows while you are raging.
-Stone Slide^Rac^169^You have attuned yourself to stone to such an  extent that you can merge with it for a short time.
-Stone Soul^Und^27^You were born with a dwarflike, innate sense  about rock, stone, and construction.
-Stoneback^RS^144^You have studied the techniques of fighting  underground, and you can protect yourself from the dangers of multiple attackers  whenever you can put your back to a solid wall.
-Stoneblood^Rac^169^Your blood is thick like cooling lava, making  it difficult for you to die after falling from injuries.
-Stoneshaper^Rac^169^You have a deep and abiding tie to earth and  stone.
-Stonewalker Fist^Rac^169^You are trained in an unarmed fighting style  that draws on your ability to pass through minerals as if they were air.
-Storm Magic^Fr^50^You gain a boost in spellcasting power during  storms.
-Storm Magic^Sto^94^You gain a boost in spellcasting power during  storms.
-Storm of Throws^EL^67^You become a flurry of thrown weapons, targeting  all nearby opponents.
-Stormheart^PG^44^The sea is in your blood.
-Strafing Breath^DCS^87^You can sustain your breath weapon when you  use it on the wing, covering a larger ground area in its effect.
-Street Smart^FRCS^38^You have learned how to keep informed, ask questions,  and interact with the underworld without raising suspicion.
-Street Smart^PG^44^You know how to keep informed, ask questions,  and interact with the underworld without raising suspicions.
-Strength of the Charger^OA^66^You share the spirit of Utaku Shiko, the founder  of the Utaku Battle Maiden tradition.
-Strength of the Crab^OA^87^You claim descent from Hida, the first Crab.
-Strength of Two^RE^113^Your quori spirit gives you unmatched willpower.
-Strong Mind^ECS^61^You are unusually hard to affect with psionic  powers and mind attacks.
-Strong Mind^Und^27^You are unusually difficult to affect with psionic  powers and mind attacks.
-Strong Soul^FRCS^38^The souls of your people are hard to separate  from their bodies.
-Strong Soul^OA^66^You claim descent from Moto Soro, the simple  peasant who earned his place among samurai and founded the Moto family.
-Strong Soul^PG^44^You possess an innate resistance to fell magic  and supernatural attacks.
-Stunning Fist^PH^101^You know how to strike opponents in vulnerable  areas.
-Subdual Substitution^DD^52^The deity can modify a spell that uses energy  to deal damage to deal subdual damage instead.
-Subdual Substitution^TB^42^You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead.
-Subduing Strike^BE^46^You are adept at striking to deal nonlethal  damage even with normal weapons.
-Subsonics^CAd^112^Your music can affect even those who do not  consciously hear it.
-Subsonics^SaS^40^Your music can affect even those who do not  consciously hear it.
-Subtle Sigil^RD^154^You are able to fade your sigils into invisibility,  but still tap into their magical energy.
-Sudden Empower^CAr^83^You can cast a spell to greater effect without  special preparation.
-Sudden Empower^MH^28^You can cast one spell per day to greater effect  without special preparation.
-Sudden Energy Affinity^MH^28^You can modify a spell's energy type once per  day without special preparation.
-Sudden Enlarge^MH^28^You may cast one spell per day with a greater  range than normal without special preparation.
-Sudden Extend^CAr^83^You can make a spell last longer than normal  without special preparation.
-Sudden Extend^MH^28^You can cast one spell per day with a longer  duration than normal without special preparation.
-Sudden Maximize^CAr^83^You can cast a spell to maximum effect without  special preparation.
-Sudden Maximize^MH^28^Once per day you can cast a spell to maximum  effect without special preparation.
-Sudden Quicken^CAr^83^You can cast a spell with a moment's thought  without special preparation.
-Sudden Quicken^MH^28^Once per day you can cast a spell with a moment's  thought without special preparation.
-Sudden Silent^CAr^83^You can cast a spell silently without special  preparation.
-Sudden Silent^MH^28^Once per day you can cast a spell silently without  special preparation.
-Sudden Still^CAr^83^You can cast a spell without gestures or special  preparation.
-Sudden Still^MH^28^Once per day you can cast a spell without gestures  without special preparation.
-Sudden Widen^CAr^83^You can increase a spell's area without special  preparation.
-Sudden Widen^MH^28^Once per day you can increase the area of a  spell without special preparation.
-Sugliin Mastery^Fr^50^You are a master at fighting with the massive  sugliin.
-Summon Earth Elemental^Rac^169^Like many experienced deep gnomes, you have  developed the ability to summon earth elementals to help you with tasks.
-Sun School^CW^112^You have learned a number of esoteric martial  arts techniques inspired by the sun.
-Sunken Song^Sto^94^You can project your voice underwater.
-Superior Expertise^DD^52^The deity has mastered the art of defense in  combat.
-Superior Expertise^FP^215^You have mastered the art of defense in combat.
-Superior Expertise^OA^66^You have mastered the art of defense in combat.
-Superior Initiative^EL^67^You can react even more quickly than normal  in a fight.
-Supernatural Blow^MW^25^Choose one favored enemy that is immune to critical  hits. You know how to place blows against this opponent for best effect.
-Supernatural Transformation^SS^39^You convert a spell-like ability to a supernatural  ability.
-Suppress Weakness ^Dr^74^Your vulnerability to an energy type is reduced.
-Surefooted^PG^45^You are used to fighting on steep slopes and  treacherous surfaces.
-Surrogate Spellcasting^SS^39^You use substitute verbal and somatic components  when casting spells.
-Survivor^FRCS^38^Your people thrive in regions that others find  uninhabitable, and excel at uncovering the secrets of the wilderness and  surviving to tell the tale.
-Survivor^Gh^39^Your people thrive in a region that others find  uninhabitable, and you excel at uncovering the secrets of the wilderness  and surviving to tell the tale.
-Survivor^PG^45^Your people thrive in places that others find  almost uninhabitable, and you know many of the secrets of the wilderness.
-Svirfneblin Figment^Rac^169^Your time underground has made you acutely aware  of even slight differences in sound and vision in caves that have never  seen the sun. Accordingly, your illusions are finely tuned and ultra-realistic.
-Swamp Stalker^SS^40^You are adapted to a marshy environment.
-Swarm of Arrows^EL^67^You can fire a veritable storm of arrows at  nearby opponents.
-Swarmfighting^CW^105^You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters.
-Swarmfighting^Rac^169^You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters.
-Swarm's Embrace^Sh^158^You have a natural affinity for swarms and can  stand in the midst of a swarm with few harmful effects.
-Swift and Silent^PG^45^The shadows are your friends, and your footfalls  are whispers of death.
-Swiftwing Elite^RE^116^Your swiftwing shifter trait improves.
-Swim Like a Fish^CD^85^You can breathe and swim underwater with grace.
-Swim-By Attack^Sto^94^You can attack in the middle of a fast pass  by your opponent.
-Tactile Trapsmith^CAd^112^You can rely on your rapid reflexes and nimble  fingers instead of your intellect when searching a room or when disabling  a trap.
-Tail Constrict^Dr^74^You can make constriction attacks with your  tail.
-Tail Rattle^SK^147^Your tail gains a rattle like that of a serpent.
-Tail Sweep Knockdown^Dr^74^Your tail sweep attack knocks opponents prone.
-Talenta Warrior^RE^112^You have trained with the ancestral weapons  of the Talenta halflings and are particularly adept at striking from the  back of a dinosaur mount.
-Talented^XPH^51^You can overchannel powers with less cost to  yourself.
-Talfirian Song^Rac^170^You can use the power of your bardic music to  enhance your illusion spells.
-Tall Mouther Hunter^ShS^21^Because of your cultural hatred for tall mouthers,  you have had specific training in how best to fight them.
-Tattoo Focus^DMG^194^You bear the powerful magical tattoos of a Red  Wizard of Thay.
-Tattoo Focus^FRCS^38^You bear the powerful magic tattoos of a Red  Wizard of Thay.
-Tattoo Focus^PG^45^You bear the powerful magical tattoos of a Red  Wizard of Thay.
-Tattoo Magic^LD^189^You can create tattoos that store spells.
-Tattoo Magic^Rac^170^You can create tattoos that store spells.
-Temper Ectoplasm^Gh^39^You can make durable equipment out of ectoplasm.
-Tempest Breath^Dr^74^You can make your breath weapon strike with  the force of a windstorm.
-Tenacious Magic^EL^68^Choose one of your spells or spell-like abilities.  That magic cannot be dispelled, only suppressed.
-Tenacious Magic^FRCS^38^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
-Tenacious Magic^PG^45^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
-Terrifying Rage^DMG^210^While in a rage, you panic your opponents.
-Terrifying Rage^EL^68^While in a rage, you panic your opponents.
-The Gentle Way Mastery^OA^81^You have mastered the martial arts style of  'The Gentle Way' -- a soft form emphasizing throws and movement.
-Theocrat^Rac^170^You have the delicate touch needed to maintain  the favor of your patron deity and the political skills needed to survive  in the trenches of bureaucratic warfare common in the lands ruled by agents  of the Mulhorandi pantheon.
-Thicken Mucus^LoM^23^An aboleth with this feat can produce mucus  that is thicker than normal, and other creatures find it difficult to swim  through.
-Thick-Skinned^SS^40^Your tough hide grants improved damage reduction.
-Thrall Bred^LoM^182^Spawned in the breeding pits of the mind flayers  or the beholders, you have unusual strength and hardiness, as well as loyalty.
-Thrall to Demon^BV^50^The character formally supplicates himself to  a demon prince.
-Thrall to Demon^CR^23^You formally supplicate yourself to a demon  prince.
-Three Mountains^CW^114^You are a master of fighting with powerful bludgeoning  weapons.
-Throw Anything^CW^105^In your hands, any weapon becomes a deadly ranged  weapon.
-Throw Anything^SF^9^In your hands, any weapon becomes a deadly ranged  weapon.
-Thug^FRCS^38^Your people know how to get the jump on the  competition and push other people around.
-Thug^PG^45^You have a knack for getting the jump on the  competition and pushing other people around.
-Thunder Twin^FRCS^38^You are one of the dwarven generation of twins  born after Moradin's Thunder Blessing in the Year of Thunder (1306 DC).
-Thunder Twin^PG^46^You are one of the generation of dwarf twins  born after Moradin's Thunder Blessing in the Year of Thunder.
-Thunderclap^SS^40^You create a cone of deafening sound by clapping  two limbs together.
-Thundering Rage^EL^68^Your rage attacks can cause thunderous roars  that can deafen opponents.
-Tireless^PG^46^You don't know the meaning of the word 'quit.'
-Titan Fighting^RS^145^You have been trained to fight larger creatures,  and you are adept at dodging their attacks.
-Tomb-Born Fortitude^LM^30^The power of undeath taints you, body and soul.  Its power has hardened your flesh and given it the foul look of the grave.
-Tomb-Born Resilience^LM^30^The power of undeath taints you, deadening your  mind and body to the effects of mind-controlling magic, poison, and disease.
-Tomb-Born Vitality^LM^31^The power of undeath taints you, body and soul.  Its power has removed your need to sleep and eat.
-Tomb-Tainted Soul^LM^31^Your soul is tainted by the foul touch of undeath.
-Toothed Blow^Sto^94^You are able to hammer your foes more effectively  underwater.
-Tormented Knight^CR^23^You are inexorably bound to the loathsome yugoloths  that lurk in the Barrens of Doom and Despair, and you strive to bring misery  and pain to all creatures that oppose them.
-Totem Companion^ECS^61^Instead of an animal companion, you have your  totem magical beast as a companion.
-Touch Attack Specialization^Gh^39^Choose one of your ghost touch attacks that  deals hit point damage, ability damage, or ability drain, such as Corrupting  Touch. You are especially good at using this touch attack.
-Touch of Benevolence^CR^22^Despite your evil alignment, you are prone to  moments of benevolence and mercy.
-Touch of Golden Ice^BE^47^Your touch is poisonous to evil creatures.
-Touch of Hate^PG^177^Because you are favored by Bane, you can transform  animals into evil minions.
-Touch Spell Specialization^CAr^83^You deal extra damage with touch spells.
-Touchstone^Sa^53^You forge a link with a power-rich location,  referred to as a touchstone site.
-Toughness^PH^101^You are tougher than normal.
-Tower Shield Proficiency^PH^101^You are proficient with tower shields.
-Toxic Mucus^LoM^23^An aboleth with this feat can produce mucus  that is poisonous to other creatures.
-Track^PH^101^You can follow the trails of creatures and characters  across most types of terrain.
-Trample^PH^101^You are trained in using your mount to knock  down opponents.
-Transdimensional Spell^CAr^84^You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area.
-Transdimensional Spell^CD^85^You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area.
-Transdimensional Spell^UE^45^You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area.
-Transfer Legacy^WL^16^You can temporarily transfer one of your legacy  item's abilities to another magic item.
-Trap Sense^EL^68^You can sense nearby traps even if not actively  searching for them.
-Trapmaster^LE^9^You have studied the funereal architecture and  lethal traps of a dozen long-dead cultures, which gives you an uncanny knack  for avoiding traps.
-Treefriend^SS^40^You are adapted to a forest environment.
-Treetopper^FRCS^38^Your people are at home in the trees and high  places, daring falls that paralyze most other folk in abject terror.
-Treetopper^PG^46^Your people are at home in the trees and high  places.
-Tremendous Charge^DCS^87^You know how to use your mount's power to make  your lance attacks even more deadly.
-Trivial Knowledge^RS^145^You have the ability to dredge up obscure knowledge  in appropriate situations.
-True Believer^CD^86^Your deity rewards your unquestioning faith  and dedication.
-Truebond^DMG2^232^Your bond to your chosen item becomes stronger.
-Truedive Elite^RE^116^Your truedive shifter trait improves.
-Trustworthy^SaS^40^Others feel comfortable telling you their secrets.
-Tunnel Fighting^RS^145^You are adept at maneuvering and fighting in  tight spaces and underground passages.
-Tunnel Riding^RS^145^You are particularly adept at maneuvering mounts  through tight spaces and underground passages.
-Tunnelfighter^Und^27^You can fight more naturally in the cramped  and close quarters of caves and tunnels than usual.
-Tunnelrunner^Und^27^You can move naturally in the cramped quarters  of caves and tunnels.
-Turtle Dart^RS^145^You have mastered the style of fighting with  a short sword while wearing extremely heavy armor and carrying a large shield.
-Twin Power^XPH^51^You can manifest a power simultaneously with  another power just like it.
-Twin Spell^CAr^84^You can simultaneously cast a single spell twice.
-Twin Spell^FRCS^39^You can cast a spell simultaneously with another  spell just like it.
-Twin Spell^PG^46^You can cast a spell simultaneously with another  spell just like it.
-Twin Spell^TB^42^You can cast a spell simultaneously with another  spell just like it.
-Twin Sword Style^FRCS^39^You have mastered a style of defense that others  find frustrating.
-Twin Sword Style^Gh^39^You have mastered a style of defense that others  find frustrating.
-Twin Sword Style^PG^46^You have mastered a defensive style based on  wielding a blade in each hand.
-Two-Weapon Defense^PH^102^Your two-weapon fighting style bolsters your  defense as well as your offense.
-Two-Weapon Fighting^PH^102^You can fight with a weapon in each hand. You  can make one extra attack each round with the second weapon.
-Two-Weapon Rend^EL^68^You can rend opponents when fighting with two  weapons.
-Unarmored Body^RE^120^Your body is crafted without its normal layer  of armor, trading off physical strength for magical potential.
-Unavoidable Strike^XPH^52^You can make an unarmed strike or use a natural  weapon against your foe as if delivering a touch attack.
-Unbalancing Strike^OA^66^You can strike a humanoid opponent's joints  to knock him off balance.
-Uncanny Accuracy^EL^68^You can ignore anything less than total cover  or total concealment when using ranged weapons.
-Uncanny Scent^SS^40^You can pinpoint scents at a greater distance.
-Unconditional Power^XPH^52^Disabling conditions do not hold you back.
-Undead Empathy^ECS^61^You are adept at communicating with and influencing  the undead.
-Undead Leadership^LM^31^You gain the service of loyal undead followers.
-Undead Mastery^CD^90^You can command a greater number of undead than  normal.
-Undead Mastery^EL^68^You can command a greater number of undead than  normal.
-Underfoot Combat^RW^152^You can enter the space that a foe at least  two size categories bigger than you occupies.
-Undying Fate^RD^155^You have pledged your unswerving obedience to  Wee Jas, and she in turn has granted you special insight into life and death.
-Unholy Strike^CD^90^Your attacks deal great damage to good creatures.
-Unholy Strike^EL^68^Your attacks deal great damage to good creatures.
-Unquenchable Flame of Life^LM^31^You are hardened to the attacks of the undead.
-Up the Walls^XPH^52^You can run on walls for brief distances.
-Urban Stealth^RD^154^You are particularly adept at moving quietly  and unnoticed through the city.
-Urban Tracking^ECS^61^You can track the location of missing persons  or wanted individuals within communities.
-Urban Tracking^RD^154^You can track down the location of missing persons  or wanted individuals within communities.
-Vampire Hunter^LM^31^Your knowledge of vampires has given you the  extraordinary ability to detect subtle signs of their presence and to resist  their dominating gaze ability.
-Veil of Cyric^CSW^146^You have reconciled yourself to the unfortunate  truth that hard decisions and regrettable actions are necessary in the service  of your deity.
-Vermin Companion^ECS^62^Instead of an animal companion, you have a vermin  creature as a companion.
-Vermin Shape^ECS^62^You can use your wild shape ability to assume  vermin forms instead of animal forms.
-Vermin Wild Shape^EL^68^You can wild shape into vermin form.
-Verminfriend^BV^50^Vermin regard the character better than they  would normally.
-Versatile Performer^CAd^112^You are skilled at many kinds of performances.
-Veteran Knowledge^HB^99^You are capable of seeing potential battlefield  advantages where others cannot.
-Via Negativa^CR^22^You can channel greater amounts of negative  energy into your inflict spells.
-Vicious Wound^SS^40^Damage you deal causes wounds that bleed excessively.
-Vile Ki Strike^BV^50^The character can focus evil power into his  unarmed strike.
-Vile Martial Strike^BV^50^The character can focus evil power in her weapon  blows.
-Vile Natural Attack^BV^50^The character can focus evil power into his  natural attacks.
-Violate Spell^BV^50^The character can transform one of his spells  into an evil spell, and the wounds the spell inflicts are tainted with the  foulest evil.
-Violate Spell-Like Ability^BV^50^The creature's spell-like abilities are particularly  tainted with evil.
-Virulent Poison^SS^40^Your poison attack is more effective.
-Vorpal Strike^EL^68^Your unarmed strikes can behead your opponents.
-Vow of Abstinence^BE^47^You have taken a sacred vow to abstain from  alcoholic beverages, drugs, stimulants such as caffeine, and intoxication.
-Vow of Chastity^BE^47^You have taken a sacred vow to refrain from  marriage and sexual intercourse.
-Vow of Nonviolence^BE^47^You have taken a sacred vow to avoid violence  against humanoids.
-Vow of Obedience^BE^48^You have taken a sacred vow to live according  to the dictates of another, generally your superior in a religious order  or similar organization.
-Vow of Peace^BE^48^You have taken a sacred vow to abstain from  harming any living creature.
-Vow of Poverty^BE^48^You have taken a sacred vow to forswear material  possessions.
-Vow of Purity^BE^48^You have taken a sacred vow to avoid contact  with dead flesh.
-Vremyonni Training^UE^45^You have had more than the typical amount of  training with the vremyonni, the Old Ones who research spells and  craft magic items for the Witches of Rashemen.
-Wand Mastery^ECS^62^Wands are far more potent in your hands.
-Wandstrike^CAr^84^You can channel the magical energy of a wand  through your melee attacks.
-Warden Initiate^ECS^62^You have been trained in the ancient druidic  tradition of the Wardens of the Wood, a sect dedicated to protecting the  eastern plain and the great woods of the Eldeen Reaches.
-Warped Mind^LoM^182^Your tainted form has altered the physical nature  of your brain, making you resistant to mental effects and more capable of  unleashing the power of your mind on others.
-Warrior Instinct^OA^66^Your ancestor, Matsu Hitomi, was the most famous  female samurai of the early Empire.
-Warrior Shugenja^OA^66^Your ancestor, Agasha Nodotai, was a shugenja  well versed in the code of bushido and the way of war.
-Water Adaptation^Rac^170^You favor your aquatic elven parent and have  developed the ability to breathe and move about in water easily.
-Water Adaptation^Sto^94^You favor your aquatic elf parent and have developed  the ability to breathe and move about in water easily.
-Water Heritage^PlH^42^You are descended from creatures native to the  Plane of Water.
-Waterspawn^LoM^182^Your abnormal body and heritage has become more  pronounced. You have prominent fins and are supremely well adapted to the  icy deeps.
-Weakening Touch^CW^106^You can temporarily weaken an opponent with  your unarmed strike.
-Weapon Finesse^PH^102^You are especially skilled at using weapons  that can benefit as much from Dexterity as from Strength.
-Weapon Focus^PH^102^Choose one type of weapon. You can also choose  unarmed strike or grapple (or ray, if you are a spellcaster) as a weapon  for purposes of this feat. You are especially good with this weapon.
-Weapon Group (Axes)^UA^95^You understand how to use axes and axelike weapons.
-Weapon Group (Basic Weapons)^UA^95^You understand how to use a few basic weapons.
-Weapon Group (Bows)^UA^95^You understand how to use bows.
-Weapon Group (Claw Weapons)^UA^95^You understand how to use weapons strapped to  the hands.
-Weapon Group (Crossbows)^UA^95^You understand how to use crossbows.
-Weapon Group (Druid Weapons)^UA^95^You understand how to use weapons favored by  druids.
-Weapon Group (Exotic Double Weapon)^UA^95^You understand how to use the exotic double  weapons associated with the weapon groups that you have mastered.
-Weapon Group (Exotic Weapons)^UA^96^You understand how to use the exotic weapons  associated with the weapon groups that you have mastered.
-Weapon Group (Flails and Chains)^UA^96^You understand how to use flails and chain weapons.
-Weapon Group (Heavy Blades)^UA^96^You understand how to use large bladed weapons.
-Weapon Group (Light Blades)^UA^96^You understand how to use light bladed weapons.
-Weapon Group (Maces and Clubs)^UA^96^You understand how to use maces and clubs.
-Weapon Group (Monk Weapons)^UA^97^You understand how to use weapons normally favored  by monks.
-Weapon Group (Picks and Hammers)^UA^97^You understand how to use picks and hammers.
-Weapon Group (Polearms)^UA^97^You understand how to use polearms.
-Weapon Group (Slings and Thrown Weapons)^UA^97^You understand how to use slings and handheld  thrown weapons.
-Weapon Group (Spears and Lances)^UA^97^You understand how to use spears and javelins.
-Weapon Specialization^PH^102^Choose one type of weapon for which you have  already selected the Weapon Focus feat. You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon.
-Whirling Steel Strike^ECS^62^Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longsword.
-Whirlwind Attack^PH^102^You can strike nearby opponents in an amazing,  spinning attack
-Whirlwind Tail Sweep^Dr^75^You can sweep your tail in a circular arc.
-Whispered Secrets^RD^155^You revere the Maimed Lord and have devoted  your miserable, worthless life to learning but a few of the Whispered One's  secrets.
-White Scorpion Strike^RE^112^Your fists and feet sting like the dread white  scorpion and are particularly effective against undead.
-Widen Aura of Courage^EL^69^Your aura of courage is wider than normal.
-Widen Aura of Despair^EL^69^Your aura of despair is wider than normal.
-Widen Power^XPH^52^You can increase the area of your powers.
-Widen Spell ^DD^52^The deity can increase the area of its spells.
-Widen Spell^Mag^23^You can increase the area of your spells.
-Widen Spell^PH^102^You can increase the area of your spells.
-Widen Spell^TB^42^You can increase the area of your spells.
-Wield Oversized Weapon^CW^153^You can use larger than normal weapons with  ease.
-Wild Talent^LoM^182^Your mind wakes to a previously unrealized talent  for psionics.
-Wild Talent^XPH^52^Your mind wakes to a previously unrealized talent  for psionics.
-Wildhunt Elite^RE^116^Your shifter-enhanced instincts and senses allow  you to detect concealed and invisible creatures.
-Willing Deformity^BV^50^Through scarification, self-mutilation, and  supplication to dark power, the character intentionally mars her own body.
-Winged Warrior^RW^153^You use your wings for more than just flying.
-Wingover^MM^304^The creature can change direction quickly while  flying.
-Wingover^MM2^18^The creature can change direction quickly while  flying.
-Wingover^MW^25^You change direction quickly once per round  while airborne.
-Wingsinger^Sto^94^You can use song or a wind instrument to compel  the winds to obey you.
-Wingstorm^Dr^75^You can flatten targets with blasts of air from  your wings.
-Wingstorm^SS^40^You can flatten targets with blasts of air from  your wings.
-Winter's Champion^Fr^50^Your paladin spell list is enhanced.
-Winter's Child^SS^40^You are adapted to a cold environment.
-Winter's Mount^Fr^50^Your special mount is native to the frostfell.
-Wisdom Breeds Caution^Und^27^Not getting into a dangerous situation is generally  the wisest course, but if danger is unavoidable, you're prepared. You rely  more on caution and forethought than you do on physical prowess.
-Wise to Your Ways^Gh^39^You are particularly resistant to the unusual  attacks of your favored enemy.
-Witchlight^Gh^39^You can create witchlight, a harmless faint  light, on yourself or an object.
-Wolf Berserker^UE^45^You have studied the fighting style of the wolf  and employ its tactics in combat.
-Wolfpack^RW^153^You can gain an extra advantage when you and  your allies can gang up on a foe.
-Wolverine's Rage^CD^86^You can fly into a berserk rage when injured.
-Woodland Archer^RW^154^You have honed your archery ability in the wilds  of the forest.
-Woodwise^ShS^21^You are trained in fighting in woodlands and  know how to use the terrain to best advantage.
-Woodwise^UE^45^You are trained in fighting in woodlands and  know how to use the terrain to best advantage.
-Words of Creation^BE^48^You have learned a few of the words that were  spoken to create the world.
-Wounding Attack^XPH^52^Your vicious attacks wound your foe.
-Wounding Spell^LE^9^Because you have studied the cruel arts of the  Athalantan magelords of old, you know how to cast spells that cause terrible,  bleeding wounds.
-Yondalla's Sense^RW^152^You display a shrewd perception of danger. Other  halflings say the blessing of Yondalla is upon you.
-Zen Archery^CW^106^Your intuition guides your hand when you use  a ranged weapon.
-Zen Archery^SF^9^Your intuition guides your hand when you use  a ranged weapon.
-Zone of Animation^CD^90^You can channel negative energy to animate  undead.
-Zone of Animation^EL^69^You can channel negative energy to animate  undead.
-Broken One's Sacrifice^CV^28^Your dedication to Ilmater's philosophy has given you the power to take attacks directed at others.
-Carmendine Monk^CV^28^You have learned that study is just as important as insight to finding enlightenment.
-Defender of the Homeland^CV^28^You have sworn a sacred oath to protect your country from evil.
-Detect Shadow Weave User^CV^28^You can determine if a magic item or spellcaster is using the Weave or the Shadow Weave.
-Druuth Slayer^CV^29^You have studied the lore of the druuth (a cabal of doppelgangers led by a mind flayer) and know how to recognize and resist their powers.
-Duerran Metaform Training^CV^29^Your studies have shown you the way to link your psionics and your enlarge person spell-like ability.
-Duerran Stealth Training^CV^29^Your studies have shown you the way to link your psionics and your invisibility spell-like ability.
-From Smite to Song^CV^29^You can channel your destructive holy energy into powerful song magic for the glory of Milil.
-Initiate of Anhur^CV^30^You have been initiated into the greatest secrets of Anhur's church.
-Initiate of Arvoreen^CV^30^You have been initiated into the greatest secrets of Arvoreen's church.
-Initiate of Baravar Cloakshadow^CV^30^You have been initiated into the greatest secrets of Baravar Cloakshadow's church.
-Initiate of Eilistraee^CV^30^You have been initiated into the greatest secrets of Eilistraee's church.
-Initiate of the Holy Realm^CV^30^You have been initiated into the greatest secrets of one of the faiths of the Holy Realm (Chauntea, Helm, Lathander, Selune, or Sune).
-Initiate of Horus-Re^CV^30^You have been initiated into the greatest secrets of Horus-Re's church.
-Initiate of Milil^CV^31^You have been initiated into the greatest secrets of Milil's church.
-Initiate of Nobanion^CV^31^You have been initiated into the greatest secrets of Nobanion's church.
-Initiate of Torm^CV^31^You have been initiated into the greatest secrets of Torm's church.
-Initiate of Tymora^CV^32^You have been initiated into the greatest secrets of Tymora's church.
-Knight of the Red Falcon^CV^32^Your military order has a legendary ability to survive against overwhelming odds.
-Knight of the Risen Scepter^CV^32^Your military order is dedicated to fighting Set and his minions, and even death cannot stop you from this task.
-Knight of Tyr's Holy Judgment^CV^32^You can draw upon the power of Tyr to sense and understand the law and to locate devils.
-Knight ot Tyr's Merciful Sword^CV^33^You can draw upon the power of Tyr to sense where you are needed.
-Mark of the Triad^CV^33^You have been initiated into the greatest secrets of the Triad, the godly triumvirate of Tyr, Torm, and Ilmater.
-Overcome Shadow Weave^CV^33^You understand the strengths and weaknesses of the Shadow Weave and are more resistant to its tricks.
-Paladin of the Noble Heart^CV^33^You are tasked by Ilmater to eliminate cruelty from the world, particularly that of Loviatar.
-Silver Blood^CV^33^You have magically or alchemically imbued your flesh and blood with silver, making you resistant to lycanthrope attacks.
-Silver Fang^CV^33^By following a ritual taught by the Fangshields, your natural attacks are suffused with the power of silver and are fully effective against lycanthropes.
-Smiting Power^CV^33^You use your smite ability to augment other combat maneuvers.
-Sword of the Arcane Order^CV^34^Members of your military order have a special connection with arcane magic.
-Sun Soul Monk^CV^34^Your training with this monk order gives you special powers depending on which sect you follow.
-Archivist of Nature^HH^119^In addition to your studies of the darkness, you have spent time studying giants and fey.
-Bane Magic^HH^119^Your spells deal extra damage to a particular type of creature.
-Blood Calls to Blood^HH^120^Exploring the latent potential in your blood due to your fiendish descent, you learn how to better adapt to the mystical attacks of your forebears.
-Corrupt Arcana^HH^120^You can prepare and cast corrupt spells.
-Corrupt Spell Focus^HH^120^All spells you cast that have a corrupt component (such as call forth the beast, master's lament, or chain of sorrow) are more potent than normal.
-Debilitating Spell^HH^120^By calling upon the taint within, you add a malign power to your offensive spells.
-Debilitating Strike^HH^120^By calling upon the taint within, you add a malign power to your melee attacks.
-Deformity (Skin)^HH^121^Due to a regimen of deliberate abuse, you have roughened your skin until it has grown as coarse and tough as rhino hide.
-Deformity (Tall)^HH^121^Through long and painful stints on the rack, bolstered by the surgical implantation of various splints and struts, you have stretched yourself to well over 7 feet in height.
-Deformity (Teeth)^HH^121^By filing your teeth to points and brutalizing your gums, you gain a hideous smile full of razor-sharp teeth that enable you to make a grisly bite attack.
-Deformity (Tongue)^HH^121^Through protracted self-mutilation that involves frequently piercing your tongue and dipping it in acid, your tongue becomes hideous to behold but oddly sensitive to the environment.
-Disease Immunity^HH^121^Whether due to prolonged exposure or natural hardiness, you have grown immune to some diseases and resistant to all others.
-Draconic Archivist^HH^122^In addition to your studies of the darkness, you have spent time studying dragons and constructs.
-Dreamtelling^HH^122^You can use your Knowledge (the planes) skill to interpret your dreams or the dreams of others, thus gleaning useful information and insights.
-Eldritch Corruption^HH^122^You can add power to your spells or spell-like abilities at the expense of your companions' health.
-Font of Life^HH^122^Your life-force is strong enough to make you highly resistant to all forms of energy drain and level loss.
-Forbidden Lore^HH^123^You gain hideous insights into subjects not meant to be understood by mortal minds.
-Greater Corrupt Spell Focus^HH^123^Your corrupt spells are now even more potent than they were before.
-Haunting Melody^HH^123^You can use your music to inspire fear.
-Improved Oneiromancy^HH^123^With the Improved Oneiromancy feat, you gain additional dream-related spellcasting abilities.
-Lunatic Insight^HH^123^Your madness grants you insight and knowledge.
-Mad Faith^HH^123^Your depravity has twisted the connection between you and your patron deity. You suffer flashes of insight interrupted by flashes of madness.
-Master of Knowledge^HH^123^You have spent most of your life in study, and it comes naturally to you now.
-Oneiromancy^HH^123^You gain a number of abilities and advantages related to dreams and magic.
-Pure Soul^HH^124^Your faith or purity of mind overrides the evils within you. You are immune to taint.
-Spirit Sense^HH^124^You can see and communicate with the souls of the recently departed.
-Surge of Malevolence^HH^124^You empower yourself by drawing on the taint within.
-Tainted Fury^HH^124^You can channel your physical corruption into a state of fury.
-Touch of Taint^HH^124^One of your attack forms that normally deals ability damage, ability drain, or energy drain can also deal corruption or depravity.
-Unnatural Will^HH^124^You have learned to focus your force of personality and inner strength to stand against fearful circumstances.
-Willing Deformity^HH^125^Through scarification, self-mutilation, or supplication to dark powers, you intentionally mar your own body.
-Augment Elemental^MoE^46^Your knowledge of planar magic allows you to imbue your summoned elementals with extraordinary combat prowess and durability.
-Cull Wand Essence^MoE^46^You can focus the raw magical energy of a wand or staff into a beam of energy.
-Deathless Fleshgrafter^MoE^46^You can grow and graft the tissues and body parts of deathless creatures onto others, granting the recipients of your grafts new, potent abilities.
-Dorje Mastery^MoE^46^Psionic dorjes are more potent in your hands.
-Dragon Prophesier^MoE^46^Like the dragons, you seek to untangle and perceive the record of everything that has been, and more important, what will be.
-Dragon Totem Focus^MoE^46^Your focus allows you to enjoy the benefit of a dragon totem ritual longer than normal.
-Dragon Totem Lorekeeper^MoE^47^You have been instructed in how to perform the rituals of dragon totem magic.
-Dragon Totem Scion^MoE^47^You are naturally attuned to the magic of the dragon totem ritual.
-Eldeen Plantgrafter^MoE^47^You can create and apply plant grafts onto others, granting the recipients of your grafts new, potent abilities.
-Elemental Grafter^MoE^47^You can create and apply elemental grafts onto others, granting the recipients of your grafts new, potent abilities.
-Elemental Helmsman^MoE^47^You are more capable of piloting an elemental vessel.
-Elemental Smite^MoE^47^You can channel the energy associated with one of your elemental grafts into your melee attacks.
-Etch Schema^MoE^47^You can create a minor schema.
-Heroic Companion^MoE^48^Your luck extends to your companion creature.
-Heroic Focus^MoE^48^Despite the dangers all around, you can quickly regain your psionic focus.
-Improved Homunculus^MoE^49^You are adept at improving and modifying your homunculus. Whenever you advance your homunculus's Hit Dice, you can also imbue it with special supernatural abilities.
-Prophecy's Artifex^MoE^50^Your perception of the draconic Prophecy gives you insights that allow you to transcend the normal limits of magic item use.
-Prophecy's Explorer^MoE^50^Your perception of the draconic Prophecy imbues you with a preternatural sense of your surroundings, enabling you to move easily and quickly through dangerous areas.
-Prophecy's Hero^MoE^50^Your perception of the draconic Prophecy charges you with the will to prevail, providing you with the opportunity to see a way to victory even when the odds are stacked against you.
-Prophecy's Mind^MoE^50^You meld your perception of the draconic Prophecy with a mental focus that provides you with momentary warning when death is at hand.
-Prophecy's Shaper^MoE^50^Your perception of the draconic Prophecy is such that you can disrupt reality and make your spells more powerful than reality would normally allow.
-Prophecy's Shepherd^MoE^50^Your perception of the draconic Prophecy is such that you can alter the natural flow of the world by connecting your knowledge of life-force with the world around you.
-Prophecy's Slayer^MoE^51^Your perception of the draconic Prophecy includes a keen appreciation of life. You recognize how fragile and tenuous life truly is when balanced against your lethal foreknowledge.
-Psiforged Body^MoE^51^As a warforged, your body can be crafted using trace amounts of psionically resonant deep crystal, providing you with increased psionic power and the ability to store psionic energy in your body. If you take this feat, you will often be referred to as a psiforged.
-Psionic Luck^MoE^51^Your psionic focus improves your luck.
-Psychic Rush^MoE^51^You can occasionally manifest a psionic power with less effort.
-Quicken Dragonmark^MoE^51^You can use your dragonmark abilities more quickly.
-Rapid Infusion^MoE^51^You can imbue an item with an infusion more quickly than normal.
-Symbiont Mastery^MoE^51^You have stronger control over an attached symbiont than regular creatures, and you gain vitality for each symbiont attached to you.
-Wand Surge^MoE^51^You can squeeze more magic out of charged items.
-Azure Enmity^MoI^34^You can channel incarnum to enhance your ability to deal damage to your favored enemies.
-Azure Talent^MoI^34^The soul energy of incarnum increases your mental capacity.
-Azure Touch^MoI^34^You can channel incarnum to enhance your abilit to heal.
-Azure Toughness^MoI^35^You can use incarnumto boost your physical vigor.
-Azure Turning^MoI^35^You can blast ndead with incarnum-purified positive energy.
-Azure Wild Shape^MoI^35^You can channel incarnum to enhance your combat prowess while wild shaped.
-Bonus Essentia^MoI^35^You are better able to harness your personal store of incarnum.
-Cerulean Fortitude^MoI^35^You can use incarnum to boost your ability to resist effects that would adversely affect your health.
-Cerulean Reflexes^MoI^35^You can use incarnum to boost your ability to avoid harm.
-Cerulean Will^MoI^35^You can use incarnum to boost your willpower.
-Cobalt Charge^MoI^35^You can channel incarnum to deal devastating strikes when charging.
-Cobalt Critical^MoI^35^You can focus your spirit into your melee weapon attacks, dealing more damage with successful critical strikes.
-Cobalt Expertise^MoI^35^By channeling the soul energy of weapon masters past, present, and future, you become more adept at maneuvers of skill and expertise.
-Cobalt Power^MoI^37^By channeling the soul energy of brutal warriors past, present, and future, you become more capable of overcoming your enemies through sheer strength.
-Cobalt Precision^MoI^37^You can focus your soul energy into your ranged attacks, dealing more damage with successful critical hits.
-Cobalt Rage^MoI^37^You can channel incarnum to enhance your rage. When you do so, your eyes turn deep blue in color.
-Divine Soultouch^MoI^37^You can channel positive or negative energy to imbue yourself with incarnum.
-Double Chakra^MoI^38^One of your chakras becomes capable of holding more incarnum than it is normally capable of containing.
-Expanded Soulmeld Capacity^MoI^38^Your soul's tie to incarnum allows you to maintain more essentia in a single soulmeld.
-Healing Soul^MoI^38^You can draw upon the soul energy of incarnum to heal your wounds.
-Heart of Incarnum^MoI^38^You tap into the power of your heart chakra to gain resilience.
-Improved Essentia Capacity^MoI^38^Your capability of investing essentia improves.
-Incarnum-Fortified Body^MoI^38^The incarnum within you strengthens your body's toughness, enabling you to withstand greater injury.
-Incarnum Resistance^MoI^38^Your body, untainted by incarnum, is not easily affected by the power of soul energy.
-Incarnum Spellshaping^MoI^38^You gain the ability to invest incarnum into your spellcasting.
-Indigo Strike^MoI^38^You can channel incarnum to enhance your ability to deal damage with your skirmish attack, sneak attack or sudden strike.
-Midnight Augmentation^MoI^38^You can augment a psionic power with your personal soul energy rather than mental energy.
-Midnight Dodge^MoI^39^You can channel incarnum to enhance your ability to avoid attacks against you.
-Midnight Metamagic^MoI^39^You can channel incarnum to alter your prepared spells.
-Necrocarnum Acolyte^MoI^39^You have experienced the power of necrocarnum, a dark and twisted form of incarnum.
-Open Greater Chakra^MoI^39^You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra.
-Open Least Chakra^MoI^39^You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra.
-Open Lesser Chakra^MoI^40^You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra.
-Psycarnum Blade^MoI^40^You can forge your mind blade from a mixture of mental and soul energy, enabling you to deal devastating strikes with the weapon.
-Psycarnum Crystal^MoI^40^Your psycrystal taps into the natural ebb and flow of incarnum, turning it into a small reservoir of soul energy.
-Psycarnum Infusion^MoI^40^You transform your mental focus into a brief burst of soul energy.
-Sapphire Fist^MoI^40^You can channel incarnum to enhance your ability to deliver stunning attacks.
-Sapphire Smite^MoI^40^You can channel incarnum to enhance your ability to deal mighty blows.
-Sapphire Sprint^MoI^40^Drawing on the soul energy of great runners of history, you infuse your body with incarnum to speed your steps.
-Shape Soulmeld^MoI^40^You gain the ability to shape a single soulmeld.
-Share Soulmeld^MoI^41^You can share a soulmeld with an ally with which you have a special bond.
-Soulsight^MoI^41^You can attune your soul to sense living creatures near you.
-Soultouched Spellcasting^MoI^41^By fusing your spells with incarnum, they become more capable of overcoming enemy magic and spell resistance.
-Split Chakra^MoI^41^One of your chakras becomes capable of holding both a bound soulmeld and a magic item.
-Undead Meldshaper^MoI^41^Despite having no soul of your own, you maintain the ability to channel incarnum through force of will alone.
-Aereni Focus^PE^20^From childhood you have studied one particular path, and these decades of devotion result in remarkable skill.
-Aerenal Arcanist^PE^20^Your family has studied wizardry for thousands of years.
-Aerenal Half-Life^PE^20^The Priests of Transition have guided you through strange rituals that left you poised between the world of the living and the dead.
-Perfect Reflection^PE^25^You are particularly skilled at mimicking the forms and mannerisms of others.
-Touch of Captivation^PE^35^You are sakah, and your fiendish gift allows you to captivate people around you.
-Touch of Deception^PE^35^You are sakah, and your fiend gift allows you to alter your appearance and trick others.
-Touch of Summoning^PE^35^You are sakah, and your fiendish gift allows you to summon fell creatures to do your bidding.
-Binding Brand^PE^36^You carry the brand of the binding flame, marking you as a warrior of the Ghaash'kala clans.
-Dragon's Insight^PE^48^You can call on the power of your dragonmark to enhance your natural abilities.
-Shield of Deneith^PE^48^You can channel the power of your Deneith dragonmark to defend yourself in battle.
-Swiftness of Orien^PE^48^You can draw on the power of your Mark of Passage to temporarily enhance your speed or the speed of your mount.
-Aberrant Dragonmark Gift^PE^49^Your aberrant dragonmark is especially potent.
-Aberrant Dragonmark Mystery^PE^49^You can use the power of your aberrant mark to enhance your magical abilities.
-Aberrant Dragonmark Vigor^PE^49^You can channel the energy of your aberrant mark to enhance your health.
-Ritual of Arcane Opposition^PE^60^You have been inured against the effects of arcane magic by a ritual of the Ashbound set.
-Ritual of Blight's Embrace^PE^60^You have been warded from the effects of poison and disease by a ritual of the Children of Winter, solidifying your bond with vermin.
-Ritual of the Timeless Soul^PE^60^You have been blessed by the faerie lords of Thelanis in a ritual of the Greensinger sect, and you temporarily slip from time's grasp.
-Ritual of the Woodland Bond^PE^60^You have formed a bond with the growth of the woods through a ritual of the Wardens of the Wood.
-Friends of the Tribes^PE^75^You are deeply familiar with the tribes of the Talenta Plains.
-Talenta Dinosaur Bond^PE^75^You have undergone grueling training on the dinosaur back and are skilled in the halfling techniques of fighting while mounted.
-Talenta Drifter^PE^75^Your extensive travels on the Talenta Plains give you an advantage while in that region.
-Galifaran Scholar^PE^77^You have made an exhaustive study of the history of Galifar, from the earliest roots of the Five Nations, through the formation of the united Kingdom of Galifar, and on to the Last War and the dissolution of the kingdom.
-Du'ulora Ancestor^PE^83^The tsucora are the most common of the quori, but they are not the only spirits in Dal Quor.
-Hashalaq Ancestor^PE^83^The hashalaq quori essence within you allows you to sense the emotions of others.
-Aberration Banemagic^PE^86^You can cast spells that do extra damage to aberrations.
-Indomitable Discipline^PE^86^Your strict mental discipline allows you to resist attempts to manipulate your thoughts.
-Unnatural Enemy^PE^86^You have been trained in the ways of aberrations, and you know how to recognize them and spot their weaknesses.
-Sudden Willow Strike^PE^109^Your monastic training allows great precision with your quarterstaff.
-Child of the Swamps^PE^119^You can find food and shelter in the deep swamps, and you can move more freely through the difficult terrain.
-Battlebred^PE^122^Due to traumatic experiences in past battles, the plane of Shavarath with its endless war seems never far from you.
-Chosen of the Deathless^PE^122^You carry with you an intimate familiarity with the positive energy that suffuses the City of the Dead.
-Manifest Druid^PE^122^You have a familiarity with the three manifest zones of the Eldeen Reaches and the powers of the planes to which they are linked.
-Mastery of the Azure Sky^PE^125^You have learned to calculate the precise location of Syrania at any given time, and to use that knowledge to enhance spells you cast to grant flight.
-Mastery of the Battleground^PE^125^You have learned to calculate the precise location of Shavarath at any given time, and to use that knowledge to enhance spells of battle that you cast.
-Mastery of Chaos and Order^PE^125^You have learned to calculate the precise locations of Daanvi and Kythri at any given time, and to use that knowledge to imbue your spells with unusual regularity or strinking unpredictability -- or both.
-Mastery of Day and Night^PE^125^You have learned to calculate the precise locations of Irian and Mabar at any given time, and to use that knowledge to enhance your manipulation of positive and negative energy.
-Mastery of the Dead^PE^125^You have learned to calculate the precise location of Dolurrh at any given time, and to use that knowledge to capture the souls of creatures slain with your death spells.
-Mastery of Dreams^PE^125^By physically exploring the realm of Dal Quor, you have learned to instill your spells with the stuff of dreams . . . and nightmares.
-Mastery of Faerie Enchantment^PE^125^You have learned to calculate the precise location of Thelanis at any given time, and to use that knowledge to improve your ability to control the minds of other creatures.
-Mastery of Ice and Fire^PE^126^You have learned to caclulate the precies locations of Fernia and Risia at any given time, and to use that knowledge to enhance cold and fire spells that you use.
-Mastery of Madness^PE^126^You have learned to reach magically to the ever-distant plane of Xoriat and draw some element of its madness into the world -- but these techniques come with some risk.
-Mastery of the Mists^PE^126^By learning of the intricate relationship between the Ethereal Plane and the Material Plane, you gain the ability to see and sometimes reach through the barrier between these two planes.
-Mastery of the Silver Void^PE^126^You have gained a deeper understanding of the Astral Plane and its relationship to the other planes of the cosmos. You can use that knowledge to more quickly access that plane.
-Mastery of Twilight Denizens^PE^126^You have learned to calculate the precise location of Lamannia at any given time, and to use that knowledge to summon more powerful creatures from that plane.
-Mastery of Twisted Shadow^PE^126^You gain the ability to reach into the Plane of Shadow when casting an illusion, concealing yourself in the raw shadowstuff drawn forth.
-Shifter Acrobatics^PE^135^Your heritage makes you agile and light-footed.
-Shifter Magnetism^PE^135^Your heritage gives you a strong animal presence.
-Shifter Stealth^PE^135^You can call upon your bestial heritage to increase your stealth.
-Bladebearer of the Valenar^PE^141^You have trained extensively with scimitars, including the Valenar double scimitar. You are adept at striking from horseback with the curved blades of the Valenar.
-Shield of Blades^PE^141^As a master of the double scimitar, you can weave a web of steel to protect yourself from attack.
-Spirit of the Stallion^PE^141^Your patron ancestor was a legendary cavalry soldier, and her spirit guides you and your mount.
-Valenar Trample^PE^141^You are trained in Valenar cavalry techniques emphasizing trampling your opponents into the ground.
-Shocking Fist^PE^151^Your slam attack can deal a shock.
-Overload Metabolism^PE^151^You can heal damage at a cost to your other physical attributes.
-Heretic of the Faith^PF^46^You stray significantly from the teachings of your faith.
-Prophet of the Divine^PF^49^Your communications with the divine manifest in a public fashion.
-Bane of Infidels^PF^53^In a church locked in eternal conflict with followers of another faith, you have learned to fight effectively against the infidels. You know their ways and how to beat them.
-Initiate of Amaunator^PF^58^You have been initiated into the greatest secrets of Amaunator's faith.
-Rulership^PF^158^You are a ruler of an economic, frontier, governmental, military, religious, transport, or other community.
-Accelerate Metamagic^RDr^98^You can apply a selected metamagic feat to your spells more quickly than normal.
-Dragon Breath^RDr^98^You can use your breath weapon as often as a normal dragon.
-Dragon Tail^RDr^98^Your draconic ancestry manifests as a muscular tail you can use in combat.
-Dragon Trainer^RDr^98^Your draconic nature gives you special insight into training dragons and draconic creatures.
-Dragon Wings^RDr^100^Your draconic ancestry manifests as a pair of wings that aid your jumps and allow you to glide.
-Dragonwrought^RDr^100^You were born a dragonwrought kobold, proof of your race's innate connection to dragons.
-Extraordinary Trapsmith^RDr^100^You are an expert at constructing mechanical traps.
-Heavyweight Wings^RDr^100^Your superior strength allows you to fly while heavily burdened.
-Improved Dragon Wings^RDr^100^Your draconic wings now grant you flight.
-Kobold Endurance^RDr^101^Thanks to your race's determination, you are capable of amazing feats of strength and stamina.
-Kobold Foe Strike^RDr^101^You are more effective in combat against your racial enemies.
-Practical Metamagic^RDr^101^You can apply a selected metamagic feat to your spells more easily.
-Reinforced Wings^RDr^101^You have strengthened the muscles of your wings.
-Versatile Spellcaster^RDr^101^You can use two lower-level spell slots to cast a spell one level higher.
-Wyrmgrafter^RDr^101^You can apply draconic grafts to other living creatures or to yourself.
-Entangling Exhalation^RDr^101^You can use your breath weapon to create an entangling mesh of energy.
-Exhaled Barrier^RDr^101^You can use your breath weapon to create a wall of energy.
-Exhaled Immunity^RDr^102^You can use your breath weapon to grant a willing creature immunity to energy.
-Extra Exhalation^RDr^102^You can use your breath weapon one more time per day than normal.
-Furious Inhalation^RDr^102^While raging, you can use your breath weapon to deal energy damage with your bite attacks.
-Draconic Arcane Grace^RDr^102^You can convert some of your arcane spell energy into a saving throw bonus.
-Draconic Breath^RDr^102^You can convert some of your arcane spell energy into a breath weapon.
-Draconic Claw^RDr^102^You develop natural weapons like those of your draconic ancestors.
-Draconic Flight^RDr^102^The secret of draconic flight has been revealed to you, granting you the ability to fly occasionally.
-Draconic Heritage^RDr^102^You have a greater connection with your draconic bloodline than others of your kind.
-Draconic Legacy^RDr^104^You have realized greater arcane power through your draconic heritage.
-Draconic Persuasion^RDr^104^Your arcane talents lend you a great deal of allure.
-Draconic Power^RDr^104^You have greater power when manipulating the energies of your heritage.
-Draconic Presence^RDr^104^When you use your magic, your mere presence can terrify those around you.
-Draconic Resistance^RDr^105^Your bloodline hardens your body against effects related to the nature of your progenitor.
-Draconic Skin^RDr^105^Your skin takes on a sheen, luster, and hardness related to your draconic ancestor.
-Draconic Toughness^RDr^105^Your draconic nature reinforces your body as you embrace your heritage.
-Spell Rehearsal^RDr^105^Casting the same spell several times in a row or at the same target enables you to perfect it.
-Wing Expert^RDr^105^You can use your wings to create a variety of effects.
-Divine Vigor^RH^126^You can channel energy to increase your speed and durability.
-Dragonthrall^RH^126^You have pledged your life to the service of evil dragonkind.
-Bind Vestige^TM^72^You know how to make pacts with otherworldly spirits called vestiges.
-Bind Vestige, Improved^TM^73^You can bind a wider range of vestiges.
-Defense against the Supernatural^TM^73^Your in-depth knowledge of supernatural forces grants you greater ability to resist their effects.
-Empower Supernatural Ability^TM^73^You can use a supernatural ability with greater effect than normal.
-Enlarge Supenatural Ability^TM^73^You can increase the range of a supernatural attack.
-Expel Vestige^TM^73^You can expel a vestige to which you are bound before the duration of its pact with you has expired.
-Extend Supernatural Ability^TM^73^You can cause a supernatural ability with a duration to last longer than normal.
-Favored Vestige^TM^74^Choose one vestige to which you have access. You establish a close, mystical affinity with that spirit.
-Favored Vestige Focus^TM^74^The supernatural abilities of your favored vestige are more potent than normal.
-Ignore Special Requirements^TM^74^The strange constraints that vestiges place on their summoning are meaningless to you.
-Improved Binding^TM^74^You are so adept at binding vestiges that you can contact powerful ones more easily than other soul binders can.
-Practiced Binder^TM^74^When you bind a vestige, you gain an additional power associated with it.
-Rapid Pact Making^TM^74^Your skill with pact magic lets you bind a vestige extremely quickly, even in the heat of combat.
-Rapid Recovery^TM^74^You can use the abilities of your favored vestige more frequently.
-Skilled Pact Making^TM^74^Your strong will serves you well when making pacts with vestiges.
-Sudden Ability Focus^TM^74^One of your special attacks becomes more potent than usual.
-Supernatural Crusader^TM^75^You are adept at fighting supernatural creatures.
-Supernatural Opportunist^TM^75^You are adept at exploiting a creature's momentary distraction while it activates its supernatural abilities.
-Widen Supernatural Ability^TM^75^You can increase the area of your supernatural abilities.
-Empower Mystery^TM^136^You can cast mysteries to greater effect.
-Enlarge Mystery^TM^136^You can cast mysteries farther than normal.
-Extend Mystery^TM^136^You can cast mysteries that last longer than normal.
-Favored Mystery^TM^136^The mystery you choose becomes easier to cast.
-Greater Path Focus^TM^136^Choose a path of shadow magic to which you have already applied the Path Focus feat. Your mysteries of that path are now even more potent.
-Line of Shadow^TM^136^You can cast a mystery without line of sight or line of effect to the target.
-Maximize Mystery^TM^136^You can cast mysteries to maximum effect.
-Nocturnal Caster^TM^137^You are empowered by darkness, making your abilities stronger at night.
-Path Focus^TM^137^Choose a path of shadow magic, such as Touch of Twilight. Your mysteries of that path are more potent than normal.
-Quicken Mystery^TM^137^You can cast a mystery with a moment's thought.
-Reach Mystery^TM^137^You can cast touch-range mysteries without touching the target.
-Shadow Cast^TM^137^Your shadow shimmers as you cast a spell and you seem to cast your mysteries from elsewhere.
-Shadow Familiar^TM^138^Noctumancers developed this feat in order to gain a mystical companion.
-Shadow Reflection^TM^138^Your shadow flickers and moves in an aggressive, independent manner, enabling you to avoid some attacks of opportunity.
-Shadow Vision^TM^138^Your senses grow so attuned with shadow that you gain a limited ability to see in natural and magical darkness.
-Still Mystery^TM^138^You can cast mysteries without gestures.
-Unseen Arrow^TM^138^Developed by shadowblades, this feat allows a member of that class to apply his unseen weapon abilities to thrown or projectile weapons.
-Empower Utterance^TM^228^Your utterances have more powerful effects.
-Enlarge Utterance^TM^229^You can project the power of an utterance to a greater distance.
-Extend Utterance^TM^229^Your utterances have a more lasting effect on the universe.
-Focused Lexicon^TM^229^Your utterances have greater effect against a certain type of creature.
-Minor Utterance of the Evolving Mind^TM^229^Your mastery of Truespeech has led you to the understanding necessary to perform a simple utterance from the Lexicon of the Evolving Mind.
-Obscure Personal Truename^TM^229^Truenames are notoriously difficult to pronounce, but yours is harder than most.
-Personal Truename Backlash^TM^229^Your personal truename is so charged with magic power that those who fail to speak it properly are warped by reality run amok.
-Truename Rebuttal^TM^229^You are particularly good at negating other truenamers' power with well-chosen truenames.
-Truename Research^TM^229^You have a knack for uncovering the personal truenames of friends and foes alike through study and investigation.
-Truename Training^TM^229^Unlike most of your peers, you have discovered the secret power of truenames.
-Utterance of the Evolving Mind^TM^230^Your further mastery of Truespeech allows you to wield its power more effectively against creatures.
-Utterance of the Crafted Tool^TM^230^As you strive for ever more mastery of Truespeech, you gain more power over the universe around you. You can now use the power of Truespeech to affect objects.
-Utterance of the Perfected Map^TM^230^The power of the Truespeech can alter the state of reality itself. Reaching toward this great power, you have mastered an utterance from the Lexicon of the Perfected Map.
-Utterance Focus^TM^230^You have a particular utterance you favor above others, and your enemies are less able to resist the power of your words.
-Quicken Utterance^TM^231^You can speak an utterance with just a moment's thought.
-Recitation of the Fortified State^TM^231^This recitation allows you to stand unyielding against the blows of your enemies.
-Recitation of the Meditative State^TM^232^This recitation gives you an unparalleled sense of serene calm.
-Recitation of Mindful State^TM^232^This recitation narrows and focuses your perception so you can concentrate on a delicate task at hand.
-Recitation of the Sanguine State^TM^232^This recitation purges all poisons from your body.
-Recitation of Vital State^TM^232^This recitation frees your body of disease and sickness.
-Dazzling Energy^CP^49^Your facility with energy is such that enemies are shaken by your prowess.
-Deep Vision^CP^49^Your mental focus helps you see farther with darkvision
-Dire Flail Mind Blade^CP^49^When you reshape your mind blade, you can change it into an exotic weapon: a dire flail.
-Dire Stun^CP^49^When you choose to stun your foe with your lurk augment ability, your foe might be stunned for a long time.
-Don  Mantle^CP^49^You gain the granted ability of a mantle you have tapped.
-Dromite Barrier^CP^49^You can convert uses of yourenergy ray psi-like ability into walls of energy.
-Dromite Ray^CP^49^You an use yourenergy ray psi-like ability more often.
-Duergar Expansion^CP^49^You can use yourexpansion psi-like ability more often.
-Duergar Invisibility^CP^49^You can use yourinvisibility psi-like ability more often.
-Dwarven Urgrosh Mind Blade^CP^49^When you reshape your mind blade, you can change it into an exotic weapon: a dwarven urgrosh.
-Ectopic Form^CP^50^This feat allows you to create astral constructs with distinct appearances and specialties.
-Elan Repletion^CP^52^As an elan, you can sustain yourself with repletion longer than other members of your race.
-Elan Resilience^CP^52^As an elan, you can prevent greater amounts of damage than other members of your race.
-Elan Resistance, Enhanced^CP^52^As an elan, you can resist harmful effects more readily than other members of your race.
-Elan Retainment^CP^52^You can use your psionic metabolism to aid your ability to retain your psionic focus when you would otherwise expend it.
-Elemental Envoy^CP^52^This feat allows you to acquire an elemental steward.
-Energize Armor^CP^53^You can charge your armor with psionic energy, making it resistant to energy damage.
-Enervation Endurance^CP^53^When facing the aftermath of a wild surge, enervation doesn't sap your power points.
-Enhanced Beneficence^CP^53^Your psychic aura is larger than normal, reflecting your devotion to your deity.
-Envoy Cognizance^CP^53^When your elemental envoy is nearby, its associated energy enhances your ability to manifest energy powers.
-Euphoric Reduction^CP^53^Channel your euphoric surge into a boost for one of your skills.
-Extra Aura^CP^54^You gain the aura ability of a mantle you have donned.
-Focused Perception^CP^54^When you concentrate your faculties, your power of sight pierces the darkness.
-Focused Shield^CP^54^Your mental focus makes you more adept at using your shield.
-Focused Skill User^CP^54^You can take advantage of your psionic focus in new ways.
-Gestalt Anchor^CP^54^You have a strong bond to the psionic entity you host.
-Githyanki Charm^CP^54^You can leverage yourpsionic daze psi-like ability to gain greater control over subjects.
-Githyanki Control^CP^54^You can leverage yourfar hand psi-like ability to gain greater control over objects.
-Githyanki Dismissal^CP^54^You can leverage yourdimension door psi-like ability to gain greater control over other creatures' locations.
-Githyanki Ectoform^CP^54^You can leverage yourconcealing amorpha psi-like ability to gain greater control over your own body.
-Githzerai Burst^CP^54^You can leverage yourcat fall psi-like ability to gain greater control over yourself in your environment.
-Githzerai Feedback^CP^54^You can leverage yourinertial armor psi-like ability to further insulate yourself from harm.
-Githzerai Knock^CP^54^You can leverage yourconcussion blast psi-like ability to gain such fine control over manipulating force that you can open locks or sealed doors.
-Githzerai Link^CP^55^You can leverage yourpsionic daze psi-like ability to forge direct mental contact with another creature.
-Half-Giant Stomp^CP^55^You can use yourstomp psi-like ability more often.
-Half-Giant Thunderer^CP^55^You can use yourstomp psi-like ability to far greater effect.
-Instinctive Consummator^CP^55^You always make good on your threats.
-Invest Armor^CP^55^You can charge your armor with additional protective qualities.
-Lurk Augment, Extra^CP^55^You can use your lurk augment more often than normal.
-Lurk Augment, Ranged^CP^55^You can use some of your lurk augments in conjunction with a ranged attack.
-Lurk Master^CP^55^You are more skilled in augmenting your attack than your training would indicate.
-Maenad Fury^CP^55^You can use your outburst racial trait more often.
-Maenad Scream^CP^55^You can use yourenergy ray (sonic) psi-like ability more often.
-Maenad Deafening Scream^CP^55^You can use yourenergy ray (sonic) psi-like ability to better effect.
-Mantle Focus^CP^55^The powers from one of your mantles become more potent.
-Mental Juggernaut^CP^56^You are adroit at avoiding the mind blasting effects of certain psionic abilities and powers.
-Mind Cleave^CP^56^When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade.
-Mind Empowerment^CP^56^When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade.
-Mind Strike^CP^56^When you use your psychic strike ability, you deal more damage.
-Mind Strike, Swift^CP^57^You possess a deadly speed when charging your mind blade with psychic energy.
-Orc Double Axe Mind Blade^CP^57^When you reshape your mind blade, you can change it into an exotic weapon: an orc double axe.
-Postpone Enervation^CP^57^You can postpone the onset of your psychic enervation.
-Practiced Manifester^CP^57^Choose a manifesting class that you possess. The powers you manifest from that class are more powerful.
-Privileged Energy^CP^57^You favor one specific energy type over all others.
-Psymbiot^CP^57^You gain benefits when you are near other psionic characters or creatures.
-Skin of the Construct^CP^57^You can wear an astral construct as if it were a second skin.
-Stygian Archon^CP^57^You sear the synapses of your mind with a scar of void and emptiness.
-Synad Multitask, Enhanced^CP^58^As a synad, your threefold mind grants you an additional opportunity to multitask.
-Tap Mantle^CP^58^You gain the ability to access the powers in a new mantle.
-Thri-Kreen Carapace^CP^58^Your carapace is harder than average.
-Thri-Kreen Claw^CP^58^You can use yourmetaphysical claw psi-like ability more often.
-Thri-Kreen Displacement^CP^58^You can use yourpsionic displacement psi-like ability more often.
-Thri-Kreen Poison^CP^58^You can use your poison bite more often.
-Two-Bladed Mind Blade^CP^58^When you reshape your mind blade, you can change it into an exotic weapon: a two-bladed sword.
-Volatile Escalation^CP^58^When you are attacked with a telepathic power, your innate wildness forces a higher mental price on your attacker.
-Volatile Leech^CP^58^You gain the power points your attacker wastes attacking you with a telepathic power.
-Xeph Burst, Extra^CP^59^You can use your burst racial trait more often.
-Xeph Celerity^CP^59^You can use your burst racial trait to gain an extra attack.
-Dorje Mastery^CP^59^Psionic dorjes are more potent in your hands.
-Dual Dorje^CP^59^You can fight with two dorjes at the same time.
-Hostile Mind, Improved^CP^59^You have mental defenses erected  against telepathic attacks.
-Psionic Mastery^CP^59^You are quick and certain in your efforts to defeat the psionic defenses and powers of others.
-Aggressive Mind^CP^60^The psionic entity you host gives you access to psi-like abilities capable of disrupting the mind of your enemy.
-Antagonist^CP^60^The psionic entity you host seeks to cause damage and mayhem, and you have powers to further that end.
-Defensive Shell^CP^60^The psionic entity living in your mind enables you to better resist attacks.
-Host Focus^CP^60^You can use a psi-like ability granted by a host feat an extra time each day.
-Pacifist^CP^60^You host a psionic entity that dislikes combat and provides you psi-like abilities to help you avoid a fight.
-Spiritual Force^CP^60^Your mind blade is an expression of your inner spirit.
-Strength of Two^CP^60^As the host of a formless psionic entity, you possess immense willpower.
-Telepathic Affinity^CP^60^The entity you host gives you the ability to better communicate with other creatures.
-Illithid Blast^CP^61^You can convert your pisonic energy into amind blast.
-Illithid Compulsion^CP^61^You can call upon your heritage and enhance your ability to manipulate the minds of other creatures.
-Illithid Enthusiast^CP^61^When you manipulate the minds of other creatures, you are heartened and emboldened by your success.
-Illithid Extraction^CP^61^Your acceptance of your illithid heritage is so encompassing that you have learned how to extract the brain of a helpless victim.
-Illithid Grapple^CP^61^You embrace more of your illithid heritage, and grow at least one long purplish tentacle that you can reveal and unfurl when you open your mouth.
-Illithid Heritage^CP^62^Somewhere in the deeps of time, your bloodline was polluted with illithid influence.
-Illithid Legacy^CP^62^You have realized greater psionic power through your illithid heritage.
-Illithid Legacy, Greater^CP^62^Your knowledge of psionic power has grown even further due to your illithid heritage.
-Illithid Skin^CP^62^Your skin takes on the glistening, rubbery, green-mauve consistency of your illithid parentage.
-Knockdown Power^CP^62^You can manifest powers that knock creatures off their feet.
-Linked Power^CP^62^You can link a power to the power you manifest in this round so that it goes off next round.
-Metapower^CP^63^You can permanently modify a psionic power you know with a metapsionic feat.
-Paraelemental Power^CP^63^When using a power that allows you to choose a type of energy, you have a wider range of possible choices owing to your ability to mix energy with matter.
-Phrenic Leech^CP^63^Psionic foes damaged by your power are also mentally drained.
-Stygian Power^CP^64^Psionic powers you manifest that utilize negative energy are branded with an imprint of fear.
-Transdimensional Power^CP^64^You can manifest powers that affect targets lurking in coexistent planes and extradimensional spaces whose entrances fall within the power's area.
-Acrobatic Strike^PH2^71^Your dexterous maneuvers and skilled acrobatics allow you to slip past a foe's defenses and deliver an accurate strike against him.
-Active Shield Defense^PH2^71^Your expert use of your shield allows you to strike at vulnerable foes even when you forgo your own attacks in favor of defense.
-Adaptable Flanker^PH2^71^When you and an ally team up against a foe, you know how to maximize the threat your ally poses to ruin your target's defenses.
-Agile Shield Fighter^PH2^74^You are skilled in combining your shield bash attack with an armed strike. When you use your shield in unison with a weapon, your training allows you to score telling blows with both.
-Arcane Accompaniment^PH2^74^You infuse your performance with magical energy, allowing its effects to continue even as you attend to other tasks.
-Arcane Consumption^PH2^74^You can sacrifice your physical health to strengthen a spell. This process leaves you wracked with pain, but the enhanced energy you draw from the spell might provide the margin between victory and defeat.
-Arcane Flourish^PH2^74^You use your magical abilities to improve your performance talents.
-Arcane Thesis^PH2^74^You have studied a single spell in-depth.
-Arcane Toughness^PH2^75^You draw upon the power of your magic to sustain yourself, allowing you to continue fighting long after your physical body has failed you.
-Armor Specialization^PH2^75^Through long wear and hours of combat, you have trained your body to believe in its armor.
-Battle Dancer^PH2^75^You strike at your foes in time with the music you sing or in cadence with an oration you deliver.
-Bonded Familiar^PH2^75^You enjoy a stronger than normal magical bond with your familiar, granting you access to two special abilities.
-Bounding Assault^PH2^75^You can move and attack with superior speed and power.
-Brutal Strike^PH2^76^You can batter foes senseless with your mace, morningstar, quarterstaff, or flail.
-Combat Acrobat^PH2^76^Your acrobatics and agility in combat allow you to maneuver across the battlefield with ease.
-Combat Familiar^PH2^76^Your familiar is skilled in delivering attack spells againstyour foes.
-Combat Tactician^PH2^77^You excel at approaching an opponent from an unexpected direction to deliver deadly attacks.
-Cometary Collision^PH2^77^You are a thunderbolt of destruction on the battlefield.
-Companion Spellbond^PH2^77^You form a special magical link with your animal companion, allowing you to share spells with it over a greater distance.
-Crossbow Sniper^PH2^77^You are skilled in lining up accurate, deadly shots with your crossbow.
-Crushing Strike^PH2^78^You wield a bludgeoning weapon with superior power, allowing you to batter aside an opponent's defenses.
-Cunning Evasion^PH2^78^When an area attack detonates around you, you use the chaos and flash of energy to duck out of sight.
-Dampen Spell^PH2^78^From the lowliest prestidigitator to the most august hierophant, spellcasters both arcane and divine recognize the power of counterspelling.
-Deadeye Shot^PH2^78^You carefully line up a ranged attack, timing it precisely so that you hit your opponent when his guard is down.
-Defensive Sweep^PH2^78^You sweep your weapon through the area you threaten, warding away opponents and forcing them to move away or suffer a fearsome blow.
-Driving Attack^PH2^78^When you strike an opponent with a piercing weapon, the brutal impact of your strike sends him sprawling.
-Elven Spell Lore^PH2^78^You have studied the mighty arcane traditions of the elven, granting you insight into the intricate workings of magic and the theoretical structures behind spells.
-Fade into Violence^PH2^79^While the chaos of battle swirls around you, you rely on your ability to slip into the background to avoid your enemy's notice.
-Fiery Fist^PH2^79^By channeling your kienergy, you sheathe your limbs in magical fire.
-Fiery KiDefense^PH2^79^You channel your kienergy into a cloak of flame that injures any who attempt to strike you.
-Flay^PH2^79^When fighting unarmored opponents, you excel at twisting your weapon just before impact.
-Grenadier^PH2^79^You are skilled in using grenadelike weapons.
-Hindering Opportunist^PH2^79^When you have a chance to strike a distracted foe, you instead use that opportunity to aid or protect an ally against him.
-Intimidating Strike^PH2^79^You make a display of your combat prowess designed to strike terror in your foe.
-Indomitable Soul^PH2^80^Your physical toughness translates into greater mental resiliency.
-Keen-Eared Scout^PH2^80^Your sharp sense of hearing allows you to determine much more about your surroundings.
-KiBlast^PH2^80^You focus your kiinto a ball of energy that you can hurl at an opponent.
-Leap of the Heavens^PH2^80^Your excellent athletic ability and superior conditioning allow you to make near-superhuman leaps.
-Lunging Strike^PH2^80^You make a single attack against a foe who stands just beyond your reach.
-Lurking Familiar^PH2^80^Your familiar hides within the folds of your robe or takes cover behind you as your opponents close in.
-Mad Foam Rager^PH2^80^You fight with the rage that only a rabid badger or a beer-addled dwarf can bring to bear.
-Master Manipulator^PH2^80^Your words are your weapons.
-Melee Evasion^PH2^81^Your speed, agility, and talent for intelligent fighting allow you to avoid your opponent's blows.
-Melee Weapon Mastery^PH2^81^You have mastered a wide range of weapons.
-Overwhelming Assault^PH2^81^If you attack a foe who does nothing to turn aside your attack, you press forward with an indomitable strike.
-Penetrating Shot^PH2^81^You send a powerful shot cleaving through your enemies.
-Ranged Weapon Mastery^PH2^82^You have mastered a wide range of weapons.
-Rapid Blitz^PH2^82^You charge across the battlefield, combining your speed and fighting ability to move and attack with unmatched skill.
-Robilar's Gambit^PH2^82^By offering Robilar's Gambit, you absorb damage to place yourself in an advantageous position.
-Shield Sling^PH2^82^You can hurl your shield as a deadly missile, turning it from a defensive item to a crushing, thrown weapon.
-Shield Specialization^PH2^82^You are skilled in using a shield, allowing you to gain greater defensive benefits from it.
-Shield Ward^PH2^82^You use your shield like a wall of steel and wood.
-Short Haft^PH2^82^You have trained in polearm fighting alongside your comrades in arms, sometimes reaching past them while they shield you, and sometimes shielding them while they attack from behind you.
-Slashing Flurry^PH2^82^You swing your weapon with uncanny speed, slicing apart a foe in the blink of an eye.
-Spectral Skirmisher^PH2^83^You have trained extensively in the use of magic that renders you invisible.
-Spell-Linked Familiar^PH2^83^You and your familiar can share spell energy, allowing your familir to cast a limited number of spells each day.
-Stalwart Defense^PH2^83^You excel at aiding your allies in battle. When an opponent attempts to strike one of them, you make a quick, distracting motion to ruin the foe's efforts.
-Steadfast Determination^PH2^83^Your physical durability allows you to shrug off attacks that would cripple a lesser person.
-Telling Blow^PH2^83^When you strike an opponent's vital areas, you draw on your ability to land crippling blows to make the most of your attack.
-Trophy Collector^PH2^83^A belt of minotaur fur, a hood of cloaker wing-skin, and an amulet fashioned from a petrified dragon's eye -- these are the intimidating symbols of your trade.
-Tumbling Feint^PH2^84^When you move near an opponent, your acrobatic maneuvers leave him confused and unable to properly defend himself.
-Two-Weapon Pounce^PH2^84^When you charge an opponent while wielding two weapons, you can make two quick attacks.
-Two-Weapon Rend^PH2^84^You wield two weapons with an artisan's precision.
-Vatic Gaze^PH2^85^Your arcane studies have brought forth your nascent talent to sense magical auras and the power that others are capable of wielding.
-Versatile Unarmed Strike^PH2^85^You employ a variety of unarmed fighting styles, allowing you to alter the type of damage your attacks deal.
-Vexing Flanker^PH2^85^You excel at picking apart an opponent's defenses when your allies also threaten them.
-Wanderer's Diplomacy^PH2^85^Many halflings journey far and wide across the world, spending no more than a few months in one place.
-Water Splitting Stone^PH2^85^You channel your kienergy to splinter the defenses of creatures whose tough hides or magical natures normally allow them to shrug off your blows.
-Weapon Supremacy^PH2^85^You are a grandmaster in the use of your chosen weapon.
-Ritual Blessing^PH2^86^You call upon the powers of goodness and light to bless your allies.
-Ritual Blood Bonds^PH2^86^You invest your allies with the mighty power of your toten, god, or similar divine entity.
-Combat Awareness^PH2^86^When you maintain your combat focus, you have an uncanny ability to sense the ebb and flow of your opponents' vitality.
-Combat Defense^PH2^87^The state of keen focus and mental discipline you attain in combat allows you to shift the focus of yoru defense from one opponent to another with careful, precise maneuvers.
-Combat Focus^PH2^87^The way of the warrior requires more than simple, brute strength.
-Combat Stability^PH2^87^When you maintain your combat focus, you become difficult to dislodge.
-Combat Strike^PH2^87^Your intense, focused state allows you to see the one critical moment in a battle when you hang suspended between victory and defeat.
-Combat Vigor^PH2^88^When you maintain your combat focus, your clarity of purpose and relentless drive allow you to overcome your body's frailties.
-Divine Armor^PH2^88^You call upon your deity to protect you in your hour of need by wreathing you in divine power that wards off your enemies' attacks.
-Divine Fortune^PH2^88^With a quick prayer, you channel divine energy to help resist a spell, poison, or other deadly effect.
-Divine Justice^PH2^88^You can channel divine energy to turn your foe's strength against him, striking him with the same force that he used against you.
-Divine Ward^PH2^88^You create a channel of divine energy between yourself and a willing ally.
-Profane Aura^PH2^89^You call upon the dark powers you worship to fill the area around you with a dreadful mist that obscures sight.
-Sacred Healing^PH2^89^You can channel divine energy to aid in your efforts to tend to a comrade's injuries, sickness, or other conditions.
-Sacred Purification^PH2^89^You serve as a conduit of divine energy, filling the area around you with power that aids the living and saps the undead.
-Sacred Radiance^PH2^89^You channel divine energy to fill the area around you with a soothing, gentle radiance.
-Celestial Sorcerer Aura^PH2^90^The power of your sorcerous heritage shines through, allowing you to infuse the area around you with a menacing aura.
-Celestial Sorcerer Heritage^PH2^90^Your ancestry manifests in the form of several special abilities.
-Celestial Sorcerer Lance^PH2^90^You can channel your arcane energy into a bolt of power that is baneful to evil creatures.
-Celestial Sorcerer Lore^PH2^90^The power of your ancestry grants you access to a variety of new spells.
-Celestial Sorcerer Wings^PH2^91^You channel your inborn magical abilities to spawn a pair of spectral, magical wings that glow with majestic power.
-Infernal Sorcerer Eyes^PH2^91^Your eyes glow with infernal fire, allowing you to see through magical darkness.
-Infernal Sorcerer Heritage^PH2^91^Your innate magic derives from infernal ancestors.
-Infernal Sorcerer Howl^PH2^91^You channel the fury of your infernal ancesters into a thunderous roar that blasts your enemies with sonic power.
-Infernal Sorcerer Resistance^PH2^91^You are as tough and resilient as an infernal monstrosity, allowing you to shrug off acid and cold damage.
-Blistering Spell^PH2^91^Your fire spells sear the flesh from your enemies' bones, leaving them wracked with pain.
-Earthbound Spell^PH2^91^You bind a spell into the rock and soil, leaving it there until an opponent stumbles across it.
-Flash Frost Spell^PH2^91^Your spells that use cold and ice to damage your foes leave behind a thin layer of slippery frost.
-Imbued Summoning^PH2^92^Your summoning spells gain an element of surprise.
-Smiting Spell^PH2^92^You can channel the energy of a touch spell into a weapon, causing the spell to discharge when you strike an opponent.
-Blood-Spiked Charger^PH2^92^You throw yourself into the fray, using your spiked armor and spiked shield to tear your opponents to pieces.
-Combat Cloak Expert^PH2^93^You are adept at turning your cloak into a vital part of your combat repertoire.
-Combat Panache^PH2^93^Your glowing personality and sharp performance abilities allow you to navigate the battlefield on sheer chutzpah alone.
-Einhander^PH2^94^You excel at wielding a one-handed weapon while carrying nothing in your off hand.
-Mad Alchemist^PH2^94^You are an expert at using alchemical items.
-Shadow Striker^PH2^94^You melt into the shadows, hiding from your enemies until the time is right.
-Abyss-Bound Soul [Vile]^FCI^83^You have pledged your immortal soul to a particular demon lord in return for a gift that aids your evil works in life.
-Blood War Conscript [Vile]^FCI^83^Your evil brand indicates your rank in the armies of the Blood War and infuses you with fury.
-Chaotic Spell Recall [Abyssal Heritor]^FCI^84^A few choice spells never stray far from your mind.
-Claws of the Beast [Abyssal Heritor]^FCI^84^Your hands are twisted like claws. This deformity allows you to deal more damage than usual with your unarmed strikes and sneak attacks.
-Cloak of the Obyrith [Abyssal Heritor]^FCI^85^The chaos of the Abyss suffuses your being, as it does the ancient obyriths.
-Dark Speech [Vile]^FCI^85^You learn a smattering of the language of truly dark power.
-Demonic Conduit [Vile]^FCI^85^Your evil brand incorporates blasphemous runes and sigils that augment magical attacks you make against lawful and/or good targets.
-Demonic Skin [Abyssal Heritor]^FCI^85^Your skin has rough, scaly patches that enhance your natural armor.
-Demonic Sneak Attack [Abyssal Heritor]^FCI^85^You know exactly how to twist the blade to get the most out of your sneak attacks.
-Demon Mastery^FCI^85^You are particularly skilled at summoning demons and convincing them to serve you.
-Evil Brand [Vile]^FCI^85^You are physically marked forever as the servant of an evil power greater than yourself -- in this case, a demon lord. The symbols is unquestionable in its perversity, depicting a depravity so unthinkable that all who see it know beyond a doubt that you serve the lords of the Abyss.
-Extract Demonic Essence^FCI^86^You can draw upon the living essence of a willing or captured demon to fuel the creation of items or the casting of potent spells.
-Eyes of the Abyss [Abyssal Heritor]^FCI^86^Your eyes glow with an inner fire of some unusual color. This glow increases your perception and allows you to see in the dark.
-Heart of the Nabassu^FCI^86^Your ancestry traces back to a place where the Abyss meets the Negative Energy Plane.
-Keeper of Forbidden Lore [Abyssal Heritor]^FCI^86^A shred of demonic racial memory grants you knowledge of numerous ancient magical secrets.
-Ordered Chaos^FCI^86^You are an unusually lawful Abyssal heritor.
-Otherworldly Countenance [Abyssal Heritor]^FCI^87^You are either stunningly beautiful or wretchedly hideous. Either way, your appearance can be terribly unsettling to others upon whom you focus your attentions.
-Poison Healer^FCI^87^Poison isn't always bad for you.
-Poison Talons [Abyssal Heritor]^FCI^87^Your claws drip with poison.
-Precognitive Visions [Abyssal Heritor]^FCI^87^You periodically experience visions from the near future.
-Primordial Scion [Abyssal Heritor]^FCI^87^The Abyss beckons. . . .
-Thrall to Demon [Vile]^FCI^87^You formally become a supplicant to a demon lord. In return for your obedience, you gain a small measure of that demon lord's power.
-Vestigial Wings [Abyssal Heritor]^FCI^87^A pair of vestigial wings sprouts from your shoulders.
-Ability Focus^MM4^202^A particular special ability of a creature with this feat is more potent than normal.
-Awesome Blow^MM4^202^A creature with this feat can choose to deliver blows that send its smaller opponents flying like bowling pins.
-Clinging Breath^MM4^202^This feat enables a creature's breath weapon to cling to creatures and continue to affect them after it has breathed.
-Craft Construct [Item Creation]^MM4^202^A creature with this feat can create golems and other magic automatons that obey its orders.
-Flyby Attack^MM4^202^A creature with this feat can attack on the wing.
-Githyanki Battlecaster^MM4^202^A creature with this feat ignores arcane spell failure chances when wearing light armor.
-Githyanki Dragonrider [Racial]^MM4^202^A creature with this feat has a knack for getting along with red dragons.
-Improved Natural Attack^MM4^203^The natural attacks of a creature with this feat are more dangerous than its size and type would otherwise dictate.
-Improved Toughness^MM4^203^A creature with this feat is significantly tougher than normal.
-Lingering Breath^MM4^203^The breath weapon of a creature with this feat forms a lingering cloud.
-Multiattack^MM4^203^A creature with this feat is adept at using all its natural weapons at once.
-Powerful Charge^MM4^203^A creature with this feat can charge with extra force.
-Quicken Spell-Like Ability^MM4^203^A creature with this feat can employ a spell-like ability with a moment's thought.
-Blessed of Vulkoor [Racial]^SX^134^A scorpion-shaped birthmark denotes you as one of the chosen of Vulkoor.
-Drow Scorpion Warrior [Racial, Tactical]^SX^134^Your study of the ways of the scorpion grants you special tactics.
-Drow Skirmisher [Racial]^SX^134^Your experience with the guerrilla-style combat of the deep jungle grants you mastery of the weapons of the drow.
-Earthquake Stomp^SX^134^Your thunderous steps allow you to knock smaller enemies off their feet.
-Echoing Spell [Metamagic]^SX^134^Your spells return after you cast them, although with lessened effects.
-Elder Giant Magic^SX^135^You have learned a technique developed by ancient giant spellcasters, allowing you to channel additional power in your spells.
-Giant Banemagic^SX^135^You can cast spells that deal additional damage to giants.
-Jungle Veteran^SX^135^You have a knack for surviving in harsh environments and avoiding the deadly ambushes of natives.
-Mysterious Magic^SX^135^Your study of unconventional magic gives your spells an odd appearance and makes them difficult to identify.
-Rending Claws^SX^135^Your expertise with scorpion claw gauntlets allows you to tear apart your opponents with deadly precision.
-Breath of Unlife [Metabreath]^DrF^47^Your breath weapon contains the chill of undeath.
-Transdimensional Breath [Psionic]^DrF^50^Your breath weapon affects bordering planes.
-Follower of the Scaly Way^DrF^57^You are an adherent of Sammaster's teachings.
-Servant of a Dragon Ascendant^DrF^92^You formally supplicate yourself to an immortal dragon quasi-deity.
-Initiate of Tchazzar^DrF^92^You have been initiated into the greatest mysteries of Tchazzar's church.
-Adaptive Style^ToB^28^With just a short period of meditation, you can change your maneuvers and tactics to meet the threat you currently face.
-Avenging Strike^ToB^28^Your strength of will and strong sense of justice allow you to smite your foes.
-Blade Meditation^ToB^28^You have learned a meditation that grants you insight into the martial disciplines you have studied.
-Desert Fire^ToB^29^The power of the Desert Wind surges through you, and you find power in the motion of the hot winds and shifting sands that you can channel into your Desert Wind strikes.
-Desert Wind Dodge^ToB^29^Your training in the Desert Wind discipline allows you to dance across the battlefield like a blistering sirocco.
-Devoted Bulwark^ToB^29^Because of your staunch devotion to your cause and your Devoted Spirit training, you can stand your ground even in the face of an enemy's resounding attack.
-Divine Spirit [Divine]^ToB^29^The fervor and dedication of the Devoted Spirit discipline, combined with your fanatical adherence to a divine power, turns you into a font of spiritual energy.
-Evasive Reflexes^ToB^30^When an opponent gives you an opening in combat, you know exactly what to do: slip away.
-Extra Granted Maneuver^ToB^30^You are especially devout or insightful, and you have more control over which of your martial maneuvers are currently granted than other crusaders.
-Extra Readied Maneuver^ToB^30^You are an unusually perspicacious student of the Sublime Way, and you find it easy to keep a large number of maneuvers ready for use.
-Falling Sun Attack^ToB^31^The discipline of the Setting Sun teaches you how to turn an opponent's strengths into weaknesses.
-Instant Clarity [ Psionic]^ToB^31^You have sharpened your concentration to the point that you can focus your psionic abilities with just an instant's thought.
-Ironheart Aura^ToB^31^Your strength of spirit and martial training inspires those around you.
-Martial Stance^ToB^31^You have mastered the fundamentals of a martial discipline, and you are now able to master one of its stances.
-Martial Study^ToB^31^By studying the basics of a martial discipline, you learn to focus you kiand perfect the form needed to use a maneuver.
-Psychic Renewal [Psionic]^ToB^32^Your mental strength and psionic abilities allow you to focus your mind on combat and use your most devastating maneuvers more frequently.
-Rapid Assault^ToB^32^Your fighting style emphasizes taking foes down with quick, powerful blows.
-Scribe Martial Script [Item Creation]^ToB^32^You know the secret of creating martial scripts -- small slips of paper into which you infuse your own martial power and skill.
-Shadow Blade^ToB^32^In the course of your training in the Shadow Hand discipline, you learn to use your natural agility and speed to augment your attacks with certain weapons.
-Shadow Trickster^ToB^32^Your mastery of the Shadow Hand discipline lets you augment your illusion spells with the stuff of shadow.
-Song of the White Raven^ToB^32^The White Raven discipline shows you how to rouse dedication and fervor within your allies' hearts.
-Snap Kick^ToB^32^You have continued to hone your unarmed combat skills, and you deal more damage with your unarmed strikes.
-Stone Power^ToB^32^The principles of the Stone Dragon discipline teach you how to gather and focus your raw, physical strength into an attack.
-Sudden Recovery^ToB^33^You can instantly recover your focus, balance, and personal energy after using a martial maneuver.
-Superior Unarmed Strike^ToB^33^Your unarmed strikes have become increasingly deadly, enabling you to strike your foes in their most vulnerable areas.
-Tiger Blooded^ToB^33^The Tiger Claw discipline teaches students to mimic the rampant, feral qualities of a wild animal.
-Unnerving Calm^ToB^33^You know that the secret to defeating your enemies lies within the still center of your own mind.
-Vital Recovery^ToB^33^Preparing yourself to execute more of your maneuvers gives you the chance to catch a quick second wind and recover from damage you have sustained in the fight.
-White Raven Defense^ToB^33^The White Raven discipline has taught you to shine as a gleaming beacon of hope and endurance amid the chaos of battle.
-Clarion Commander^ToB^34^On the battlefield, you are a natural leader.
-Distant Horizon^ToB^34^An initiate of the Setting Sun sometimes learns a set of combat maneuvers to create the Distant Horizon fighting form.
-Faith Unswerving^ToB^34^The initiate of the Devoted Spirit knows that his fanaticism and devotion to a cause are enough to carry him through almost anything.
-Gloom Razor^ToB^35^The teachings of the Shadow Hand discipline allow you to confuse your enemies.
-Perfect Clarity of Mind and Body^ToB^35^Your mastery of the Diamond Mind discipline allows you to tap into reserves of spiritual and physical strength that other warriors cannot imagine using.
-Reaping Talons^ToB^35^When fighting with the Tiger Claw discipline's preferred weapons, you can use a variety of combat options that maximize the benefits of wielding two weapons.
-Scorching Sirocco^ToB^35^As a student of the Desert Wind, the burning fury of the desert sirocco is at your command.
-Shards of Granite^ToB^36^Like the great Stone Dragon, you hammer through your opponents' defenses using raw, brutal strength.
-Stormguard Warrior^ToB^36^The Stormguard Warrior feat encompasses a number of the more advanced tactics and techniques you would use as a student of the Iron Heart school.
-Armor of Scales [Ceremony]^DM^15^You imbue a target with the protection of a dragon's blade.
-Black Dragon Lineage [Draconic]^DM^15^You have attuned yourself to your black dragon ancestry and can poison foes with your touch.
-Blue Dragon Lineage [Draconic]^DM^15^You have learned to harness the power of your blue dragon ancestry and can hurl orbs of lightning.
-Brass Dragon Lineage [Draconic]^DM^16^You have unlocked the power of your brass dragon ancestry and can put foes to sleep with ease.
-Bronze Dragon Lineage [Draconic]^DM^16^You have tapped into your bronze dragon blood and can channel arcane energy to repel foes.
-Copper Dragon Lineage [Draconic]^DM^16^You have learned to channel the powers of your copper dragon ancestry to hinder your enemies' mobility.
-Double Draconic Aura^DM^16^You can project two draconic auras simultaneously.
-Draconic Armor [Draconic]^DM^16^You learn to block damage from successful attacks, lessening the blows with spell energy.
-Draconic Aura^DM^16^You can tap into the raw power of dragons to create a variety of potent auras around you.
-Draconic Heritage [Draconic]^DM^17^You have a greater connection with your draconic bloodline than others of your kind.
-Draconic Knowledge [Draconic]^DM^17^Your draconic blood lets you access ancient draconic knowledge.
-Draconic Senses [Draconic]^DM^17^Your draconic blood grants you great sensory powers.
-Draconic Vigor [Draconic]^DM^17^You gain some of the vitality of your draconic ancestry when casting spells.
-Dragonfire Assault [Draconic]^DM^17^You can augment your most powerful melee attacks with draconic power.
-Dragonfire Channeling [Draconic]^DM^17^You channel draconic fire through your holy symbol.
-Dragonfire Inspiration [Draconic]^DM^17^You can channel the power of your draconic ancestry into the attacks of your allies.
-Dragonfire Strike [Draconic]^DM^18^You can call upon your innate draconic powers to augment certain weapon attacks.
-Dragontouched [Draconic]^DM^18^You have a trace of draconic power, a result of dragons in your ancestry or a spiritual connection between you and the forces of dragonkind.
-Gold Dragon Lineage [Draconic]^DM^19^You can harness the legacy of your gold dragon ancestry to protect your allies.
-Heart of Dragons [Ceremony]^DM^19^You imbue your allies with draconic power.
-Initiate of Aasterinian [Initiate]^DM^20^You live for the moment, reveling in new experiences without fear of consequence.
-Initiate of Astilabor [Initiate]^DM^20^You share your deity's desire to acquire and protect treasure, and she has recognized this by granting you an edge in achieving these goals.
-Initiate of Bahamut [Initiate]^DM^20^The Platinum Dragon has entrusted you with great power in the battle against evil.
-Initiate of Falazure [Initiate]^DM^20^Your celebration of death and decay has opened up new magical secrets involving the living and undead.
-Initiate of Garyx [Initiate]^DM^20^You channel the cleansing fire of destruction, as wielded by your deity.
-Initiate of Hlal [Initiate]^DM^21^Fueled by faith in your deity, your audacity and bravery truly know no bounds.
-Initiate of Io [Initiate]^DM^21^Your deity has entrusted you with the responsibility of tending to dragonkind.
-Initiate of Lendys [Initiate]^DM^21^Your dedication to justice grants you the ability to ferret out and punish wrongdoers.
-Initiate of Tamara [Initiate]^DM^21^You wield the twin powers of mercy and death in service to your draconic patron.
-Initiate of Tiamat [Initiate]^DM^21^Your homage to the creator of evil dragonkind has been rewarded with physical and mental power.
-Red Dragon Lineage [Draconic]^DM^21^The fiery blood of red dragons runs within your veins, allowing you to produce flames from thin air.
-Silver Dragon Lineage [Draconic]^DM^22^You are the descendant of silver dragons and can harness your ancestors' power to paralyze your opponents.
-Slayer of Dragons [Ceremony]^DM^22^You protect your allies from the ravages they are sure to face while hunting dragons.
-White Dragon Lineage [Draconic]^DM^22^Your veins run with the savage blood of white dragons, allowing you to whyp yourself into a ragelike state.
-Words of Draconic Power [Ceremony]^DM^22^You tap into the great tradition of draconic magic to enhance the words of your allies.
-Action Healing^FE^145^You can spend an action point to enhance your healing power.
-Ancestral Whispers^FE^145^Through intense focus and divine energies, you can hear the advice of past ancestors.
-Ceremonial Empowerment^FE^145^Your divine might increases on your patron's holy days.
-Construct Grafter [Item Creation]^FE^145^You can apply construct grafts to other living creatures or to yourself.
-Divine Alacrity [Divine]^FE^145^You can channel divine energies into your own body, increasing your speed.
-Divine Countermagic [Divine]^FE^146^You channel divine energies to counter spells.
-Divine Warrior [Divine]^FE^146^Through divine power, you wield your deity's favored weapon to devastating effect.
-Domain Spontaneity [Divine]^FE^147^You are so familiar with one of your domains that you can convert other prepared spells into spells from that domain.
-Frantic Rage^FE^147^Your divine madness allows you to channel your fury into frenetic agility rather than might.
-Heroic Channeling [Divine]^FE^147^You can call on your personal strength of will to channel positive or negative energy into divine feats.
-Heroic Devotion [Divine]^FE^147^Your devotion to your faith allows you to manipulate fate at the expense of some spellcasting ability.
-Lucid Channeling^FE^147^When you invite a celestial into your body, you open your mind completely to the divine spirit.
-Nightbringer Initiate^FE^147^You have been trained in the ways of the Nightbringers, a new offshoot of the Children of Winter.
-Sacred Resilience^FE^147^You can channel divine energies to protect your allies from harm.
-Touch of Silver^FE^148^Your devotion to the Silver Flame allows you to burn the Church's foes with holy energies.
-Unquenchable Flame of Life^FE^148^You are hardened to the attacks of the undead.
-Unyielding Bond of Soul^FE^148^You are hardened to the attacks of the beings of other worlds.
-Worldly Focus^FE^148^Your belief in the omnipresence of the gods is so strong, you can channel your spells through the environment rather than a holy symbol.
-Wrest Possession^FE^148^If you resist control by a possessing fiend, you can attempt to seize control of its abilities.
-Enduring Life^Rav^200^You can ignore the effect of negative levels for a short time.
-Lasting Life^Rav^200^You can shed negative levels with an act of will.
-Favored in Guild^Rav^205^You are an active and valued member of your guild.
-Acidic Splatter^CM^37^You can channel magical energy into orbs of acid.
-Alacritous Cogitation^CM^37^You can leave a prepared spell slot open to spontaneously cast a spell.
-Aquatic Breath [Reserve]^CM^39^Your reservoir of magic allows you to breathe normally even underwater.
-Battlecaster Defense [Tactical]^CM^39^You have mastered techniques for taking full advantage of spells in melee while remaining unharmed.
-Battlecaster Offense [Tactical]^CM^40^You cunningly mix melee combat and spellcasting to increase the potency of both.
-Blade of Force [Reserve]^CM^40^You can surround a weapon with a short-lived aura of force.
-Borne Aloft [Reserve]^CM^40^You can channel the magic of the winds to briefly grant you flight.
-Captivating Melody^CM^40^You can expend some of your musical abilities to increase the potency of your enchantment or illusion spells.
-Clap of Thunder [Reserve]^CM^40^You can deliver a thunderous roar with a touch.
-Cloudy Conjuration^CM^40^Your conjured creations and summoned beings appear in a puff of sickening black smoke, and you vanish in a cloud of the same when you teleport.
-Clutch of Earth [Reserve]^CM^40^You briefly increase the earth's pull on the target creature.
-Dazzling Illusion^CM^41^Casting illusions causes the air about you to be filled with flashing colors that dazzle your foes.
-Defending Spirit^CM^41^Your watchful spirit helps keep you safe in combat.
-Delay Potion^CM^41^You can drink a potion and postpone its effects.
-Dimensional Jaunt^CM^41^With a single step, you can cross an entire room.
-Dimensional Reach [Reserve]^CM^41^You can transport small objects to you with an act of will.
-Drowning Glance [Reserve]^CM^41^With a look, you create a small but incapacitating amount of water in the subject's lungs.
-Elemental Adept^CM^42^You can spontaneously cast a spell of the element you have mastered.
-Energy Abjuration^CM^42^Casting an abjuration spell grants you protection from energy damage.
-Energy Gestalt [Tactical]^CM^42^You have learned to combine multiple energy effects to great advantage.
-Face-Changer [Reserve]^CM^42^Your mastery of illusions allows you to subtly alter your appearance at whim.
-Favored Magic Foe^CM^42^Through study, you have learned how best to defend yourself against your favored enemies' spells and how to best affect them with your own.
-Fearsome Necromancy^CM^42^Creatures subjected to your necromantic spells feel the chill of fear.
-Fey Heritage [Heritage]^CM^43^You are descended from creatures native to the fey realms. You are naturally resistant to the most common effects produced by
-Fey Legacy [Heritage]^CM^43^The magical powers of your ancestors manifest in you.
-Fey Power [Heritage]^CM^43^Your fey heritage augments the power of certain types of magic.
-Fey Presence [Heritage]^CM^43^You share your ancestor's knack for playing tricks on the minds of others.
-Fey Skin [Heritage]^CM^43^Your fey heritage guards you against all weapons except those crafted from the dreaded cold iron.
-Fiendish Heritage [Heritage]^CM^43^You are descended from creatures native to the Lower Planes.
-Fiendish Legacy [Heritage]^CM^43^The magical powers of your ancestors manifest in you.
-Fiendish Power [Heritage]^CM^43^Your fiendish heritage augments the power of certain types of magic.
-Fiendish Presence [Heritage]^CM^43^You share your ancestors' ability to tamper with the minds of weak-minded fools.
-Fiendish Resistance [Heritage]^CM^43^Your bloodline inures you against corrosion and fire.
-Fiery Burst [Reserve]^CM^43^You channel your magical talent into a blast of fire.
-Hasty Spirit^CM^44^Your watchful spirit lends you a burst of speed in times of great need.
-Hurricane Breath [Reserve]^CM^44^The power of elemental air you hold in your mind allows you to exhale the wind.
-Insightful Divination^CM^44^Casting a divination spell grants you an uncanny insight into danger.
-Invisible Needle [Reserve]^CM^44^You can create tiny darts of force.
-Magic Device Attunement^CM^44^You have a knack for activating familiar magic items.
-Magic Disruption [Reserve]^CM^44^You can use your powers of abjuration to interfere with other casters' spells.
-Magic Sensitive [Reserve]^CM^44^You literally see the emanations of magic around you.
-Master of Undeath^CM^44^You can control an undead that you create . . . for a time.
-Melodic Casting^CM^44^You can weave your music and magic together into a single perfect voice.
-Metamagic School Focus^CM^45^You are unusually skilled at modifying the effects of a particular school of magic.
-Metamagic Spell Trigger^CM^45^You can apply metamagic feats you know to spell effects from magic items you activate with a spell trigger.
-Metamagic Vigor [Tactical]^CM^45^The energy you pour into increasing the power of your spells feeds back upon itself in an ever-increasing cycle.
-Minor Shapeshift [Reserve]^CM^45^Your mastery of shapeshifting magic allows you to reshape your flesh in small but significant ways.
-Mystic Backlash [Reserve]^CM^45^With a touch, your magic corrupts the spells of your enemy.
-Piercing Evocation^CM^46^Your evocation spells ignore an amount of energy resistance.
-Ranged Recall^CM^46^Your magical ranged attacks rarely miss.
-Rapid Metamagic^CM^46^You possess an uncanny mastery of your magic, enabling you to modify spells on the fly much faster than others can.
-Residual Magic [Tactical]^CM^46^You can use the lingering energy from a spell you cast to boost the effect of a later spell.
-Retributive Spell [Metamagic]^CM^47^You can keep a spell in reserve to use when a foe causes you harm.
-Shadow Veil [Reserve]^CM^47^You draw wisps of darkness across your enemy's eyes, obscuring the world around him.
-Sickening Grasp [Reserve]^CM^47^You wreak havoc with the inner organs of a target, causing it to grow ill.
-Somatic Weaponry^CM^47^You are adept at performing somatic spell components while your hands are occupied.
-Storm Bolt [Reserve]^CM^47^The electrical energy contained within your magic rages inside you, begging to be released.
-Summon Elemental [Reserve]^CM^47^You can channel the summoning power you hold to briefly bring forth an elemental servant.
-Sunlight Eyes [Reserve]^CM^48^The bright magic within you allows you to see through the darkest shadow.
-Touch of Distraction [Reserve]^CM^48^Your touch briefly clouds the mind of a foe, impeding its efforts.
-Toughening Transmutation^CM^48^Casting a transmutation spell briefly transforms your skin or that of an ally into sterner stuff.
-Unsettling Enchantment^CM^48^Your enchantment spells cloud the minds of even those who would otherwise resist their effects.
-Vengeful Spirit^CM^48^Your watchful spirit takes revenge on foes that have harmed you.
-Wind-Guided Arrows [Reserve]^CM^48^Your mastery of the wind allows you to alter the flight of a ranged weapon.
-Winter's Blast [Reserve]^CM^48^The frozen magic within you can burst forth in a hail of frost.
+[Creature Type] Trainer^AE^73^You are skilled at training a particular type  of creature.
+Aberrant Dragonmark^ECS^47^Although you are not a recognized member of  one of the dragonmarked families, you have manifested a dragonmark.
+Aberration Banemagic^LoM^178^You can cast spells that do additional damage  to aberrations.
+Aberration Blood^LoM^178^One of your ancestors was an aberration and  has passed the taint of its aberrant physiology down through the generations  to you.
+Aberration Wild Shape^LoM^178^Thanks to your heritage, you have learned to  channel your inhuman bloodline into your shapeshifting power.
+Ability Focus^MM^303^Choose one of the creature's special attacks.  This attack becomes more potent than normal.
+Ability Focus^MM2^18^One of the creature's special attacks is more  potent than normal.
+Ability Focus^MM3^206^The special attack of a creature with this feat  is more potent than normal.
+Ability Focus^SS^30^Choose one of your spell-like abilities. This  attack becomes much more potent than normal.
+Able Learner^RD^150^You have great aptitude for learning.
+Able Sniper^RW^148^You are accomplished at remaining unseen when  you're sniping with a ranged weapon.
+Accurate Jaunt^UA^92^You have an instinctive sense of interplanar  travel.
+Acheron Flurry^PlH^37^You master the secret technique developed by  Acheron-native special forces of limiting a foe's options in hand-to-hand  combat.
+Acrobatic^PH^89^You have excellent body awareness and coordination.
+Acrobatic^SaS^38^You have excellent body awareness and coordination.
+Action Boost^ECS^47^You have the ability to alter your luck drastically  in dire circumstances.
+Action Surge^ECS^50^By spending 2 action points, you can perform  an additional action in a round.
+Adamantine Body^ECS^50^At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction.
+Adamantine Body^MM3^192^At the cost of mobility, a warforged character's  body can be crafted with a layer of adamantine that provides formidable  protective armor and some damage reduction.
+Adamantine Body^RE^118^At the cost of mobility, your warforged body  can be crafted with a layer of adamantine that provides formidable protective  armor and some damage reduction.
+Additional Magic Item Space^EL^50^You can wear more magic items.
+Adroit Flyby Attack^Dr^67^You can make flyby attacks and get out of reach  quickly.
+Aerenal Beastmaster^RE^105^As an elf of Aerenal, you consider baboons sacred  animals and they serve you obediently.
+Aerial Reflexes^RW^148^Your aerial agility allows you to avoid dangerous  effects while airborne.
+Aerial Superiority^RW^148^You can use your flying ability to gain an advantage  against landbound foes or airborne foes that you can outmaneuver.
+Aftersight^Rac^160^You have a trace of the Sight in your blood,  which enables you to pick up echoes of the past, both wondrous and terrible.
+Agile^PH^89^You are particularly flexible and poised.
+Agile Athlete^RW^148^You rely on your agility to perform athletic  feats, rather than brute strength.
+Agile Tyrant^LoM^44^A creature with this feat develops longer, more  flexible eyestalks than its kin. This extra flexibility allows it to bring  additional eye rays to bear against its foes.
+Agony Touch^Gh^28^Choose one physical ability score. When you  touch a creature, you can deal damage to this ability score.
+Air Heritage^PlH^37^You are descended from creatures native to the  Elemental Plane of Air.
+Alertness^PH^89^You have finely tuned senses.
+Aligned Attack^XPH^41^Your melee or ranged attack overcomes your opponent's  alignment-based damage reduction and deals additional damage.
+Allied Defense^ShS^19^You are good at protecting nearby allies.
+Alluring^SaS^38^Others have an inexplicable urge to believe  your every word.
+Altitude Adaptation^Fr^45^Your body adapts quickly to changes in altitude,  preventing you from suffering as much from altitude sickness.
+Anarchic Heritage^PlH^38^You are descended from creatures native to the  planes of chaos.
+Ancestral Guidance^RE^105^The spirit of your patron ancestor guides your  hands and thoughts in times of trouble.
+Ancestral Knowledge^RS^136^You have a strong connection to the ancestors  of your clan, giving you understanding and knowledge beyond the mortal realms.
+Ancestral Relic^BE^39^You own an ancestral heirloom and can invest  it with increasing power.
+Ancestral Spirit^Rac^161^You have ties to the long-dead spirit of one  of your clan's ancestors, who whispers ancient words of wisdom into your  mind in times of need.
+Animal Affinity^PH^89^You are good with animals.
+Animal Control^MW^20^You can channel the power of nature to gain  mastery over animal creatures.
+Animal Defiance^MW^20^You can channel the power of nature to drive  off animals.
+Animal Friend^BE^41^Animals respond favorably to the aura of goodness  that exudes from you.
+Animal Friends^Rac^161^Your ability to speak with animals has  allowed you to befriend an animal as a permanent ally.
+Ankheg Tribe Ambush^ShS^19^You have learned how to hide and spring to attack,  much like the ankhegs that roam the plains where you hunt.
+Antipsionic Magic^XPH^41^Your spells are more potent when used against  psionic characters and creatures.
+Anvil of Thunder^CW^112^You have mastered the style of fighting with  hammer and axes at the same time, and have learned to deal thunderous blows  with this unique pairing of weapons.
+Appraise Magic Value^CAd^103^Your ability to determine an item's worth and  your knowledge of magic allow you to determine the exact properties of a  magic item without the use of the identify spell or similar magic.
+Apprentice^DMG2^176^A character with this feat has apprenticed himself  to a master in order to speed his learning and bolster his skills.
+Aquatic Shot^Sto^90^You have developed the technique of firing a  ranged weapon into or through the water with better accuracy than normal,  striking at just the right angle to allow it to slice through the obstruction  with precision.
+Aquatic Spellcasting^LoM^178^You know how to cast spells that work equally  well in or out of water.
+Arachnid Rider^Rac^161^You are trained in the art of employing spiders  as steeds.
+Arcane Defense^CAr^73^Choose a school of magic, such as illusion.  You can resist spells from that school better than normal.
+Arcane Defense^TB^38^Choose a school of magic. You can resist spells  from that school better than normal.
+Arcane Disciple^CD^79^Choose a deity, and then select a domain available  to clerics of that deity. You can learn to cast spells associated with that  domain as arcane spells.
+Arcane Insight^RD^154^By immersing yourself in the teachings of Boccob,  you have unearthed magical secrets and gained special insight into arcane  spellcasting.
+Arcane Manipulation^LE^6^You are learned in the arcane ways of Netheril,  where masters of magic once molded and shaped arcane energy to their own  will.
+Arcane Mastery^CAr^73^You are quick and certain in your efforts to  defeat the arcane defenses and spells of others.
+Arcane Preparation^CAr^73^You can prepare an arcane spell ahead of time,  just as a wizard does.
+Arcane Preparation^FRCS^33^You can prepare an arcane spell ahead of time,  just as a wizard does.
+Arcane Preparation^PG^32^You can prepare an arcane spell ahead of time,  just as a wizard does.
+Arcane Preparation^TB^38^You can prepare an arcane spell ahead of time,  just as a wizard does.
+Arcane Schooling^FRCS^33^In your homeland, all who show some skill at  the Art may receive training as a wielder of magic.
+Arcane Schooling^PG^33^In your homeland, all who show some skill at  the Art may receive training as arcane spellcasters.
+Arcane Strike^CW^96^You can channel arcane energy into your melee  attacks.
+Arcane Transfiguration^LE^6^Drawing upon forgotten lore, you broaden your  arcane studies and master a school of magic previously prohibited to you.
+Arctic Adaptation^Rac^161^You have adapted to the snowbound environment  of the arctic reaches of Faerun.
+Area Attack^SS^30^You can wield improvised weapons to attack several  spaces at once.
+Armor Proficiency (Heavy)^PH^89^You are proficient with heavy armor.
+Armor Proficiency (Light)^PH^89^You are proficient with light armor.
+Armor Proficiency (Medium)^PH^89^You are proficient with medium armor.
+Armor Skin^CW^151^Your skin becomes like armor.
+Armor Skin^EL^50^Your skin becomes like armor.
+Art of Fascination^OA^60^You claim descent from Kakita Wayozu, whose  art was so great it is said that she helped create an alternate world.
+Arterial Strike^CW^96^Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss.
+Arterial Strike^SaS^38^Your sneak attacks target large blood vessels,  leaving wounds that cause massive blood loss.
+Artic Priest^Fr^46^You can swap out prepared spells to cast spell  to aid in exploring and surviving in frostfell areas.
+Artist^FRCS^33^You come from a culture in which the arts, philosophy,  and music have a prominent place in society.
+Artist^OA^61^You claim descent from Doji, who was known as  a creator of culture and civilization.
+Artist^PG^33^Your people are renowned for their skill at  story and song.
+Ascetic Hunter^CAd^105^You have gone beyond the bounds of your monastic  training to incorporate new modes of bringing the unlawful to justice.
+Ascetic Knight^CAd^105^You belong to a special order of religious monks  that teaches its adherents that self-enlightenment and honorable service  grow from the same well of purity.
+Ascetic Magic^CAd^105^You practice an unusual martial art that mixes  self-taught spellcasting and melee attacks to great effect.
+Ascetic Rogue^CAd^106^You have gone beyond the bounds of your monastic  training to incorporate new modes of stealthy combat.
+Ashbound^ECS^50^You have been trained in the druidic traditions  of the Ashbound, seeing yourself as one of nature's avengers.
+Assume Supernatural Ability^SS^30^You learn to use a supernatural ability of an  assumed form.
+Athletic^PH^89^You have a knack for athletic endeavors.
+Athletic^SaS^38^You're physically fit and adept at outdoor sports.
+Attention to Detail^OA^61^You are descended from Akodo's advisor Ikoma  -- a historian, judge, and storyteller.
+Attune Gem^Mag^21^You can magically imbue gems to hold a spell  until triggered.
+Attune Magic Weapon^ECS^50^Through your study of magic weapons, you have  become adept at eking every advantage out of their enhanced qualities.
+Augment Healing ^CD^79^You can increase your healing ability.
+Augment Summoning^Mag^21^Your summoned creatures are better than normal.
+Augment Summoning^PH^89^Your summoned creatures are more powerful than  normal.
+Augment Summoning^TB^39^Your summoned creatures are more powerful than  normal.
+Augmented Alchemy^CAd^191^You can create alchemical items and substances  that are much more powerful than normal.
+Augmented Alchemy^EL^50^You can create alchemical items and substances  that are much more powerful than normal.
+Auspicious Marking^RS^136^Your [goliath] skin patterns indicate that fate  has marked you for greatness, and the patterns shift slowly to take new  forms.
+Automatic Quicken Spell^CAr^191^You can cast any of your lesser spells with  a moment's thought.
+Automatic Quicken Spell^EL^50^You can cast any of your lesser spells with  a moment's thought.
+Automatic Silent Spell^CAr^191^You can cast any of your lesser spells silently.
+Automatic Silent Spell^EL^51^You can cast any of your lesser spells silently.
+Automatic Still Spell^CAr^191^You can cast any of your lesser spells without  gestures.
+Automatic Still Spell^EL^51^You can cast any of your lesser spells without  gestures.
+Autonomous^XPH^41^You have a knack for psionic self-sufficiency.
+Awaken Frightful Presence^Dr^67^You gain frightful presence.
+Awaken Spell Resistance^Dr^67^You gain spell resistance.
+Awesome Blow^MM^303^The creature can choose to deliver blows that  send its smaller opponents flying like bowling pins.
+Awesome Blow^MM3^206^A creature with this feat can choose to deliver  blows that send its smaller opponents flying like bowling pins.
+Axeshield^Und^24^You know how to defend yourself with a battleaxe.
+Axespike^RS^137^You have mastered the art of fighting in spiked  armor while wielding a greataxe. You blend greataxe blows and armor spike  attacks into one constant, deadly attack form.
+Axethrower^PG^33^You have learned how to hurl weapons to deadly  effect.
+Axiomatic Heritage^PlH^38^You are descended from creatures native to the  planes of law.
+Axiomatic Strike^CW^96^You can turn your fist into an instrument of  law.
+Axiomatic Strike^PG^135^Your attacks deal incredible damage to chaotic  creatures.
+Azerblood^Rac^161^You are descended from the shield dwarves of  Clan Azerkyn, who once ruled the Adamant Kingdom of Xothaerin beneath western  Amn. The blood of the azer runs thick in your veins.
+Baleful Moan^LM^24^Your hollow cry strikes fear into the hearts  of the living.
+Ballista Proficiency^HB^96^You have trained in ballista operation.
+Bane of Enemies^EL^51^Your attacks deal great damage to your favored  enemies.
+Bane of the Unclean^LoM^44^A creature with this feat hates aberrant beholders  so strongly that it gains bonuses when fighting them.
+Barbed Stinger^SK^144^Your stinger is unusually difficult to dislodge.
+Batrider^Rac^161^You are highly skilled in the art of flying  dire bats, a common form of transportation among the shield dwarves of the  Far Hills.
+Battle Caster^CAr^75^Building on your existing training allows you  to avoid the chance of arcane spell failure when you wear armor heavier  than normal.
+Battle Casting^RW^148^You have a knack for staying out of harm's way  when casting spells.
+Battle Hardened^RS^137^Your extensive battle experience has left you  incredibly calm and composed, even in the heat of battle.
+Battle Jump^UE^42^You know how to launch a devastating attack  from above by dropping onto your opponent.
+Battlefield Inspiration^MH^25^You inspire courage in your allies.
+Battleshifter Training^RE^116^Your shifter fighting instincts grant you a  sophisticated blend of defensive techniques and controlled attacks.
+Bear Fang^CW^112^You have mastered the fierce style of fighting  with axe and dagger at the same time.
+Beast Companion^EL^51^You can befriend a beast.
+Beast Shape^ECS^50^You call upon the power of your beast totem  to physically change your form.
+Beast Totem^ECS^51^In the druidic custom of your people, you have  claimed a kind of magical beast as your totem -- a patron, protector, and  source of strength.
+Beast Wild Shape^EL^51^You can wild shape into magical beast form.
+Beasthide Elite^ECS^51^Your shifter trait improves.
+Beckon the Frozen^Fr^47^Creatures you summon are infused with cold energy  and have the cold subtype.
+Bestial Hide^LoM^179^Your skin is thicker, scalier, or furrier than  normal.
+Bind Elemental^ECS^51^You can craft magic items that use bound elementals  for special effects, including weapons, armor, airships, and elemental galleons.
+Black Lore of Moil^CAr^75^Your study of the sinister knowledge and spellcasting  techniques of the long-dead Nightlords of Moil makes your necromancy spells  especially potent.
+Blackwater Invocation^Sto^91^You can call upon negative energy to infuse  normal water around you, transforming it into the dark, cold water found  at the bottom of the deepest ocean trenches.
+Bladebearer of the Valenar^RE^107^Your extensive training makes you especially  adept with the curved blades of the Valenar.
+Bladeproof Skin^UA^92^Your skin has a degree of protection from even  the sharpest edge.
+Blazing Berserker^Sa^49^When you enter your rage, your body becomes  infused with fire.
+Blessed by Tem-Et-Nu^Sa^49^Tem-Et-Nu has marked you as having an important  destiny in her temple.
+Blessed of the Seven Sisters^PG^176^As a result of a personal connection to one  of the Seven Sisters, you have a taste of Mystra's special favor.
+Blind-Fight^PH^89^You know how to fight in melee without being  able to see your foes.
+Blinding Speed^EL^51^You can trigger short bursts of great speed.
+Blindsense^CAd^114^You can sense creatures that you cannot see.
+Blindsight^MW^21^Your senses are as keen as the bat's.
+Blindsight, 5-Foot Radius^SF^5^You sense opponents in the darkness.
+Blindsight, 5-Foot Radius^DD^49^The deity senses opponents in the darkness.
+Block Arrow^HB^96^You can block incoming arrows with your shield.
+Blood of the Warlord^Rac^161^You can influence a large number of orcs.
+Blood Sorcerer^OA^61^You are descended from Yogo, the Scorpion shugenja  who was the first guardian of the Black Scrolls of Fu Leng.
+Blooded^FRCS^33^Enemies find it difficult to catch you off guard.
+Blooded^PG^35^You know what it means to fight for your life,  and you understand the value of quick wits and quicker reactions when blades  are bared and deadly spells are chanted.
+Bloodline of Fire^FRCS^34^You are descended from the efreet who ruled  Calimshan for two millennia.
+Bloodline of Fire^PG^35^You are descended from the efreet who ruled  Calimshan long ago.
+Bloodsoaked Intimidate^CR^17^Your bloody and vicious approach to combat makes  you a fearsome foe.
+Blowhard^SS^31^You can blow targets over with your breath.
+Boar's Ferocity^CD^79^You can continue fighting even at the brink  of death.
+Body Fuel^XPH^41^You can expand your power point total at the  expense of your health.
+Body Pouch^SK^144^You can open a cavity in your body without harm  to yourself and use it to carry or conceal items or creatures.
+Bolster Resistance^LM^25^Undead you raise or create are more resistant  to turning than normal.
+Bonus Breath^SS^31^You can use your breath weapons one more time  per day than you normally could.
+Bonus Domain^CD^89^You have access to one additional domain of  spells.
+Bonus Domain^EL^51^You have access to one additional domain of  spells.
+Boomerang Daze^RE^108^You can daze the targets of your boomerang attacks.
+Boomerang Ricochet^RE^108^You can strike up to two foes with a single  boomerang throw.
+Boost Construct^XPH^43^Your astral constructs have more abilities.
+Boost Spell Resistance^BV^47^By making a deal with an evil power, the character  makes himself even more resistant to magic.
+Boost Spell-Like Ability^BV^47^One of the creature's spell-like abilities is  harder to resist than it otherwise would be.
+Born Duelist^OA^61^You claim descent from Mirumoto, one of the  first two samurai to join Togashi in his meditative retreat.
+Born Flyer^RW^148^You can fly as though born to do it.
+Born of the Three Thunders^CAr^76^You have learned to marry the power of lightning  and thunder in your electricity and sonic spells.
+Bowslinger^Und^24^You can ready ranged weapons surprisingly quickly.
+Brachiation^CAd^106^You can swing through trees like a monkey.
+Brachiation^MW^21^You move through trees like a monkey.
+Breadth of Knowledge^UA^92^Your time spent plumbing the depths of magic  knowledge has resulted in a treasure trove of obscure facts.
+Breathing Link^Rac^161^You can allow a person adjacent to you to breathe  water.
+Breathing Link^Sto^92^You can allow a person adjacent to you to breathe  water.
+Brew Potion^PH^89^You can create potions, which carry spells within  themselves.
+Bright Sigil^RD^150^You have established a greater degree of control  over your sigils. When you concentrate, you can emit strong illumination  from the glowing symbols that surround your head.
+Brutal Throw^CAd^106^You have learned how to hurl weapons to deadly  effect.
+Brute Fighting^RE^116^Your extensive training with two-handed weapons  is revealed through brutally effective tactics.
+Bullheaded^FRCS^34^The stubbornness and determination of your kind  is legendary.
+Bullheaded^PG^37^The stubbornness and determination of your kind  are legendary.
+Bulwark of Defense^EL^51^Your defensive stance bonuses increase.
+Burrow Friend^RS^137^Your natural rapport with burrowing mammals  improves.
+Burrowing Power^XPH^43^Your powers sometimes bypass barriers.
+Calishite Elementalist^Rac^161^You are a student of the Calishite tradition  of elemental magic and have mastered its mysterious lore. You may choose  to specialize in air magic or fire magic.
+Call of the Undying^RE^108^You call upon the power of the Undying Court  to instantly recall a previously cast spell.
+Caravanner^Rac^162^You are skilled at leading caravans along established  trade routes.
+Catfolk Pounce^RW^148^You can rush unaware foes and deliver several  attacks before they have a chance to respond.
+Caustic Adaptation^Und^24^Long have your ancestors hunted and been hunted  in the depths. Natural selection has given your blood an unpalatable, acidic  quality.
+Cavalry Charger^CW^108^Fighting from the back of a steed is second  nature to you.
+Caver^Und^24^You are knowledgeable about the secrets of the  subterranean world and wise in its ways.
+Celestial Bloodline^Rac^162^Some of your latent abilities have matured.
+Celestial Familiar^BE^41^As long as you are able to acquire a new familiar,  you may receive a celestial as a familiar.
+Celestial Heritage^PlH^38^You are descended from creatures native to the  Upper Planes
+Celestial Mount^BE^42^Your special mount is a true creature of the  heavens.
+Celestial Summoning Specialist^PlH^38^You can select from a larger number of options  when summoning good creatures.
+Centaur Trample^RW^148^You have trained to use your large body and  unique physiology against your foes. You have learned how to knock down  opponents and ride over them in combat.
+Chain Power^XPH^44^You can manifest powers that arc to hit other  targets in addition to the primary target.
+Chain Spell^CAr^76^You can cast spells that arc to other targets  in addition to your primary target.
+Chain Spell^TB^39^You can cast spells that arc to other targets  in addition to your primary target.
+Chakram Ricochet^CR^17^You can hurl a chakram so that it strikes two  enemies instead of one.
+Chameleon Hide^SK^144^You can alter the hue of your scales to match  the surrounding terrain.
+Channel Charge^LE^7^You can power a charged magic item with your  own magical ability.
+Channel Legacy^WL^13^You can call upon the hidden strength within  your legacy item to empower yourself for a single spectacular effort.
+Channeled Rage^RD^150^You can focus your rage to counter charms and  compulsions.
+Chant of Fortitude^CAd^113^You can channel the power of your bardic music  to sustain your allies, allowing them to function even after receiving wounds  that would cause others to falter.
+Chaotic Mind^XPH^44^The turbulence of your thoughts prevents others  from gaining insight into your actions.
+Chaotic Rage^EL^51^Your rage is particularly damaging to lawful  creatures.
+Chariot Archery^SF^78^You are skilled at using ranged weapons from  a chariot.
+Chariot Charge^SF^79^You are skilled at charging with your chariot.
+Chariot Combat^SF^78^You are skilled in chariot combat.
+Chariot Sideswipe^SF^79^You are skilled at using your chariot's scythe  blades against foes.
+Chariot Trample^SF^78^You are trained in using your chariot to knock  down opponents.
+Charlatan^SaS^38^You're adept at fooling people. You know how  to tell them just what they want to hear.
+Charm Immunity^SK^145^You are immune to charm effects.
+Charm Resistance^SK^145^You can resist charm effects better than you  otherwise could.
+Cheetah Tribe Sprint^ShS^19^You have learned the secret of lightning-fast  running from the cheetah that roams the plains where you live.
+Cheetah's Speed^CD^79^You can run with the speed of the cheetah.
+Child of Winter^ECS^51^You are trained in the druidic traditions of  the Children of Winter, an Eldeen Reaches sect that embraces death and decay.
+Chink in the Armor^SaS^38^You are an expert at slipping a weapon between  armor plates or into seams.
+Choke Hold^OA^61^You have learned the correct way to apply pressure  to render an opponent unconscious.
+Chondathan Missionary^Rac^162^Your training has emphasized spells that help  you spread the word of your faith.
+Chosen of Iborighu^Fr^47^You gain features that identify you as an ally  to the church of Iborighu and grant you supernatural qualities.
+Chosen Weapon Specialization^PG^135^You deal more damage than normal when wielding  your deity's chosen weapon.
+Circle Kick^SF^5^You kick multiple opponents with the same attack  action.
+Circle Magic^Gh^29^You know how to use your connection to Galaedros  the Wood God to channel magical power to another spellcaster of your faith.
+City Slicker^RD^150^You are very familiar with city life and the  inner workings of your hometown.
+Clan Prestige^RS^137^Your actions have brought you some measure of  fame and respect from your clan, whether from battle prowess or years of  service to the clan.
+Cleave^PH^92^You can follow through with powerful blows.
+Clever Wrestling ^CW^97^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
+Clever Wrestling^Dr^103^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
+Clever Wrestling^MW^22^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
+Clever Wrestling^Sto^92^You have a better than normal chance to escape  or wriggle free from a big creature's grapple or pin.
+Cliffwalk Elite^ECS^52^Your shifter trait improves.
+Cliffwalk Elite^RE^113^Your cliffwalk shifter trait improves.
+Climb Like an Ape^CAd^114^You can improve your climbing ability.
+Clinging Breath^Dr^67^Your breath weapon clings to creatures and continues  to affect them in the round after you breath.
+Cloak Dance^XPH^44^You are skilled at using optical tricks to make  yourself seem to be where you are not.
+Closed Mind^XPH^44^Your mind is better able to resist psionics  than normal.
+Close-Quarters Fighting^Rac^162^You are skilled at resisting grapple attacks  from creatures that usually grapple opponents.
+Close-Quarters Fighting^CW^97^You are skilled at fighting at close range and  resisting grapple attempts.
+Close-Quarters Fighting^Dr^103^You are skilled at fighting at close range and  resisting grapple attempts.
+Close-Quarters Fighting^SF^5^You are skilled at fighting at close range and  resisting grapple attacks.
+Cobra Head^SK^145^You can extend the skin of your neck into a  cobra hood.
+Cold Endurance^Fr^47^You can exist with ease in low-temperature environments.
+Cold Focus^Fr^47^Your cold spells are more potent than normal.
+Cold Iron Tracery^RE^119^Cold-forged iron that runs through your body  allows you to overcome the supernatural defenses of certain creatures and  protecting against some magical attacks.
+Cold Spell Specialization^Fr^47^You do additional damage with cold spells.
+Collegiate Wizard^CAr^181^You have undergone extensive training in a formal  school for wizards.
+Colossal Wild Shape^EL^52^You can wild shape into animals of Colossal  size.
+Combat Archery^CW^151^You can fire a bow in melee safely.
+Combat Archery^EL^52^You can fire a bow in melee safely.
+Combat Brute^CW^110^You employ strength and leverage to great effect  in battle.
+Combat Casting^PH^92^You are adept at casting spells in combat.
+Combat Expertise^PH^92^You are trained at using your combat skill for  defense as well as offense.
+Combat Insight^CW^151^Your keen intellect allows you to place melee  attacks where they will deal the most damage.
+Combat Intuition^CAd^106^Your keen understanding of your opponent's moves  and your instinctive feel for the flow of combat enable you to shrewdly  assess your opponent's combat capabilities.
+Combat Manifestation^XPH^44^You are adept at manifesting powers in combat.
+Combat Reflexes^PH^92^You can respond quickly and repeatedly to opponents  who let their defenses down.
+Communicator^CAr^76^You possess a magical understanding of the essence  of language.
+Complementary Insight^RD^150^You get more out of having skills that work  well together.
+Conductivity^UA^92^You have crude control over electricity effects  near you.
+Confound the Big Folk^RW^153^You excel when battling foes bigger than you  are.
+Consecrate Spell^BE^42^You can imbue your spells with the raw energy  of good, by the grace of a celestial power.
+Consecrate Spell^CD^79^You can imbue your spells with the raw energy  of good.
+Consecrate Spell Trigger^BE^42^You can channel holy power through a spell trigger  item, such as a wand or staff.
+Consecrate Spell-Like Ability^BE^42^You can channel holy power into your spell-like  abilities.
+Construct Lock^RE^119^Your knowledge of construct nature allows you  to deal extra damage to or even immobilize such foes.
+Contagious Paralysis^LM^25^Your paralyzing attack is contagious.
+Control Visage^Gh^29^Your ghost body is shaped as if you were alive  and unharmed, and you can control what your ghost body appears to wear.
+Controlled Immolation^UA^92^If you catch on fire, the flames don't hurt  you.
+Controlled Respiration^SS^31^You can stay out of water longer than you otherwise  could.
+Cool Head^OA^61^You are descended from the great diplomat Ide,  who was chosen to be the voice of Shinjo in all dealings with strangers.
+Cooperative Spell^CAr^76^You can cast spells to greater effect in conjunction  with the same spell cast by another individual.
+Cooperative Spell^TB^39^You can cast spells to greater effect in conjunction  with the same spell cast by another individual.
+Coordinated Shot^HB^96^You are extraordinarily talented at making ranged  attacks past your allies.
+Coordinated Strike^RW^149^You and your animal companion or special mount  can coordinate your melee attacks to gain an advantage in combat.
+Cormanthyran Moon Magic^LE^7^You have mastered the ancient elven techniques  of drawing power from Sehanine Moonbow's light.
+Cornered Rat^DCS^85^You can go from piteous groveling to a murderous  fury in the blink of an eye.
+Corpse Malevolence^Gh^29^You can possess and animate dead bodies.
+Corpsecrafter^LM^25^Undead you raise or create are tougher than  normal.
+Corrupt Arcane Studies^Gh^29^You have dabbled in strange magic that has increased  your power but adversely affected your mind.
+Corrupt Spell^BV^47^The character can transform one of her spells  into a thing of evil due to a deal she makes with an evil power.
+Corrupt Spell^CD^79^You can transform one of your spells into an  evil version of itself.
+Corrupt Spell^CR^17^You can transform one of your spells into a  thing of evil due to a deal you make with an evil power.
+Corrupt Spell-Like Ability^BV^48^One of the creature's spell-like abilities is  powered by evil. A dark pact provides the creature with unholy energy.
+Corrupted Wild Shape^LM^25^You have learned to use the necromantic energy  that powers your undead form to overcome the inability of undead creatures  to wild shape.
+Corrupting Touch^Gh^29^Your touch can damage creatures.
+Cosmopolitan^FRCS^34^Your exposure to the thousand forking paths  of the city has taught you things you ordinarily would never have uncovered.
+Cosmopolitan^PG^37^You've been lied to more times than you can  count.
+Cougar's Vision^CAd^114^You can see in the dark like a cat.
+Courageous Rally^HB^97^You can rally demoralized foes with your bardic  music.
+Courteous Magocracy^FRCS^34^You were raised in a land where mighty wizards  order affairs.
+Cover Your Tracks^ShS^20^You are good at masking your route, making it  difficult for others to track you.
+Craft Aboleth Glyph^LoM^22^An aboleth with this feat can create magic glyphs  that store spells or have specialized effects of their own.
+Craft Alchemical Item^UA^99^You are capable of creating alchemical items  and substances.
+Craft Cognizance Crystal^XPH^44^You can create psionic cognizance crystals  that store power points.
+Craft Construct^MM^303^The creature can create golems and other magic  automatons that obey its orders.
+Craft Construct^MM3^206^A creature with this feat can create golems  and other magic automatons that obey its orders
+Craft Contingent Spell^CAr^77^You know how to attach semipermanent spells  to a creature and set them to activate under certain conditions.
+Craft Contingent Spell^UE^42^You know how to create contingent spells, which  are semipermanent spells that can be 'worn' and activated under certain  conditions.
+Craft Crystal Weapon^OA^61^You can create magic weapons from Kuni crystal,  which is deadly to creatures of the Shadowlands.
+Craft Dorje^XPH^44^You can create slender crystal wands called  dorjes that manifest powers when charges are expended.
+Craft Epic Magic Arms and Armor^EL^52^You can craft magic arms and armor of epic power.
+Craft Epic Rod^EL^52^You can craft magic rods of epic power.
+Craft Epic Staff^EL^52^You can craft magic staffs of epic power.
+Craft Epic Wondrous Item^EL^52^You can craft wondrous items of epic power.
+Craft Magic Arms and Armor^PH^92^You can create magic weapons, armor, and shields.
+Craft Masterwork Armor^UA^99^You are trained in the creation of fine armor  and shields.
+Craft Masterwork Ranged Weapon^UA^99^You are trained in the creation of fine ranged  weapons and ammunition.
+Craft Masterwork Weapon^UA^99^You are trained in the creation of fine melee  and thrown weapons.
+Craft Psicrown^XPH^44^You can create psicrowns, which have multiple  psionic effects.
+Craft Psionic Arms and Armor^XPH^44^You can create psionic weapons, armor, and shields.
+Craft Psionic Construct^XPH^45^You can create golems and other psionic automatons  that obey your orders.
+Craft Psionic Seal^LoM^69^A creature with this feat can create psionic  glyphs or symbols that hold spells or psionic powers until triggered.
+Craft Rod^PH^92^You can create magic rods, which have varied  magical effects.
+Craft Rune Circle^RS^137^You can create rune circles, stationary magic  items that hold a variety of spells and effects.
+Craft Scepter^LE^8^You know the ancient Netherese secret of creating  magic scepters.
+Craft Skull Talisman^Fr^47^You can create skull talismans, which carry  spells within themselves.
+Craft Staff^PH^92^You can create magic staffs, each of which has  multiple magical effects.
+Craft Talisman^OA^61^You can create magic fetishes, single-use magic  items that hold spells until triggered.
+Craft Universal Item^XPH^45^You can create universal psionic items.
+Craft Wand^PH^92^You can create wands, which hold spells.
+Craft Wondrous Item^PH^92^You can create a wide variety of magic items.
+Craven^CR^17^Like most sly rogues, you are a dangerous coward.  However, your sneak attacks deal more damage than normal.
+Create Infusion^MW^22^You store a divine spell within a specially  prepared herb.
+Create Portal^FRCS^34^You have learned the ancient craft of creating  a portal.
+Crescent Moon^CW^113^You have mastered the style of fighting with  sword and dagger.
+Crowd Tactics^RD^156^You are adept at moving through and fighting  in crowds.
+Crush^SS^31^Like a dragon, you can hurl your body onto opponents  to deal tremendous damage.
+Cumbrous Dodge^SS^31^You have a chance to dodge attacks that hit  you, but at a cost.
+Cumbrous Fortitude^SS^31^You have a greater chance than normal to resist  attacks against your vitality, but at a cost.
+Cumbrous Reflexes^SS^31^You have a greater chance to resist attacks  against your agility, but at a cost.
+Cumbrous Will^SS^31^You have a greater chance to resist attacks  against your willpower, but at a cost.
+Cunning Sidestep^Dr^103^You have a better than normal chance to avoid  being bull rushed or tripped.
+Curative Legacy^WL^14^Your item's legacy is so linked with your aura  that it restores your health each time it is activated.
+Curling Wave Strike^Sto^92^Mimicking the forceful power of the wave, you  can trip multiple foes as part of the same strike.
+Dallah Thaun's Luck^RW^149^You can rely on a good dose of luck to get you  through almost any scrape.
+Damage Reduction^CW^151^You can shrug off some damage from attacks.
+Damage Reduction^EL^52^You can shrug off some damage from attacks.
+Dancing Blade^Gh^30^You have an energetic fighting style modeled  after traditional Salkirian dancing.
+Dancing with Shadows^RE^117^You have studied shesan talarash dasyannah,  the martial dance of the kalashtar.
+Danger Sense^CAd^106^You are one twitchy individual.
+Danger Sense^MH^25^You are one twitchy mother goose.
+Darguun Mauler^RE^108^The memory of your people's lost glory drives  your brutal mastery of the weapons of Darguun.
+Dark Speech^BV^48^The character learns a smattering of the language  of truly dark power.
+Darkstalker^LoM^179^You have learned how to stalk and surprise creatures  whose senses are very different from those of a humanoid.
+Dash^CW^97^You can move faster than normal.
+Dash^MH^25^You can move faster than normal.
+Dash^SaS^38^You move faster than normal for your race.
+Daunting Presence^LM^25^You are skilled at inducing fear in your opponents.
+Daunting Presence^MH^25^You are skilled at inducing fear in your opponents.
+Dauntless^PG^37^You can stand up to greater punishment than  most and still keep going.
+Daylight Adaptation^PG^37^You have accustomed yourself to the painful  sunlight of the surface world.
+Daylight Adaptation^RE^108^You have grown accustomed to living in the surface  world, such that bright light no longer blinds or dazzles you.
+Daylight Adaptation^FRCS^34^Through long exile from the shadowed homelands  of your kind, you have learned to endure the painful sunlight of the surface  world.
+Deadly Chill^LM^25^Undead you raise or create deal more damage  than normal.
+Deadly Poison^SK^145^Your poison attack deals more damage than normal.
+Deadly Poison^SS^31^Your poison attack deals more damage than normal.
+Deadly Precision^XPH^45^You empty your mind of all distracting emotion,  becoming an instrument of deadly precision.
+Deadly Spittle^SK^145^You can use your spit attack against multiple  opponents.
+Deafening Song^EL^52^Your bardic music deafens those nearby.
+Death Blow^CAd^106^You waste no time in dealing with downed foes.
+Death Blow^SF^6^You waste no time in dealing with downed foes.
+Death Frenzy^LoM^22^When an aboleth takes this feat, its sense of  immortality rebels against the very concept of death.
+Death Master^LM^26^Foes are especially afraid of your critical  hits.
+Death of Enemies^EL^52^You can instantly slay your favored enemies  with a single strike.
+Deceitful^PH^93^You have a knack for disguising the truth.
+Deep Denizen^SS^32^You are adapted to a subterranean environment.
+Deep Impact^XPH^45^You can strike your foe with a melee weapon  as if making a touch attack.
+Deep Vision^RS^137^Your mental focus helps you see farther with  darkvision.
+Deepening Darkness^Rac^162^Your inherent ability to create darkness is  more powerful than normal.
+Deepspawn^LoM^179^Your body undergoes a shocking degeneration  into something that is strikingly inhuman.
+Defensive Archery^RW^150^You can avoid attacks of opportunity when making  ranged attacks while threatened.
+Defensive Strike^CW^97^You can turn a strong defense into a powerful  offense.
+Defensive Strike^OA^62^You can turn a strong defense into a powerful  offense.
+Defensive Throw^CW^97^You can use your opponent's weight, strength,  and momentum against her, deflecting her attack and throwing her to the  ground.
+Defensive Throw^OA^62^You can use your opponent's  weight, strength, and momentum against her, deflecting her attack and throwing  her to the ground.
+Deflect Arrows^PH^93^You can deflect incoming arrows, as well as  crossbow bolts, spears, and other projectile or thrown weapons.
+Deflective Armor^RS^137^Your armor shields you from touch attacks as  well as regular blows.
+Deformity (Clawed Hands)^BV^48^Because of intentional self-mutilation, the  character has deformed arms and hands ending in sharp claws.
+Deformity (Eyes)^BV^48^The character has either drilled a hole in her  forehead trying to add a third eye, or she has supernaturally scarred one  of her regular eyes.
+Deformity (Face)^BV^48^Because of intentional self-mutilation, the  character has a hideous face.
+Deformity (Gaunt)^BV^48^Through intentional starvation and macabre operations,  the character is grossly underweight.
+Deformity (Obese)^BV^48^Through intentional gorging and general gluttony,  the character is obese.
+Deft Hands^PH^93^You have exceptional manual dexterity.
+Deft Opportunist^CAd^106^You are prepared for the unexpected.
+Deft Opportunist^MH^25^You are prepared for the unexpected.
+Deft Strike^CAd^106^You can place attacks at weak points in your  opponent's defenses.
+Deft Strike^Dr^103^You can place attacks at weak points in your  opponent's defenses.
+Delay Power^XPH^45^You can manifest powers that go off up to 5  rounds later.
+Delay Spell^CAr^77^You can cast spells that take effect after a  short delay of your choosing.
+Delay Spell^FRCS^34^You can cast spells that take effect after a  short delay of your choosing.
+Delay Spell^PG^37^You can cast spells that take effect after a  short delay of your choosing.
+Delay Spell^TB^39^You can cast spells that take effect after a  short delay of your choosing.
+Demonsworn Knight^CR^22^A scornful champion of the demon princes, you  detest and oppose devils and other creatures that refuse to heed the call  of chaos.
+Desert Dweller^SS^32^You are adapted to a desert environment.
+Destruction Retribution^LM^26^Undead you raise or create harbor a retributive  curse that is unleashed if they are destroyed.
+Destructive Rage^CW^97^You can shatter barriers and objects when enraged.
+Destructive Rage^MW^22^You shatter barriers and objects when enraged.
+Detach^SS^32^You can remove a part of your body and use it  as a ranged weapon.
+Devastating Critical^Dr^68^Choose one type of melee weapon, such as a claw  or bite. With that weapon, you are capable of killing any creature with  a single strike.
+Devastating Critical^EL^53^Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you are capable of killing any creature with  a single strike.
+Devoted Inquisitor^CAd^107^Your faithful service to your patron deity involves  training and methods that many paladins consider questionable.
+Devoted Performer^CAd^107^You have foregone the pursuit of frivolous musical  talents, instead entering religious training in service of honor and justice.
+Devoted Tracker^CAd^108^You have found a balance between your woodland  training and your devotion to religious training, blending these two aspects  into one seamless whole.
+Dexterous Fortitude^EL^53^You are able to resist physical attacks with  exceptional agility.
+Dexterous Will^EL^53^You are able to resist compelling effects with  exceptional agility.
+Diehard^Gh^30^You can remain conscious after attacks that  would fell others.
+Diehard^PH^93^You can remain conscious after attacks that  would fell others.
+Diligent^PH^93^Your meticulousness allows you to analyze minute  details that others miss.
+Diminutive Wild Shape^EL^53^You can wild shape into animals of Diminutive  size.
+Dinosaur Hunter^RE^108^Your extraordinary knowledge of dinosaurs grants  you a special aptitude for tracking and hunting them.
+Dinosaur Wrangler^RE^108^You are attuned to dinosaurs and possess a special  bond with them.
+Dire Charge^Dr^68^You can make a full attack as part of a charge.
+Dire Charge^EL^53^You can make a full attack as part of a charge.
+Dire Flail Smash^CR^17^You have mastered the style of fighting with  the dire flail and have learned to deal thunderous blows with the weapon.
+Dirty Fighting^SF^6^You know the brutal and effective fighting tactics  of the streets and back alleys.
+Dirty Rat^CR^20^You are quite adept at slipping under a foe's  guard while he's distracted.
+Disciple of Darkness^BV^49^The character formally supplicates himself to  an archdevil.
+Disciple of Darkness^CR^23^You formally supplicate yourself to an archdevil.  In return for this obedience, you gain a small measure of the archdevil's  power.
+Disciple of the Sun^CD^80^You can destroy undead instead of merely turning  them.
+Discipline^FRCS^34^Your people are admired for their single-minded  determination and clarity of purpose.
+Discipline^OA^62^Your ancestor, Naka Kaeteru, was the first Grand  Master of all the elements, a master of meditation and contemplation.
+Discipline^PG^38^Your people are admired for their single-minded  determination and clarity of purpose.
+Disentangler^Rac^162^Thanks to the teachings of Thard Harr, you have  practiced evading the attacks of jungle plants.
+Disguise Spell^CAd^108^You can cast spells without observers noticing.
+Disguise Spell^DD^50^The deity can cast spells without observers  noticing it.
+Disguise Spell^SaS^38^You can cast spells without observers noticing.
+Disintegration Finesse^LoM^44^A creature with this feat can use disintegrate  effects to affect smaller, more exacting areas.
+Disjunction Ray^LoM^45^A beholder with this feat can narrow its antimagic  cone down to an eye ray that disjoins magic.
+Distant Shot^EL^53^You can target a thing you can see with a ranged  weapon.
+Disturbing Visage^RE^117^You can change your features to chilling effect.
+Dive for Cover^CAd^108^You can dive behind cover or drop to the ground  quickly enough to avoid many area effects.
+Diverse Background^RD^156^You have a wide and diverse background, giving  you a greater understanding of different occupations.
+Divine Accuracy^LM^26^You can channel positive energy to give your  allies' melee attacks another chance to strike true against incorporeal  creatures.
+Divine Cleansing ^CW^106^You can channel energy to improve your allies'  ability to resist attacks against their vitality and health.
+Divine Cleansing^DF^19^You can channel energy to improve you and your  allies' ability to resist poison and curses.
+Divine Damage Reduction^RS^137^You can channel energy to give yourself a small  amount of protection from weapons.
+Divine Energy Focus^Gh^30^You have a gift for channeling positive or negative  energy.
+Divine Metamagic^CD^80^You can channel energy into some of your divine  spells to make them more powerful.
+Divine Might^CW^106^You can channel energy to increase the damage  you deal in combat.
+Divine Might^DD^50^The deity can channel energy to increase its  damage in combat.
+Divine Might^DF^19^You can channel energy to increase the damage  you deal in combat.
+Divine Might^FP^214^You can channel energy to increase your damage  in combat.
+Divine Resistance^CW^106^You can channel energy to temporarily reduce  damage you and your allies take from some sources.
+Divine Resistance^DF^19^You can channel energy to temporarily reduce  damage you and your allies take from some sources.
+Divine Shield^CW^106^You can channel energy to make your shield more  effective for either offense or defense.
+Divine Shield^DF^19^You can channel energy to make your shield more  effective for either offense or defense.
+Divine Spell Penetration^PG^135^Choose one component of your alignment. Any  divine spells of that alignment that you cast are more capable of defeating  spell resistance than normal.
+Divine Spell Power^CD^80^You can channel positive or negative energy  to enhance your divine spellcasting ability.
+Divine Spellshield^RS^137^You can channel energy to help your allies resist  spells and spell-like effects.
+Divine Vengeance^DD^50^The deity can channel energy to do additional  damage in combat against undead.
+Divine Vengeance^DF^20^You can channel energy to deal additional damage  against undead in melee.
+Divine Vengeance^FP^214^You channel energy to do additional energy damage  in combat against undead.
+Divine Vigor^CW^108^You can channel energy to increase your speed  and durability.
+Divine Vigor^DF^20^You can channel energy to increase your speed  and Constitution.
+Diving Charge^RW^150^You can dive down at a target to deal a devastating  strike.
+Dodge^PH^93^You are adept at dodging blows.
+Domain Focus^CD^80^You have mastered the subtle intricacies of  the divine power you've devoted yourself to.
+Domain Spontaneity ^CD^80^You are so familiar with one of your domains  that you can convert other prepared spells into spells from that domain.
+Doomspeak^CR^20^You can demoralize an enemy with horrible condemnations  and grim portents of impending doom.
+Double Hit^MH^25^You can react with your off hand to make an  additional attack along with an attack of opportunity.
+Double Steel Strike^ECS^52^Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the two-bladed  sword.
+Double Wand Wielder^CAr^77^You can activate two wands at the same time.
+Draconian Breath Weapon^DCS^85^You have harnessed your draconic heritage and  can attack with a dragonlike breath weapon.
+Draconic Breath^CAr^77^You can convert your arcane spells into a breath  weapon.
+Draconic Claw^CAr^77^You develop the natural weapons of your draconic  ancestors.
+Draconic Flight^CAr^77^The secret of draconic flight is revealed to  you, granting you the ability to fly occasionally.
+Draconic Heritage^CAr^77^You have greater connection with your distant  draconic bloodline.
+Draconic Knowledge^Dr^69^You are attuned to nature and the elements and  can draw on deep wells of knowledge.
+Draconic Legacy^CAr^78^You have realized greater arcane power through  your draconic heritage.
+Draconic Power^CAr^78^You have greater power manipulating the energies  of your heritage.
+Draconic Presence^CAr^78^When you use your magic, your mere presence  can terrify those around you.
+Draconic Resistance^CAr^78^Your bloodline hardens your body against the  energy type of your progenitor.
+Draconic Skin^CAr^78^Your skin takes on the sheen, luster, and hardness  of your draconic parentage.
+Dragon Cohort^Dr^104^You gain the service of a loyal dragon ally.
+Dragon Familiar^Dr^104^When you are able to acquire a new familiar,  you may select a wyrmling dragon as a familiar.
+Dragon Hunter ^Dr^104^You have made a special study of dragons and  know how to defend against a dragon's attacks.
+Dragon Hunter Bravery ^Dr^104^You resist dragons' frightful presence, and  your mere presence helps others resist as well.
+Dragon Hunter Defense^Dr^104^Your insight into the tactics and abilities  of dragons grants you awareness of how best to avoid their magical attacks.
+Dragon Rage^ECS^52^You call upon the power of your dragon totem  to enhance your barbarian rage.
+Dragon Steed^Dr^105^You have earned the service of a loyal draconic  steed.
+Dragon Totem^ECS^52^As a proud warrior of the barbarian tribes of  Argonnessen and Seren, you have claimed one of the true dragon types as  your totem -- a patron, protector, and source of strength.
+Dragon Wild Shape^Dr^105^You can take the form of a dragon.
+Dragon Wild Shape^EL^53^You can take the form of a dragon.
+Dragonbane^Dr^105^You have made a special study of dragons and  are adept at pulling off deliberate attacks that take advantage of a dragon's  weak spots.
+Dragoncrafter^Dr^105^You can make special weapons, armor, and other  items using parts of dragons as materials.
+Dragondoom^Dr^105^You have learned how to place blows against  a dragon that deal tremendous damage.
+Dragonfoe^Dr^105^You have learned how to attack dragons more  effectively than most other individuals.
+Dragonfriend^Dr^105^You are a known and respected ally of dragons.
+Dragon's Toughness^MW^22^You are incredibly tough.
+Dragonsong ^Dr^105^Your song or poetics echo the power of the dragonsong,  an ancient style of vocal performance created by dragons in the distant  past.
+Dragonthrall^Dr^105^You have pledged your life to the service of  evil dragonkind.
+Draw from the Land^UE^43^You can draw strength and sustenance from the  land itself.
+Dread Tyranny^RD^154^A devoted student of Hextor's militant teachings,  you are skilled at intimidating and dominating weaker beings.
+Dreadful Wrath^PG^38^You are terrible to behold in battle, and few  foes have the heart to face you without quailing
+Dreamsight Elite^RE^113^Your dreamsight shifter trait improves.
+Drift Magic^Sa^49^You can tap the power of drift magic.
+Drow Eyes^Rac^162^You have trained your eyes to see in the dark  as well as your full drow ancestors.
+Drow Skirmisher^RE^109^Your experience with the guerrilla-style combat  of the deep jungle grants you mastery of the weapons of the drow.
+Dual Strike^CAd^108^You are an expert skirmisher skilled at fighting  with two weapons.
+Dual Strike^SF^6^Your combat teamwork makes you a more dangerous  foe.
+Duergar Mindshaper^Rac^162^You are accomplished at using the power of your  mind to overcome weaker personalities.
+Dungeoneer's Intuition^CSW^144^You can sense when things don't feel right,  and you have a knack for avoiding deadly traps and ambushes.
+Durable Form^LoM^180^You are much more resilient than the fragile  humanoids that do not share your aberrant heritage.
+Dust Cloud^SS^33^You can sweep dust into the air to hide from  opponents.
+Dwarf's Toughness^MW^22^You are tougher than you were before.
+Dwarven Armor Proficiency^RS^138^You are familiar with exotic armor of dwarven  manufacture and understand how to use it properly.
+Eagle Claw Attack^CW^97^Your superior insight allows you to strike objects  with impressive force.
+Eagle Claw Attack^OA^62^Your unarmed attacks can shatter objects.
+Eagle Claw Attack^SF^6^Your unarmed attacks shatter objects.
+Eagle Tribe Vision^ShS^20^You have keen eyesight reminiscent of the giant  eagles that fly over your tribal lands.
+Eagle's Fury^Sa^49^You know how to wield the eagle's claw with  deadly speed.
+Eagle's Wings^CD^80^You can take wing and fly with the grace of  an eagle.
+Earth Adept^RS^138^You are in tune with the ground at your feet,  making you more dangerous in the shifting conditions of combat.
+Earth Fist^RS^138^Your bond with the earth and martial training  has imbued your fists with the qualities of cold iron.
+Earth Heritage^PlH^38^You are descended from creatures native to the  Elemental Plane of Earth.
+Earth Master^RS^138^You are in tune with the ground at your feet,  helping you anticipate your opponent's movements in combat.
+Earth Power^RS^138^You draw psionic energy from raw stone.
+Earth Sense^RS^138^You are in tune with the earth beneath you.
+Earth Spell^RS^138^You draw magical power from the earth beneath  your feet.
+Earth's Embrace^CW^97^You can crush opponents when you grapple them.
+Earth's Embrace^OA^62^You can crush opponents when you grapple them.
+Earth's Warding^RS^139^You can channel energy to infuse your skin with  the strength of the earth.
+Ecclesiarch^ECS^52^You command a degree of respect in your church's  hierarchy.
+Ectoplasm^Gh^30^You can create ectoplasm, a gooey physical manifestation  of base supernatural spiritual energy.
+Education^ECS^52^Some lands hold the pen in higher regard than  the sword.
+Education^FRCS^34^In your youth you received the benefit of several  years of more or less formal schooling.
+Education^Gh^31^In your youth you received the benefit of several  years of more or less formal schooling.
+Education^PG^38^You hail from a land where the pen is held in  higher regard than the sword.
+Efficient Item Creation^EL^53^Select an item creation feat. You can create  magic items using that feat much more quickly than normal.
+Eldritch Linguist^Rac^162^You have a deep understanding of how words themselves  have their own kind of magic, and a mastery of the secret syntax of power.
+Elemental Bloodline^Rac^163^You have taken on some of the aspects of the  type of element that infuses your flesh.
+Elemental Healing^CD^80^You can channel elemental energy to heal creatures  of a specific elemental subtype.
+Elemental Smiting^CD^81^You can channel elemental energy to deal extra  damage to creatures tied to a specific element.
+Elemental Spellcasting^PlH^39^Choose an element. You cast spells with that  descriptor more effectively than normal.
+Elephant's Hide^CD^81^You can thicken your skin to the toughness of  an elephant's.
+Elf Dilettante^RW^150^Throughout the long years of your life, you  have developed a talent for doing just about anything.
+Elfhunter^Und^25^Because of your cultural hatred for elves, you  have had specific training in how best to fight them.
+Elusive Target ^CW^110^Trying to land a blow against you can be a maddening  experience.
+Embed Spell Focus^Dr^69^You can embed focus components required for  your spells into your body.
+Empower Legacy^WL^14^You can use one of your item's legacy abilities  to greater effect.
+Empower Power^XPH^46^You can manifest powers to greater effect.
+Empower Spell^PH^93^You can cast spells to greater effect.
+Empower Spell-Like Ability^BV^49^The creature can use a spell-like ability with  greater effect.
+Empower Spell-Like Ability^MM^303^The creature can use a spell-like ability with  greater effect than normal.
+Empower Spell-Like Ability^MM3^206^A creature with this feat can use a spell-like  ability with greater effect than normal.
+Empower Spell-Like Ability^SS^33^You can use a spell-like ability with greater  effect than normal.
+Empower Turning^CD^81^You can turn or rebuke more undead with a single  turning attempt.
+Empower Turning^DF^20^You can turn or rebuke more undead with a single  turning attempt.
+Empower Turning^FP^214^You can turn or rebuke more undead with a single  turning attempt.
+Empower Turning^Gh^31^You can turn or rebuke more undead with a single  turning attempt.
+Empower Turning^LM^26^You can turn or rebuke greater numbers of undead  with a single turning attempt.
+Empowered Ability Damage^LM^26^Your ability damage (or ability drain) special  attack is more potent than normal.
+Empty Hand Mastery^OA^80^You have mastered the martial arts style of  'Empty Hand' -- a hard form emphasizing strikes with the hand.
+Enchanting Song^RS^139^You can channel the power of your bardic music  to temporarily increase the power of your enchantment spells.
+Endurance^PH^93^You are capable of amazing feats of stamina.
+Endure Blows^Dr^70^You are adept at lessening the effects of blows.
+Endure Sunlight^LM^26^Your vulnerability to sunlight is reduced.
+Enduring Life^LM^26^You can ignore the effect of negative levels  for a short time.
+Energize Armor^RS^139^You can charge your armor with psionic energy,  making it resistant to energy damage.
+Energize Spell^LM^26^Your spells channel positive energy to deal  extra damage to undead creatures, but are less effective against other opponents.
+Energy Admixture^CAr^78^You can modify a spell that uses one type of  energy to add an equal amount of another energy type.
+Energy Admixture^TB^39^You can modify a spell that uses one type of  energy to mix in an equal amount of another type of energy.
+Energy Affinity^MH^25^You can modify a spell that uses one type of  energy to use another type of energy.
+Energy Resistance^EL^53^You can resist the effects of a chosen type  of energy.
+Energy Substitution^CAr^79^You can modify an energy-based spell to use  another type of energy instead.
+Energy Substitution^DD^50^The deity can modify a spell that uses energy  to use another type of energy.
+Energy Substitution^Mag^21^You can modify a spell that uses one type of  energy to use another type of energy.
+Energy Substitution^TB^40^You can modify a spell that uses one type of  energy to use another type of energy.
+Enervate Spell^LM^26^Your spells channel negative energy to deal  extra damage to undead creatures, but are less effective against unliving  opponents.
+Enervating Touch^Gh^31^Your touch can bestow negative levels upon creatures.
+Enervative Healing^Rac^163^You can use the life energy of an opponent to  heal yourself.
+Enhance Effect^PG^135^You can change the characteristics of a persistent  spell effect that is already in place.
+Enhance Item^EL^114^You can increase the minimum DC for saving throws  of magic items that you
+Enhance Spell^CAr^191^You can increase the power limit of your damage-dealing  spells.
+Enhance Spell^EL^53^You can increase the power limit of your damage-dealing  spells.
+Enhanced Adhesive^Und^25^The natural adhesive you secrete becomes stickier.
+Enhanced Power Sigils^RD^152^Your illumian power sigils are more powerful  than normal.
+Enlarge Breathe^Dr^70^Your breath weapon is larger than normal.
+Enlarge Mucus Cloud^LoM^22^An aboleth with this feat can extend its mucus  cloud into a wider area.
+Enlarge Power^XPH^46^You can manifest powers farther than normal.
+Enlarge Spell^PH^94^You can cast spells farther than normal.
+Entangling Spell^CR^20^Your spell releases residual eldritch power  that entangles your enemies.
+Epic Combat Expertise ^CW^151^You have extraordinary talent at using your  combat skill for defense.
+Epic Counterspell^PG^135^You can counterspell any number of spells each  round.
+Epic Devotion^CD^89^Choose an alignment component different from  your own alignment. You are particularly resistant to spells of that alignment.
+Epic Devotion^PG^135^Choose an alignment component that you do not  possess. You are particularly resistant to spells with that descriptor.
+Epic Dodge^CAd^191^You are able to evade attacks with exceptional  agility.
+Epic Dodge^EL^54^You are able to evade attacks with exceptional  agility.
+Epic Endurance^EL^54^You are capable of legendary feats of stamina.
+Epic Expanded Knowledge^XPH^34^You learn another power.
+Epic Fortitude^Dr^70^You have tremendously high fortitude.
+Epic Fortitude^EL^54^You have tremendously high fortitude.
+Epic Inspiration^EL^54^Your bardic music provides greater inspiration  than normally possible.
+Epic Leadership^EL^54^You attract more powerful cohorts and followers  than normally possible.
+Epic Prowess^CW^151^You have great skill in combat.
+Epic Prowess^EL^54^You gain great skill in combat.
+Epic Psionic Focus^XPH^34^You can expend your psionic focus to greater  effect.
+Epic Reflexes^Dr^70^You have tremendously fast reflexes.
+Epic Reflexes^EL^54^You have tremendously fast reflexes.
+Epic Reputation^CAd^191^Your reputation provides great bonuses on interactions  with others.
+Epic Reputation^EL^54^Your reputation provides great bonuses on interactions  with others.
+Epic Skill Focus^CAd^191^Choose a skill, such as Move Silently. You have  a legendary knack with that skill.
+Epic Skill Focus^EL^54^Choose a skill, such as Move Silently. You have  a legendary knack with that skill.
+Epic Speed^EL^54^You can move much more quickly than a normal  person.
+Epic Spell Focus ^CAr^192^Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal.
+Epic Spell Focus^EL^54^Choose a school of magic, such as illusion.  Your spells of that school are for more potent than normal.
+Epic Spell Penetration^CAr^192^Your spells are tremendously potent, breaking  through spell resistance with ease.
+Epic Spell Penetration^EL^54^Your spells are tremendously potent, breaking  through spell resistance with ease.
+Epic Spellcasting^EL^55^You can create and cast spells that transcend  the most powerful existing spells.
+Epic Spellfire Wielder^PG^136^You can store more spellfire energy levels than  normal.
+Epic Sunder^CW^151^You are preternaturally tough.
+Epic Toughness^CW^151^You are specially good at using one chosen type  of weapon.
+Epic Toughness^EL^55^You are preternaturally tough.
+Epic Weapon Focus ^CW^151^You deal extra damage when attacking objects.
+Epic Weapon Focus^EL^55^Choose one type of weapon, such as a greataxe.  You are especially good at using this weapon.
+Epic Weapon Specialization^EL^55^Choose one type of weapon, such as a greataxe.  You deal extraordinary damage wielding this weapon.
+Epic Will^Dr^70^You have tremendously strong willpower.
+Epic Will^EL^55^You have tremendously strong willpower.
+Eschew Materials ^DD^50^The deity can cast spells without material components.
+Eschew Materials^EL^69^You can cast spells without material components.
+Eschew Materials^FP^214^You can cast spells without material components.
+Eschew Materials^LD^189^You can cast spells without material components.
+Eschew Materials^Mag^22^You can cast spells without material components.
+Eschew Materials^PH^94^You can cast spells without relying on material  components.
+Eschew Materials^TB^40^You can cast spells without material components.
+Eternal Strength^RD^155^You have taken Kord's fighting ways to heart.  Throwing yourself into every brawl, you draw upon your mighty deity's strength.
+Ethereal Sidestep^Gh^31^You can teleport yourself a short distance.
+Ethran^FRCS^34^You have been initiated into the secrets of  the Witches of Rashemen as a member of the Ethran, the 'untried.'
+Ethran^PG^38^You have been initiated into  the secrets of the Witches of Rashemen as a member of the Ethran, the 'untrained.'
+Ettercap Berserker^UE^43^The intense physical training required to join  your lodge has made you tougher.
+Evil Brand^BV^49^The character is physically marked forever as  a servant of an evil power or as a villain.
+Evil Brand^CR^23^You are physically marked forever as a servant  of an evil power or as a villain.
+Evil Embraced^CR^23^You embrace the power of your fiendish patron  and call upon that power in moments of great need.
+Eviscerator^LM^26^The allies of your foes are especially afraid  of your critical hits.
+Exalted Companion^BE^42^Instead of an animal companion, you have a magical  beast of good alignment.
+Exalted Smite^BE^42^Your smite ability is empowered with holy energy.
+Exalted Spell Resistance^BE^42^You are particularly resistant to evil spells.
+Exalted Turning^BE^42^You turn undead with such power that affected  undead take damage.
+Exalted Wild Shape^BE^42^You can use your wild shape ability to take  the form of a good-aligned magical beast.
+Exceptional Artisan^ECS^52^You are an expert at creating magic items faster  than usual.
+Exceptional Deflection^EL^55^You can deflect any type of ranged attack.
+Exotic Armor Proficiency^RS^139^Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly.
+Exotic Armor Proficiency^Und^25^Choose a type of exotic armor. You understand  how to wear that type of exotic armor properly.
+Exotic Shield Proficiency^RS^139^Choose an exotic shield. You are proficient  with that type of exotic shield.
+Exotic Weapon Proficiency^PH^94^Choose a type of exotic weapon. You understand  how to use that type of exotic weapon in combat.
+Expanded Aura of Courage^HB^97^Your aura of courage protects more allies than  normal.
+Expanded Knowledge^XPH^46^You learn another power.
+Expanded Possession^Gh^31^You can ride or possess an additional type of  creature.
+Expeditious Dodge^RW^150^You're good at avoiding attacks while moving  quickly.
+Expert Siege Engineer^HB^97^You are particularly skilled at operating siege  weapons, such as catapults and battering rams.
+Expert Swimmer^Sto^92^You swim like a fish. You can stay underwater  far longer than others of your race, and you are at home in the water.
+Expert Tactician^CAd^109^Your tactical skills work to your advantage.
+Expert Tactician^SaS^38^Your tactical skills work to your advantage.
+Expert Tactician^SF^6^Your tactical skills work to your advantage.
+Explosive Spell^CAr^79^You can cast spells that blast creatures off  their feet.
+Explosive Spell^UE^43^You can cast spells that blast creatures off  their feet.
+Extend Power^XPH^46^You can manifest powers that last longer than  normal.
+Extend Rage^CW^97^You are able to maintain your rage longer than  most.
+Extend Rage^ECS^52^You are able to maintain your rage longer than  most.
+Extend Spell^PH^94^You can cast spells that last longer than normal.
+Extend Spreading Breath^Dr^70^You can convert your breath weapon into a spread  effect that can be used at range.
+Extended Life Span^EL^56^You are exceptionally long-lived.
+Extended Rage^MW^22^Your rage lasts longer than it normally would.
+Extended Rage^UE^43^Your rage lasts longer than it normally would.
+Extended Reach^SS^34^Your flexible body allows you to reach farther  than normal.
+Extra Domain Spell^MH^26^You have chosen to be more specialized in a  particular domain.
+Extra Edge^CAr^79^Your ability to deal spell damage is particularly  striking.
+Extra Favored Enemy^Gh^32^You select an additional favored enemy.
+Extra Favored Enemy^MW^22^You select an additional favored enemy.
+Extra Followers^HB^97^Your charismatic magnetism attracts even more  followers to your banner.
+Extra Invocation^CAr^79^You learn an additional invocation.
+Extra Item Space^SS^34^You can wear more magic items than are normally  allowed.
+Extra Music^CAd^109^You can use your bardic music more often than  you otherwise could.
+Extra Music^DD^50^The deity can use its bardic songs more often  than it otherwise could.
+Extra Music^ECS^52^You can use your bardic music more often than  you otherwise could.
+Extra Music^SaS^39^You can use your bardic music more often than  you otherwise could.
+Extra Rage^CW^98^You may rage more frequently than normal.
+Extra Rage^MW^22^You rage more frequently than you normally would.
+Extra Rings^ECS^53^Your familiarity with forging magic rings allows  you to make use of more rings than normal.
+Extra Shifter Trait^ECS^53^You manifest a second shifter trait while shifting.
+Extra Shifter Trait^MM3^150^You manifest a second shifter trait while shifting.
+Extra Shifter Trait^RE^114^You manifest a second shifter trait while shifting.
+Extra Silence^RS^139^You can generate a field of silence more often  than other whisper gnomes can.
+Extra Slot^CAr^79^You can cast an additional spell.
+Extra Slot^Gh^32^You can cast an extra spell.
+Extra Slot^TB^40^You can cast an extra spell.
+Extra Smiting^CW^98^You can make more smite attacks.
+Extra Smiting^DF^20^You can make more smite attacks.
+Extra Spell^CAr^79^You learn an additional spell.
+Extra Spell^TB^40^You can learn one more spell.
+Extra Spell Secret^CAr^80^You learn an additional spell secret.
+Extra Stunning^CW^98^You gain extra stunning attacks.
+Extra Stunning Attacks^SF^6^You gain extra stunning attacks when fighting  unarmed.
+Extra Turning^PH^94^You can turn or rebuke creatures more often  than normal.
+Extra Wild Shape^CD^81^You can use wild shape more frequently than  you normally could.
+Extra Wild Shape^Gh^32^You can use wild shape more frequently than  you normally could.
+Extra Wild Shape^MW^22^You use wild shape more frequently than you  normally could.
+Extra Wild Shape^Und^25^You can use wild shape more frequently than  you normally could.
+Extraordinary Artisan^ECS^53^You are an expert at creating magic items at  a lower cost than usual.
+Extraordinary Concentration^CAd^109^Your mind is so focused that you can cast spells  even while concentrating on another spell.
+Extraordinary Spell Aim^CAd^109^You can shape a spell's area to exclude one  creature from its effects.
+Eyes in the Back of Your Head^CW^98^Your superior battle sense helps minimize the  threat of flanking.
+Eyes in the Back of Your Head^DD^50^The deity's superior battle sense helps minimize  the threat of flanking attacks.
+Eyes in the Back of Your Head^SF^6^Your superior battle sense helps minimize the  threat of flanking.
+Eyes of Light^Rac^163^You can focus the holy power within you to create  a beam of destructive light energy.
+Eyes to the Sky^UA^93^You have an instinctive sense of when someone  is magically watching you.
+Fade^Gh^32^You can make your ghost body more diaphanous  and difficult to detect.
+Faith in the Frost^Fr^48^You channel frozen energies from your deity  when you turn or rebuke creatures.
+Falling Far Strike^OA^62^You have mastered the art of striking a nerve  that blinds a humanoid opponent.
+False Pretenses^UA^93^Those who try to charm you get an unpleasant  surprise.
+Familiar Concentration^LE^8^In the tradition of Narfell's ancient summoners,  your familiar can concentrate to maintain spells for you.
+Familiar Spell^DMG^209^Your familiar can cast a spell.
+Familiar Spell^EL^56^Your familiar can use one of your spells as  a spell-like ability.
+Familiar Spell^Und^25^You are so well acquainted with the spells you  have mastered that you can store the prepared spells in the mind of your  familiar.
+Far Horizons^RD^155^By dedicating yourself to the philosophies of  Fharlanghn, you have become a more world-wise and capable traveler.
+Far Shot^PH^94^You can get greater distance out of a ranged  weapon.
+Fast Healing^Dr^70^You heal your wounds very quickly.
+Fast Healing^EL^56^You heal your wounds very quickly.
+Fast Wild Shape^CD^81^You assume your wild shape faster and more easily  than you otherwise could.
+Fast Wild Shape^Gh^32^You can assume your wild shape faster and more  easily than you normally could.
+Fast Wild Shape^MW^22^You assume your wild shape faster and more easily  than you otherwise could.
+Faster Healing^CW^98^You recover faster than normal.
+Faster Healing^MW^22^You recover faster than others do.
+Favored Critical^MW^23^You know how to hit your favored enemies where  it hurts.
+Favored in House^ECS^53^You are a member of one of the dragonmarked  mercantile houses and wield some influence in that house.
+Favored of the Companions^BE^43^You swear allegiance to the Talisid or one of  the Five Companions, the paragons of the guardinals, and in exchange gain  power to act on their behalf.
+Favored of the Zulkirs^PG^176^Through your position of prestige among the  Red Wizards, you have gained access to secrets of evil magic known to few  outside the zulkirs themselves.
+Favored Power Attack^CW^98^You are able to deal more damage against your  favored enemies.
+Fearless^PG^38^You are a stranger to fear.
+Fearless Destiny^RD^152^Your grand destiny allows you to avoid death.
+Fearsome and Fearless^OA^62^You claim descent from the first Akodo, the  paragon of samurai virtue.
+Feign Weakness^SF^6^You capitalize on your foe's perceptions of  your unarmed status.
+Fell Animate^LM^26^Living foes slain by your spell may rise as  zombies.
+Fell Drain^LM^27^Living foes damaged by your spell also gain  a negative level.
+Fell Frighten^LM^27^Living foes damaged by your spell are also shaken.
+Fell Shot^XPH^46^You can strike your foe with a ranged weapon  as if making a touch attack.
+Fell Weaken^LM^27^Living foes damaged by your spell are also weakened.
+Feral Animal Companion^CR^20^You can enslave a feral animal and adopt it  as your animal companion.
+Fiendish Bloodline^Rac^163^Some of your latent abilities, inherited from  an unusually powerful fiendish ancestor, have matured.
+Fiendish Heritage^PlH^39^You are descended from creatures native to the  Lower Planes.
+Fiendish Summoning Specialist^PlH^39^You can select from a larger number of options  when summoning evil creatures.
+Fiery Spell^Sa^49^Your fire magic is bolstered, further scorching  your enemies.
+Filth Eater^Sh^157^You are highly resistant to the effects of disease  and can usually eat spoiled food without suffering ill effects.
+Final Strike^SS^34^Your death throes are destructive.
+Fine Wild Shape^EL^56^You can wild shape into animals of Fine size.
+Fire Heritage^PlH^39^You are descended from creatures native to the  Elemental Plane of Fire.
+Fist of the Heavens^BE^43^Your stunning attack is empowered by celestial  might.
+Fists of Iron^CW^99^You have learned the secrets of imbuing your  unarmed attacks with extra force.
+Fists of Iron^OA^62^You have learned the secrets of imbuing your  unarmed attacks with extra force.
+Fists of Iron^SF^6^You have learned the secrets of imbuing your  unarmed attacks with extra force.
+Flay Foe^CR^20^You are skilled at flaying the flesh from your  enemy's bones.
+Fleet of Foot^CW^99^You run nimbly, able to turn corners without  losing momentum.
+Fleet of Foot^DD^50^The deity runs so nimbly that it can turn corners  without losing momentum.
+Fleet of Foot^PG^38^You are extraordinarily swift.
+Fleet of Foot^SaS^39^You run so nimbly that you can turn corners  without losing momentum.
+Flensing Strike^ECS^53^You have studied a martial style practiced by  monks devoted to the Mockery, which has taught you to cut your opponent's  skin in a very painful way.
+Flick of the Wrist^CW^99^With a single motion, you can draw a light weapon  and make a devastating attack.
+Flick of the Wrist^RW^150^With a single motion, you can draw a light weapon  and make a devastating attack.
+Flick of the Wrist^SaS^39^With a single motion, you can draw a light weapon  and make a devastating attack.
+Fling Ally^RS^139^You can launch your comrades into the air as  if they were thrown weapons.
+Fling Enemy^RS^140^When you're wrestling a foe, you can lift him  into the air and hurl him.
+Fling Enemy^SS^34^You can pick up an opponent and fling it.
+Flyby Attack^MM^303^The creature can attack on the wing.
+Flyby Attack^MM2^18^The creature can attack on the wing.
+Flyby Attack^MM3^206^A creature with this feat can attack on the  wing.
+Flyby Attack^Mon^9^The creature can attack on the wing.
+Flyby Attack^MW^23^You attack while on the wing.
+Flyby Breath^DCS^85^You can employ your breath weapon in a high-speed  attack pass.
+Flying Fish Leap^Sto^92^You can hurl yourself out of the water with  ease.
+Flying Kick^CW^99^You literally leap into battle, dealing devastating  damage.
+Flying Kick^OA^62^You literally leap into battle, dealing devastating  damage.
+Focused Antimagic^LoM^45^A beholder with this feat can focus the antimagic  of its central eye to target a single person or object.
+Focused Mind^RW^151^When you have the opportunity to concentrate  on a task, you usually do very well at it.
+Focused Shield^RS^140^Your mental focus makes you more adept at using  your shield.
+Focused Sunder^XPH^46^You can sense the stress points on others' weapons.
+Foe Hunter^FRCS^34^In lands threatened by evil nonhumans, many  warriors learn ways to fight effectively against these creatures.
+Foe Hunter^Gh^32^You have been trained in the methods of fighting  various kinds of yuan-ti.
+Foe Hunter^PG^38^In a land threatened by fierce raiders, you  have learned to fight effectively against certain foes.
+Foe Specialist^MH^26^You are trained at how to damage a particular  type of foe.
+Foot and Fist Mastery^OA^80^You have mastered the martial arts style of  'Foot and Fist' -- a hard form emphasizing strikes with the hands and feet.
+Force of Personality^CAd^109^You have cultivated an unshakable belief in  your self-worth.
+Force of Will^XPH^46^You are able to resist psionic attacks with  extreme force of will.
+Forceful Staff Style^Gh^32^You can stun people with your quarterstaff and  push them around after you stun them.
+Forest Gnome Phantasist^Rac^163^You can protect your forest home with a variety  of phantasms and patterns to befuddle your foes.
+Forester^FRCS^35^You are knowledgeable about the secrets of the  forest and wise in its ways.
+Forester^PG^39^You are one with Faerun's mighty forests.
+Forge Epic Ring^EL^56^You can craft magic rings of epic power.
+Forge Ring^PH^94^You can create magic rings, which have varied  magical effects.
+Forgeheart^PG^39^Because you are inured to the hellish heat of  your homeland, you are resistant to blasts of fire that would damage other  creatures.
+Forked Tongue^SK^145^You speak with a honeyed voice that bends listeners  to your will.
+Formation Expert^CW^110^You are trained at fighting in ranks and files.
+Fortify Spell^CAr^80^You cast spells that more easily penetrate spell  resistance.
+Fortify Spell^UE^43^You can cast spells that easily penetrate spell  resistance.
+Freezing the Lifeblood^CW^99^You can paralyze a humanoid opponent with an  unarmed attack.
+Freezing the Lifeblood^OA^62^You can paralyze a humanoid opponent with an  unarmed attack.
+Freezing Touch^Gh^33^Your touch is supernaturally cold.
+Frightful Moan^Gh^33^You can unleash a moan that panics creatures  near you.
+Frightful Presence^Dr^106^Like a dragon, your mere presence can terrify  those around you.
+Frightful Presence^Gh^33^Your very presence can cause others to be stricken  with fear.
+Frostfell Prodigy^Fr^48^You gain additional bonus spells in cold regions.
+Frozen Berserker^Fr^48^When you enter your barbarian rage, your body  becomes infused with cold energy.
+Frozen Magic^Fr^48^Your cold spells are more powerful when you  cast them in a cold region.
+Frozen Wild Shape^Fr^48^You can assume the form of magical beasts with  the cold subtype.
+Full Manifestation^Gh^33^You can manifest fully when you would otherwise  be forced to be incorporeal.
+Furious Charge^PG^39^Your people are known for their love of battle,  and they rarely waste time in meeting a foe blade-to-blade.
+Gap of the Serpent^SS^35^You can swallow larger creatures than normal.
+Gape of the Serpent^SK^146^Like a snake, you can stretch your mouth to  an outlandish extent to accommodate immense prey.
+Gargantuan Wild Shape^EL^56^You can wild shape into animals of Gargantuan  size.
+Gatekeeper Initiate^ECS^54^You have been trained in the ancient druidic  tradition of the Gatekeepers, founded originally to ward off an extraplanar  assault by aberrations.
+Genie Lore^Rac^163^You have studied centuries of Calishite lore  regarding geniekind.
+Gestalt Anchor^RE^112^Your strong bond to your quori spirit allows  you and your kalashtar allies to move and act as a fluid unit.
+Ghost Attack^XPH^46^Your deadly strikes against incorporeal foes  always hit their mark.
+Ghost Flight^Gh^33^Your fully manifested ghost body can fly.
+Ghost Glide^Gh^33^Your fully manifested ghost body can slowly  fly.
+Ghost Hand^Gh^33^You can move small objects in a limited manner  when you are a ghost.
+Ghost Healing^Gh^33^You can transfer some of your own ectoplasm  to another ghost to heal it.
+Ghost Ride^Gh^33^You can hide within the physical body of a living  creature, perceiving the world through its senses, but without the ability  to control the host.
+Ghost Scarred^LM^27^You are adept at fighting incorporeal undead.
+Ghost Smiting^Gh^34^You can use your smite ability to smite ghosts.
+Ghostly Grasp^LM^27^You can handle corporeal objects even while  corporeal.
+Ghost-Touch Spell^Gh^34^You know how to tune your damaging spells to  affect ghosts without harming other creatures.
+Giantbane^CW^111^You are trained in fighting foes larger than  you are.
+Giant's Toughness^MW^23^You are amazingly tough.
+Gift of Discernment^PG^176^You can rely on your conscience to steer you  away from evil deeds.
+Gift of Faith^BE^43^You have an unusual capacity to trust in divine  providence working all things for the good.
+Gift of Grace^BE^43^You can improve the saving throws of your allies  by sharing some of your divine grace.
+Gift of Tongues^Gh^34^You have an intuitive talent for learning languages.
+Gift of Tongues^Rac^163^You have an intuitive talent for learning languages.
+Gifted General^OA^62^Your ancestor Daidoji Yurei, an ancient daimyo  of the Daidoji family, was a gifted general -- the first in Rokugan to use  guerilla warfare.
+Glorious Weapons^CD^82^You can channel positive or negative energy  to imbue your allies' weapons with an alignment.
+Gnoll Ferocity^RW^151^You embody the savage ferocity of your people.  When you fly into a berserk rage, you can bite opponents with your powerful  jaws.
+Gnome Foe Killer^RS^140^Your battle techniques against your racial foes  improve.
+Goad ^CAd^109^You are skilled at inducing opponents to attack  you.
+Goad^MH^26^You are skilled at inducing opponents to attack  you.
+Goad^RS^140^You are skilled at inducing opponents to attack  you.
+Godsight^LE^8^You enjoy the special blessing of a deity of  the Mulhorandi pantheon, who has granted you unerring powers of perception.
+Gold Dwarf Dweomersmith^Rac^163^You have learned the secrets of gold dwarf magic  that creates or enhances weapons.
+Gorebrute Elite^RE^114^Your mighty charge attack can knock down foes.
+Graft Flesh^FF^207^You can apply a certain type of graft to other  living creatures or to yourself.
+Graft Flesh^LM^27^You can apply a certain type of graft to other  living creatures or to yourself.
+Graft Flesh^LoM^216^You can apply a certain type of graft to other  living creatures or to yourself.
+Graft Illithid Flesh^Und^25^You can apply illithid grafts to other living  creatures or to yourself.
+Graft Yuan-Ti Flesh^SK^146^You can apply yuan-ti grafts to other living  creatures or to yourself.
+Grand Malevolence^Gh^34^You can possess multiple creatures and control  their actions.
+Grappling Block^OA^63^You can catch and pin an opponent's weapon with  your bare hands.
+Grass Trekker^SS^35^You are adapted to a plains environment.
+Great Bite^ECS^54^You know how to hit where it hurts with your  fangs.
+Great Captain^Sto^92^You are a master pilot and battle leader; your  crew anticipates your every command and leaps to do your bidding.
+Great Charisma^EL^56^Your powers of persuasion and leadership are  greater than normal.
+Great Cleave^PH^94^You can wield a melee weapon with such power  that you can strike multiple times when you fell your foes.
+Great Constitution^EL^56^Your health and endurance are greater than normal.
+Great Crafter^OA^63^Your ancestor, Kaiu, was the first and greatest  blacksmith of the Crab clan.
+Great Dexterity^EL^56^Your agility and coordination are greater than  normal.
+Great Diplomat^OA^63^You are descended from Asako, one of the companions  of the first Phoenix, a great healer, diplomat, and warrior.
+Great Flyby Attack^SS^35^You can make multiple flyby attacks in a round.
+Great Fortitude^PH^94^You are tougher than normal.
+Great Intelligence^EL^56^Your powers of reason and learning are greater  than normal.
+Great Rend^ECS^54^You know how to hit where it hurts with your  claws.
+Great Smiting^DMG^209^Your smite attacks are much more powerful than  normal.
+Great Smiting^EL^56^Your smite attacks are much more powerful than  normal.
+Great Stag Berserker^UE^43^Your fighting style employs aggressive charges  in the manner of your lodge's totem animal.
+Great Stamina^OA^63^Your ancestor, Daidoji Masashigi, gave his life  defending the Kaiu Wall alongside the Crab at the Battle of the Landbridge.
+Great Strength^EL^57^Your muscle and physical power are greater than  normal.
+Great Teamwork^OA^63^You are a descendant of Hida Banuken, the Crab  champion who oversaw the construction of the Kaiu Wall during the battle  of the Cresting Wave.
+Great Wisdom^EL^57^Your willpower and insight are greater than  normal.
+Greater Ki Shout^OA^63^Your ki shout can panic your opponents.
+Greater Cold Focus^Fr^48^Your cold spells are now even more potent than  before.
+Greater Dragonmark^ECS^54^You have a greater dragonmark.
+Greater Heavy Armor Optimization^RS^141^You have mastered the use of heavy armor, maximizing  its protective qualities while moving more easily in it.
+Greater Kiai Shout^CW^99^You kiai shout can panic your opponents.
+Greater Legacy^WL^14^You awaken the most powerful abilities of a  specific item of legacy.
+Greater Manyshot^XPH^47^You are skilled at firing many arrows at once,  even at different opponents.
+Greater Mighty Roar^SS^35^You unsettle opponents with a dreadful roar  as you attack.
+Greater Multigrab^SK^146^You can grapple enemies effortlessly with your  natural weapons.
+Greater Multigrab^SS^35^You can grapple enemies effortlessly with your  natural weapons.
+Greater Multiweapon Fighting^DD^50^A deity with three or more hands can fight with  a weapon in each hand.
+Greater Multiweapon Fighting^EL^69^A creature with three or more hands can fight  with a weapon in each hand.
+Greater Multiweapon Fighting^SS^35^A creature with three or more arms can fight  with a weapon in each hand. The creature can make up to three attacks per  round with each extra weapon.
+Greater Power Penetration^XPH^47^Your powers are especially potent at breaking  through power resistance.
+Greater Power Specialization^XPH^47^You deal more damage with your powers.
+Greater Powerful Charge^ECS^54^You can charge with extra force.
+Greater Powerful Charge^MH^27^You can charge with extra force.
+Greater Psionic Endowment^XPH^47^You can use meditation to focus your powers.
+Greater Psionic Fist^XPH^47^You can charge your unarmed strike or natural  weapon with additional damage potential.
+Greater Psionic Shot^XPH^47^You can charge your ranged attacks with additional  damage potential.
+Greater Psionic Weapon^XPH^47^You can charge your melee weapon with additional  damage potential.
+Greater Resiliency^CW^99^Your extraordinary resilience to damage increases.
+Greater Resiliency^MW^23^Your extraordinary resilience to damage increases.
+Greater Shifter Defense^ECS^54^By delving deeper into your shifter heritage,  you develop the ability to ignore some damage from every attack.
+Greater Spell Focus^DD^50^The deity chooses a school of magic to which  it already has applied the Spell Focus feat.
+Greater Spell Focus^EL^69^Choose a school of magic, such as illusion.  Your spells of that school are far more potent than normal.
+Greater Spell Focus^FRCS^35^Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal.
+Greater Spell Focus^PH^94^Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal.
+Greater Spell Focus^TB^40^Choose a school of magic to which you already  have applied the Spell Focus feat. Your spells of that school are even more  potent than normal.
+Greater Spell Penetration^DD^50^The deity's spells are especially potent, defeating  spell resistance more readily than normal.
+Greater Spell Penetration^EL^69^Your spells are especially potent, defeating  spell resistance more readily than normal.
+Greater Spell Penetration^FRCS^35^Your spells are especially potent, defeating  spell resistance more readily than normal.
+Greater Spell Penetration^PH^94^Your spells are remarkably potent, breaking  through spell resistance more readily than normal.
+Greater Spell Penetration^TB^40^Your spells are especially potent, breaking  through spell resistance more readily than normal.
+Greater Two-Weapon Defense^CW^100^When fighting with two weapons, your defenses  are extraordinarily strong.
+Greater Two-Weapon Fighting^DD^50^The deity is a master at fighting two-handed.
+Greater Two-Weapon Fighting^EL^69^You are a master at fighting two-handed.
+Greater Two-Weapon Fighting^MW^23^You are a master at fighting two-handed.
+Greater Two-Weapon Fighting^PH^95^You are a master at fighting two-handed.
+Greater Weapon Focus^PH^95^Choose one type of weapon for which you have  already selected Weapon Focus. You can also choose unarmed strike or grapple  as your weapon for purposes of this feat. You are especially good at using  this weapon.
+Greater Weapon Specialization^PH^95^Choose one type of weapon for which you have  already selected Weapon Specialization You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon.
+Greater Witchlight^Gh^34^Your witchlight can last longer, become hotter,  or give off more light.
+Green Bond^Gh^35^You have an empathic bond with one of the spirit  trees around Manifest
+Green Ear^CAd^110^Your bardic music can affect plant creatures.
+Green Ear^SaS^39^Your bardic music and virtuoso performance affect  plants and plant creatures.
+Greenbound Summoning^LE^8^You are learned in a long-forgotten manner of  summoning once practiced by Eaerlanni elves of the High Forest.
+Greensinger Initiate^ECS^54^You have embraced the druidic traditions of  the Greensingers, a chaotic Eldeen Reaches sect with close ties to the fey.
+Grell Alchemy^LoM^114^A creature that has this feat has studied the  alien and disturbing arcane lore of the grell, and understands the magical  and physical laws by which their spells and devices function.
+Grim Visage^Rac^163^Your eyes have seen a lot, and now they show  everyone that you aren't to be trifled with. Even glib people stammer in  your presence.
+Grizzly's Claws^CD^82^You can grow claws as sharp as those of a bear.
+Group Inspiration^CAd^192^Your bardic powers can inspire more allies than  normal.
+Group Inspiration^EL^57^You can inspire competence or greatness in more  than one ally simultaneously.
+Guardian Spirit^CAr^80^Your watchful spirit is more capable than normal.
+Guerrilla Scout^HB^97^You know how to use your senses to greater effect.
+Guerrilla Warrior^HB^97^You know how to move stealthily, even when armored.
+Halruuan Adept^ShS^20^You have studied the old cooperative spellcasting  traditions of Halruaa, and you are well-versed in the rites and arcana of  Halruuan magic.
+Hammer Fist^Rac^164^You are trained in an unarmed fighting style  that emphasizes a two-handed strike.
+Hammer's Edge^CW^113^You are a master of the style of fighting with  a hammer and sword at the same time.
+Hamstring^CW^100^You can wound your opponents' legs, hampering  their movement.
+Hamstring^SaS^39^You can wound an opponent's legs, hampering  his or her movement.
+Hand of Tyr^CSW^145^You have sacrificed your right hand to Tyr,  the Maimed God, proving your resilience and strength of spirit.
+Hands of a Healer^BE^43^You can heal more damage than normal by laying  on hands.
+Hardened Flesh^LM^27^Undead you raise or create can better handle  themselves in a fight.
+Harem Trained^Rac^164^You have been trained to serve as a jhasin (if  male) or jhasina (if female) and are well versed in song, music, dance,  art, the recitation of great literature, the art of massage, and other duties  of the harem.
+Haunting Appearance^Gh^35^You can make your ghost body assume a terrifying  appearance that can frighten observers.
+Haunting Melody^ECS^54^You can use your music to inspire fear.
+Haunting Voice^Gh^35^You can make your voice originate from another  location.
+Hawk's Vision^CAd^114^You can improve your visual acuity.
+Headlong Rush^Rac^164^You charge your foes with immense force, heedless  of your own safety.
+Healing Factor^ECS^55^When your current period of shifting ends, you  heal a limited amount of damage.
+Healing Factor^MM3^150^When your current period of shifting ends, you  heal a limited amount of damage.
+Healing Flames^Rac^164^You can draw energy from open flames to heal  yourself.
+Hear the Unseen^CAd^110^Your sense of hearing is so acute that you can  partially pinpoint an opponent's location by sound, allowing you to strike  even if the opponent is concealed or displaced.
+Heat Endurance^Sa^50^Either as a result of growing up in the waste,  or by training your body and mind to ignore the effects of searing heat,  you can exist with ease in high-temperature environments.
+Heat Tolerance^ShS^20^You are used to living in hot, humid conditions.
+Heavy Armor Optimization^RS^141^You have trained extensively in heavy armor,  and you have learned to take advantage of the protection it offers.
+Heavy Lithoderms^RS^141^You have stony growths on your skin that afford  you protection against attacks.
+Heighten Breath^Dr^70^Your breath weapon is even more deadly than  normal.
+Heighten Spell^PH^95^You can cast a spell as if it were a higher-level  spell than it actually is.
+Heighten Spell-Like Ability^CAr^80^You can use a spell-like ability as if it were  a higher spell-level equivalent than it actually is.
+Heighten Turning^DF^20^You can affect more powerful undead with your  turning or rebuking attempts.
+Heighten Turning^FP^214^You can affect more powerful undead with your  turning or rebuking attempts.
+Heighten Turning^Gh^35^You can affect more powerful undead with your  turning or rebuking attempts.
+Heighten Turning^LM^27^You can affect more powerful undead with your  turning or rebuking attempts.
+Hellbound Knight^CR^23^A devoted disciple of the Nine Hells, you have  sworn to strike down creatures that oppose law and threaten tyranny.
+Heroic Destiny^RD^152^You have a destiny to fulfill.
+Heroic Metamagic^RE^109^In times of great need, you can call upon a  heroic reserve of power to strengthen your spells.
+Heroic Spirit^ECS^55^You have a larger reservoir of luck than the  average hero.
+High Sword Low Axe^CW^113^You have mastered the style of fighting with  a sword and axe at the same time.
+Highborn Drow^Rac^164^You have learned how to tap into the advanced  magical abilities of your drow noble heritage.
+Highborn Drow^Und^25^You have learned how to tap into the advanced  magical abilities available to you through your drow noble heritage.
+Hin Wandermage^Rac^164^You have a natural affinity for spells that  take you from place to place.
+Hindering Song^EL^57^Your bardic music interferes with opposing spellcasters.
+Hold the Line^CW^100^You are trained in defensive techniques against  charging opponents.
+Hold the Line^DD^51^The deity is trained in defensive techniques  against charging opponents.
+Hold the Line^SF^7^You are trained in defensive techniques against  charging opponents.
+Hold the Line^ShS^20^You are trained in defensive techniques against  charging opponents.
+Holy Ki Strike^BE^44^Your unarmed attacks deal extra damage to evil  creatures.
+Holy Radiance^BE^44^You can increase the intensity of the light  surrounding you to damage undead creatures.
+Holy Strike^CD^89^Your attacks deal great damage to evil creatures.
+Holy Strike^EL^57^Your attacks deal great damage to evil creatures.
+Holy Subdual^BE^44^You can turn bonus damage into nonlethal damage.
+Honest Merchant^OA^63^Your ancestor, Bayushi Tesaguri, was the son  of Bayushi Junzen, Scorpion Clan Champion.
+Honor-Bound^DCS^86^Keeping your word and upholding your honor is  of great importance to you.
+Horrific Appearance^Gh^35^You can blast creatures with your simple appearance.
+Horse Nomad^FRCS^35^You have been raised in a culture that relies  upon riding and shooting for survival.
+Horse Nomad^PG^39^You have been raised in a culture that relies  upon riding and shooting.
+Hostile Mind^XPH^47^Your mind recoils violently against those who  use psionics against you.
+Hover^MM^304^The creature can come to a halt in midair.
+Hover^MM2^18^The creature can halt its forward motion while  flying, regardless of maneuverability.
+Hulking Brute ^DCS^86^You possess a truly impressive stature.
+Human Heritage^RD^152^Your human heritage is more prominent than in  others of your kind.
+Hurling Charge^MH^27^You are trained in using thrown weapons as part  of a charge attack.
+Hyena Tribe Hunter^ShS^20^You have learned the secrets of hunting from  the hyena that roams the lands where your tribe wanders.
+Iaijutsu Master^OA^63^You are not only descended from Kakita, the  greatest duelist ever to have lived, but you share a karmic tie to his spirit.
+Ice Harmonics^Fr^48^Your summon spells work better in the frostfell  if you summon native creatures.
+Ice Troll Berserker^UE^44^When raging, your skin becomes very thick and  tough like the ice trolls that plague parts of your homeland.
+Icy Calling^Fr^48^You can use your voice to shatter ice.
+Ignore Material Components^EL^57^You need not use any material components in  casting spells.
+Imprint Stone^XPH^47^You can create power stones to store psionic  powers.
+Improve Bull Rush^PH^95^You know how to push opponents back.
+Improved Aid^OA^63^You are descended from Hida Tadaka, the great  Crab daimyo who gave his life to avert a war between his clan and the Lion.
+Improved Alignment-Based Casting^EL^57^Your spells of a particular alignment are more  powerful than normal.
+Improved Arrow of Death^EL^57^Your arrows of death are harder to resist.
+Improved Assume Supernatural Ability^SS^35^You gain skills using a supernatural ability  of an assumed form.
+Improved Aura of Courage^EL^57^Your aura of courage is stronger than normal.
+Improved Aura of Despair^EL^57^Your aura of despair is wider than normal.
+Improved Buckler Defense^CW^100^You can attack with an off-hand weapon while  retaining a buckler's shield bonus to your Armor Class.
+Improved Cohort^HB^98^You attract a more powerful cohort than you  normally would.
+Improved Cold Endurance^Fr^48^Your training and natural hardiness have improved  your natural resistance to cold temperatures.
+Improved Combat Casting^CAr^192^You heighten your ability to cast spells while  threatened without fear of being attacked.
+Improved Combat Casting^EL^57^You can cast spells while threatened without  fear of being attacked.
+Improved Combat Expertise^CW^100^You have mastered the art of defense in combat.
+Improved Combat Reflexes^EL^57^You can respond to any number of opponents who  let their defenses down.
+Improved Control Visage^Gh^35^You can change your ghost form's appearance.
+Improved Cooperative Metamagic^PG^136^Your ability to enhance an ally's spell during  casting is expanded.
+Improved Counterspell^EL^70^You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency.
+Improved Counterspell^FRCS^35^You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency.
+Improved Counterspell^PH^95^You understand the nuances of magic to such  an extent that you can counter your opponent's spells with great efficiency.
+Improved Critical^PH^95^Choose one type of weapon. With that weapon,  you know how to hit where it hurts.
+Improved Damage Reduction^ECS^55^You gain damage reduction or improve your existing  damage reduction.
+Improved Darkvision^EL^58^Your ability to see in the dark is greater than  normal.
+Improved Death Attack^EL^58^Your death attack is harder to overcome.
+Improved Deflection^Gh^35^You are adept at deflecting things before they  strike you.
+Improved Disarm^PH^95^You know how to disarm opponents in melee combat.
+Improved Diversion^CAd^110^You can create a diversion to hide quickly and  with less effort.
+Improved Draconian Breath Weapon^DCS^86^You have mastered your draconic heritage and  improved on your innate breath weapon.
+Improved Elemental Heritage^PlH^40^You have manifested an even stronger tie to  your elemental ancestor, resulting in a minor resistance to elemental effects.
+Improved Elemental Wild Shape ^DMG^209^You can take the form of a larger variety of  elementals than normal.
+Improved Elemental Wild Shape^EL^58^You can take the form of a greater variety of  elementals than normal.
+Improved Energy Drain^LM^27^You draw extra power from your energy-drained  victims.
+Improved Energy Resistance^Rac^164^Choose one form of energy to which you have  a natural (not spell- or item-generated) resistance. Your inherent resistance  to this kind of energy is more effective than normal.
+Improved Familiar^CW^100^This feat allows spellcasters to acquire a new  familiar from a nonstandard list, but only when they could normally acquire  a new familiar.
+Improved Familiar^FRCS^35^So long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list.
+Improved Familiar^PG^39^Refer to the Improved Familiar feat description  on page 200 of the Dungeon Master's Guide.
+Improved Familiar^Rac^165^See the discussion of the Improved Familiar  feat in Chapter 1 of the Forgotten Realms Campaign Setting. Table A-5 shows  additional improved familiars from this book that are available with this  feat.
+Improved Familiar^SK^146^Refer to the Improved Familiar feat description  in the Dungeon Master's Guide.
+Improved Familiar^TB^40^As long as you are able to acquire a new familiar,  you may choose your new familiar from a nonstandard list.
+Improved Favored Enemy^CW^101^You know how to hit your favored enemies where  it hurts.
+Improved Favored Enemy^DMG^210^Gain bonuses against favored enemies.
+Improved Favored Enemy^EL^58^You gain bonuses against favored enemies.
+Improved Feint^PH^95^You are skilled at misdirecting your opponent's  attention in combat.
+Improved Fiendish Servant^CR^20^You gain the service of a powerful fiendish  animal servitor.
+Improved Flight^CAd^110^You gain greater maneuverability when flying  than you would normally have.
+Improved Flight^MW^23^You gain greater maneuverability when flying  than you would normally have.
+Improved Flight^Rac^165^You gain greater maneuverability when flying  than you would normally have.
+Improved Flight^RW^151^You have gained greater maneuverability when  flying than you would normally have.
+Improved Flight Item (Item Creation)^Sh^157^You have learned to make use of the manifest  zone in Sharn to craft magic items that grant superior flight.
+Improved Flyby Attack^EL^70^The creature can attack on the wing with increased  mobility.
+Improved Flyby Attack^SS^36^You can attack on the wing with increased mobility.
+Improved Fortification^ECS^55^You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits.
+Improved Fortification^MM3^192^You improve your warforged fortification, gaining  immunity to sneak attacks and extra damage from critical hits.
+Improved Frosty Touch^Fr^49^Your frosty touch causes more cold damage.
+Improved Ghost Flight^Gh^35^Your ghost body can fly rapidly.
+Improved Grapple ^DD^51^The deity is skilled in martial arts that emphasize  holds and throws.
+Improved Grapple^OA^63^You are skilled in martial arts that emphasize  holds and throws.
+Improved Grapple^PH^95^You are skilled at grappling opponents.
+Improved Grapple^UE^44^You are skilled in martial arts that emphasize  holds and throws.
+Improved Heat Endurance^Sa^50^You can survive even in the most extreme natural  heat conditions.
+Improved Heighten Spell^EL^58^You can cast a spell at any level above its  own.
+Improved Initiative^PH^96^You can react more quickly than normal in a  fight.
+Improved Ki Strike^EL^58^You can strike opponents with great damage reduction.
+Improved Levitation^Rac^165^You have learned to use part of your levitate  spell-like ability at a time, allowing multiple uses with a shorter duration.
+Improved Levitation^Und^25^You have learned to use only part of your levitate  spell-like ability at a time, allowing multiple uses with shorter duration.
+Improved Low Blow^Rac^165^You are especially good at using the Low Blow  feat.
+Improved Low-Light Vision^EL^58^The range of your low-light vision is greater  than normal.
+Improved Maneuverability^Dr^70^Your maneuverability in flight improves.
+Improved Manifestation^EL^58^You can manifest psionic powers more powerful  than the normal limits of manifestation.
+Improved Manifestation^XPH^34^You increase your power point reserve.
+Improved Manyshot^EL^58^You can fire even more arrows as a single attack  against a nearby target.
+Improved Metamagic^DMG^210^You can cast spells using metamagic feats more  easily than normal.
+Improved Metamagic^EL^59^You can cast spells using metamagic feats more  easily than normal.
+Improved Metapsionics^XPH^34^You can manifest powers using metapsionic feats  more often than normal.
+Improved Mounted Archery^CW^101^You can make ranged attacks from a mount almost  as well as you can from the ground.
+Improved Multiattack^Dr^70^You are particularly adept at using all your  natural weapons at once.
+Improved Multiattack^EL^70^The creature is particularly adept at using  all its natural weapons at once.
+Improved Multiattack^SS^36^You are particularly adept at using all your  natural weapons at once.
+Improved Multiweapon Fighting^DD^51^A deity with three or more hands can fight with  a weapon in each hand.
+Improved Multiweapon Fighting^EL^70^A creature with three or more hands can fight  with a weapon in each hand.
+Improved Multiweapon Fighting^SS^36^You are expert at fighting with a weapon in  each of your three or more hands. You can make up to two attacks per round  with each off-hand weapon.
+Improved Natural Armor^MM^304^The creature's natural armor is thicker and  harder than that of other of its kind.
+Improved Natural Armor^MM3^206^The natural armor of a creature with this feat  is thicker and harder than normal for its kind.
+Improved Natural Armor^Rac^165^Your skin is even tougher than that of most  of your kind.
+Improved Natural Attack^ECS^55^One of a creature's natural attacks is more  dangerous than its type and size would otherwise indicate.
+Improved Natural Attack^MM^304^The creature's natural attacks are more dangerous  than its size and type would otherwise dictate.
+Improved Natural Attack^MM3^206^The natural attacks of a creature with this  feat are more dangerous than its size and type would otherwise dictate.
+Improved Outer Planar Heritage^PlH^40^Your ancestral tie to the Outer Planes manifests  as an ability to deal damage with your natural attacks as if they matched  the alignment of your ancestors.
+Improved Overrun^PH^96^You are skilled at knocking down opponents.
+Improved Overrun^SF^7^You are trained in knocking over opponents that  are smaller than you.
+Improved Paralysis^LM^27^You are better at paralyzing your victims.
+Improved Poltergeist Hand^Gh^36^You can move a large object at a distance when  you are a ghost.
+Improved Precise Shot^PH^96^Your ranged attacks can ignore the effects of  cover or concealment.
+Improved Psicrystal^XPH^47^You can upgrade your psicrystal.
+Improved Rapid Shot^CW^101^You are an expert at firing weapons with exceptional  speed.
+Improved Rapidstrike^Dr^70^You can make multiple attacks with a natural  weapon.
+Improved Resiliency^RE^119^You gain a construct's resistance to nonlethal  damage.
+Improved Resist Dragonfear^DCS^86^You are able to demonstrate great courage in  the presence of dragons.
+Improved Rock Hurling^RS^141^Your accuracy and effectiveness with thrown  rocks improves.
+Improved Scent^SS^36^You can detect and track creatures by smell  at greater distances than normal.
+Improved Shield Bash^DF^20^You can push opponents back by bashing them  with your shield.
+Improved Shield Bash^PH^96^You can bash with a shield while retaining its  shield bonus to your Armor Class.
+Improved Shieldmate^MH^27^You have an outstanding ability to protect those  near you with your shield.
+Improved Sigil (Aesh)^RD^152^You tap into your aesh power sigil to  gain enhanced accuracy with your favored melee weapons.
+Improved Sigil (Hoon)^RD^152^You tap into your hoon power sigil to  help survive deadly conditions.
+Improved Sigil (Krau)^RD^153^You tap into your krau power sigil to  augment the energy of your magical utterances.
+Improved Sigil (Naen)^RD^153^You tap into your naen power sigil to  see through illusions and resist language-based effects.
+Improved Sigil (Uur)^RD^153^You tap into your uur power sigil to  gain enhanced accuracy with ranged weapons.
+Improved Sigil (Vaul)^RD^153^You tap into your vaul power sigil to  resist mental effects.
+Improved Skirmish^CAd^192^Your combat mobility improves.
+Improved Smiting^CD^82^Your smite attacks deal more damage to specific  foes, and can damage creature with alignment-based damage reduction.
+Improved Snatch^Dr^71^You can make snatch attacks against bigger opponents  than other creatures can.
+Improved Snatch Spell^PG^136^When you take over a spell from another spellcaster,  you gain more control over its effect.
+Improved Sneak Attack^DMG^210^Your sneak attacks are more deadly than normal.
+Improved Sneak Attack^EL^59^Your sneak attacks are more deadly than normal.
+Improved Speed ^Dr^71^You are faster than others of your kind.
+Improved Spell Capacity^DMG^210^You can prepare spells that exceed the normal  limits of spellcasting.
+Improved Spell Capacity^Dr^71^You can prepare spells that exceed the normal  limits of spellcasting.
+Improved Spell Capacity^EL^59^You can prepare spells that exceed the normal  limits of spellcasting.
+Improved Spell Resistance^EL^60^Your innate resistance to magical effects increases.
+Improved Spellpool Access^PG^136^You can use your spellpool access to call spells  of greater than normal power.
+Improved Spit^SK^146^You can spit farther than normal.
+Improved Stunning Fist^DMG^210^Your stunning attack is more powerful.
+Improved Stunning Fist^EL^60^Your stunning attack is more powerful.
+Improved Sudden Strike^CAd^192^Your ability to strike unaware foes improves.
+Improved Sunder^DD^51^The deity is adept at placing its attacks precisely  where it wants them to land.
+Improved Sunder^EA^42^You are adept at placing your attacks precisely  where you want them to land.
+Improved Sunder^PH^96^You are skilled at attacking your opponents'  weapons and shields, as well as other objects.
+Improved Sunder^SF^7^You are adept at placing your attacks precisely  where you want them to land.
+Improved Swimming^CAd^110^You can swim faster than you normally could.
+Improved Swimming^MW^23^You swim faster than you normally could.
+Improved Toughness^CW^101^You are significantly tougher than normal.
+Improved Toughness^LM^27^You are significantly tougher than normal.
+Improved Toughness^MM3^207^A creature with this feat is significantly tougher  than normal.
+Improved Trip^PH^96^You are trained not only in tripping opponents  safely but also following through with an attack.
+Improved Turn Resistance^Gh^36^You are better able to resist the channeling  of positive or negative energy by clerics and similar classes.
+Improved Turn Resistance^LM^27^You have a better than normal chance to resist  turning.
+Improved Turn Resistance^SS^36^You have a better than normal chance to resist  turning.
+Improved Turning^PH^96^Your turning or rebuking attempts are more powerful  than normal.
+Improved Two-Weapon Defense^CW^101^You gain a significant defensive advantage while  fighting with two weapons.
+Improved Two-Weapon Fighting^PH^96^You are an expert in fighting two-handed.
+Improved Unarmed Strike^PH^96^You are skilled at fighting while unarmed.
+Improved Weapon Familiarity^CW^101^You are familiar with all exotic weapons common  to your people.
+Improved Weapon Familiarity^RS^141^You are familiar with all exotic weapons common  to your people.
+Improved Web^SS^36^You gain additional utility from your webs.
+Improved Whirlwind Attack^EL^60^You become a blurry whirlwind of attacks, striking  out at all enemies near your position.
+Incite Rage^EL^60^You can incite allies into a rage.
+Incorporeal Form^Gh^36^You can become incorporeal even when you would  otherwise be forced to manifest fully.
+Incorporeal Spell Targeting^Gh^36^You know how to cast your spells so they're  more likely to affect incorporeal creatures.
+Incorporeal Target Fighting^Gh^36^You know how to fight incorporeal creatures  in melee.
+Ineluctable Echo^UA^93^Those who use words of power around you hear  the sound of their own voices.
+Infernal Bargainer^Rac^165^You are comfortable making deals with powerful  entities from the Lower Planes.
+Infinite Deflection^EL^61^You can deflect an infinite number of projectiles.
+Inhuman Reach^LoM^180^Your arms elongate, allowing you to touch the  floor with your hands.
+Inhuman Vision^LoM^180^You possess the inhuman eyes of some strange  creature.
+Initiate of Ghaunadaur^CR^23^You have learned the dread secrets of the god  of oozes, slimes, jellies, and outcasts.
+Initiate of Gruumsh^CR^24^The singular eye of the great orc god Gruumsh  watches over you.
+Initiate of Kossuth^CR^24^You have faced the fierce elemental flame and  unlocked some of the secrets of Kossuth's church.
+Initiate of Loviatar^CR^24^With great pain comes great power. This and  other secrets you have learned from the church of Loviatar.
+Initiate of Loviatar^ShS^20^You have been initiated into the greatest secrets  of Loviatar's church.
+Initiate of Shar^CR^24^You have been initiated into the greatest secrets  of Shar's church.
+Initiate of Shar^CSW^145^You have been initiated into the greatest secrets  of Shar's church.
+Initiate of Varae^CR^25^You fervently worship Varae, the serpentine  goddess, and guard well the secrets of your faith.
+Innate Spell^CAr^80^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
+Innate Spell^FRCS^36^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
+Innate Spell^PG^39^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
+Innate Spell^TB^41^You have mastered a spell so thoroughly that  you can now use it as a spell-like ability.
+Inquisitor^XPH^48^You know when others lie.
+Inscribe Epic Runes^PG^136^You can inscribe runes of epic power.
+Inscribe Rune^FRCS^36^You can create magic runes that hold spells  until triggered.
+Inscribe Rune^PG^40^You can create magic runes that hold spells  until triggered.
+Inside Connection^RD^153^Choose a specific organization. You have strong  personal connections within that organization, as well as insight into its  membership.
+Insidious Magic^FRCS^36^You can use the Shadow Weave to make your spells  harder for Weave users to detect.
+Insidious Magic^PG^40^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
+Insightful^CAr^80^You possess a magical understanding of the workings  of arcane detection.
+Insightful Reflexes^CAd^110^Your keen intellect allows you an uncanny knack  for evading dangerous effects.
+Inspirational Leadership^HB^98^Your cohort and followers are exceptionally  faithful to your cause.
+Inspire Excellence^EL^61^You can improve the abilities of your comrades  through your performance.
+Inspire Spellpower^RS^141^You can use your bardic music to increase the  power of your allies' spells.
+Instant Reload^EL^61^Choose one type of crossbow, such as heavy crossbow.  You can fire that type of crossbow as fast as a bow.
+Instantaneous Rage^CW^102^You activate your rage instantly.
+Instantaneous Rage^MW^23^You activate your rage instantly.
+Intensify Spell^EL^61^You can cast spells with exceptionally great  effect.
+Intimidating Rage^CW^102^Your rage engenders fear in your opponents.
+Intimidating Rage^MW^24^Your rage engenders fear in your opponents.
+Intuitive Attack^BE^44^You fight by faith more than brute strength.
+Inured to Energy^SS^36^You can resist energy attacks more efficiently  than normal.
+Invest Armor^RS^141^You can charge your armor with additional protective  qualities.
+Investigate^ECS^55^You can use the Search skill to find and analyze  clues at the scene of a crime or a mystery.
+Investigator^PH^96^You have a knack for finding information.
+Involuntary Rage^SS^36^Extreme pain drives you berserk.
+Iron Mind^Rac^165^You are descended from duergar who escaped enslavement  by the illithids. The blood of these psionic-resistant former thralls runs  thick in your veins.
+Iron Will^PH^97^You have a stronger will than normal.
+Ironskin Chant^CAd^113^You can channel the power of your bardic music  to enable yourself to ignore minor injuries.
+Ironwood Body^RE^119^Your body is crafted with a layer of hard ironwood  that cushions blows.
+Irresistible Gaze^SK^146^Your gaze attack is more potent than normal.
+Irresistible Gaze^SS^37^Your gaze attack is more potent than normal.
+Item Reprieve^LE^8^You learn how to use items from a school of  magic previously prohibited to you.
+Jack of All Trades^CAd^110^You have picked up a smattering of even the  most obscure skills.
+Jack of All Trades^DD^51^The deity has picked up a smattering of even  the most obscure skills.
+Jack of All Trades^FP^214^You've picked up a smattering of even the most  obscure skills.
+Jack of All Trades^SaS^40^You've picked up a smattering of even the most  obscure skills.
+Jaws of Death^RE^119^Gnashing teeth and a powerful set of jaws allow  you to bite foes.
+Jergal's Pact^LE^8^You have made a bargain with Jergal, seneschal  to the god of death.
+Jester's Magic^CSW^145^You are a skilled master of magical jests, capable  of inciting audiences to laughter or lulling them to sleep.
+Jotunbrud^Rac^166^You are descended from the giants who ruled  the mountain-spanning empire of Ostoria in ages past, and possess a truly  impressive stature.
+Judged by Aurifar^Sa^50^Aurifar, the Caliph of the Sky, has judged you,  and he shows you special favor.
+Jungle Stamina^Rac^166^You are acclimated to the disease-ridden jungles  of southwestern Faerun.
+Kalashtar Thoughtshifter^RE^118^You have learned to control your mind blade  for maximum impact in battle.
+Kami's Intuition^OA^63^You are descended from Shinjo, the first Unicorn,  the kindest and most compassionate of the kami.
+Karmic Strike^CW^102^You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you.
+Karmic Strike^OA^63^You have learned to strike when your opponent  is more vulnerable -- the same instant your opponent strikes you.
+Karmic Twin^OA^64^You are descended from Bayushi, the first Scorpion,  whos love for his daughter proved his final downfall.
+Keen Intellect^OA^64^You are descended from Agasha, the founder of  the original Dragon shugenja school, a shugenja known for her keen intellect  and powers of observation.
+Keen Strike^EL^61^Your unarmed strikes become as sharp as blades.
+Ki Shout^OA^64^You can bellow forth a ki-empowered shout  that strikes terror into your enemies.
+Kiai Shout^CW^102^You can bellow forth a shout that strikes terror  into your enemies.
+Kihu-Sherem Guardian^Gh^36^You are one of the Kihu-Sherem, magically altered  in the womb to allow you to better protect the sorcerers of your homeland.
+Killoren Ancient^RW^151^You favor the killoren aspect of the ancient.
+Killoren Destroyer^RW^151^You favor the killoren aspect of the destroyer.
+Killoren Hunter^RW^151^You favor the killoren aspect of the hunter
+Knifefighter^PG^40^You're an expert at using weapons in a grapple.
+Knight of Stars ^BE^44^You swear allegiance to the Court of Stars,  the paragons of the eladrin, and in exchange gain power to act on their  behalf.
+Knight Training^ECS^56^You are part of a knightly order that combines  the divine calling of the paladin class with another form of training.
+Knockback^RS^142^By putting your bulk behind a blow, you can  push your enemy backward.
+Knock-Down^DD^51^The deity's mighty blows can knock foes off  their feet.
+Knock-Down^SF^7^Your mighty blows can knock foes off their feet.
+Landlord^SB^10^By knowing the right nobles, making contacts  with masons and artisans, or performing great deeds for a liege-lord, you  have resources that help you build and expand your stronghold.
+Landwalker^Rac^166^You can survive out of water for a longer period  of time than most of your kind.
+Landwalker^Sto^92^You can survive out of water for a longer period  of time than most of your kind.
+Large and In Charge^Dr^71^You can prevent opponents from closing inside  your reach.
+Large and in Charge^SF^61^You can prevent opponents from closing inside  your reach.
+Lasting Inspiration^DMG^210^Your songs continue to inspire allies long after  your words have faded.
+Lasting Inspiration^EL^61^Your songs continue to inspire allies long after  your words have faded.
+Lasting Life^LM^28^You can shed negative levels with an act of  will.
+Law Inviolate^RD^155^Your unshakable faith in St. Cuthbert allows  you to better apprehend fugitives or overcome villains who transgress the  law.
+Leadership^PH^97^You are the sort of person others want to follow,  and you have done some work attempting to recruit cohorts and followers.
+Leap Attack^CAd^110^You can combine a powerful charge and a mighty  leap into one devastating attack.
+Least Dragonmark^ECS^56^You have a least dragonmark.
+Least Legacy^WL^14^You awaken the basic abilities of a specific  item of legacy.
+Legacy Focus^WL^15^Your item's legacy abilities are more potent  than normal.
+Legendary Acrobat^CAd^192^You can balance and tumble much more easily  than a normal person.
+Legendary Artisan^ECS^56^You have mastered the method of creating magic  items.
+Legendary Climber^CAd^192^You can climb rapidly much more easily than  a normal person.
+Legendary Climber^EL^61^You can climb rapidly much more easily than  a normal person.
+Legendary Commander^EL^62^You attract and lead great armies of followers  through sheer force of personality.
+Legendary Leaper^CAd^192^You can cover great distances with only a brief  start.
+Legendary Leaper^EL^62^You can jump much farther than normal for your  size.
+Legendary Rider^CW^152^You can ride a mount in combat with ease, even  bareback.
+Legendary Rider^EL^62^You can ride any mount without penalty (even  bareback) and can control any mount in combat.
+Legendary Tracker^CAd^192^You can track prey across or through the water,  or even through the air.
+Legendary Tracker^EL^62^You can track prey across or through the water,  or even through the air.
+Legendary Wrestler^EL^62^You are exceptionally proficient at grappling.
+Lesser Dragonmark^ECS^56^You have a lesser dragonmark.
+Lesser Legacy^WL^15^You awaken more powerful abilities of a specific  item of legacy.
+Lichloved^BV^49^By repeatedly committing perverted sex acts  with the undead, the character gains dread powers.
+Life Drain^LM^28^You drain additional life energy from your foes.
+Life Leech^UA^93^You automatically try to steal the last bit  of life energy from anyone nearby.
+Lifebond^LM^28^Select a specific living creature that is friendly  to you. You create a special bond with that creature.
+Lifesense^LM^28^You see the light that all living creatures  emit.
+Light of Aurifar^Sa^51^Undead that you turn or rebuke immolate.
+Light to Daylight^Rac^166^Your inherent ability to create light is more  powerful than normal.
+Lightbringer^Rac^166^You can channel positive energy into your spells  so that they glow with holy power.
+Lightfeet^RW^151^You have an incredibly soft step, making it  difficult to track or hear you.
+Lightning Fists^SF^7^Your skill and agility allow you to attempt  a series of blindingly fast blows.
+Lightning Mace^CW^113^You are a master of fighting with two maces  at the same time.
+Lightning Reflexes^PH^97^You have faster than normal reflexes.
+Lingering Breath^Dr^71^Your breath weapon forms a lingering cloud.
+Lingering Damage^EL^62^Your sneak attacks continue to deal damage even  after you strike.
+Lingering Song^CAd^111^Your inspirational bardic music stays with the  listeners long after the last note has died away.
+Lingering Song^SaS^40^Your bardic music stays with the listeners long  after the last note has died away.
+Lingering Spell^CR^20^Residual eldritch energy from your spell continues  to harm your enemies after the spell's main effect has expired.
+Lion Spy^OA^64^Your ancestor, Akodo Shinju, was the greatest  spy of the Lion clan.
+Lion Tribe Warrior^ShS^20^You have learned how to pounce on your foes,  like the lion that roams your lands.
+Lion's Pounce^CD^82^You can deliver a terrible attack at the end  of a charge.
+Live My Nightmare^UA^94^Those who magically pry into your mind become  privy to your most frightening dreams.
+Lliira's Blessing^PG^176^Thanks to the favor of the goddess of freedom,  you are difficult to restrain.
+Lolth's Blessing^Rac^166^The Spider Queen has blessed you with additional  magical abilities.
+Lolth's Meat^Und^26^Like all drow raised in cities that are ruled  by Lolth's priestesses, you know that you exist only to provide your goddess  with food and pleasure. This knowledge lends you a certain bloodthirsty  readiness.
+Long Reach^UE^44^You know how to use your great stature to reach  an opponent more than 5 feet away with a spearlike weapon.
+Longstride Elite^ECS^57^Your shifter trait improves.
+Longstride Elite^RE^114^Your longstride shifter trait improves.
+Longtooth Elite^RE^114^Your longtooth shifter trait improves.
+Lord of the Uttercold^CAr^80^Through careful study of the Elemental Planes  and their interactions with the Negative Energy Plane, you have learned  to wield the uttercold.
+Low Blow^Rac^166^You can get underfoot and attack creatures larger  than you.
+Low Profile^UA^182^You are less famous than others of your class  and level, or you wish to maintain a less visible presence than others of  your station.
+Luck of Heroes^FRCS^36^Your land is known for producing heroes; you  receive a luck bonus on all saving throws.
+Luck of Heroes^OA^64^You are descended from the quick-footed and  quick-witted Hiruma, the archetypal hunter and scout.
+Luck of Heroes^PG^40^Your land is known for producing heroes.
+Lunar Magic^CSW^146^Your spells and spell-like abilities are tied  to the phase of the moon, rising and falling with the strength of Selune.
+Lycanthropic Spell^FP^214^You cast spells while in your lycanthropic animal  form.
+Lyric Spell^CAd^113^You can channel the power of your bardic music  into your magic, allowing you to expend uses of your bardic music ability  to cast spells.
+Mage Slayer^CAr^81^You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly.
+Mage Slayer^MH^27^You have studied the ways and weaknesses of  spellcasters and can time your attacks and defenses against them expertly.
+Magic in the Blood^OA^64^You claim a karmic link with Iuchi, one of the  most resourceful shugenjas in early Rokugan.
+Magic in the Blood^PG^40^You have a knack for getting the most out of  your innate magic abilities.
+Magic of the Land^RW^152^Your intimate understanding of the natural world  allows you to imbue your spells with life-giving magical power from the  land itself.
+Magical Aptitude^PH^97^You have a knack for magical endeavors.
+Magical Artisan^FRCS^36^You have mastered the method of creating certain  magic items.
+Magical Artisan^OA^64^You are descended from Asahina Yajinden, a shugenja  of Crane clan who became the greatest lieutenant of the dread sorcerer Iuchiban.
+Magical Artisan^PG^41^You have mastered the method of creating a certain  kind of magic item.
+Magical Beast Wild Shape^CD^90^You can wild shape into magical beast form.
+Magical Beast Wild Shape^EL^62^You can wild shape into magical beast form.
+Magical Training^FRCS^36^Every crafter and laborer knows a cantrip or  two to ease her work.
+Magical Training^PG^41^You come from a land where cantrips are taught  to all who have the aptitude to learn magic.
+Magistrate's Mind^OA^64^You claim descent from Soshi Saibankan, a great  Scorpion judge who helped establish the Empire's institution of Emerald  magistrates.
+Malevolence^Gh^36^You can possess a creature and control its actions.
+Malign Spell Focus^BV^49^The character's spells that have the evil descriptor  are more potent than normal due to a deal she makes with an evil power.
+Malign Spell Focus^CR^20^Your evil spells are more potent than normal  due to a deal forged with an evil power.
+Manifest Flight^Sh^157^You have learned to make use of the manifest  zone in Sharn to improve your natural ability to fly.
+Manifest Leap^Sh^157^You have learned to make use of the manifest  zone in Sharn to increase your ability to jump and reduce the damage you  take when you fall.
+Mantis Leap^SF^7^You deliver a powerful attack after making a  jump.
+Many Masks^OA^64^You are descended from Shosuro Furuyari, an  important Scorpion playwright.
+Manyshot^EL^70^You can fire multiple arrows as a single attack  against a nearby target.
+Manyshot^PH^97^You can fire multiple arrows simultaneously  against a nearby target.
+Mark of Hleid^Fr^49^You bear a mark that identifies you as an ally  of the church of Hleid and grants you supernatural qualities.
+Markings of the Blessed^RS^142^Your skin markings shift into a pattern that  resists a wide array of harmful effects in times of trouble.
+Markings of the Hunter^RS^142^Your skin markings shift into a pattern that  makes you hard to get the drop on.
+Markings of the Magi^RS^142^Your skin markings shift into a pattern that  denotes you as having strong magical talent.
+Markings of the Maker^RS^142^Your skin markings shift into a pattern that  gives you fate's edge when using skills.
+Markings of the Warrior^RS^142^Your skin markings have shifted over time into  a pattern that gives you fate's deathly accuracy in times of trouble.
+Martial Throw^MH^27^You can switch positions with an opponent you  hit in melee by throwing that opponent.
+Martial Weapon Proficiency^PH^97^Choose a type of martial weapon. You understand  how to use that type of martial weapon in combat.
+Master Legacy^WL^15^You temporarily gain access to legacy abilities  beyond your normal reach.
+Master Linguist^RE^109^You have a broad knowledge of language.
+Master Staff^CAr^192^You can activate a staff without using a charge.
+Master Staff^EL^62^You can activate a staff without using a charge.
+Master Wand^CAr^192^You can activate a wand without using a charge.
+Master Wand^EL^62^You can activate a wand without using a charge.
+Maximize Breath^Dr^71^You can take a full-round action to use your  breath weapon to maximum effect.
+Maximize Power^XPH^48^You can manifest powers to maximum effect.
+Maximize Spell^PH^97^You can cast spells to maximum effect.
+Maximize Spell-Like Ability^CAr^81^You can use a spell-like ability at its maximum  effect.
+Meditation of War Mastery^OA^81^You have mastered the martial arts style of  'Meditation of War' -- a hard/soft form emphasizing weapon use and strikes  to pressure points.
+Memory Eater^LoM^22^An aboleth with this feat is particularly adept  at extracting memories and knowledge from the bodies of those it consumes.
+Menacing Demeanor^RD^155^You can tap into your savage heritage to improve  your intimidation techniques.
+Mental Leap^XPH^48^You can make amazing jumps.
+Mental Resistance^XPH^48^Your mind is armored against mental intrusion.
+Mentor^DMG2^176^A character who takes this feat has offered  his knowledge and skill to a lower-level NPC and takes that NPC on as an  apprentice.
+Mercantile Background^FRCS^36^You come from a family that excels at a particular  trade and knows well the value of any kind of trade good or commodity.
+Mercantile Background^PG^41^You come from a wealthy family with numerous  contacts in the trading costers and craft guilds of Faerun's bustling cities.
+Metallurgy^Rac^166^You are skilled in the act of metallurgy, creating  metal alloys both for their appearance and their properties.
+Metamagic Song^RS^142^You can channel the power of your bardic music  into your magic, allowing you to pay the cost of metamagic feats by spending  uses of your bardic music ability.
+Metamorphic Transfer^XPH^48^You can gain a supernatural ability of a metamorphed  form.
+Metanode Spell^CR^25^You cast metamagic spells to greater effect  in nodes to which you are attuned than elsewhere.
+Metanode Spell^Und^26^You cast metamagic spells to greater effect  in earth nodes than elsewhere.
+Metaray^LoM^45^A beholder with this feat can apply the effects  of metamagic feats to its eye rays.
+Might Makes Right^Rac^166^Your great strength draws more followers.
+Mighty Leaping^SS^37^You have developed your leg muscles and trained  yourself to make mighty leaps.
+Mighty Rage^EL^63^Your rage becomes even more powerful than normal.
+Mighty Roar^SS^37^You unsettle opponents with a dreadful roar  as you attack.
+Mighty Works Mastery I^OA^80^You have mastered the initial secrets of the  'Mighty Works' martial arts style -- a hard/soft form emphasizing locks  and hand strikes.
+Mighty Works Mastery II^OA^80^You have mastered the deeper secrets of the  'Mighty Works' martial arts style.
+Militia^FRCS^36^You served in a local militia, training with  weapons suitable for use on the battlefield.
+Militia^Gh^37^You served in a local militia, training with  weapons suitable for use on the battlefield.
+Militia^PG^41^Your people rely on a well-trained and well-armed  militia to defend their land.
+Mind Over Body^FRCS^37^The arcane spellcasters of some lands have learned  to overcome the frailties of the body with the unyielding power of the mind.
+Mind Over Body^PG^41^The aesthetics and mystics of your homeland  have learned to overcome the frailties of the body with the unyielding power  of the mind.
+Mind Over Body^XPH^48^Your ability damage heals more rapidly.
+Mindsight^LoM^126^A creature that has this feat possesses innate  telepathic ability that allows it to precisely pinpoint other thinking beings  within range of its telepathy.
+Minor Malevolence^Gh^37^You can possess a creature for a short while  and control its actions.
+Misleading Song^RS^142^You can channel the power of your bardic music  to temporarily increase the power of your illusion spells.
+Mithral Body^ECS^57^A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness.
+Mithral Body^MM3^192^A warforged character's body can be crafted  with a layer of mithral that provides some protection without hindering  speed or gracefulness.
+Mithral Body^RE^119^Your warforged body can be crafted with a layer  of mithral that provides some protection without hindering speed or gracefulness.
+Mithral Fluidity^ECS^57^Your movements are smoother and more fluid than  those of other warforged.
+Mithral Fluidity^MM3^192^Your movements are smoother and more fluid than  those of other warforged.
+Mobile Defense^EL^63^You can adjust your position while maintaining  a defensive stance.
+Mobile Spell-Casting^CAd^111^Your focused concentration allows you to move  while casting a spell.
+Mobility^PH^98^You are skilled at dodging past opponents and  avoiding blows.
+Momentary Alteration^UA^94^You can briefly transform yourself into a second  form, acquiring its physical qualities.
+Monastic Training^ECS^57^You are part of an order that combines the monastic  discipline of the monk class with another form of training.
+Monkey Grip^CW^103^You are able to use a larger weapon than other  people your size.
+Monkey Grip^SF^7^You use a wider variety of sizes of weapons.
+Moradin's Smile^RS^142^Through the favor of Moradin, you are skilled  at interacting with others.
+Mortalbane^BV^49^The creature can make a spell-like ability particularly  deadly to mortals.
+Mortifying Attack^CR^20^Those who witness your brutal death attack are  unnerved and jarred by the experience.
+Mother Cyst^LM^28^You gain the ability to cast necrotic cyst spells  by growing a cyst of your own.
+Mountain Warrior^RS^142^You are adept at fighting on the uneven ground  of mountainous terrain.
+Mountaineer^Fr^49^You are a particularly gifted explorer and mountain  climber.
+Mounted Archery^PH^98^You are skilled at using ranged weapons while  mounted.
+Mounted Combat^PH^98^You are skilled in mounted combat.
+Mounted Mobility^HB^98^You are skilled at dodging past opponents while  mounted.
+Mounting Casting^MH^27^You are skilled at casting spells while riding  a mount.
+Mror Stalwart^RE^109^You have been trained to make devastating strikes  with the weapons of the dwarves of the Mror Holds.
+Multiattack^MM^304^The creature is adept at using all its natural  weapons at once.
+Multiattack^MM2^18^The creature is adept at using all its natural  weapons at once.
+Multiattack^MM3^207^A creature with this feat is adept at using  all its natural weapons at once.
+Multiattack^Mon^9^The creature is adept at using all its natural  weapons at once.
+Multiattack^MW^24^You are adept at using all your natural weapons  at once.
+Multicultural^SaS^40^You blend in well with members of another race.
+Multidexterity^MM2^18^The creature is adept at using all its hands  in combat.
+Multidexterity^Mon^9^The creature is adept at using all its hands  in combat.
+Multidexterity^MW^24^You are skilled at utilizing all your hands  in combat.
+Multigrab^SK^146^You can grapple enemies more firmly than normal  with your natural attacks.
+Multigrab^SS^37^You can grapple enemies more firmly than normal  with your natural attacks.
+Multilingual^LE^8^You have an uncanny knack for languages.
+Multisnatch^Dr^72^You can grapple enemies more firmly with only  one of your natural attacks.
+Multispell^EL^63^You can cast an additional quickened spell in  a round.
+Multitasking^SF^62^You can perform different tasks with different  limbs.
+Multitasking^SS^37^You can perform different tasks with different  limbs.
+Multivoice^SS^37^If you have two or more heads, you can cast  more spells than usual in a round.
+Multiweapon Fighting^MM^304^A creature with three or more hands can fight  with a weapon in each hand.
+Multiweapon Fighting^MM2^18^A creature with three or more hands can fight  with a weapon in each hand.
+Multiweapon Fighting^Mon^9^A creature with three or more hands can fight  with a weapon in each hand.
+Multiweapon Rend^EL^63^You can rend opponents when fighting with more  than two limbs.
+Music of Growth^ECS^57^Your music can enhance the power of animals  and plant creatures.
+Music of Making^ECS^57^Echoing the music of creation, your own performance  enhances any process of creation.
+Music of the Gods^EL^63^You can use your bardic music to influence creatures  immune to mind-affecting effects.
+Music of the Outer Spheres^LoM^181^You can use your bardic music to create discordant,  insane sounds.
+Mutable Body^RE^110^Your enhanced control over your shapechanging  ability grants you extra power from transmutation spells.
+Mutilator^CR^20^After striking down your enemy in battle, you  can skillfully mutilate the corpse to prevent others from raising it from  the dead.
+Narrow Mind^XPH^48^Your ability to concentrate is as keen as an  arrowhead, allowing you to gain your psionic focus even in the most turbulent  situations.
+Narrowed Gaze^SK^146^Your gaze attack has a limited field of effect.
+Narrowed Gaze^SS^37^Your gaze attack has a limited field of effect.
+Natural Bond^CAd^111^Your bond with your animal companion is exceptionally  strong.
+Natural Bully^CR^21^You easily terrify weaker adversaries.
+Natural Heavyweight^PlH^40^You are descended from creatures native to a  plane of heavy gravity.
+Natural Leader^HB^98^You have a natural commanding presence.
+Natural Scavenger^ShS^21^You are particularly adept at finding food while  on the move.
+Natural Spell^Gh^37^You can cast spells while in wild shape or shifted  form.
+Natural Spell^MW^24^You cast spells while in a wild shape.
+Natural Spell^PH^98^You can cast spells while in a wild shape.
+Natural Trickster^RS^143^You have greater natural access to your race's  powers of illusion.
+Naturalized Denizen^UA^94^You are unusually anchored to your location.
+Nauseating Touch^Gh^37^When you touch a living creature, you can make  it nauseated.
+Necromantic Might^LM^28^Undead you control gain benefits when they are  near you.
+Necromantic Presence^LM^28^Undead you control are harder to turn when they  are near you.
+Necropolis Born^CAr^81^You possess a magical understanding of the essence  of mortal dread.
+Necropotent^LM^29^Your special melee or ranged attack with one  type of weapon is especially effective against undead.
+Necrotic Reserve^LM^29^You are not immediately destroyed when your  hit points fall to 0 or lower.
+Negative Energy Burst^CD^90^You can use your rebuke/command undead ability  to unleash a burst of negative energy.
+Negative Energy Burst^EL^63^You can use your rebuke/command undead ability  to unleash a burst of negative energy.
+Negotiator^PH^98^You are good at gauging and swaying attitudes.
+Nemesis^BE^44^You are the holy bane of creatures of a particular  type.
+Neraph Charge^PlH^40^You master the Limbo-native neraph martial art  of motion camouflage when you charge your foe.
+Neraph Throw^PlH^40^You master the Limbo-native neraph martial art  of motion camouflage for your thrown weapons.
+Net and Trident^CW^114^You are a master of fighting with the net and  the trident.
+Netherese Battle Curse^LE^8^You can channel your own arcane energy into  a powerful curse upon those who dare to face you in battle.
+Night Haunt^CAr^81^You possess a magical understanding of the workings  of the unseen.
+Nimble Bones^LM^29^Undead you raise or create are faster and more  nimble than normal.
+Nimble Fingers^PH^98^You are adept at manipulating small, delicate  objects.
+Nimbus of Light^BE^44^You are cloaked in the radiant light that marks  you as a servant of the purest ideals.
+Nobody's Fool^Rac^166^You have an uncommon streak of skepticism and  common sense, and have a knack for discerning falsehood from truth.
+Node Defense^CR^25^You can use the magical power of a node to defend  yourself from harm.
+Node Defense^Und^26^You can use the magical power of a node to defend  yourself from harm.
+Node Sensitive^CR^25^You can perceive a node just by passing near  it.
+Node Sensitive^Und^26^You can perceive an earth node just by passing  near it.
+Node Spellcasting^CR^25^You have discovered the secret of the magic  of a particular type of node.
+Node Spellcasting^Und^26^You have discovered the secret of node magic.
+Node Store^CR^26^You can store a prepared spell in a node to  which you are attuned.
+Node Store^Und^26^You can store a prepared spell in an earth node.
+Nomadic Trekker^ShS^21^You are particularly efficient at overland movement  across the great grasslands.
+Nonlethal Substitution^BE^44^You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead.
+Nonlethal Substitution^CAr^81^You can modify an energy spell to deal nonlethal  damage.
+Nonverbal Spell^PlH^40^You can cast spells that have verbal components  without actually verbalizing the words.
+Nymph's Kiss^BE^44^By maintaining an intimate relationship with  a good-aligned fey, you gain some of the characteristics of fey.
+Oaken Resilience^CD^82^You can take on the sturdiness of the mighty  oak.
+Obscure Lore^CAd^111^You are a treasure trove of little-known information.
+Obscure Lore^SaS^40^You are a treasure trove of little-known information.
+Obtain Familiar^CAr^81^You gain a familiar.
+Ocular Spell^LoM^181^Your study of the terrible powers of the beholder  has given you insight into new ways to prepare and cast spells.
+Off-Hand Parry^MW^24^You use your off-hand weapon to defend against  melee attacks.
+Off-Hand Parry^SF^7^You use your off-hand weapon to defend against  melee attacks.
+Old Salt^Sto^93^You are an old hand at shipboard life, having  mastered the myriad skills that are required of the experience sailor. Additionally,  you have an eye for the weather.
+Omniscient Whispers^UA^94^A constant, barely audible muttering echoes  in your ears, usually beyond your comprehension. But if you focus all your  energy on listening, you sometimes catch a sentence or two that bears directly  on your current situation.
+Oni's Bane^OA^64^Your ancestor, Isawa Akuma, was a Phoenix shugenja  who sought to understand the mystery of identity.
+Open Minded^XPH^48^You are naturally able to reroute your memory,  mind, and skill expertise.
+Open Minded^CAd^111^You are naturally able to reroute your memory  and skill expertise.
+Opportunity Power^XPH^48^You can make power-enhanced attacks of opportunity.
+Oral History^Rac^167^You are well versed in the art of storytelling  and the oral history of your culture.
+Otherworldly^PG^41^Your folk are known for their mystic power and  seem to transcend their mortal forms.
+Outsider Wings^Rac^167^You have sprouted wings appropriate to your  heritage, revealing the power of your supernatural bloodline.
+Overchannel^XPH^49^You burn your life force to strengthen your  powers.
+Overcome Weakness^Dr^72^You can overcome an innate vulnerability through  sheer willpower.
+Overhead Thrust^Dr^106^You can deal a nasty attack to anything that  tries to crush or run over you.
+Oversized Two-Weapon Fighting^CAd^111^You are adept at wielding larger than normal  weapons in your off hand.
+Overwhelming Critical^DMG^210^Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit.
+Overwhelming Critical^Dr^72^Choose one type of melee weapon, such as a claw  or bite. With that weapon, you deal more damage on a critical hit.
+Overwhelming Critical^EL^63^Choose one type of melee weapon, such as longsword  or greataxe. With that weapon, you do more damage on a critical hit.
+Owlbear Berserker^UE^44^Your fighting style emulates the owlbear, the  totem beast of your berserker lodge.
+Pain Mastery^SS^37^Injuries send you into a fury, increasing your  physical power.
+Pain Touch^CW^103^You cause intense pain in an opponent with a  successful stunning attack.
+Pain Touch^OA^64^You cause intense pain in an opponent with a  successful stunning attack.
+Pain Touch^SF^8^You cause intense pain in an opponent with a  successful stunning attack.
+Parrying Shield^LoM^181^You have studied advanced techniques for battling  foes whose attacks normally bypass armor.
+Path of Shadows^RE^110^You can use dancelike maneuvers to aid your  defense.
+Peak Hopper^SS^37^You are adapted to a hilly or mountainous environment.
+Penetrating Damage Reduction^EL^63^You can bypass a creature's damage reduction.
+Perfect Health^EL^63^You are immune to normal diseases and common  poisons.
+Perfect Multiweapon Fighting^EL^63^A creature with three or more hands can fight  with a weapon in each hand.
+Perfect Two-Weapon Fighting^CW^152^You can attack with your off-hand weapon as  frequently as with your primary weapon.
+Perfect Two-Weapon Fighting^EL^64^You can attack with your off-hand weapon as  frequently as with your primary weapon.
+Permanent Emanation^EL^64^One of your personal emanation spells becomes  permanent.
+Pernicious Magic^FRCS^37^You can use the Shadow Weave to make your spells  harder for Weave users to counter.
+Pernicious Magic^PG^42^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
+Persistent Spell^CAr^81^You can make a spell last all day.
+Persistent Spell^DD^51^The deity makes one of its spells last all day.
+Persistent Spell^FRCS^37^You make one of your spells last all day.
+Persistent Spell^PG^42^You can make a spell last all day.
+Persistent Spell^TB^41^You make one of your spells last all day.
+Persona Immersion^RE^110^Your assumption of another's physical identity  grants you defenses against mental intrusion.
+Personal Touchstone^PlH^41^You draw more power form one of the planar touchstone  locations to which you have forged a link.
+Persuasive^PH^98^You have a way with words and body language.
+Persuasive^SaS^40^You could sell a tindertwig hat to a troll.
+Pervasive Gaze^SK^146^Your gaze attack is more effective than normal.
+Pervasive Gaze^SS^37^Your gaze attack is more effective than normal.
+Petrification Immunity^SK^147^You are immune to petrification effects.
+Petrification Resistance^SK^147^You can resist petrification effects better  than you otherwise could.
+Phalanx Fighting^CW^103^You are trained in fighting in close formation  with your allies.
+Phalanx Fighting^LD^189^You are trained in fighting in close formation  with your allies.
+Pharaoh's Fist^Sa^51^Your unarmed strikes echo with thunder, stunning  your foe and those nearby.
+Photosynthetic Skin^UA^94^Your skin toughens when it draws energy from  the sun.
+Pierce Magical Concealment^CAr^81^You ignore the miss chance provided by certain  magical effects.
+Pierce Magical Protection^CAr^82^You can overcome the magical protections of  your enemies.
+Pierce the Darkness^RS^143^You can channel positive energy to temporarily  increase the range of your darkvision.
+Piercing Cold^Fr^49^Your cold spells are so cold that they can damage  creatures normally resistant or immune to cold.
+Piercing Gaze^SK^147^Your gaze attack has a greater range than normal.
+Piercing Gaze^SS^38^Your gaze attack has a greater range than normal.
+Piercing Sight^RS^143^Your fundamental familiarity with illusion allows  you to better recognize them.
+Pin Shield^CW^103^You know how to get inside your opponent's guard  by pinning his shield out of the way.
+Pin Shield^SF^8^You know how to get inside your opponent's guard  by pinning his shield out of the way.
+Pious Defense^CD^86^Your connection to a greater power sometimes  gives you flashes of insight that keep you safe.
+Pious Soul^CD^86^By adhering to the precepts of your religion  or philosophy, you gain an extra edge when you need it most.
+Pious Spellsurge^CD^87^You can use the strength of your faith to augment  a spell cast at a critical juncture.
+Plague Resistant^Rac^167^You are descended from the handful of combatants  who fought on the Fields of Nun and survived Chondath's Rotting War in 902  DR.
+Planar Familiar^PlH^41^When you are ready and able to acquire a new  familiar, you may choose one of several nonstandard familiars.
+Planar Touchstone^PlH^41^Forge a link between you and power-rich planar  locations, referred to as planar touchstones.
+Planar Turning^DMG^210^You can turn or rebuke outsiders.
+Planer Turning^EL^64^You can turn or rebuke outsiders.
+Planetouched Animal Affinity^Rac^167^You have a special affinity for a kind of animal  associated with your deity ancestor.
+Plant Control^DD^51^The deity can channel the power of nature to  gain mastery over plant creatures.
+Plant Control^MW^24^You channel the power of nature to gain mastery  over plant creatures.
+Plant Defiance^DD^51^The deity can channel the power of nature to  drive off or stop plant creatures.
+Plant Defiance^MW^24^You channel the power of nature to drive off  plant creatures.
+Plant Wild Shape^EL^65^You can wild shape into plant form.
+Plunging Shot^HB^99^You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you.
+Plunging Shot^RW^152^You can use the force of gravity to make your  ranged attacks deal extra damage if your target is below you.
+Point Blank Shot^PH^98^You are skilled at making well-placed shots  with ranged weapons at close range.
+Poison Immunity^BV^49^After prolonged exposure to a poison or toxin,  the character has rendered himself immune to it.
+Poison Immunity^CR^21^After prolonged exposure to a poison or toxin,  you have rendered yourself immune to it.
+Poison Immunity^SK^147^You can ignore the effects of poison.
+Poison Immunity^SS^38^You can ignore the effects of poison.
+Poison Resistance^SK^147^You can resist poison better than you otherwise  could.
+Poison Resistance^SS^38^You can resist poison better than you otherwise  could.
+Polar Chill^UA^94^You can call forth the cold of the arctic regions,  making movement and fighting difficult for the unprepared.
+Poltergeist Hand^Gh^37^You can move small objects in a limited manner  at a distance when you are a ghost.
+Poltergeist Rage^Gh^37^You can throw heavy objects with the power of  your mind.
+Polyglot^CAd^192^You can speak, read, and write all languages.
+Polyglot^EL^65^You can speak, read, and write all languages.
+Portal Master^PG^42^You are especially proficient at creating portals.
+Portal Sensitive^Und^27^You can perceive a portal just by passing  near it.
+Positive Energy Aura^CD^90^You automatically turn (or even destroy) lesser  undead.
+Positive Energy Aura^EL^65^You automatically turn (or even destroy) lesser  undead.
+Positive Energy Resistance^LM^29^You are resistant to the damage dealt by positive  energy effects.
+Power Attack^PH^98^You can make exceptionally powerful melee attacks.
+Power Attack - Iaijutsu^OA^64^Your ancestor, Kakita Rensei, was a renowned  duelist whose strength was legendary.
+Power Attack - Shadowlands^OA^65^You are descended from Kaiu Gineza, the engineer  who not only helped construct the tomb of Iuchiban, but also remained in  the tomb to set the last trap.
+Power Climb^Dr^72^If you fly in a straight line, you can gain  altitude in flight more easily than others.
+Power Critical^CW^103^Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts.
+Power Critical^DD^51^The deity chooses one kind of weapon, such as  a longsword or greataxe. With this weapon, the deity knows how to hit where  it hurts when it counts.
+Power Critical^MW^24^Choose one weapon, such as a longsword or a  greataxe. With that weapon, you know how to hit where it hurts.
+Power Dive^Dr^72^You can fall upon an opponent from the sky.
+Power Dive^SS^38^You can fall upon an opponent from the sky.
+Power Knowledge^XPH^34^You add two additional powers to your list of  powers known.
+Power Lunge^EA^50^Your ferocious attack may catch an opponent  unprepared.
+Power Lunge^Gh^37^Your ferocious attack may catch an opponent  unprepared.
+Power Lunge^SF^8^Your ferocious attack may catch an opponent  unprepared.
+Power Penetration^XPH^49^Your powers are especially potent at breaking  through power resistance.
+Power Specialization^XPH^49^You deal more damage with your powers.
+Power Throw^CAd^111^You have learned how to hurl weapons to deadly  effect.
+Powerful Bite^LoM^23^An aboleth with this feat develops jaws that  are much more muscular than normal, allowing it to bite more efficiently.
+Powerful Charge^ECS^57^You can charge with extra force.
+Powerful Charge^MH^27^You can charge with extra force.
+Powerful Charge^MM3^207^A creature with this feat can charge with extra  force.
+Powerful Voice^OA^65^You are karmically linked to Utaku, Shinjo's  most trusted lieutenant and devoted bodyguard.
+Powerful Wild Shape^RS^143^You retain your powerful build while in wild  shape form.
+Practiced Cohort^HB^99^Your cohort works well as part of your team.
+Practiced Spellcaster^CAr^82^Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful.
+Practiced Spellcaster^CD^82^Choose a spellcasting class that you possess.  Your spells cast from that class are more powerful.
+Precise Shot^PH^98^You are skilled at timing and aiming ranged  attacks.
+Precise Swing^ECS^58^You can ignore most obstacles when making a  melee attack against an opponent.
+Precocious Apprentice^CAr^181^Your master has shown you the basics of a spell  beyond the normal limits of your experience and training.
+Prehensile Tail^SK^147^You can use your tail to manipulate objects.
+Prehensile Tail^SS^38^You can use your tail to manipulate objects.
+Priest of the Waste^Sa^51^You can swap out prepared spells for others  that aid in exploring and surviving in wastelands.
+Primeval Wild Shape^Fr^49^Your wild shape forms are stronger than normal.
+Primitive Caster^Fr^49^You use screeches, wild gesticulations, and  extra material components to give your spells additional power.
+Primitive Caster^Rac^167^You use screeches, wild gesticulations, and  extra material components to give your spells additional powers.
+Profane Boost^CD^84^You can channel negative energy to increase  the power of inflict wounds spells cast near you.
+Profane Lifeleech^LM^29^You can channel negative energy to draw the  life force from nearby living creatures.
+Profane Outburst^CR^21^With a horrendous release of divine energy,  you steel your undead allies and minions against harm.
+Profane Vigor^LM^29^You can channel negative energy to heal nearby  undead allies of physical damage.
+Prone Attack^CW^103^You can attack from a prone position without  penalty.
+Prone Attack^OA^65^You attack from a prone position without penalty.
+Prone Attack^SF^8^You attack from a prone position without penalty.
+Proportionate Wild Shape^MW^24^You use wild shape to become animals of your  own size even if your wild shape ability would normally exclude that size  category.
+Protected Destiny^RD^153^Your heroic destiny is guarded against the whims  of misfortune.
+Psicrystal Affinity^XPH^49^You have created a psicrystal.
+Psicrystal Containment^XPH^49^Your psicrystal has advanced enough that it  can hold a psionic focus that you store within it.
+Psicrystal Power^XPH^34^Your psicrystal can manifest a power.
+Psionic Affinity^XPH^49^You have a knack for psionic endeavors.
+Psionic Body^XPH^49^Your mind reinforces your body.
+Psionic Charge^XPH^50^You can charge in crooked line.
+Psionic Dodge^XPH^50^You are proficient at dodging blows.
+Psionic Endowment^XPH^50^You can endow your manifestations with more  concentrated focus.
+Psionic Fist^XPH^50^You can charge your unarmed strike or natural  weapon with additional damage potential.
+Psionic Hole^XPH^50^You are anathema to psionic creatures and characters.
+Psionic Meditation^XPH^50^You can focus your mind faster than normal,  even under duress.
+Psionic Shot^XPH^50^You can charge your ranged attacks with additional  damage potential.
+Psionic Talent^XPH^50^You gain additional power points to supplement  those you already had.
+Psionic Weapon^XPH^50^You can charge your melee weapon with additional  damage potential.
+Puff Torso^SK^147^You can puff out your skin to appear larger  and more threatening.
+Pulverize Foe^CR^21^You enjoy smashing your opponents into submission.
+Purify Spell^BE^44^You can charge your damaging spells with celestial  energy that leaves good creatures unharmed.
+Purify Spell Trigger^BE^45^You can channel holy power through a spell trigger  item, such as a wand or staff.
+Purify Spell-Like Ability^BE^45^You can charge your damaging spell-like abilities  with celestial energy that leaves good creatures unharmed.
+Pursue^ECS^58^You have the ability to follow in an opponent's  wake.
+Pushback^MH^27^You can knock opponents back when you hit them  in melee.
+Pyro^SaS^40^You're good at lighting objects and opponents  on fire.
+Quell the Profane^BE^45^Your mightiest attacks weaken evil foes.
+Quick Change^RE^110^You can quickly alter your features and physiology.
+Quick Change^SS^38^You can shift to an alternate form faster and  more easily than you otherwise could.
+Quick Draw^PH^98^You can draw weapons with startling speed.
+Quick Reconnoiter^CAd^112^You can learn a lot of information from just  a quick scan of an area or object.
+Quick Recovery^LoM^181^It's hard to keep you down for long. You have  a talent for shaking off effects that leave others unable to act.
+Quick Staff^CW^114^You have mastered the style of fighting with  a quarterstaff.
+Quicken Breath^Dr^73^You can loose your breath weapon with but a  thought.
+Quicken Legacy^WL^15^You can activate one of your item's legacy abilities  with a moment's thought.
+Quicken Manifestation^LM^29^You can manifest from the Ethereal Plane with  a moment's thought.
+Quicken Power^XPH^50^You can manifest a power with a moment's thought.
+Quicken Spell^PH^98^You can cast a spell with a moment's thought.
+Quicken Spell-Like Ability^BV^49^The creature can use a spell-like ability with  a moment's thought.
+Quicken Spell-Like Ability^MM^304^The creature can employ a spell-like ability  with a moment's thought.
+Quicken Spell-like Ability^MM2^18^The creature can use a spell-like ability with  a moment's thought.
+Quicken Spell-Like Ability^MM3^207^A creature with this feat can employ a spell-like  ability with a moment's thought.
+Quicken Spell-Like Ability^SS^38^You can use a spell-like ability with a moment's  thought.
+Quicken Turning^CD^84^You can turn or rebuke undead with a moment's  thought.
+Quicken Turning^DF^20^You can turn or rebuke undead with a moment's  thought.
+Quicken Turning^FP^215^You can turn or rebuke undead with a moment's  thought.
+Quicken Turning^Gh^37^You can turn or rebuke undead with a moment's  thought.
+Quicken Turning^LM^29^You can turn or rebuke undead with a moment's  thought.
+Quicker Than the Eye^SaS^40^Your hands can move so quickly that observers  don't see what you've done.
+Quickslime^LoM^23^The slime attack of an aboleth with this feat  is particularly fast and difficult to resist.
+Racial Emulation^RE^110^You can emulate a humanoid more closely with  your minor change shape ability.
+Radiant Fire^RD^155^Pelor has ignited your faith and conviction,  making you better able to fight the creatures of darkness.
+Ragewild Fighting^RE^118^You have mastered a merciless form of combat  that emphasizes using brute strength to shatter your foes.
+Raging Luck^ECS^58^When raging, you have a greater ability to alter  your luck than most others do.
+Rampaging Bull Rush^RS^143^You can use brute force to slam into and knock  down your enemies.
+Ranged Disarm^CW^103^You can disarm a foe from a distance.
+Ranged Inspiration^EL^65^You can use your bardic music at a greater range  than normal.
+Ranged Pin^CW^104^You can perform a ranged grapple attempt against  an opponent not adjacent to you.
+Ranged Smite Evil^BE^45^You smite ability can be channeled through your  ranged weapon.
+Ranged Spell Specialization^CAr^82^You deal more damage with ranged touch attack  spells.
+Ranged Sunder^CW^104^You can attack an opponent's weapon from a distance.
+Rapid Breath^SS^39^You do not have to wait as long to reuse your  breath weapons as you normally would.
+Rapid Inspiration^EL^66^You can inspire your allies with bardic music  more quickly than normal.
+Rapid Metabolism^XPH^50^Your wounds heal rapidly.
+Rapid Reload^EL^70^You reload a crossbow more quickly than normal.
+Rapid Reload^PH^99^Choose a type of crossbow. You can reload a  crossbow of that type more quickly than normal.
+Rapid Reload^SF^9^You reload a crossbow more quickly than normal.
+Rapid Shot^PH^99^You can use ranged weapons with exceptional  speed.
+Rapid Spell^CD^84^You can cast spells with long casting times  more quickly.
+Rapid Stunning^CW^104^You can use your stunning attacks in rapid succession.
+Rapid Swimming^Rac^167^You are one with the water.
+Rapid Swimming^Sto^93^You are one with the water.
+Rapidstrike^Dr^73^You can attack more than once with a natural  weapon.
+Raptor School^CW^111^You know martial arts techniques inspired by  hunting birds.
+Rashemi Elemental Summoning^UE^45^You may summon Rashemen's native elementals  in any situation where you could summon an air or earth elemental.
+Rattlesnake Strike^Sa^51^Having observed the ways of a desert viper,  you have learned to use ki in a fashion similar to poison.
+Razing Strike^CAd^112^You have mastered the art of delivering precise  strikes against nonliving creatures while channeling spell energy through  your melee attacks.
+Razorclaw Elite^RE^114^Your razorclaw shifter trait improves.
+Reach Bite^LoM^23^An aboleth with this feat can extend its jaws  and esophagus out from its body to make attacks beyond its normal reach.
+Reach Spell^CD^84^You can cast touch spells without touching the  spell recipient.
+Reach Spell^DD^51^The deity can cast touch spells without touching  the spell recipient.
+Reach Spell^DF^20^You can cast touch spells without touching the  spell recipient.
+Reach Spell^FP^215^You can cast touch spells without touching the  spell recipient.
+Reactive Countersong^EL^66^You can use countersong as a reaction to a sonic  or language-dependent magical attack.
+Reactive Counterspell^Mag^22^You can react quickly to counterspells cast  by opponents.
+Reactive Counterspell^PG^42^You can react quickly to counter  spells cast by opponents.
+Reactive Shifting^RE^115^You can shift with a mere thought.
+Ready Shot^HB^99^You can make devastating attacks with ranged  weapons against charging opponents.
+Reaping Spell^CR^21^The dark energy of your spell devours the soul  of any creature killed by it.
+Reckless Charge^MH^27^You can charge with wild abandon.
+Reckless Offense^XPH^51^You can shift your focus from defense to offense.
+Reckless Offensive^EA^41^You lower your guard in order to make a telling  attack.
+Reckless Offensive^Rac^167^You lower your guard in order to make a telling  attack.
+Reckless Rage^RS^143^You are considered extreme even among other  barbaric warriors, and you enter a deeper state of rage than others.
+Reckless Wand Wielder^CAr^82^You can increase the effectiveness of spells  cast from a wand.
+Recognize Impostor^ECS^58^You are extremely skilled at spotting imposters.
+Recover Breath^Dr^73^You wait less time before being able to use  your breath weapon again.
+Reflect Arrows^EL^66^You reflect ranged attacks back upon the attacker.
+Relic Hunter^RE^111^You possess great knowledge of the relics and  crafts of the ancient cultures of Eberron.
+Remain Conscious^MW^25^You have the tenacity of will that supports  you even when things look bleak.
+Remain Conscious^OA^65^You have a tenacity of will that supports you  even when you are disabled or dying.
+Remain Conscious^SF^9^You have a tenacity of will that supports you  even when things look bleak.
+Rend^Dr^73^You can rend opponents with your claws.
+Rend Ghost^Gh^37^Your touch can maul the ectoplasm of another  ghost.
+Rending Constriction^SK^147^You can pull grappled enemies apart.
+Rending Constriction^SS^39^You can pull grappled enemies apart.
+Renown^UA^182^You have a better chance of being recognized.
+Repeat Spell^CAr^82^You can cast a spell that repeats on the following  round.
+Repeat Spell^DD^51^The deity can cast a spell that repeats the  following round.
+Repeat Spell^TB^41^You can cast a spell that repeats on the following  round.
+Repel Aberration^ECS^58^Your Gatekeeper training allows you to keep  aberrations at bay.
+Requiem^LM^29^Your bardic music affects undead creatures.
+Requiem^SaS^40^Your bardic music affects undead creatures.
+Research^ECS^59^You can use your Knowledge skills to extract  information from books, scrolls, and other repositories of facts and figures.
+Reserves of Strength^DCS^86^When you cast a spell, you can choose to increase  its effective caster level at the cost of exhausting yourself.
+Residual Rebound^UA^94^Sometimes spells cast at you rebound on the  caster instead.
+Resist Death^EL^111^You are capable of withstanding tremendous amounts  of damage without risk of instant death.
+Resist Disease^MW^25^You have developed a natural resistance to diseases.
+Resist Disease^ShS^21^You have developed a natural resistance to diseases.
+Resist Dragonfear^DCS^86^You are able to show courage in the presence  of dragons.
+Resist Ghost^Gh^37^You are resistant to the effects of ghost powers.
+Resist Poison^FRCS^37^Over years, some among your people carefully  expose themselves to poisons in controlled dosages in order to build up  immunity to their effects.
+Resist Poison^MW^25^You have built up an immunity to the effects  of poisons by exposing yourself to controlled doses of them.
+Resist Poison^OA^65^Your ancestor, Agasha Kitsuki, founded the fourth  family of the Dragon clan and a school for magistrates renowned for teaching  skills of investigation and deduction.
+Resist Poison^PG^43^Your people have become inured to many deadly  substances through controlled exposure or the simple hostility of your home  environment.
+Resist Taint^OA^65^You are descended from Kuni, the founder of  the Kuni family, a scholar of -- and mighty warrior against -- the Shadowlands.
+Resistance to Energy^MW^25^You channel the power of nature to resist a  particular energy type.
+Resounding Blow^BE^45^Your mightiest attacks cause your foes to tremble  before you.
+Resourceful Buyer^RD^153^You know where to look in a community for anything  you need.
+Return Shot^XPH^51^You can return incoming arrows, as well as crossbow  bolts, spears, and other projectile thrown weapons.
+Reverberation^SS^39^Your sonic attack is more potent than normal.
+Rhinoceros Tribe Charge^ShS^21^You use the power of the rhinoceros's charge  in battle.
+Ride-By Attack^PH^99^You are skilled at making fast attacks from  your mount.
+Right of Counsel^ECS^59^You have the legal and sacral right to seek  advice from one of your ancestors, a deathless elf in Aerenal's City of  the Dead.
+Righteous Strike^EL^66^Your unarmed strikes are particularly damaging  to chaotic creatures.
+Righteous Wrath^BE^45^Your rage is empowered with divine fury.
+Rock Gnome Trickster^Rac^167^Your glamers are particularly likely to fool  the senses of your target.
+Rock Hurling^RS^143^You can throw rocks like a giant can.
+Roll With It^SS^39^You are adept at lessening the effects of blows.
+Roofwalker^RD^156^You are adept at moving and fighting on rooftops  and ledges.
+Roots of the Mountain^RS^143^You can channel energy to make yourself immovable.
+Roundabout Kick^CW^105^You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick.
+Roundabout Kick^OA^65^You can follow up on a particularly powerful  unarmed attack with a mighty kick, spinning in a complete circle before  landing the kick.
+Ruinous Rage^EL^66^While in a rage, you can deal tremendous damage  to objects.
+Run^PH^99^You are fleet of foot.
+Runesmith^Rac^167^You can fashion runes that take the place of  material components for your spells.
+Sacred Boost^CD^84^You can channel positive energy to increase  the power of cure wounds spells cast near you.
+Sacred Healing^CD^84^You can channel positive energy to grant nearby  living creatures the ability to recover form their wounds quickly.
+Sacred Spell^DD^51^The deity's damaging spells are imbued with  divine power.
+Sacred Spell^DF^20^Your damaging spells are imbued with divine  power.
+Sacred Spell^FP^215^Your damaging spells are imbued with divine  power.
+Sacred Strike^BE^45^Your sneak attack is enhanced by your unshakable  faith in a good-aligned deity.
+Sacred Tattoo^Rac^168^You have been spiritually touched by one of  the god-kings of the Old Empires and bear his or her symbol in the form  of a tattoo in the shape of a holy symbol.
+Sacred Vengeance^CW^108^You can channel energy to deal extra damage  against undead in melee.
+Sacred Vengeance^LM^30^You can channel energy to deal extra damage  against undead in melee.
+Sacred Vitality^LM^30^You can channel positive energy to gain protection  from damage to your abilities or your life force.
+Sacred Vow^BE^45^You have willingly given yourself to the service  of a good deity or cause, denying yourself an ordinary life to better serve  you highest ideals.
+Sacrificial Mastery^BV^50^The character is skilled at offering living  sacrifices to evil gods or fiends.
+Saddleback^FRCS^37^Your people are as comfortable riding as walking.
+Saddleback^Gh^38^You were raised among people who are as comfortable  riding as walking.
+Saddleback^OA^65^You have a unique karmic tie to Moto Chai, one  of the greatest riders ever to live, even by Unicorn standards.
+Saddleback^PG^43^You've spent endless hours learning how to handle  a mount in a fight.
+Sahuagin Flip^Sto^93^You can safely attack and withdraw underwater.
+Sailor's Balance^Sto^93^You are experienced with the rolling decks of  the ship and maintain strong footing, even in a terrible storm.
+Sanctify Ki Strike^BE^46^Sacred power suffuses your unarmed strikes.
+Sanctify Martial Strike^BE^46^Sacred power suffuses your attacks with a certain  kind of weapon.
+Sanctify Natural Attack^BE^46^You can focus holy power into your natural attacks.
+Sanctify Relic^CD^84^You can create magic items that are imbued with  a connection to your deity.
+Sanctify Water^Sto^93^You can call upon positive energy to momentarily  transform normal water around you into holy water.
+Sanctify Weapon^BE^46^You can focus holy power into your weapon.
+Sanctum Spell^CAr^82^Your spells are especially potent on home ground.
+Sanctum Spell^TB^41^Your spells have a home ground advantage.
+Sand Camouflage^Sa^51^You can hide yourself in sand with a moment's  notice.
+Sand Dancer^Sa^52^While making another attack, you attempt to  blind a foe with thrown sand.
+Sand Snare^Sa^52^When you knock your foes into the sand, they  have a hard time regaining their feet.
+Sand Spinner^Sa^52^You spray sand with your acrobatic maneuvers.
+Sandskimmer^Sa^52^You are particularly adept at moving over sand.
+Savage Grapple^CAd^114^While transformed into the shape of a wild animal,  you can savagely tear at any creature that you manage to grapple.
+Scavenging Gullet^LoM^181^The taint of the aberration in your blood has  gifted you with the ability to gain nourishment from things that others  would never consider as food.
+Scent^CAd^114^You can sharpen your sense of smell.
+Scent^MW^25^Your olfactory senses are as sharp as the wolf's.
+Scholar of Nature^OA^65^You are descended from Asako Hanasku, a great  scholar who threw himself into the study of medicine, herbs, and poison.
+Scion of Sorrow^CR^23^You formally supplicate yourself to a powerful  yugoloth lord.
+Scorpion's Grasp^Sa^52^Like the scorpion, you can grab and hold your  prey.
+Scorpion's Instincts^Sa^53^You are hard to find in the waste.
+Scorpion's Resolve^Sa^53^Like the scorpion, you are not easily distracted.
+Scorpion's Sense^Sa^53^Like the scorpion, you sense other creatures  simply by perceiving their contact with the sand.
+Scourge of the Seas^Sto^93^You have a sinister reputation as a pirate and  can intimidate enemy captains by your mere presence.
+Scramble^SS^39^Your slippery ways allow you to evade a damaging  blow.
+Scribe Epic Scroll^EL^66^You can scribe scrolls of epic power.
+Scribe Scroll^PH^99^You can create scrolls, from which you or another  spellcaster can cast the scribed spells.
+Scribe Tattoo^XPH^51^You can create psionic tattoos, which store  powers within their designs.
+Sculpt Ghost Body^Gh^38^You can reshape your ghost body's ectoplasm  to enhance one physical ability score at the expense of another.
+Sculpt Spell^CAr^83^You can alter the area of your spells.
+Sculpt Spell^TB^42^You can alter the shape of a spell's area.
+Sea Legs^Fr^49^You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage.
+Sea Legs^OA^65^You are descended from Yasuki Fumoki, a notorious  pirate who preyed on Crane merchant ships off the coast.
+Sea Legs^Sto^93^You are accustomed to the rolling motion on  board a ship, and can use this motion to your advantage.
+Searing Spell^Sa^53^Your fire spells are so hot that they can damage  creatures that normally have resistance or immunity to fire.
+Second Slam^RE^120^You have learned to use your form to the utmost  and can make two slam attacks.
+Second Wind^MH^28^You can shrug off minor wounds with ease.
+Selective Spell^ShS^21^You can screen allies from the effects of your  area spells.
+Self-Concealment^EL^66^When in combat, your form becomes blurry and  indistinct, making it difficult to land a blow against you.
+Self-Sufficient^PH^100^You can take care of yourself in harsh environments  and situations.
+Sense Weakness^Dr^106^You can take advantage of subtle weaknesses  in your opponents' defenses.
+Serpent Fang^Sa^53^You are able to project your ki to strike  foes as though you had extended reach.
+Serpent Strike^ECS^60^Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longspear.
+Serpent's Venom^CD^84^You can deliver a toxic bite attack reminiscent  of the viper.
+Servant of the Fallen^LE^9^You keep alive the worship of a deity who has  died or vanished.
+Servant of the Heavens^BE^46^You swear allegiance to one of the Tome Archons  who rules the Seven Heavens, and in exchange gain power to act on their  behalf.
+Shadow^MW^25^You have a better chance than most to trail  someone unnoticed.
+Shadow^SaS^40^You are good at following someone surreptitiously.
+Shadow Heritage^PlH^42^You are descended from creatures native to the  Plane of Shadow.
+Shadow Marches Warmonger^RE^111^The ancient martial pride of your people grants  you mastery of their style of battle.
+Shadow Shield^Rac^168^Your ancestors long battled the insidious influence  of shadow magic, and some of their descendants (including you) have a greater  resistance to its effects.
+Shadow Song^Rac^168^A dark legacy of the Shadowking's ambitions  is the shadow of sorrow that cloaks many Tethyrian songs and ballads. Some  bards have learned to infuse their performances with the sense of loss and  suffering that suffuses the Shadow Weave.
+Shadow Weave Magic^FRCS^37^You have discovered the dark and dangerous secret  of the Shadow Weave.
+Shadow Weave Magic^PG^43^You have discovered the dangerous secret of  the Shadow Weave.
+Shadowform Familiar^CR^22^You can summon a familiar from the Plane of  Shadow.
+Shadowstrike^CR^22^Due to your ties to the Plane of Shadow, you  strike more effectively in areas of dim illumination.
+Shape Breath^Dr^73^You can make the area of your breath weapon  a cone or a line, as you see fit.
+Shape Ectoplasm^Gh^38^You can make equipment out of ectoplasm.
+Shaped Splash^RE^111^Your expertise with thrown weapons enables you  to use splash weapons more effectively.
+Shared Fury^RW^152^Your fearsome rage spurs your animal companion  to greater heights.
+Sharp-Shooting^CW^105^Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover.
+Sharp-Shooting^DD^52^The deity's skill with ranged weapons lets it  score hits others would miss due to an opponent's cover.
+Sharp-Shooting^SF^9^Your skill with ranged weapons lets you score  hits others would miss due to an opponent's cover.
+Shattering Strike^EL^66^You can shatter objects with your unarmed strike.
+Sherem-Lar Sorcery^Gh^38^You are one of the Sherem-Lar, magically altered  in the womb to enhance your potential as a sorcerer.
+Sherezem-Lar Sorcery^Gh^38^You are one of the Sherezem-Lar, an elite group  within the Sherem-Lar, head and shoulders above the others in power.
+Shield Charge^CW^105^You deal extra damage if you use your shield  as a weapon when charging.
+Shield Charge^DF^20^You deal extra damage if you use your shield  as a weapon when charging.
+Shield Dwarf Warder^Rac^168^You are a student of the protective magics of  the shield dwarves, learned at great cost during centuries of warfare and  wandering.
+Shield Expert^SF^9^You use a shield as an off-hand weapon while  retaining its armor bonus.
+Shield of Thought^RE^113^You wield your spirit as both weapon and shield.
+Shield Proficiency^PH^100^You are proficient with bucklers, small shields,  and large shields.
+Shield Slam^CW^105^You can use your shield to daze your opponent.
+Shield Wall^HB^99^You are skilled in using shields when in formation  with other shield-bearers.
+Shielded Axe^RS^144^You have mastered the style of fighting with  a dwarven waraxe and a handaxe while keeping a buckler strapped to your  offhand, and you have learned to use this unusual combination of weapons  and buckler to protect yourself while wielding both axes effectively.
+Shielded Casting^RS^144^You are skilled at covering yourself with your  shield when casting spells in combat.
+Shielded Manifesting^RS^144^You are skilled at covering yourself with your  shield when manifesting psionic powers in combat.
+Shieldmate^MH^28^You can protect those near you with your shield.
+Shifter Agility^RE^115^Your heritage of speed and ferocity has honed  your reflexes, allowing you to avoid attacks.
+Shifter Defense^ECS^60^By delving deeper into your shifter heritage,  you have developed the ability to ignore a little damage from every attack.
+Shifter Defense^MM3^150^By delving into your shifter heritage, you have  developed the ability to ignore a little damage from every attack.
+Shifter Ferocity^ECS^60^You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury.
+Shifter Ferocity^RE^115^You are a tenacious combatant, continuing to  fight when others would succumb to pain and injury.
+Shifter Instincts^MM3^150^Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts.
+Shifter Instincts^RE^115^Your heritage has given you sharp senses and  quick reflexes, and you have learned to trust your equally sharp instincts.
+Shifter Multiattack^ECS^60^You are adept at using your natural attack in  conjunction with another weapon.
+Shifter Savagery^RE^115^The bestial fury of your lycanthrope ancestors  allows you to deal devastating strikes with your natural weapons.
+Shifter Stamina^RE^115^Yours is a heritage of endurance and tenacity,  and you can shrug off bruises and fatigue.
+Ship Savvy^RE^112^Your heritage among the sailors and shipwrights  of Zilargo gives you an edge in shipboard combat.
+Ship's Mage^Sto^93^You form a potent supernatural bond with a ship.  Your spells have a more potent effect when cast aboard this ship.
+Shock Trooper^CW^112^You are adept at breaking up formations of soldiers  when you rush into battle.
+Shock Wave^Dr^73^You can strike the ground with your tail so  hard it knocks other creatures down.
+Shot on the Run^PH^100^You are highly trained in skirmish ranged weapons  tactics.
+Shriveling Touch^Gh^38^Choose one physical ability score. When you  touch a creature, you can cause permanent drain to this ability score.
+Sidestep^MH^28^You can move nimbly around the battlefield.
+Sidestep Charge^XPH^51^You are skilled at dodging past charging opponents  and taking advantage when they miss.
+Signature Spell^FRCS^37^You are so familiar with a mastered spell that  you can convert other prepared spells into that spell.
+Signature Spell^PG^43^You are so familiar with a mastered spell that  you can convert other prepared spells into that spell.
+Silencing Strike^RS^144^You can infuse your sneak attacks with the magical  essence of silence.
+Silent Spell^PH^100^You can cast spells silently.
+Silver Palm^FRCS^37^Your culture is based on haggling and the art  of the deal.
+Silver Palm^PG^43^Your culture is based on haggling and the art  of the deal.
+Silver Smite^ECS^60^You wield the power of the Silver Flame to smite  evil.
+Silver Tongue^OA^65^Your ancestor, Mirumoto Kaijuko, was the first  woman to become daimyo of the Mirumoto family.
+Silver Tracery^RE^120^Alchemical silver tracery covers your body,  allowing you to overcome the supernatural defenses of certain creatures  and protecting against some magical attacks.
+Simple Weapon Proficiency^PH^100^You understand how to use all types of simple  weapons in combat.
+Skewer Foe^CR^22^A ruthless combatant, you like to impale enemies  on spears and similar piercing weapons.
+Skill Focus^PH^100^Choose a skill. You have a special knack with  that skill.
+Skilled Telekinetic^LoM^45^A creature with this feat becomes so skilled  with its telekinesis ability that it can manipulate and use magic  items via telekinesis.
+Skyrider^Rac^168^You have trained and served with the hippogriff  cavalry that guards the Great Rift.
+Smatterings^RD^153^You have a talent for acquiring languages --  at least enough of each one to get by.
+Smite Fiery Foe^Fr^50^You can smite creatures with the fire subtype.
+Smooth Talk^FRCS^37^Your people are accustomed to dealing with strangers  and foreigners without needing to draw weapons to make their point.
+Smooth Talk^OA^66^You are descended from Doji Taehime, a Crane  ambassador to the Scorpion court -- a courtier skilled at discovering falsehoods  and uncovering plots.
+Smooth Talk^PG^43^Your people rarely have to draw their weapons  to deal with potential adversaries.
+Snake Blood^FRCS^38^The taint of the yuan-ti runs in your veins.
+Snake Blood^PG^43^The taint of the yuan-ti runs in your veins.
+Snatch^MM2^18^The creature can grapple more easily with its  claws or bite.
+Snatch^MW^25^You can grapple more easily with your claws  or bite.
+Snatch and Swallow^Dr^73^You can swallow creatures you have grabbed with  your bite attack.
+Snatch Arrows^MM^304^The creature can grab opponents much smaller  than itself and hold them in its mouth or claw.
+Snatch Arrows^PH^100^You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons.
+Snatch Arrows^SF^9^You are adept at grabbing incoming arrows, as  well as crossbow bolts, spears, and other projectile or thrown weapons.
+Snatch Trophy^CR^22^You can quickly and skillfully collect a trophy  of your victory over a fallen foe.
+Snatch Weapon^SaS^40^You can disarm an opponent, then pluck the weapon  from midair.
+Sneak Attack of Opportunity^EL^66^Whenever your opponent lets his guard down,  you can make a sneak attack.
+Snow Tiger Berserker^UE^45^You have learned how to pounce on your foes,  much like your totem spirit.
+Snowcasting^Fr^50^You add ice or snow to your spell's components  to make them more powerful.
+Snowflake Wardance^Fr^50^You are particularly adept at moving through  snow and over ice.
+Snowrunner^Fr^50^You have mastered the snowflake wardance, a  mystical style of fighting with slashing weapons that allows you to leap  and almost seem to float haphazardly across the battlefield like a whirling,  razor-edged snowflake.
+Sociable Personality^RD^153^You are adroit at avoiding social gaffes.
+Solid Visage^Gh^39^Your ghost body appears solid and alive.
+Song of the Heart^ECS^60^Your bardic music reaches the depths of its  listeners' hearts.
+Soothe the Beast^ECS^60^Echoing the music of creation, your music has  powers to calm animals.
+Soul of Honor^OA^66^Your ancestor Shinjo Martera, the firstborn  son of Shinjo, was the living incarnation of bushido for the Unicorn,  utterly without fault or failing.
+Soul of Loyalty^OA^66^Your ancestor, Mirumoto Tokeru, was renowned  for his loyalty to his twin brother, Ryudumu.
+Soul of Sincerity^OA^66^You are descended from the famous Scorpion daimyo  Bayushi Tangen, author of Lies and Little Truths.
+Soul of the North^CAr^83^You possess a magical understanding of the nature  of cold.
+Soulblade Warrior^RE^120^The spirit of a quori warrior grants you deadly  speed and combat prowess with your mind blade.
+Southern Magician^Rac^168^Your magical studies in Mulan lands have taught  you spellcasting techniques unknown in the north that blur the line between  arcane and divine magic.
+Speaking Wild Shape^MW^25^While in wild shape, you can communicate with  animals or elementals of the same kind as your current form.
+Spear of Doom^DCS^87^Few can avoid death on your spearpoint when  you brace yourself for their attack.
+Spectacular Death Throes^DCS^87^Your body seethes with unchecked power, promising  dire consequences to your killer.
+Spectral Strike^CD^90^You can strike incorporeal creatures as if they  were solid.
+Spectral Strike^EL^66^You can strike incorporeal creatures as if they  were solid.
+Speed of Thought^XPH^51^The energy of your mind energizes the alacrity  of your body.
+Spell Drain^LM^30^You can cast any spell that you drain from a  creature's mind.
+Spell Focus^CD^84^Your spells with an alignment descriptor are  more potent than normal.
+Spell Focus^PH^100^Choose a school of magic. Your spells of that  school are more potent than normal.
+Spell Focus (Good)^BE^46^Your spells with the good descriptor are more  potent than normal due to your relationship with the powers of good.
+Spell Girding^Mag^22^Your spells are particularly hardy, resisting  dispel checks more readily than normal.
+Spell Hand^CAr^83^You possess a magical understanding of the manipulation  of force.
+Spell Knowledge^DMG^210^You add two additional arcane spells to your  repertoire.
+Spell Knowledge^EL^67^You add two additional arcane spells to your  repertoire.
+Spell Mastery^PH^100^You are so intimately familiar with certain  spells that you don't need a spellbook to prepare them anymore.
+Spell Opportunity^EL^67^You can cast a touch spell as an attack of opportunity.
+Spell Penetration^PH^100^Your spells are especially potent, breaking  through spell resistance more readily than normal.
+Spell Power^OA^66^Your lineage traces back to the young shugenja  Kuni Osaku, who single-handedly held off a massive army of oni at the Battle  of the Cresting Wave.
+Spell Reprieve^LE^9^Your studies of the less restrictive arcane  traditions of old allow you to cast one spell from a prohibited school.
+Spell Specialization^TB^42^You deal more damage with ray or energy missile  spells.
+Spell Stowaway^EL^67^Choose a spell-like ability you possess or a  spell you can cast. You gain the benefits of this magic whenever it is used  near you.
+Spell Thematics^Mag^22^Your spells have a distinct visual or auditory  effect in their manifestation.
+Spell Thematics^PG^44^Your spells manifest with a distinct theme or  appearance.
+Spellcaster Support^OA^66^Your ancestor, Shiba Kaigen, was a samurai who  used his knowledge of spellcraft to help defend a mountain pass from a Lion  invasion.
+Spellcasting Harrier^Dr^74^Spellcasters you threaten find it difficult  to cast defensively.
+Spellcasting Harrier^EL^67^Spellcasters you threaten find it difficult  to cast defensively.
+Spellcasting Prodigy^FRCS^38^You have an exceptional gift for magic.
+Spellcasting Prodigy^PG^44^You have an exceptional gift for magic.
+Spellfire Wielder^Mag^23^You are one of the rare people who have the  innate talent to control raw magic in the form of spellfire.
+Spell-Like Ability Focus^Rac^168^Choose one of your spell-like abilities. This  attack becomes much more potent than normal.
+Spellrazor^RS^144^You have mastered the style of combining a gnome  quickrazor with spellcasting.
+Spellwise^PG^44^You were raised in a land where mighty wizards  are common.
+Spider Bite^PG^176^You gain a poisonous bite like that of a spider.
+Spiked Body^RE^120^Your body is overlaid with hundreds of protruding  spikes that can deal great damage to foes.
+Spinning Halberd^CW^114^You have mastered the style of fighting with  a halberd.
+Spire Walking^Rac^168^Iriaebor is justly known as the City of a Thousand  Spires, for fantastically bizarre, many-storied towers rise from all quarters  of the city and are tightly packed together. As a result, it is possible  to navigate Iriaebor via a network of arches, bridges, stairs, and leapable  gulfs far above the city streets. You are well versed in the skill of navigating  the skyroads of Iriaebor.
+Spirited Charge^PH^100^You are trained at making a devastating mounted  charge.
+Spiritual Force^RE^113^Your forceful inner spirit allows you to deal  more damage with your mind blade.
+Spit Poison^LoM^94^A creature with this feat can spit its poison  as a ranged touch attack.
+Spit Venom^SK^147^You can spit venom in the manner of a spitting  cobra.
+Split Breath^Dr^74^You can split your breath weapon into a pair  of weaker effects.
+Split Psionic Ray^XPH^51^You can affect two targets with a single ray.
+Split Ray^CAr^83^Your ray spells can affect an additional target.
+Split Ray^TB^42^You can affect two targets with a single ray.
+Spontaneous Casting^ECS^61^You can swap a prepared spell on the fly.
+Spontaneous Domain Access^EL^67^Select a domain of spells you have access to.  You can spontaneously convert spells into spells of this domain.
+Spontaneous Healer^CD^84^You can use your spellcasting ability to spontaneously  cast cure spells.
+Spontaneous Spell^EL^67^Select a spell you can cast. You can spontaneously  convert spells of that spell's level into that spell.
+Spontaneous Summoner^CD^85^You can spontaneously cast summon nature's  ally spells.
+Spontaneous Wounder^CD^85^You can use your spellcasting ability to spontaneously  cast inflict spells.
+Spreading Breath^Dr^74^You can convert your breath weapon into a spread  effect.
+Spring Attack^PH^100^You are trained in fast melee attacks and fancy  footwork.
+Spurn Death's Touch^LM^30^You can channel divine energy to remove some  of the harmful effects of attacks made by undead creatures.
+Stable Footing^RE^112^Because of your training and wariness, you are  skilled at keeping your feet in combat and able to move over difficult terrain  with ease.
+Staggering Strike^CAd^112^You can deliver a wound that hampers an opponent's  movement.
+Staggering Strike^Rac^169^You are particularly adept at making cruel and  demoralizing sneak attacks.
+Stalwart Planar Ally^PlH^42^The allies you summon from a specific plane  are tougher than normal.
+Stamp^SS^39^You can stamp the ground to crush and disrupt  opponents.
+Stand Still^XPH^51^You can prevent foes from fleeing or closing.
+Starspawn^LoM^181^Your abnormal body and heritage has become more  pronounced. You grow membranous wings and are comfortable in extreme elevations.
+Steady Concentration^RS^144^You are an expert at avoiding distractions and  focusing your mind, and you can concentrate clearly even in the most stressful  conditions.
+Steady Mountaineer^RS^144^You are so good at climbing cliffs and leaping  across crevasses that distractions don't affect you.
+Stealthy^FRCS^38^Your people are known for their stealthiness.
+Stealthy^PH^101^You are particularly good at avoiding notice.
+Steam Magic^Sto^93^You are skilled at casting fiery spells into  the water, causing terrible gouts of scalding steam.
+Stench of the Dead^UA^94^The odor of decay hangs heavy on you, causing  others to gasp and retch.
+Stigmata^BE^46^You bear the marks of wounds on your body, as  sort of a living martyrdom.
+Still Spell^PH^101^You can cast spells without gestures.
+Stitched Flesh Familiar^LM^30^When you are ready and able to acquire a new  familiar, you may choose to gain a stitched flesh familiar.
+Stone Colossus^Rac^169^You can focus a part of your power to increase  the toughness of your skin.
+Stone Form^RS^144^You can use wild shape to assume a rocklike  form.
+Stone Rage^RS^144^Your bond with the earth and tough hide makes  it easier for you to shrug off blows while you are raging.
+Stone Slide^Rac^169^You have attuned yourself to stone to such an  extent that you can merge with it for a short time.
+Stone Soul^Und^27^You were born with a dwarflike, innate sense  about rock, stone, and construction.
+Stoneback^RS^144^You have studied the techniques of fighting  underground, and you can protect yourself from the dangers of multiple attackers  whenever you can put your back to a solid wall.
+Stoneblood^Rac^169^Your blood is thick like cooling lava, making  it difficult for you to die after falling from injuries.
+Stoneshaper^Rac^169^You have a deep and abiding tie to earth and  stone.
+Stonewalker Fist^Rac^169^You are trained in an unarmed fighting style  that draws on your ability to pass through minerals as if they were air.
+Storm Magic^Fr^50^You gain a boost in spellcasting power during  storms.
+Storm Magic^Sto^94^You gain a boost in spellcasting power during  storms.
+Storm of Throws^EL^67^You become a flurry of thrown weapons, targeting  all nearby opponents.
+Stormheart^PG^44^The sea is in your blood.
+Strafing Breath^DCS^87^You can sustain your breath weapon when you  use it on the wing, covering a larger ground area in its effect.
+Street Smart^FRCS^38^You have learned how to keep informed, ask questions,  and interact with the underworld without raising suspicion.
+Street Smart^PG^44^You know how to keep informed, ask questions,  and interact with the underworld without raising suspicions.
+Strength of the Charger^OA^66^You share the spirit of Utaku Shiko, the founder  of the Utaku Battle Maiden tradition.
+Strength of the Crab^OA^87^You claim descent from Hida, the first Crab.
+Strength of Two^RE^113^Your quori spirit gives you unmatched willpower.
+Strong Mind^ECS^61^You are unusually hard to affect with psionic  powers and mind attacks.
+Strong Mind^Und^27^You are unusually difficult to affect with psionic  powers and mind attacks.
+Strong Soul^FRCS^38^The souls of your people are hard to separate  from their bodies.
+Strong Soul^OA^66^You claim descent from Moto Soro, the simple  peasant who earned his place among samurai and founded the Moto family.
+Strong Soul^PG^44^You possess an innate resistance to fell magic  and supernatural attacks.
+Stunning Fist^PH^101^You know how to strike opponents in vulnerable  areas.
+Subdual Substitution^DD^52^The deity can modify a spell that uses energy  to deal damage to deal subdual damage instead.
+Subdual Substitution^TB^42^You can modify a spell that uses energy to deal  damage to deal nonlethal damage instead.
+Subduing Strike^BE^46^You are adept at striking to deal nonlethal  damage even with normal weapons.
+Subsonics^CAd^112^Your music can affect even those who do not  consciously hear it.
+Subsonics^SaS^40^Your music can affect even those who do not  consciously hear it.
+Subtle Sigil^RD^154^You are able to fade your sigils into invisibility,  but still tap into their magical energy.
+Sudden Empower^CAr^83^You can cast a spell to greater effect without  special preparation.
+Sudden Empower^MH^28^You can cast one spell per day to greater effect  without special preparation.
+Sudden Energy Affinity^MH^28^You can modify a spell's energy type once per  day without special preparation.
+Sudden Enlarge^MH^28^You may cast one spell per day with a greater  range than normal without special preparation.
+Sudden Extend^CAr^83^You can make a spell last longer than normal  without special preparation.
+Sudden Extend^MH^28^You can cast one spell per day with a longer  duration than normal without special preparation.
+Sudden Maximize^CAr^83^You can cast a spell to maximum effect without  special preparation.
+Sudden Maximize^MH^28^Once per day you can cast a spell to maximum  effect without special preparation.
+Sudden Quicken^CAr^83^You can cast a spell with a moment's thought  without special preparation.
+Sudden Quicken^MH^28^Once per day you can cast a spell with a moment's  thought without special preparation.
+Sudden Silent^CAr^83^You can cast a spell silently without special  preparation.
+Sudden Silent^MH^28^Once per day you can cast a spell silently without  special preparation.
+Sudden Still^CAr^83^You can cast a spell without gestures or special  preparation.
+Sudden Still^MH^28^Once per day you can cast a spell without gestures  without special preparation.
+Sudden Widen^CAr^83^You can increase a spell's area without special  preparation.
+Sudden Widen^MH^28^Once per day you can increase the area of a  spell without special preparation.
+Sugliin Mastery^Fr^50^You are a master at fighting with the massive  sugliin.
+Summon Earth Elemental^Rac^169^Like many experienced deep gnomes, you have  developed the ability to summon earth elementals to help you with tasks.
+Sun School^CW^112^You have learned a number of esoteric martial  arts techniques inspired by the sun.
+Sunken Song^Sto^94^You can project your voice underwater.
+Superior Expertise^DD^52^The deity has mastered the art of defense in  combat.
+Superior Expertise^FP^215^You have mastered the art of defense in combat.
+Superior Expertise^OA^66^You have mastered the art of defense in combat.
+Superior Initiative^EL^67^You can react even more quickly than normal  in a fight.
+Supernatural Blow^MW^25^Choose one favored enemy that is immune to critical  hits. You know how to place blows against this opponent for best effect.
+Supernatural Transformation^SS^39^You convert a spell-like ability to a supernatural  ability.
+Suppress Weakness ^Dr^74^Your vulnerability to an energy type is reduced.
+Surefooted^PG^45^You are used to fighting on steep slopes and  treacherous surfaces.
+Surrogate Spellcasting^SS^39^You use substitute verbal and somatic components  when casting spells.
+Survivor^FRCS^38^Your people thrive in regions that others find  uninhabitable, and excel at uncovering the secrets of the wilderness and  surviving to tell the tale.
+Survivor^Gh^39^Your people thrive in a region that others find  uninhabitable, and you excel at uncovering the secrets of the wilderness  and surviving to tell the tale.
+Survivor^PG^45^Your people thrive in places that others find  almost uninhabitable, and you know many of the secrets of the wilderness.
+Svirfneblin Figment^Rac^169^Your time underground has made you acutely aware  of even slight differences in sound and vision in caves that have never  seen the sun. Accordingly, your illusions are finely tuned and ultra-realistic.
+Swamp Stalker^SS^40^You are adapted to a marshy environment.
+Swarm of Arrows^EL^67^You can fire a veritable storm of arrows at  nearby opponents.
+Swarmfighting^CW^105^You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters.
+Swarmfighting^Rac^169^You and allies with this feat can coordinate  melee attacks against a single target and are adept at fighting side by  side in close quarters.
+Swarm's Embrace^Sh^158^You have a natural affinity for swarms and can  stand in the midst of a swarm with few harmful effects.
+Swift and Silent^PG^45^The shadows are your friends, and your footfalls  are whispers of death.
+Swiftwing Elite^RE^116^Your swiftwing shifter trait improves.
+Swim Like a Fish^CD^85^You can breathe and swim underwater with grace.
+Swim-By Attack^Sto^94^You can attack in the middle of a fast pass  by your opponent.
+Tactile Trapsmith^CAd^112^You can rely on your rapid reflexes and nimble  fingers instead of your intellect when searching a room or when disabling  a trap.
+Tail Constrict^Dr^74^You can make constriction attacks with your  tail.
+Tail Rattle^SK^147^Your tail gains a rattle like that of a serpent.
+Tail Sweep Knockdown^Dr^74^Your tail sweep attack knocks opponents prone.
+Talenta Warrior^RE^112^You have trained with the ancestral weapons  of the Talenta halflings and are particularly adept at striking from the  back of a dinosaur mount.
+Talented^XPH^51^You can overchannel powers with less cost to  yourself.
+Talfirian Song^Rac^170^You can use the power of your bardic music to  enhance your illusion spells.
+Tall Mouther Hunter^ShS^21^Because of your cultural hatred for tall mouthers,  you have had specific training in how best to fight them.
+Tattoo Focus^DMG^194^You bear the powerful magical tattoos of a Red  Wizard of Thay.
+Tattoo Focus^FRCS^38^You bear the powerful magic tattoos of a Red  Wizard of Thay.
+Tattoo Focus^PG^45^You bear the powerful magical tattoos of a Red  Wizard of Thay.
+Tattoo Magic^LD^189^You can create tattoos that store spells.
+Tattoo Magic^Rac^170^You can create tattoos that store spells.
+Temper Ectoplasm^Gh^39^You can make durable equipment out of ectoplasm.
+Tempest Breath^Dr^74^You can make your breath weapon strike with  the force of a windstorm.
+Tenacious Magic^EL^68^Choose one of your spells or spell-like abilities.  That magic cannot be dispelled, only suppressed.
+Tenacious Magic^FRCS^38^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
+Tenacious Magic^PG^45^You can use the Shadow Weave to make your spells  harder for Weave users to dispel.
+Terrifying Rage^DMG^210^While in a rage, you panic your opponents.
+Terrifying Rage^EL^68^While in a rage, you panic your opponents.
+The Gentle Way Mastery^OA^81^You have mastered the martial arts style of  'The Gentle Way' -- a soft form emphasizing throws and movement.
+Theocrat^Rac^170^You have the delicate touch needed to maintain  the favor of your patron deity and the political skills needed to survive  in the trenches of bureaucratic warfare common in the lands ruled by agents  of the Mulhorandi pantheon.
+Thicken Mucus^LoM^23^An aboleth with this feat can produce mucus  that is thicker than normal, and other creatures find it difficult to swim  through.
+Thick-Skinned^SS^40^Your tough hide grants improved damage reduction.
+Thrall Bred^LoM^182^Spawned in the breeding pits of the mind flayers  or the beholders, you have unusual strength and hardiness, as well as loyalty.
+Thrall to Demon^BV^50^The character formally supplicates himself to  a demon prince.
+Thrall to Demon^CR^23^You formally supplicate yourself to a demon  prince.
+Three Mountains^CW^114^You are a master of fighting with powerful bludgeoning  weapons.
+Throw Anything^CW^105^In your hands, any weapon becomes a deadly ranged  weapon.
+Throw Anything^SF^9^In your hands, any weapon becomes a deadly ranged  weapon.
+Thug^FRCS^38^Your people know how to get the jump on the  competition and push other people around.
+Thug^PG^45^You have a knack for getting the jump on the  competition and pushing other people around.
+Thunder Twin^FRCS^38^You are one of the dwarven generation of twins  born after Moradin's Thunder Blessing in the Year of Thunder (1306 DC).
+Thunder Twin^PG^46^You are one of the generation of dwarf twins  born after Moradin's Thunder Blessing in the Year of Thunder.
+Thunderclap^SS^40^You create a cone of deafening sound by clapping  two limbs together.
+Thundering Rage^EL^68^Your rage attacks can cause thunderous roars  that can deafen opponents.
+Tireless^PG^46^You don't know the meaning of the word 'quit.'
+Titan Fighting^RS^145^You have been trained to fight larger creatures,  and you are adept at dodging their attacks.
+Tomb-Born Fortitude^LM^30^The power of undeath taints you, body and soul.  Its power has hardened your flesh and given it the foul look of the grave.
+Tomb-Born Resilience^LM^30^The power of undeath taints you, deadening your  mind and body to the effects of mind-controlling magic, poison, and disease.
+Tomb-Born Vitality^LM^31^The power of undeath taints you, body and soul.  Its power has removed your need to sleep and eat.
+Tomb-Tainted Soul^LM^31^Your soul is tainted by the foul touch of undeath.
+Toothed Blow^Sto^94^You are able to hammer your foes more effectively  underwater.
+Tormented Knight^CR^23^You are inexorably bound to the loathsome yugoloths  that lurk in the Barrens of Doom and Despair, and you strive to bring misery  and pain to all creatures that oppose them.
+Totem Companion^ECS^61^Instead of an animal companion, you have your  totem magical beast as a companion.
+Touch Attack Specialization^Gh^39^Choose one of your ghost touch attacks that  deals hit point damage, ability damage, or ability drain, such as Corrupting  Touch. You are especially good at using this touch attack.
+Touch of Benevolence^CR^22^Despite your evil alignment, you are prone to  moments of benevolence and mercy.
+Touch of Golden Ice^BE^47^Your touch is poisonous to evil creatures.
+Touch of Hate^PG^177^Because you are favored by Bane, you can transform  animals into evil minions.
+Touch Spell Specialization^CAr^83^You deal extra damage with touch spells.
+Touchstone^Sa^53^You forge a link with a power-rich location,  referred to as a touchstone site.
+Toughness^PH^101^You are tougher than normal.
+Tower Shield Proficiency^PH^101^You are proficient with tower shields.
+Toxic Mucus^LoM^23^An aboleth with this feat can produce mucus  that is poisonous to other creatures.
+Track^PH^101^You can follow the trails of creatures and characters  across most types of terrain.
+Trample^PH^101^You are trained in using your mount to knock  down opponents.
+Transdimensional Spell^CAr^84^You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area.
+Transdimensional Spell^CD^85^You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area.
+Transdimensional Spell^UE^45^You can cast spells that affect targets lurking  in coexistent planes and extradimensional spaces whose entrances fall within  the spell's area.
+Transfer Legacy^WL^16^You can temporarily transfer one of your legacy  item's abilities to another magic item.
+Trap Sense^EL^68^You can sense nearby traps even if not actively  searching for them.
+Trapmaster^LE^9^You have studied the funereal architecture and  lethal traps of a dozen long-dead cultures, which gives you an uncanny knack  for avoiding traps.
+Treefriend^SS^40^You are adapted to a forest environment.
+Treetopper^FRCS^38^Your people are at home in the trees and high  places, daring falls that paralyze most other folk in abject terror.
+Treetopper^PG^46^Your people are at home in the trees and high  places.
+Tremendous Charge^DCS^87^You know how to use your mount's power to make  your lance attacks even more deadly.
+Trivial Knowledge^RS^145^You have the ability to dredge up obscure knowledge  in appropriate situations.
+True Believer^CD^86^Your deity rewards your unquestioning faith  and dedication.
+Truebond^DMG2^232^Your bond to your chosen item becomes stronger.
+Truedive Elite^RE^116^Your truedive shifter trait improves.
+Trustworthy^SaS^40^Others feel comfortable telling you their secrets.
+Tunnel Fighting^RS^145^You are adept at maneuvering and fighting in  tight spaces and underground passages.
+Tunnel Riding^RS^145^You are particularly adept at maneuvering mounts  through tight spaces and underground passages.
+Tunnelfighter^Und^27^You can fight more naturally in the cramped  and close quarters of caves and tunnels than usual.
+Tunnelrunner^Und^27^You can move naturally in the cramped quarters  of caves and tunnels.
+Turtle Dart^RS^145^You have mastered the style of fighting with  a short sword while wearing extremely heavy armor and carrying a large shield.
+Twin Power^XPH^51^You can manifest a power simultaneously with  another power just like it.
+Twin Spell^CAr^84^You can simultaneously cast a single spell twice.
+Twin Spell^FRCS^39^You can cast a spell simultaneously with another  spell just like it.
+Twin Spell^PG^46^You can cast a spell simultaneously with another  spell just like it.
+Twin Spell^TB^42^You can cast a spell simultaneously with another  spell just like it.
+Twin Sword Style^FRCS^39^You have mastered a style of defense that others  find frustrating.
+Twin Sword Style^Gh^39^You have mastered a style of defense that others  find frustrating.
+Twin Sword Style^PG^46^You have mastered a defensive style based on  wielding a blade in each hand.
+Two-Weapon Defense^PH^102^Your two-weapon fighting style bolsters your  defense as well as your offense.
+Two-Weapon Fighting^PH^102^You can fight with a weapon in each hand. You  can make one extra attack each round with the second weapon.
+Two-Weapon Rend^EL^68^You can rend opponents when fighting with two  weapons.
+Unarmored Body^RE^120^Your body is crafted without its normal layer  of armor, trading off physical strength for magical potential.
+Unavoidable Strike^XPH^52^You can make an unarmed strike or use a natural  weapon against your foe as if delivering a touch attack.
+Unbalancing Strike^OA^66^You can strike a humanoid opponent's joints  to knock him off balance.
+Uncanny Accuracy^EL^68^You can ignore anything less than total cover  or total concealment when using ranged weapons.
+Uncanny Scent^SS^40^You can pinpoint scents at a greater distance.
+Unconditional Power^XPH^52^Disabling conditions do not hold you back.
+Undead Empathy^ECS^61^You are adept at communicating with and influencing  the undead.
+Undead Leadership^LM^31^You gain the service of loyal undead followers.
+Undead Mastery^CD^90^You can command a greater number of undead than  normal.
+Undead Mastery^EL^68^You can command a greater number of undead than  normal.
+Underfoot Combat^RW^152^You can enter the space that a foe at least  two size categories bigger than you occupies.
+Undying Fate^RD^155^You have pledged your unswerving obedience to  Wee Jas, and she in turn has granted you special insight into life and death.
+Unholy Strike^CD^90^Your attacks deal great damage to good creatures.
+Unholy Strike^EL^68^Your attacks deal great damage to good creatures.
+Unquenchable Flame of Life^LM^31^You are hardened to the attacks of the undead.
+Up the Walls^XPH^52^You can run on walls for brief distances.
+Urban Stealth^RD^154^You are particularly adept at moving quietly  and unnoticed through the city.
+Urban Tracking^ECS^61^You can track the location of missing persons  or wanted individuals within communities.
+Urban Tracking^RD^154^You can track down the location of missing persons  or wanted individuals within communities.
+Vampire Hunter^LM^31^Your knowledge of vampires has given you the  extraordinary ability to detect subtle signs of their presence and to resist  their dominating gaze ability.
+Veil of Cyric^CSW^146^You have reconciled yourself to the unfortunate  truth that hard decisions and regrettable actions are necessary in the service  of your deity.
+Vermin Companion^ECS^62^Instead of an animal companion, you have a vermin  creature as a companion.
+Vermin Shape^ECS^62^You can use your wild shape ability to assume  vermin forms instead of animal forms.
+Vermin Wild Shape^EL^68^You can wild shape into vermin form.
+Verminfriend^BV^50^Vermin regard the character better than they  would normally.
+Versatile Performer^CAd^112^You are skilled at many kinds of performances.
+Veteran Knowledge^HB^99^You are capable of seeing potential battlefield  advantages where others cannot.
+Via Negativa^CR^22^You can channel greater amounts of negative  energy into your inflict spells.
+Vicious Wound^SS^40^Damage you deal causes wounds that bleed excessively.
+Vile Ki Strike^BV^50^The character can focus evil power into his  unarmed strike.
+Vile Martial Strike^BV^50^The character can focus evil power in her weapon  blows.
+Vile Natural Attack^BV^50^The character can focus evil power into his  natural attacks.
+Violate Spell^BV^50^The character can transform one of his spells  into an evil spell, and the wounds the spell inflicts are tainted with the  foulest evil.
+Violate Spell-Like Ability^BV^50^The creature's spell-like abilities are particularly  tainted with evil.
+Virulent Poison^SS^40^Your poison attack is more effective.
+Vorpal Strike^EL^68^Your unarmed strikes can behead your opponents.
+Vow of Abstinence^BE^47^You have taken a sacred vow to abstain from  alcoholic beverages, drugs, stimulants such as caffeine, and intoxication.
+Vow of Chastity^BE^47^You have taken a sacred vow to refrain from  marriage and sexual intercourse.
+Vow of Nonviolence^BE^47^You have taken a sacred vow to avoid violence  against humanoids.
+Vow of Obedience^BE^48^You have taken a sacred vow to live according  to the dictates of another, generally your superior in a religious order  or similar organization.
+Vow of Peace^BE^48^You have taken a sacred vow to abstain from  harming any living creature.
+Vow of Poverty^BE^48^You have taken a sacred vow to forswear material  possessions.
+Vow of Purity^BE^48^You have taken a sacred vow to avoid contact  with dead flesh.
+Vremyonni Training^UE^45^You have had more than the typical amount of  training with the vremyonni, the Old Ones who research spells and  craft magic items for the Witches of Rashemen.
+Wand Mastery^ECS^62^Wands are far more potent in your hands.
+Wandstrike^CAr^84^You can channel the magical energy of a wand  through your melee attacks.
+Warden Initiate^ECS^62^You have been trained in the ancient druidic  tradition of the Wardens of the Wood, a sect dedicated to protecting the  eastern plain and the great woods of the Eldeen Reaches.
+Warped Mind^LoM^182^Your tainted form has altered the physical nature  of your brain, making you resistant to mental effects and more capable of  unleashing the power of your mind on others.
+Warrior Instinct^OA^66^Your ancestor, Matsu Hitomi, was the most famous  female samurai of the early Empire.
+Warrior Shugenja^OA^66^Your ancestor, Agasha Nodotai, was a shugenja  well versed in the code of bushido and the way of war.
+Water Adaptation^Rac^170^You favor your aquatic elven parent and have  developed the ability to breathe and move about in water easily.
+Water Adaptation^Sto^94^You favor your aquatic elf parent and have developed  the ability to breathe and move about in water easily.
+Water Heritage^PlH^42^You are descended from creatures native to the  Plane of Water.
+Waterspawn^LoM^182^Your abnormal body and heritage has become more  pronounced. You have prominent fins and are supremely well adapted to the  icy deeps.
+Weakening Touch^CW^106^You can temporarily weaken an opponent with  your unarmed strike.
+Weapon Finesse^PH^102^You are especially skilled at using weapons  that can benefit as much from Dexterity as from Strength.
+Weapon Focus^PH^102^Choose one type of weapon. You can also choose  unarmed strike or grapple (or ray, if you are a spellcaster) as a weapon  for purposes of this feat. You are especially good with this weapon.
+Weapon Group (Axes)^UA^95^You understand how to use axes and axelike weapons.
+Weapon Group (Basic Weapons)^UA^95^You understand how to use a few basic weapons.
+Weapon Group (Bows)^UA^95^You understand how to use bows.
+Weapon Group (Claw Weapons)^UA^95^You understand how to use weapons strapped to  the hands.
+Weapon Group (Crossbows)^UA^95^You understand how to use crossbows.
+Weapon Group (Druid Weapons)^UA^95^You understand how to use weapons favored by  druids.
+Weapon Group (Exotic Double Weapon)^UA^95^You understand how to use the exotic double  weapons associated with the weapon groups that you have mastered.
+Weapon Group (Exotic Weapons)^UA^96^You understand how to use the exotic weapons  associated with the weapon groups that you have mastered.
+Weapon Group (Flails and Chains)^UA^96^You understand how to use flails and chain weapons.
+Weapon Group (Heavy Blades)^UA^96^You understand how to use large bladed weapons.
+Weapon Group (Light Blades)^UA^96^You understand how to use light bladed weapons.
+Weapon Group (Maces and Clubs)^UA^96^You understand how to use maces and clubs.
+Weapon Group (Monk Weapons)^UA^97^You understand how to use weapons normally favored  by monks.
+Weapon Group (Picks and Hammers)^UA^97^You understand how to use picks and hammers.
+Weapon Group (Polearms)^UA^97^You understand how to use polearms.
+Weapon Group (Slings and Thrown Weapons)^UA^97^You understand how to use slings and handheld  thrown weapons.
+Weapon Group (Spears and Lances)^UA^97^You understand how to use spears and javelins.
+Weapon Specialization^PH^102^Choose one type of weapon for which you have  already selected the Weapon Focus feat. You can also choose unarmed strike  or grapple as your weapon for purposes of this feat. You deal extra damage  when using this weapon.
+Whirling Steel Strike^ECS^62^Through monastic weapon training, you have mastered  a fighting style that makes use of an unusual monk weapon: the longsword.
+Whirlwind Attack^PH^102^You can strike nearby opponents in an amazing,  spinning attack
+Whirlwind Tail Sweep^Dr^75^You can sweep your tail in a circular arc.
+Whispered Secrets^RD^155^You revere the Maimed Lord and have devoted  your miserable, worthless life to learning but a few of the Whispered One's  secrets.
+White Scorpion Strike^RE^112^Your fists and feet sting like the dread white  scorpion and are particularly effective against undead.
+Widen Aura of Courage^EL^69^Your aura of courage is wider than normal.
+Widen Aura of Despair^EL^69^Your aura of despair is wider than normal.
+Widen Power^XPH^52^You can increase the area of your powers.
+Widen Spell ^DD^52^The deity can increase the area of its spells.
+Widen Spell^Mag^23^You can increase the area of your spells.
+Widen Spell^PH^102^You can increase the area of your spells.
+Widen Spell^TB^42^You can increase the area of your spells.
+Wield Oversized Weapon^CW^153^You can use larger than normal weapons with  ease.
+Wild Talent^LoM^182^Your mind wakes to a previously unrealized talent  for psionics.
+Wild Talent^XPH^52^Your mind wakes to a previously unrealized talent  for psionics.
+Wildhunt Elite^RE^116^Your shifter-enhanced instincts and senses allow  you to detect concealed and invisible creatures.
+Willing Deformity^BV^50^Through scarification, self-mutilation, and  supplication to dark power, the character intentionally mars her own body.
+Winged Warrior^RW^153^You use your wings for more than just flying.
+Wingover^MM^304^The creature can change direction quickly while  flying.
+Wingover^MM2^18^The creature can change direction quickly while  flying.
+Wingover^MW^25^You change direction quickly once per round  while airborne.
+Wingsinger^Sto^94^You can use song or a wind instrument to compel  the winds to obey you.
+Wingstorm^Dr^75^You can flatten targets with blasts of air from  your wings.
+Wingstorm^SS^40^You can flatten targets with blasts of air from  your wings.
+Winter's Champion^Fr^50^Your paladin spell list is enhanced.
+Winter's Child^SS^40^You are adapted to a cold environment.
+Winter's Mount^Fr^50^Your special mount is native to the frostfell.
+Wisdom Breeds Caution^Und^27^Not getting into a dangerous situation is generally  the wisest course, but if danger is unavoidable, you're prepared. You rely  more on caution and forethought than you do on physical prowess.
+Wise to Your Ways^Gh^39^You are particularly resistant to the unusual  attacks of your favored enemy.
+Witchlight^Gh^39^You can create witchlight, a harmless faint  light, on yourself or an object.
+Wolf Berserker^UE^45^You have studied the fighting style of the wolf  and employ its tactics in combat.
+Wolfpack^RW^153^You can gain an extra advantage when you and  your allies can gang up on a foe.
+Wolverine's Rage^CD^86^You can fly into a berserk rage when injured.
+Woodland Archer^RW^154^You have honed your archery ability in the wilds  of the forest.
+Woodwise^ShS^21^You are trained in fighting in woodlands and  know how to use the terrain to best advantage.
+Woodwise^UE^45^You are trained in fighting in woodlands and  know how to use the terrain to best advantage.
+Words of Creation^BE^48^You have learned a few of the words that were  spoken to create the world.
+Wounding Attack^XPH^52^Your vicious attacks wound your foe.
+Wounding Spell^LE^9^Because you have studied the cruel arts of the  Athalantan magelords of old, you know how to cast spells that cause terrible,  bleeding wounds.
+Yondalla's Sense^RW^152^You display a shrewd perception of danger. Other  halflings say the blessing of Yondalla is upon you.
+Zen Archery^CW^106^Your intuition guides your hand when you use  a ranged weapon.
+Zen Archery^SF^9^Your intuition guides your hand when you use  a ranged weapon.
+Zone of Animation^CD^90^You can channel negative energy to animate  undead.
+Zone of Animation^EL^69^You can channel negative energy to animate  undead.
+Broken One's Sacrifice^CV^28^Your dedication to Ilmater's philosophy has given you the power to take attacks directed at others.
+Carmendine Monk^CV^28^You have learned that study is just as important as insight to finding enlightenment.
+Defender of the Homeland^CV^28^You have sworn a sacred oath to protect your country from evil.
+Detect Shadow Weave User^CV^28^You can determine if a magic item or spellcaster is using the Weave or the Shadow Weave.
+Druuth Slayer^CV^29^You have studied the lore of the druuth (a cabal of doppelgangers led by a mind flayer) and know how to recognize and resist their powers.
+Duerran Metaform Training^CV^29^Your studies have shown you the way to link your psionics and your enlarge person spell-like ability.
+Duerran Stealth Training^CV^29^Your studies have shown you the way to link your psionics and your invisibility spell-like ability.
+From Smite to Song^CV^29^You can channel your destructive holy energy into powerful song magic for the glory of Milil.
+Initiate of Anhur^CV^30^You have been initiated into the greatest secrets of Anhur's church.
+Initiate of Arvoreen^CV^30^You have been initiated into the greatest secrets of Arvoreen's church.
+Initiate of Baravar Cloakshadow^CV^30^You have been initiated into the greatest secrets of Baravar Cloakshadow's church.
+Initiate of Eilistraee^CV^30^You have been initiated into the greatest secrets of Eilistraee's church.
+Initiate of the Holy Realm^CV^30^You have been initiated into the greatest secrets of one of the faiths of the Holy Realm (Chauntea, Helm, Lathander, Selune, or Sune).
+Initiate of Horus-Re^CV^30^You have been initiated into the greatest secrets of Horus-Re's church.
+Initiate of Milil^CV^31^You have been initiated into the greatest secrets of Milil's church.
+Initiate of Nobanion^CV^31^You have been initiated into the greatest secrets of Nobanion's church.
+Initiate of Torm^CV^31^You have been initiated into the greatest secrets of Torm's church.
+Initiate of Tymora^CV^32^You have been initiated into the greatest secrets of Tymora's church.
+Knight of the Red Falcon^CV^32^Your military order has a legendary ability to survive against overwhelming odds.
+Knight of the Risen Scepter^CV^32^Your military order is dedicated to fighting Set and his minions, and even death cannot stop you from this task.
+Knight of Tyr's Holy Judgment^CV^32^You can draw upon the power of Tyr to sense and understand the law and to locate devils.
+Knight ot Tyr's Merciful Sword^CV^33^You can draw upon the power of Tyr to sense where you are needed.
+Mark of the Triad^CV^33^You have been initiated into the greatest secrets of the Triad, the godly triumvirate of Tyr, Torm, and Ilmater.
+Overcome Shadow Weave^CV^33^You understand the strengths and weaknesses of the Shadow Weave and are more resistant to its tricks.
+Paladin of the Noble Heart^CV^33^You are tasked by Ilmater to eliminate cruelty from the world, particularly that of Loviatar.
+Silver Blood^CV^33^You have magically or alchemically imbued your flesh and blood with silver, making you resistant to lycanthrope attacks.
+Silver Fang^CV^33^By following a ritual taught by the Fangshields, your natural attacks are suffused with the power of silver and are fully effective against lycanthropes.
+Smiting Power^CV^33^You use your smite ability to augment other combat maneuvers.
+Sword of the Arcane Order^CV^34^Members of your military order have a special connection with arcane magic.
+Sun Soul Monk^CV^34^Your training with this monk order gives you special powers depending on which sect you follow.
+Archivist of Nature^HH^119^In addition to your studies of the darkness, you have spent time studying giants and fey.
+Bane Magic^HH^119^Your spells deal extra damage to a particular type of creature.
+Blood Calls to Blood^HH^120^Exploring the latent potential in your blood due to your fiendish descent, you learn how to better adapt to the mystical attacks of your forebears.
+Corrupt Arcana^HH^120^You can prepare and cast corrupt spells.
+Corrupt Spell Focus^HH^120^All spells you cast that have a corrupt component (such as call forth the beast, master's lament, or chain of sorrow) are more potent than normal.
+Debilitating Spell^HH^120^By calling upon the taint within, you add a malign power to your offensive spells.
+Debilitating Strike^HH^120^By calling upon the taint within, you add a malign power to your melee attacks.
+Deformity (Skin)^HH^121^Due to a regimen of deliberate abuse, you have roughened your skin until it has grown as coarse and tough as rhino hide.
+Deformity (Tall)^HH^121^Through long and painful stints on the rack, bolstered by the surgical implantation of various splints and struts, you have stretched yourself to well over 7 feet in height.
+Deformity (Teeth)^HH^121^By filing your teeth to points and brutalizing your gums, you gain a hideous smile full of razor-sharp teeth that enable you to make a grisly bite attack.
+Deformity (Tongue)^HH^121^Through protracted self-mutilation that involves frequently piercing your tongue and dipping it in acid, your tongue becomes hideous to behold but oddly sensitive to the environment.
+Disease Immunity^HH^121^Whether due to prolonged exposure or natural hardiness, you have grown immune to some diseases and resistant to all others.
+Draconic Archivist^HH^122^In addition to your studies of the darkness, you have spent time studying dragons and constructs.
+Dreamtelling^HH^122^You can use your Knowledge (the planes) skill to interpret your dreams or the dreams of others, thus gleaning useful information and insights.
+Eldritch Corruption^HH^122^You can add power to your spells or spell-like abilities at the expense of your companions' health.
+Font of Life^HH^122^Your life-force is strong enough to make you highly resistant to all forms of energy drain and level loss.
+Forbidden Lore^HH^123^You gain hideous insights into subjects not meant to be understood by mortal minds.
+Greater Corrupt Spell Focus^HH^123^Your corrupt spells are now even more potent than they were before.
+Haunting Melody^HH^123^You can use your music to inspire fear.
+Improved Oneiromancy^HH^123^With the Improved Oneiromancy feat, you gain additional dream-related spellcasting abilities.
+Lunatic Insight^HH^123^Your madness grants you insight and knowledge.
+Mad Faith^HH^123^Your depravity has twisted the connection between you and your patron deity. You suffer flashes of insight interrupted by flashes of madness.
+Master of Knowledge^HH^123^You have spent most of your life in study, and it comes naturally to you now.
+Oneiromancy^HH^123^You gain a number of abilities and advantages related to dreams and magic.
+Pure Soul^HH^124^Your faith or purity of mind overrides the evils within you. You are immune to taint.
+Spirit Sense^HH^124^You can see and communicate with the souls of the recently departed.
+Surge of Malevolence^HH^124^You empower yourself by drawing on the taint within.
+Tainted Fury^HH^124^You can channel your physical corruption into a state of fury.
+Touch of Taint^HH^124^One of your attack forms that normally deals ability damage, ability drain, or energy drain can also deal corruption or depravity.
+Unnatural Will^HH^124^You have learned to focus your force of personality and inner strength to stand against fearful circumstances.
+Willing Deformity^HH^125^Through scarification, self-mutilation, or supplication to dark powers, you intentionally mar your own body.
+Augment Elemental^MoE^46^Your knowledge of planar magic allows you to imbue your summoned elementals with extraordinary combat prowess and durability.
+Cull Wand Essence^MoE^46^You can focus the raw magical energy of a wand or staff into a beam of energy.
+Deathless Fleshgrafter^MoE^46^You can grow and graft the tissues and body parts of deathless creatures onto others, granting the recipients of your grafts new, potent abilities.
+Dorje Mastery^MoE^46^Psionic dorjes are more potent in your hands.
+Dragon Prophesier^MoE^46^Like the dragons, you seek to untangle and perceive the record of everything that has been, and more important, what will be.
+Dragon Totem Focus^MoE^46^Your focus allows you to enjoy the benefit of a dragon totem ritual longer than normal.
+Dragon Totem Lorekeeper^MoE^47^You have been instructed in how to perform the rituals of dragon totem magic.
+Dragon Totem Scion^MoE^47^You are naturally attuned to the magic of the dragon totem ritual.
+Eldeen Plantgrafter^MoE^47^You can create and apply plant grafts onto others, granting the recipients of your grafts new, potent abilities.
+Elemental Grafter^MoE^47^You can create and apply elemental grafts onto others, granting the recipients of your grafts new, potent abilities.
+Elemental Helmsman^MoE^47^You are more capable of piloting an elemental vessel.
+Elemental Smite^MoE^47^You can channel the energy associated with one of your elemental grafts into your melee attacks.
+Etch Schema^MoE^47^You can create a minor schema.
+Heroic Companion^MoE^48^Your luck extends to your companion creature.
+Heroic Focus^MoE^48^Despite the dangers all around, you can quickly regain your psionic focus.
+Improved Homunculus^MoE^49^You are adept at improving and modifying your homunculus. Whenever you advance your homunculus's Hit Dice, you can also imbue it with special supernatural abilities.
+Prophecy's Artifex^MoE^50^Your perception of the draconic Prophecy gives you insights that allow you to transcend the normal limits of magic item use.
+Prophecy's Explorer^MoE^50^Your perception of the draconic Prophecy imbues you with a preternatural sense of your surroundings, enabling you to move easily and quickly through dangerous areas.
+Prophecy's Hero^MoE^50^Your perception of the draconic Prophecy charges you with the will to prevail, providing you with the opportunity to see a way to victory even when the odds are stacked against you.
+Prophecy's Mind^MoE^50^You meld your perception of the draconic Prophecy with a mental focus that provides you with momentary warning when death is at hand.
+Prophecy's Shaper^MoE^50^Your perception of the draconic Prophecy is such that you can disrupt reality and make your spells more powerful than reality would normally allow.
+Prophecy's Shepherd^MoE^50^Your perception of the draconic Prophecy is such that you can alter the natural flow of the world by connecting your knowledge of life-force with the world around you.
+Prophecy's Slayer^MoE^51^Your perception of the draconic Prophecy includes a keen appreciation of life. You recognize how fragile and tenuous life truly is when balanced against your lethal foreknowledge.
+Psiforged Body^MoE^51^As a warforged, your body can be crafted using trace amounts of psionically resonant deep crystal, providing you with increased psionic power and the ability to store psionic energy in your body. If you take this feat, you will often be referred to as a psiforged.
+Psionic Luck^MoE^51^Your psionic focus improves your luck.
+Psychic Rush^MoE^51^You can occasionally manifest a psionic power with less effort.
+Quicken Dragonmark^MoE^51^You can use your dragonmark abilities more quickly.
+Rapid Infusion^MoE^51^You can imbue an item with an infusion more quickly than normal.
+Symbiont Mastery^MoE^51^You have stronger control over an attached symbiont than regular creatures, and you gain vitality for each symbiont attached to you.
+Wand Surge^MoE^51^You can squeeze more magic out of charged items.
+Azure Enmity^MoI^34^You can channel incarnum to enhance your ability to deal damage to your favored enemies.
+Azure Talent^MoI^34^The soul energy of incarnum increases your mental capacity.
+Azure Touch^MoI^34^You can channel incarnum to enhance your abilit to heal.
+Azure Toughness^MoI^35^You can use incarnumto boost your physical vigor.
+Azure Turning^MoI^35^You can blast ndead with incarnum-purified positive energy.
+Azure Wild Shape^MoI^35^You can channel incarnum to enhance your combat prowess while wild shaped.
+Bonus Essentia^MoI^35^You are better able to harness your personal store of incarnum.
+Cerulean Fortitude^MoI^35^You can use incarnum to boost your ability to resist effects that would adversely affect your health.
+Cerulean Reflexes^MoI^35^You can use incarnum to boost your ability to avoid harm.
+Cerulean Will^MoI^35^You can use incarnum to boost your willpower.
+Cobalt Charge^MoI^35^You can channel incarnum to deal devastating strikes when charging.
+Cobalt Critical^MoI^35^You can focus your spirit into your melee weapon attacks, dealing more damage with successful critical strikes.
+Cobalt Expertise^MoI^35^By channeling the soul energy of weapon masters past, present, and future, you become more adept at maneuvers of skill and expertise.
+Cobalt Power^MoI^37^By channeling the soul energy of brutal warriors past, present, and future, you become more capable of overcoming your enemies through sheer strength.
+Cobalt Precision^MoI^37^You can focus your soul energy into your ranged attacks, dealing more damage with successful critical hits.
+Cobalt Rage^MoI^37^You can channel incarnum to enhance your rage. When you do so, your eyes turn deep blue in color.
+Divine Soultouch^MoI^37^You can channel positive or negative energy to imbue yourself with incarnum.
+Double Chakra^MoI^38^One of your chakras becomes capable of holding more incarnum than it is normally capable of containing.
+Expanded Soulmeld Capacity^MoI^38^Your soul's tie to incarnum allows you to maintain more essentia in a single soulmeld.
+Healing Soul^MoI^38^You can draw upon the soul energy of incarnum to heal your wounds.
+Heart of Incarnum^MoI^38^You tap into the power of your heart chakra to gain resilience.
+Improved Essentia Capacity^MoI^38^Your capability of investing essentia improves.
+Incarnum-Fortified Body^MoI^38^The incarnum within you strengthens your body's toughness, enabling you to withstand greater injury.
+Incarnum Resistance^MoI^38^Your body, untainted by incarnum, is not easily affected by the power of soul energy.
+Incarnum Spellshaping^MoI^38^You gain the ability to invest incarnum into your spellcasting.
+Indigo Strike^MoI^38^You can channel incarnum to enhance your ability to deal damage with your skirmish attack, sneak attack or sudden strike.
+Midnight Augmentation^MoI^38^You can augment a psionic power with your personal soul energy rather than mental energy.
+Midnight Dodge^MoI^39^You can channel incarnum to enhance your ability to avoid attacks against you.
+Midnight Metamagic^MoI^39^You can channel incarnum to alter your prepared spells.
+Necrocarnum Acolyte^MoI^39^You have experienced the power of necrocarnum, a dark and twisted form of incarnum.
+Open Greater Chakra^MoI^39^You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra.
+Open Least Chakra^MoI^39^You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra.
+Open Lesser Chakra^MoI^40^You open up one of your body's centers of power, allowing you to bind a soulmeld or a magic item to that chakra.
+Psycarnum Blade^MoI^40^You can forge your mind blade from a mixture of mental and soul energy, enabling you to deal devastating strikes with the weapon.
+Psycarnum Crystal^MoI^40^Your psycrystal taps into the natural ebb and flow of incarnum, turning it into a small reservoir of soul energy.
+Psycarnum Infusion^MoI^40^You transform your mental focus into a brief burst of soul energy.
+Sapphire Fist^MoI^40^You can channel incarnum to enhance your ability to deliver stunning attacks.
+Sapphire Smite^MoI^40^You can channel incarnum to enhance your ability to deal mighty blows.
+Sapphire Sprint^MoI^40^Drawing on the soul energy of great runners of history, you infuse your body with incarnum to speed your steps.
+Shape Soulmeld^MoI^40^You gain the ability to shape a single soulmeld.
+Share Soulmeld^MoI^41^You can share a soulmeld with an ally with which you have a special bond.
+Soulsight^MoI^41^You can attune your soul to sense living creatures near you.
+Soultouched Spellcasting^MoI^41^By fusing your spells with incarnum, they become more capable of overcoming enemy magic and spell resistance.
+Split Chakra^MoI^41^One of your chakras becomes capable of holding both a bound soulmeld and a magic item.
+Undead Meldshaper^MoI^41^Despite having no soul of your own, you maintain the ability to channel incarnum through force of will alone.
+Aereni Focus^PE^20^From childhood you have studied one particular path, and these decades of devotion result in remarkable skill.
+Aerenal Arcanist^PE^20^Your family has studied wizardry for thousands of years.
+Aerenal Half-Life^PE^20^The Priests of Transition have guided you through strange rituals that left you poised between the world of the living and the dead.
+Perfect Reflection^PE^25^You are particularly skilled at mimicking the forms and mannerisms of others.
+Touch of Captivation^PE^35^You are sakah, and your fiendish gift allows you to captivate people around you.
+Touch of Deception^PE^35^You are sakah, and your fiend gift allows you to alter your appearance and trick others.
+Touch of Summoning^PE^35^You are sakah, and your fiendish gift allows you to summon fell creatures to do your bidding.
+Binding Brand^PE^36^You carry the brand of the binding flame, marking you as a warrior of the Ghaash'kala clans.
+Dragon's Insight^PE^48^You can call on the power of your dragonmark to enhance your natural abilities.
+Shield of Deneith^PE^48^You can channel the power of your Deneith dragonmark to defend yourself in battle.
+Swiftness of Orien^PE^48^You can draw on the power of your Mark of Passage to temporarily enhance your speed or the speed of your mount.
+Aberrant Dragonmark Gift^PE^49^Your aberrant dragonmark is especially potent.
+Aberrant Dragonmark Mystery^PE^49^You can use the power of your aberrant mark to enhance your magical abilities.
+Aberrant Dragonmark Vigor^PE^49^You can channel the energy of your aberrant mark to enhance your health.
+Ritual of Arcane Opposition^PE^60^You have been inured against the effects of arcane magic by a ritual of the Ashbound set.
+Ritual of Blight's Embrace^PE^60^You have been warded from the effects of poison and disease by a ritual of the Children of Winter, solidifying your bond with vermin.
+Ritual of the Timeless Soul^PE^60^You have been blessed by the faerie lords of Thelanis in a ritual of the Greensinger sect, and you temporarily slip from time's grasp.
+Ritual of the Woodland Bond^PE^60^You have formed a bond with the growth of the woods through a ritual of the Wardens of the Wood.
+Friends of the Tribes^PE^75^You are deeply familiar with the tribes of the Talenta Plains.
+Talenta Dinosaur Bond^PE^75^You have undergone grueling training on the dinosaur back and are skilled in the halfling techniques of fighting while mounted.
+Talenta Drifter^PE^75^Your extensive travels on the Talenta Plains give you an advantage while in that region.
+Galifaran Scholar^PE^77^You have made an exhaustive study of the history of Galifar, from the earliest roots of the Five Nations, through the formation of the united Kingdom of Galifar, and on to the Last War and the dissolution of the kingdom.
+Du'ulora Ancestor^PE^83^The tsucora are the most common of the quori, but they are not the only spirits in Dal Quor.
+Hashalaq Ancestor^PE^83^The hashalaq quori essence within you allows you to sense the emotions of others.
+Aberration Banemagic^PE^86^You can cast spells that do extra damage to aberrations.
+Indomitable Discipline^PE^86^Your strict mental discipline allows you to resist attempts to manipulate your thoughts.
+Unnatural Enemy^PE^86^You have been trained in the ways of aberrations, and you know how to recognize them and spot their weaknesses.
+Sudden Willow Strike^PE^109^Your monastic training allows great precision with your quarterstaff.
+Child of the Swamps^PE^119^You can find food and shelter in the deep swamps, and you can move more freely through the difficult terrain.
+Battlebred^PE^122^Due to traumatic experiences in past battles, the plane of Shavarath with its endless war seems never far from you.
+Chosen of the Deathless^PE^122^You carry with you an intimate familiarity with the positive energy that suffuses the City of the Dead.
+Manifest Druid^PE^122^You have a familiarity with the three manifest zones of the Eldeen Reaches and the powers of the planes to which they are linked.
+Mastery of the Azure Sky^PE^125^You have learned to calculate the precise location of Syrania at any given time, and to use that knowledge to enhance spells you cast to grant flight.
+Mastery of the Battleground^PE^125^You have learned to calculate the precise location of Shavarath at any given time, and to use that knowledge to enhance spells of battle that you cast.
+Mastery of Chaos and Order^PE^125^You have learned to calculate the precise locations of Daanvi and Kythri at any given time, and to use that knowledge to imbue your spells with unusual regularity or strinking unpredictability -- or both.
+Mastery of Day and Night^PE^125^You have learned to calculate the precise locations of Irian and Mabar at any given time, and to use that knowledge to enhance your manipulation of positive and negative energy.
+Mastery of the Dead^PE^125^You have learned to calculate the precise location of Dolurrh at any given time, and to use that knowledge to capture the souls of creatures slain with your death spells.
+Mastery of Dreams^PE^125^By physically exploring the realm of Dal Quor, you have learned to instill your spells with the stuff of dreams . . . and nightmares.
+Mastery of Faerie Enchantment^PE^125^You have learned to calculate the precise location of Thelanis at any given time, and to use that knowledge to improve your ability to control the minds of other creatures.
+Mastery of Ice and Fire^PE^126^You have learned to caclulate the precies locations of Fernia and Risia at any given time, and to use that knowledge to enhance cold and fire spells that you use.
+Mastery of Madness^PE^126^You have learned to reach magically to the ever-distant plane of Xoriat and draw some element of its madness into the world -- but these techniques come with some risk.
+Mastery of the Mists^PE^126^By learning of the intricate relationship between the Ethereal Plane and the Material Plane, you gain the ability to see and sometimes reach through the barrier between these two planes.
+Mastery of the Silver Void^PE^126^You have gained a deeper understanding of the Astral Plane and its relationship to the other planes of the cosmos. You can use that knowledge to more quickly access that plane.
+Mastery of Twilight Denizens^PE^126^You have learned to calculate the precise location of Lamannia at any given time, and to use that knowledge to summon more powerful creatures from that plane.
+Mastery of Twisted Shadow^PE^126^You gain the ability to reach into the Plane of Shadow when casting an illusion, concealing yourself in the raw shadowstuff drawn forth.
+Shifter Acrobatics^PE^135^Your heritage makes you agile and light-footed.
+Shifter Magnetism^PE^135^Your heritage gives you a strong animal presence.
+Shifter Stealth^PE^135^You can call upon your bestial heritage to increase your stealth.
+Bladebearer of the Valenar^PE^141^You have trained extensively with scimitars, including the Valenar double scimitar. You are adept at striking from horseback with the curved blades of the Valenar.
+Shield of Blades^PE^141^As a master of the double scimitar, you can weave a web of steel to protect yourself from attack.
+Spirit of the Stallion^PE^141^Your patron ancestor was a legendary cavalry soldier, and her spirit guides you and your mount.
+Valenar Trample^PE^141^You are trained in Valenar cavalry techniques emphasizing trampling your opponents into the ground.
+Shocking Fist^PE^151^Your slam attack can deal a shock.
+Overload Metabolism^PE^151^You can heal damage at a cost to your other physical attributes.
+Heretic of the Faith^PF^46^You stray significantly from the teachings of your faith.
+Prophet of the Divine^PF^49^Your communications with the divine manifest in a public fashion.
+Bane of Infidels^PF^53^In a church locked in eternal conflict with followers of another faith, you have learned to fight effectively against the infidels. You know their ways and how to beat them.
+Initiate of Amaunator^PF^58^You have been initiated into the greatest secrets of Amaunator's faith.
+Rulership^PF^158^You are a ruler of an economic, frontier, governmental, military, religious, transport, or other community.
+Accelerate Metamagic^RDr^98^You can apply a selected metamagic feat to your spells more quickly than normal.
+Dragon Breath^RDr^98^You can use your breath weapon as often as a normal dragon.
+Dragon Tail^RDr^98^Your draconic ancestry manifests as a muscular tail you can use in combat.
+Dragon Trainer^RDr^98^Your draconic nature gives you special insight into training dragons and draconic creatures.
+Dragon Wings^RDr^100^Your draconic ancestry manifests as a pair of wings that aid your jumps and allow you to glide.
+Dragonwrought^RDr^100^You were born a dragonwrought kobold, proof of your race's innate connection to dragons.
+Extraordinary Trapsmith^RDr^100^You are an expert at constructing mechanical traps.
+Heavyweight Wings^RDr^100^Your superior strength allows you to fly while heavily burdened.
+Improved Dragon Wings^RDr^100^Your draconic wings now grant you flight.
+Kobold Endurance^RDr^101^Thanks to your race's determination, you are capable of amazing feats of strength and stamina.
+Kobold Foe Strike^RDr^101^You are more effective in combat against your racial enemies.
+Practical Metamagic^RDr^101^You can apply a selected metamagic feat to your spells more easily.
+Reinforced Wings^RDr^101^You have strengthened the muscles of your wings.
+Versatile Spellcaster^RDr^101^You can use two lower-level spell slots to cast a spell one level higher.
+Wyrmgrafter^RDr^101^You can apply draconic grafts to other living creatures or to yourself.
+Entangling Exhalation^RDr^101^You can use your breath weapon to create an entangling mesh of energy.
+Exhaled Barrier^RDr^101^You can use your breath weapon to create a wall of energy.
+Exhaled Immunity^RDr^102^You can use your breath weapon to grant a willing creature immunity to energy.
+Extra Exhalation^RDr^102^You can use your breath weapon one more time per day than normal.
+Furious Inhalation^RDr^102^While raging, you can use your breath weapon to deal energy damage with your bite attacks.
+Draconic Arcane Grace^RDr^102^You can convert some of your arcane spell energy into a saving throw bonus.
+Draconic Breath^RDr^102^You can convert some of your arcane spell energy into a breath weapon.
+Draconic Claw^RDr^102^You develop natural weapons like those of your draconic ancestors.
+Draconic Flight^RDr^102^The secret of draconic flight has been revealed to you, granting you the ability to fly occasionally.
+Draconic Heritage^RDr^102^You have a greater connection with your draconic bloodline than others of your kind.
+Draconic Legacy^RDr^104^You have realized greater arcane power through your draconic heritage.
+Draconic Persuasion^RDr^104^Your arcane talents lend you a great deal of allure.
+Draconic Power^RDr^104^You have greater power when manipulating the energies of your heritage.
+Draconic Presence^RDr^104^When you use your magic, your mere presence can terrify those around you.
+Draconic Resistance^RDr^105^Your bloodline hardens your body against effects related to the nature of your progenitor.
+Draconic Skin^RDr^105^Your skin takes on a sheen, luster, and hardness related to your draconic ancestor.
+Draconic Toughness^RDr^105^Your draconic nature reinforces your body as you embrace your heritage.
+Spell Rehearsal^RDr^105^Casting the same spell several times in a row or at the same target enables you to perfect it.
+Wing Expert^RDr^105^You can use your wings to create a variety of effects.
+Divine Vigor^RH^126^You can channel energy to increase your speed and durability.
+Dragonthrall^RH^126^You have pledged your life to the service of evil dragonkind.
+Bind Vestige^TM^72^You know how to make pacts with otherworldly spirits called vestiges.
+Bind Vestige, Improved^TM^73^You can bind a wider range of vestiges.
+Defense against the Supernatural^TM^73^Your in-depth knowledge of supernatural forces grants you greater ability to resist their effects.
+Empower Supernatural Ability^TM^73^You can use a supernatural ability with greater effect than normal.
+Enlarge Supenatural Ability^TM^73^You can increase the range of a supernatural attack.
+Expel Vestige^TM^73^You can expel a vestige to which you are bound before the duration of its pact with you has expired.
+Extend Supernatural Ability^TM^73^You can cause a supernatural ability with a duration to last longer than normal.
+Favored Vestige^TM^74^Choose one vestige to which you have access. You establish a close, mystical affinity with that spirit.
+Favored Vestige Focus^TM^74^The supernatural abilities of your favored vestige are more potent than normal.
+Ignore Special Requirements^TM^74^The strange constraints that vestiges place on their summoning are meaningless to you.
+Improved Binding^TM^74^You are so adept at binding vestiges that you can contact powerful ones more easily than other soul binders can.
+Practiced Binder^TM^74^When you bind a vestige, you gain an additional power associated with it.
+Rapid Pact Making^TM^74^Your skill with pact magic lets you bind a vestige extremely quickly, even in the heat of combat.
+Rapid Recovery^TM^74^You can use the abilities of your favored vestige more frequently.
+Skilled Pact Making^TM^74^Your strong will serves you well when making pacts with vestiges.
+Sudden Ability Focus^TM^74^One of your special attacks becomes more potent than usual.
+Supernatural Crusader^TM^75^You are adept at fighting supernatural creatures.
+Supernatural Opportunist^TM^75^You are adept at exploiting a creature's momentary distraction while it activates its supernatural abilities.
+Widen Supernatural Ability^TM^75^You can increase the area of your supernatural abilities.
+Empower Mystery^TM^136^You can cast mysteries to greater effect.
+Enlarge Mystery^TM^136^You can cast mysteries farther than normal.
+Extend Mystery^TM^136^You can cast mysteries that last longer than normal.
+Favored Mystery^TM^136^The mystery you choose becomes easier to cast.
+Greater Path Focus^TM^136^Choose a path of shadow magic to which you have already applied the Path Focus feat. Your mysteries of that path are now even more potent.
+Line of Shadow^TM^136^You can cast a mystery without line of sight or line of effect to the target.
+Maximize Mystery^TM^136^You can cast mysteries to maximum effect.
+Nocturnal Caster^TM^137^You are empowered by darkness, making your abilities stronger at night.
+Path Focus^TM^137^Choose a path of shadow magic, such as Touch of Twilight. Your mysteries of that path are more potent than normal.
+Quicken Mystery^TM^137^You can cast a mystery with a moment's thought.
+Reach Mystery^TM^137^You can cast touch-range mysteries without touching the target.
+Shadow Cast^TM^137^Your shadow shimmers as you cast a spell and you seem to cast your mysteries from elsewhere.
+Shadow Familiar^TM^138^Noctumancers developed this feat in order to gain a mystical companion.
+Shadow Reflection^TM^138^Your shadow flickers and moves in an aggressive, independent manner, enabling you to avoid some attacks of opportunity.
+Shadow Vision^TM^138^Your senses grow so attuned with shadow that you gain a limited ability to see in natural and magical darkness.
+Still Mystery^TM^138^You can cast mysteries without gestures.
+Unseen Arrow^TM^138^Developed by shadowblades, this feat allows a member of that class to apply his unseen weapon abilities to thrown or projectile weapons.
+Empower Utterance^TM^228^Your utterances have more powerful effects.
+Enlarge Utterance^TM^229^You can project the power of an utterance to a greater distance.
+Extend Utterance^TM^229^Your utterances have a more lasting effect on the universe.
+Focused Lexicon^TM^229^Your utterances have greater effect against a certain type of creature.
+Minor Utterance of the Evolving Mind^TM^229^Your mastery of Truespeech has led you to the understanding necessary to perform a simple utterance from the Lexicon of the Evolving Mind.
+Obscure Personal Truename^TM^229^Truenames are notoriously difficult to pronounce, but yours is harder than most.
+Personal Truename Backlash^TM^229^Your personal truename is so charged with magic power that those who fail to speak it properly are warped by reality run amok.
+Truename Rebuttal^TM^229^You are particularly good at negating other truenamers' power with well-chosen truenames.
+Truename Research^TM^229^You have a knack for uncovering the personal truenames of friends and foes alike through study and investigation.
+Truename Training^TM^229^Unlike most of your peers, you have discovered the secret power of truenames.
+Utterance of the Evolving Mind^TM^230^Your further mastery of Truespeech allows you to wield its power more effectively against creatures.
+Utterance of the Crafted Tool^TM^230^As you strive for ever more mastery of Truespeech, you gain more power over the universe around you. You can now use the power of Truespeech to affect objects.
+Utterance of the Perfected Map^TM^230^The power of the Truespeech can alter the state of reality itself. Reaching toward this great power, you have mastered an utterance from the Lexicon of the Perfected Map.
+Utterance Focus^TM^230^You have a particular utterance you favor above others, and your enemies are less able to resist the power of your words.
+Quicken Utterance^TM^231^You can speak an utterance with just a moment's thought.
+Recitation of the Fortified State^TM^231^This recitation allows you to stand unyielding against the blows of your enemies.
+Recitation of the Meditative State^TM^232^This recitation gives you an unparalleled sense of serene calm.
+Recitation of Mindful State^TM^232^This recitation narrows and focuses your perception so you can concentrate on a delicate task at hand.
+Recitation of the Sanguine State^TM^232^This recitation purges all poisons from your body.
+Recitation of Vital State^TM^232^This recitation frees your body of disease and sickness.
+Dazzling Energy^CP^49^Your facility with energy is such that enemies are shaken by your prowess.
+Deep Vision^CP^49^Your mental focus helps you see farther with darkvision
+Dire Flail Mind Blade^CP^49^When you reshape your mind blade, you can change it into an exotic weapon: a dire flail.
+Dire Stun^CP^49^When you choose to stun your foe with your lurk augment ability, your foe might be stunned for a long time.
+Don  Mantle^CP^49^You gain the granted ability of a mantle you have tapped.
+Dromite Barrier^CP^49^You can convert uses of yourenergy ray psi-like ability into walls of energy.
+Dromite Ray^CP^49^You an use yourenergy ray psi-like ability more often.
+Duergar Expansion^CP^49^You can use yourexpansion psi-like ability more often.
+Duergar Invisibility^CP^49^You can use yourinvisibility psi-like ability more often.
+Dwarven Urgrosh Mind Blade^CP^49^When you reshape your mind blade, you can change it into an exotic weapon: a dwarven urgrosh.
+Ectopic Form^CP^50^This feat allows you to create astral constructs with distinct appearances and specialties.
+Elan Repletion^CP^52^As an elan, you can sustain yourself with repletion longer than other members of your race.
+Elan Resilience^CP^52^As an elan, you can prevent greater amounts of damage than other members of your race.
+Elan Resistance, Enhanced^CP^52^As an elan, you can resist harmful effects more readily than other members of your race.
+Elan Retainment^CP^52^You can use your psionic metabolism to aid your ability to retain your psionic focus when you would otherwise expend it.
+Elemental Envoy^CP^52^This feat allows you to acquire an elemental steward.
+Energize Armor^CP^53^You can charge your armor with psionic energy, making it resistant to energy damage.
+Enervation Endurance^CP^53^When facing the aftermath of a wild surge, enervation doesn't sap your power points.
+Enhanced Beneficence^CP^53^Your psychic aura is larger than normal, reflecting your devotion to your deity.
+Envoy Cognizance^CP^53^When your elemental envoy is nearby, its associated energy enhances your ability to manifest energy powers.
+Euphoric Reduction^CP^53^Channel your euphoric surge into a boost for one of your skills.
+Extra Aura^CP^54^You gain the aura ability of a mantle you have donned.
+Focused Perception^CP^54^When you concentrate your faculties, your power of sight pierces the darkness.
+Focused Shield^CP^54^Your mental focus makes you more adept at using your shield.
+Focused Skill User^CP^54^You can take advantage of your psionic focus in new ways.
+Gestalt Anchor^CP^54^You have a strong bond to the psionic entity you host.
+Githyanki Charm^CP^54^You can leverage yourpsionic daze psi-like ability to gain greater control over subjects.
+Githyanki Control^CP^54^You can leverage yourfar hand psi-like ability to gain greater control over objects.
+Githyanki Dismissal^CP^54^You can leverage yourdimension door psi-like ability to gain greater control over other creatures' locations.
+Githyanki Ectoform^CP^54^You can leverage yourconcealing amorpha psi-like ability to gain greater control over your own body.
+Githzerai Burst^CP^54^You can leverage yourcat fall psi-like ability to gain greater control over yourself in your environment.
+Githzerai Feedback^CP^54^You can leverage yourinertial armor psi-like ability to further insulate yourself from harm.
+Githzerai Knock^CP^54^You can leverage yourconcussion blast psi-like ability to gain such fine control over manipulating force that you can open locks or sealed doors.
+Githzerai Link^CP^55^You can leverage yourpsionic daze psi-like ability to forge direct mental contact with another creature.
+Half-Giant Stomp^CP^55^You can use yourstomp psi-like ability more often.
+Half-Giant Thunderer^CP^55^You can use yourstomp psi-like ability to far greater effect.
+Instinctive Consummator^CP^55^You always make good on your threats.
+Invest Armor^CP^55^You can charge your armor with additional protective qualities.
+Lurk Augment, Extra^CP^55^You can use your lurk augment more often than normal.
+Lurk Augment, Ranged^CP^55^You can use some of your lurk augments in conjunction with a ranged attack.
+Lurk Master^CP^55^You are more skilled in augmenting your attack than your training would indicate.
+Maenad Fury^CP^55^You can use your outburst racial trait more often.
+Maenad Scream^CP^55^You can use yourenergy ray (sonic) psi-like ability more often.
+Maenad Deafening Scream^CP^55^You can use yourenergy ray (sonic) psi-like ability to better effect.
+Mantle Focus^CP^55^The powers from one of your mantles become more potent.
+Mental Juggernaut^CP^56^You are adroit at avoiding the mind blasting effects of certain psionic abilities and powers.
+Mind Cleave^CP^56^When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade.
+Mind Empowerment^CP^56^When you lay low a foe, you drain off a portion of its excess mental energy into the conduit of your mind blade.
+Mind Strike^CP^56^When you use your psychic strike ability, you deal more damage.
+Mind Strike, Swift^CP^57^You possess a deadly speed when charging your mind blade with psychic energy.
+Orc Double Axe Mind Blade^CP^57^When you reshape your mind blade, you can change it into an exotic weapon: an orc double axe.
+Postpone Enervation^CP^57^You can postpone the onset of your psychic enervation.
+Practiced Manifester^CP^57^Choose a manifesting class that you possess. The powers you manifest from that class are more powerful.
+Privileged Energy^CP^57^You favor one specific energy type over all others.
+Psymbiot^CP^57^You gain benefits when you are near other psionic characters or creatures.
+Skin of the Construct^CP^57^You can wear an astral construct as if it were a second skin.
+Stygian Archon^CP^57^You sear the synapses of your mind with a scar of void and emptiness.
+Synad Multitask, Enhanced^CP^58^As a synad, your threefold mind grants you an additional opportunity to multitask.
+Tap Mantle^CP^58^You gain the ability to access the powers in a new mantle.
+Thri-Kreen Carapace^CP^58^Your carapace is harder than average.
+Thri-Kreen Claw^CP^58^You can use yourmetaphysical claw psi-like ability more often.
+Thri-Kreen Displacement^CP^58^You can use yourpsionic displacement psi-like ability more often.
+Thri-Kreen Poison^CP^58^You can use your poison bite more often.
+Two-Bladed Mind Blade^CP^58^When you reshape your mind blade, you can change it into an exotic weapon: a two-bladed sword.
+Volatile Escalation^CP^58^When you are attacked with a telepathic power, your innate wildness forces a higher mental price on your attacker.
+Volatile Leech^CP^58^You gain the power points your attacker wastes attacking you with a telepathic power.
+Xeph Burst, Extra^CP^59^You can use your burst racial trait more often.
+Xeph Celerity^CP^59^You can use your burst racial trait to gain an extra attack.
+Dorje Mastery^CP^59^Psionic dorjes are more potent in your hands.
+Dual Dorje^CP^59^You can fight with two dorjes at the same time.
+Hostile Mind, Improved^CP^59^You have mental defenses erected  against telepathic attacks.
+Psionic Mastery^CP^59^You are quick and certain in your efforts to defeat the psionic defenses and powers of others.
+Aggressive Mind^CP^60^The psionic entity you host gives you access to psi-like abilities capable of disrupting the mind of your enemy.
+Antagonist^CP^60^The psionic entity you host seeks to cause damage and mayhem, and you have powers to further that end.
+Defensive Shell^CP^60^The psionic entity living in your mind enables you to better resist attacks.
+Host Focus^CP^60^You can use a psi-like ability granted by a host feat an extra time each day.
+Pacifist^CP^60^You host a psionic entity that dislikes combat and provides you psi-like abilities to help you avoid a fight.
+Spiritual Force^CP^60^Your mind blade is an expression of your inner spirit.
+Strength of Two^CP^60^As the host of a formless psionic entity, you possess immense willpower.
+Telepathic Affinity^CP^60^The entity you host gives you the ability to better communicate with other creatures.
+Illithid Blast^CP^61^You can convert your pisonic energy into amind blast.
+Illithid Compulsion^CP^61^You can call upon your heritage and enhance your ability to manipulate the minds of other creatures.
+Illithid Enthusiast^CP^61^When you manipulate the minds of other creatures, you are heartened and emboldened by your success.
+Illithid Extraction^CP^61^Your acceptance of your illithid heritage is so encompassing that you have learned how to extract the brain of a helpless victim.
+Illithid Grapple^CP^61^You embrace more of your illithid heritage, and grow at least one long purplish tentacle that you can reveal and unfurl when you open your mouth.
+Illithid Heritage^CP^62^Somewhere in the deeps of time, your bloodline was polluted with illithid influence.
+Illithid Legacy^CP^62^You have realized greater psionic power through your illithid heritage.
+Illithid Legacy, Greater^CP^62^Your knowledge of psionic power has grown even further due to your illithid heritage.
+Illithid Skin^CP^62^Your skin takes on the glistening, rubbery, green-mauve consistency of your illithid parentage.
+Knockdown Power^CP^62^You can manifest powers that knock creatures off their feet.
+Linked Power^CP^62^You can link a power to the power you manifest in this round so that it goes off next round.
+Metapower^CP^63^You can permanently modify a psionic power you know with a metapsionic feat.
+Paraelemental Power^CP^63^When using a power that allows you to choose a type of energy, you have a wider range of possible choices owing to your ability to mix energy with matter.
+Phrenic Leech^CP^63^Psionic foes damaged by your power are also mentally drained.
+Stygian Power^CP^64^Psionic powers you manifest that utilize negative energy are branded with an imprint of fear.
+Transdimensional Power^CP^64^You can manifest powers that affect targets lurking in coexistent planes and extradimensional spaces whose entrances fall within the power's area.
+Acrobatic Strike^PH2^71^Your dexterous maneuvers and skilled acrobatics allow you to slip past a foe's defenses and deliver an accurate strike against him.
+Active Shield Defense^PH2^71^Your expert use of your shield allows you to strike at vulnerable foes even when you forgo your own attacks in favor of defense.
+Adaptable Flanker^PH2^71^When you and an ally team up against a foe, you know how to maximize the threat your ally poses to ruin your target's defenses.
+Agile Shield Fighter^PH2^74^You are skilled in combining your shield bash attack with an armed strike. When you use your shield in unison with a weapon, your training allows you to score telling blows with both.
+Arcane Accompaniment^PH2^74^You infuse your performance with magical energy, allowing its effects to continue even as you attend to other tasks.
+Arcane Consumption^PH2^74^You can sacrifice your physical health to strengthen a spell. This process leaves you wracked with pain, but the enhanced energy you draw from the spell might provide the margin between victory and defeat.
+Arcane Flourish^PH2^74^You use your magical abilities to improve your performance talents.
+Arcane Thesis^PH2^74^You have studied a single spell in-depth.
+Arcane Toughness^PH2^75^You draw upon the power of your magic to sustain yourself, allowing you to continue fighting long after your physical body has failed you.
+Armor Specialization^PH2^75^Through long wear and hours of combat, you have trained your body to believe in its armor.
+Battle Dancer^PH2^75^You strike at your foes in time with the music you sing or in cadence with an oration you deliver.
+Bonded Familiar^PH2^75^You enjoy a stronger than normal magical bond with your familiar, granting you access to two special abilities.
+Bounding Assault^PH2^75^You can move and attack with superior speed and power.
+Brutal Strike^PH2^76^You can batter foes senseless with your mace, morningstar, quarterstaff, or flail.
+Combat Acrobat^PH2^76^Your acrobatics and agility in combat allow you to maneuver across the battlefield with ease.
+Combat Familiar^PH2^76^Your familiar is skilled in delivering attack spells againstyour foes.
+Combat Tactician^PH2^77^You excel at approaching an opponent from an unexpected direction to deliver deadly attacks.
+Cometary Collision^PH2^77^You are a thunderbolt of destruction on the battlefield.
+Companion Spellbond^PH2^77^You form a special magical link with your animal companion, allowing you to share spells with it over a greater distance.
+Crossbow Sniper^PH2^77^You are skilled in lining up accurate, deadly shots with your crossbow.
+Crushing Strike^PH2^78^You wield a bludgeoning weapon with superior power, allowing you to batter aside an opponent's defenses.
+Cunning Evasion^PH2^78^When an area attack detonates around you, you use the chaos and flash of energy to duck out of sight.
+Dampen Spell^PH2^78^From the lowliest prestidigitator to the most august hierophant, spellcasters both arcane and divine recognize the power of counterspelling.
+Deadeye Shot^PH2^78^You carefully line up a ranged attack, timing it precisely so that you hit your opponent when his guard is down.
+Defensive Sweep^PH2^78^You sweep your weapon through the area you threaten, warding away opponents and forcing them to move away or suffer a fearsome blow.
+Driving Attack^PH2^78^When you strike an opponent with a piercing weapon, the brutal impact of your strike sends him sprawling.
+Elven Spell Lore^PH2^78^You have studied the mighty arcane traditions of the elven, granting you insight into the intricate workings of magic and the theoretical structures behind spells.
+Fade into Violence^PH2^79^While the chaos of battle swirls around you, you rely on your ability to slip into the background to avoid your enemy's notice.
+Fiery Fist^PH2^79^By channeling your kienergy, you sheathe your limbs in magical fire.
+Fiery KiDefense^PH2^79^You channel your kienergy into a cloak of flame that injures any who attempt to strike you.
+Flay^PH2^79^When fighting unarmored opponents, you excel at twisting your weapon just before impact.
+Grenadier^PH2^79^You are skilled in using grenadelike weapons.
+Hindering Opportunist^PH2^79^When you have a chance to strike a distracted foe, you instead use that opportunity to aid or protect an ally against him.
+Intimidating Strike^PH2^79^You make a display of your combat prowess designed to strike terror in your foe.
+Indomitable Soul^PH2^80^Your physical toughness translates into greater mental resiliency.
+Keen-Eared Scout^PH2^80^Your sharp sense of hearing allows you to determine much more about your surroundings.
+KiBlast^PH2^80^You focus your kiinto a ball of energy that you can hurl at an opponent.
+Leap of the Heavens^PH2^80^Your excellent athletic ability and superior conditioning allow you to make near-superhuman leaps.
+Lunging Strike^PH2^80^You make a single attack against a foe who stands just beyond your reach.
+Lurking Familiar^PH2^80^Your familiar hides within the folds of your robe or takes cover behind you as your opponents close in.
+Mad Foam Rager^PH2^80^You fight with the rage that only a rabid badger or a beer-addled dwarf can bring to bear.
+Master Manipulator^PH2^80^Your words are your weapons.
+Melee Evasion^PH2^81^Your speed, agility, and talent for intelligent fighting allow you to avoid your opponent's blows.
+Melee Weapon Mastery^PH2^81^You have mastered a wide range of weapons.
+Overwhelming Assault^PH2^81^If you attack a foe who does nothing to turn aside your attack, you press forward with an indomitable strike.
+Penetrating Shot^PH2^81^You send a powerful shot cleaving through your enemies.
+Ranged Weapon Mastery^PH2^82^You have mastered a wide range of weapons.
+Rapid Blitz^PH2^82^You charge across the battlefield, combining your speed and fighting ability to move and attack with unmatched skill.
+Robilar's Gambit^PH2^82^By offering Robilar's Gambit, you absorb damage to place yourself in an advantageous position.
+Shield Sling^PH2^82^You can hurl your shield as a deadly missile, turning it from a defensive item to a crushing, thrown weapon.
+Shield Specialization^PH2^82^You are skilled in using a shield, allowing you to gain greater defensive benefits from it.
+Shield Ward^PH2^82^You use your shield like a wall of steel and wood.
+Short Haft^PH2^82^You have trained in polearm fighting alongside your comrades in arms, sometimes reaching past them while they shield you, and sometimes shielding them while they attack from behind you.
+Slashing Flurry^PH2^82^You swing your weapon with uncanny speed, slicing apart a foe in the blink of an eye.
+Spectral Skirmisher^PH2^83^You have trained extensively in the use of magic that renders you invisible.
+Spell-Linked Familiar^PH2^83^You and your familiar can share spell energy, allowing your familir to cast a limited number of spells each day.
+Stalwart Defense^PH2^83^You excel at aiding your allies in battle. When an opponent attempts to strike one of them, you make a quick, distracting motion to ruin the foe's efforts.
+Steadfast Determination^PH2^83^Your physical durability allows you to shrug off attacks that would cripple a lesser person.
+Telling Blow^PH2^83^When you strike an opponent's vital areas, you draw on your ability to land crippling blows to make the most of your attack.
+Trophy Collector^PH2^83^A belt of minotaur fur, a hood of cloaker wing-skin, and an amulet fashioned from a petrified dragon's eye -- these are the intimidating symbols of your trade.
+Tumbling Feint^PH2^84^When you move near an opponent, your acrobatic maneuvers leave him confused and unable to properly defend himself.
+Two-Weapon Pounce^PH2^84^When you charge an opponent while wielding two weapons, you can make two quick attacks.
+Two-Weapon Rend^PH2^84^You wield two weapons with an artisan's precision.
+Vatic Gaze^PH2^85^Your arcane studies have brought forth your nascent talent to sense magical auras and the power that others are capable of wielding.
+Versatile Unarmed Strike^PH2^85^You employ a variety of unarmed fighting styles, allowing you to alter the type of damage your attacks deal.
+Vexing Flanker^PH2^85^You excel at picking apart an opponent's defenses when your allies also threaten them.
+Wanderer's Diplomacy^PH2^85^Many halflings journey far and wide across the world, spending no more than a few months in one place.
+Water Splitting Stone^PH2^85^You channel your kienergy to splinter the defenses of creatures whose tough hides or magical natures normally allow them to shrug off your blows.
+Weapon Supremacy^PH2^85^You are a grandmaster in the use of your chosen weapon.
+Ritual Blessing^PH2^86^You call upon the powers of goodness and light to bless your allies.
+Ritual Blood Bonds^PH2^86^You invest your allies with the mighty power of your toten, god, or similar divine entity.
+Combat Awareness^PH2^86^When you maintain your combat focus, you have an uncanny ability to sense the ebb and flow of your opponents' vitality.
+Combat Defense^PH2^87^The state of keen focus and mental discipline you attain in combat allows you to shift the focus of yoru defense from one opponent to another with careful, precise maneuvers.
+Combat Focus^PH2^87^The way of the warrior requires more than simple, brute strength.
+Combat Stability^PH2^87^When you maintain your combat focus, you become difficult to dislodge.
+Combat Strike^PH2^87^Your intense, focused state allows you to see the one critical moment in a battle when you hang suspended between victory and defeat.
+Combat Vigor^PH2^88^When you maintain your combat focus, your clarity of purpose and relentless drive allow you to overcome your body's frailties.
+Divine Armor^PH2^88^You call upon your deity to protect you in your hour of need by wreathing you in divine power that wards off your enemies' attacks.
+Divine Fortune^PH2^88^With a quick prayer, you channel divine energy to help resist a spell, poison, or other deadly effect.
+Divine Justice^PH2^88^You can channel divine energy to turn your foe's strength against him, striking him with the same force that he used against you.
+Divine Ward^PH2^88^You create a channel of divine energy between yourself and a willing ally.
+Profane Aura^PH2^89^You call upon the dark powers you worship to fill the area around you with a dreadful mist that obscures sight.
+Sacred Healing^PH2^89^You can channel divine energy to aid in your efforts to tend to a comrade's injuries, sickness, or other conditions.
+Sacred Purification^PH2^89^You serve as a conduit of divine energy, filling the area around you with power that aids the living and saps the undead.
+Sacred Radiance^PH2^89^You channel divine energy to fill the area around you with a soothing, gentle radiance.
+Celestial Sorcerer Aura^PH2^90^The power of your sorcerous heritage shines through, allowing you to infuse the area around you with a menacing aura.
+Celestial Sorcerer Heritage^PH2^90^Your ancestry manifests in the form of several special abilities.
+Celestial Sorcerer Lance^PH2^90^You can channel your arcane energy into a bolt of power that is baneful to evil creatures.
+Celestial Sorcerer Lore^PH2^90^The power of your ancestry grants you access to a variety of new spells.
+Celestial Sorcerer Wings^PH2^91^You channel your inborn magical abilities to spawn a pair of spectral, magical wings that glow with majestic power.
+Infernal Sorcerer Eyes^PH2^91^Your eyes glow with infernal fire, allowing you to see through magical darkness.
+Infernal Sorcerer Heritage^PH2^91^Your innate magic derives from infernal ancestors.
+Infernal Sorcerer Howl^PH2^91^You channel the fury of your infernal ancesters into a thunderous roar that blasts your enemies with sonic power.
+Infernal Sorcerer Resistance^PH2^91^You are as tough and resilient as an infernal monstrosity, allowing you to shrug off acid and cold damage.
+Blistering Spell^PH2^91^Your fire spells sear the flesh from your enemies' bones, leaving them wracked with pain.
+Earthbound Spell^PH2^91^You bind a spell into the rock and soil, leaving it there until an opponent stumbles across it.
+Flash Frost Spell^PH2^91^Your spells that use cold and ice to damage your foes leave behind a thin layer of slippery frost.
+Imbued Summoning^PH2^92^Your summoning spells gain an element of surprise.
+Smiting Spell^PH2^92^You can channel the energy of a touch spell into a weapon, causing the spell to discharge when you strike an opponent.
+Blood-Spiked Charger^PH2^92^You throw yourself into the fray, using your spiked armor and spiked shield to tear your opponents to pieces.
+Combat Cloak Expert^PH2^93^You are adept at turning your cloak into a vital part of your combat repertoire.
+Combat Panache^PH2^93^Your glowing personality and sharp performance abilities allow you to navigate the battlefield on sheer chutzpah alone.
+Einhander^PH2^94^You excel at wielding a one-handed weapon while carrying nothing in your off hand.
+Mad Alchemist^PH2^94^You are an expert at using alchemical items.
+Shadow Striker^PH2^94^You melt into the shadows, hiding from your enemies until the time is right.
+Abyss-Bound Soul [Vile]^FCI^83^You have pledged your immortal soul to a particular demon lord in return for a gift that aids your evil works in life.
+Blood War Conscript [Vile]^FCI^83^Your evil brand indicates your rank in the armies of the Blood War and infuses you with fury.
+Chaotic Spell Recall [Abyssal Heritor]^FCI^84^A few choice spells never stray far from your mind.
+Claws of the Beast [Abyssal Heritor]^FCI^84^Your hands are twisted like claws. This deformity allows you to deal more damage than usual with your unarmed strikes and sneak attacks.
+Cloak of the Obyrith [Abyssal Heritor]^FCI^85^The chaos of the Abyss suffuses your being, as it does the ancient obyriths.
+Dark Speech [Vile]^FCI^85^You learn a smattering of the language of truly dark power.
+Demonic Conduit [Vile]^FCI^85^Your evil brand incorporates blasphemous runes and sigils that augment magical attacks you make against lawful and/or good targets.
+Demonic Skin [Abyssal Heritor]^FCI^85^Your skin has rough, scaly patches that enhance your natural armor.
+Demonic Sneak Attack [Abyssal Heritor]^FCI^85^You know exactly how to twist the blade to get the most out of your sneak attacks.
+Demon Mastery^FCI^85^You are particularly skilled at summoning demons and convincing them to serve you.
+Evil Brand [Vile]^FCI^85^You are physically marked forever as the servant of an evil power greater than yourself -- in this case, a demon lord. The symbols is unquestionable in its perversity, depicting a depravity so unthinkable that all who see it know beyond a doubt that you serve the lords of the Abyss.
+Extract Demonic Essence^FCI^86^You can draw upon the living essence of a willing or captured demon to fuel the creation of items or the casting of potent spells.
+Eyes of the Abyss [Abyssal Heritor]^FCI^86^Your eyes glow with an inner fire of some unusual color. This glow increases your perception and allows you to see in the dark.
+Heart of the Nabassu^FCI^86^Your ancestry traces back to a place where the Abyss meets the Negative Energy Plane.
+Keeper of Forbidden Lore [Abyssal Heritor]^FCI^86^A shred of demonic racial memory grants you knowledge of numerous ancient magical secrets.
+Ordered Chaos^FCI^86^You are an unusually lawful Abyssal heritor.
+Otherworldly Countenance [Abyssal Heritor]^FCI^87^You are either stunningly beautiful or wretchedly hideous. Either way, your appearance can be terribly unsettling to others upon whom you focus your attentions.
+Poison Healer^FCI^87^Poison isn't always bad for you.
+Poison Talons [Abyssal Heritor]^FCI^87^Your claws drip with poison.
+Precognitive Visions [Abyssal Heritor]^FCI^87^You periodically experience visions from the near future.
+Primordial Scion [Abyssal Heritor]^FCI^87^The Abyss beckons. . . .
+Thrall to Demon [Vile]^FCI^87^You formally become a supplicant to a demon lord. In return for your obedience, you gain a small measure of that demon lord's power.
+Vestigial Wings [Abyssal Heritor]^FCI^87^A pair of vestigial wings sprouts from your shoulders.
+Ability Focus^MM4^202^A particular special ability of a creature with this feat is more potent than normal.
+Awesome Blow^MM4^202^A creature with this feat can choose to deliver blows that send its smaller opponents flying like bowling pins.
+Clinging Breath^MM4^202^This feat enables a creature's breath weapon to cling to creatures and continue to affect them after it has breathed.
+Craft Construct [Item Creation]^MM4^202^A creature with this feat can create golems and other magic automatons that obey its orders.
+Flyby Attack^MM4^202^A creature with this feat can attack on the wing.
+Githyanki Battlecaster^MM4^202^A creature with this feat ignores arcane spell failure chances when wearing light armor.
+Githyanki Dragonrider [Racial]^MM4^202^A creature with this feat has a knack for getting along with red dragons.
+Improved Natural Attack^MM4^203^The natural attacks of a creature with this feat are more dangerous than its size and type would otherwise dictate.
+Improved Toughness^MM4^203^A creature with this feat is significantly tougher than normal.
+Lingering Breath^MM4^203^The breath weapon of a creature with this feat forms a lingering cloud.
+Multiattack^MM4^203^A creature with this feat is adept at using all its natural weapons at once.
+Powerful Charge^MM4^203^A creature with this feat can charge with extra force.
+Quicken Spell-Like Ability^MM4^203^A creature with this feat can employ a spell-like ability with a moment's thought.
+Blessed of Vulkoor [Racial]^SX^134^A scorpion-shaped birthmark denotes you as one of the chosen of Vulkoor.
+Drow Scorpion Warrior [Racial, Tactical]^SX^134^Your study of the ways of the scorpion grants you special tactics.
+Drow Skirmisher [Racial]^SX^134^Your experience with the guerrilla-style combat of the deep jungle grants you mastery of the weapons of the drow.
+Earthquake Stomp^SX^134^Your thunderous steps allow you to knock smaller enemies off their feet.
+Echoing Spell [Metamagic]^SX^134^Your spells return after you cast them, although with lessened effects.
+Elder Giant Magic^SX^135^You have learned a technique developed by ancient giant spellcasters, allowing you to channel additional power in your spells.
+Giant Banemagic^SX^135^You can cast spells that deal additional damage to giants.
+Jungle Veteran^SX^135^You have a knack for surviving in harsh environments and avoiding the deadly ambushes of natives.
+Mysterious Magic^SX^135^Your study of unconventional magic gives your spells an odd appearance and makes them difficult to identify.
+Rending Claws^SX^135^Your expertise with scorpion claw gauntlets allows you to tear apart your opponents with deadly precision.
+Breath of Unlife [Metabreath]^DrF^47^Your breath weapon contains the chill of undeath.
+Transdimensional Breath [Psionic]^DrF^50^Your breath weapon affects bordering planes.
+Follower of the Scaly Way^DrF^57^You are an adherent of Sammaster's teachings.
+Servant of a Dragon Ascendant^DrF^92^You formally supplicate yourself to an immortal dragon quasi-deity.
+Initiate of Tchazzar^DrF^92^You have been initiated into the greatest mysteries of Tchazzar's church.
+Adaptive Style^ToB^28^With just a short period of meditation, you can change your maneuvers and tactics to meet the threat you currently face.
+Avenging Strike^ToB^28^Your strength of will and strong sense of justice allow you to smite your foes.
+Blade Meditation^ToB^28^You have learned a meditation that grants you insight into the martial disciplines you have studied.
+Desert Fire^ToB^29^The power of the Desert Wind surges through you, and you find power in the motion of the hot winds and shifting sands that you can channel into your Desert Wind strikes.
+Desert Wind Dodge^ToB^29^Your training in the Desert Wind discipline allows you to dance across the battlefield like a blistering sirocco.
+Devoted Bulwark^ToB^29^Because of your staunch devotion to your cause and your Devoted Spirit training, you can stand your ground even in the face of an enemy's resounding attack.
+Divine Spirit [Divine]^ToB^29^The fervor and dedication of the Devoted Spirit discipline, combined with your fanatical adherence to a divine power, turns you into a font of spiritual energy.
+Evasive Reflexes^ToB^30^When an opponent gives you an opening in combat, you know exactly what to do: slip away.
+Extra Granted Maneuver^ToB^30^You are especially devout or insightful, and you have more control over which of your martial maneuvers are currently granted than other crusaders.
+Extra Readied Maneuver^ToB^30^You are an unusually perspicacious student of the Sublime Way, and you find it easy to keep a large number of maneuvers ready for use.
+Falling Sun Attack^ToB^31^The discipline of the Setting Sun teaches you how to turn an opponent's strengths into weaknesses.
+Instant Clarity [ Psionic]^ToB^31^You have sharpened your concentration to the point that you can focus your psionic abilities with just an instant's thought.
+Ironheart Aura^ToB^31^Your strength of spirit and martial training inspires those around you.
+Martial Stance^ToB^31^You have mastered the fundamentals of a martial discipline, and you are now able to master one of its stances.
+Martial Study^ToB^31^By studying the basics of a martial discipline, you learn to focus you kiand perfect the form needed to use a maneuver.
+Psychic Renewal [Psionic]^ToB^32^Your mental strength and psionic abilities allow you to focus your mind on combat and use your most devastating maneuvers more frequently.
+Rapid Assault^ToB^32^Your fighting style emphasizes taking foes down with quick, powerful blows.
+Scribe Martial Script [Item Creation]^ToB^32^You know the secret of creating martial scripts -- small slips of paper into which you infuse your own martial power and skill.
+Shadow Blade^ToB^32^In the course of your training in the Shadow Hand discipline, you learn to use your natural agility and speed to augment your attacks with certain weapons.
+Shadow Trickster^ToB^32^Your mastery of the Shadow Hand discipline lets you augment your illusion spells with the stuff of shadow.
+Song of the White Raven^ToB^32^The White Raven discipline shows you how to rouse dedication and fervor within your allies' hearts.
+Snap Kick^ToB^32^You have continued to hone your unarmed combat skills, and you deal more damage with your unarmed strikes.
+Stone Power^ToB^32^The principles of the Stone Dragon discipline teach you how to gather and focus your raw, physical strength into an attack.
+Sudden Recovery^ToB^33^You can instantly recover your focus, balance, and personal energy after using a martial maneuver.
+Superior Unarmed Strike^ToB^33^Your unarmed strikes have become increasingly deadly, enabling you to strike your foes in their most vulnerable areas.
+Tiger Blooded^ToB^33^The Tiger Claw discipline teaches students to mimic the rampant, feral qualities of a wild animal.
+Unnerving Calm^ToB^33^You know that the secret to defeating your enemies lies within the still center of your own mind.
+Vital Recovery^ToB^33^Preparing yourself to execute more of your maneuvers gives you the chance to catch a quick second wind and recover from damage you have sustained in the fight.
+White Raven Defense^ToB^33^The White Raven discipline has taught you to shine as a gleaming beacon of hope and endurance amid the chaos of battle.
+Clarion Commander^ToB^34^On the battlefield, you are a natural leader.
+Distant Horizon^ToB^34^An initiate of the Setting Sun sometimes learns a set of combat maneuvers to create the Distant Horizon fighting form.
+Faith Unswerving^ToB^34^The initiate of the Devoted Spirit knows that his fanaticism and devotion to a cause are enough to carry him through almost anything.
+Gloom Razor^ToB^35^The teachings of the Shadow Hand discipline allow you to confuse your enemies.
+Perfect Clarity of Mind and Body^ToB^35^Your mastery of the Diamond Mind discipline allows you to tap into reserves of spiritual and physical strength that other warriors cannot imagine using.
+Reaping Talons^ToB^35^When fighting with the Tiger Claw discipline's preferred weapons, you can use a variety of combat options that maximize the benefits of wielding two weapons.
+Scorching Sirocco^ToB^35^As a student of the Desert Wind, the burning fury of the desert sirocco is at your command.
+Shards of Granite^ToB^36^Like the great Stone Dragon, you hammer through your opponents' defenses using raw, brutal strength.
+Stormguard Warrior^ToB^36^The Stormguard Warrior feat encompasses a number of the more advanced tactics and techniques you would use as a student of the Iron Heart school.
+Armor of Scales [Ceremony]^DM^15^You imbue a target with the protection of a dragon's blade.
+Black Dragon Lineage [Draconic]^DM^15^You have attuned yourself to your black dragon ancestry and can poison foes with your touch.
+Blue Dragon Lineage [Draconic]^DM^15^You have learned to harness the power of your blue dragon ancestry and can hurl orbs of lightning.
+Brass Dragon Lineage [Draconic]^DM^16^You have unlocked the power of your brass dragon ancestry and can put foes to sleep with ease.
+Bronze Dragon Lineage [Draconic]^DM^16^You have tapped into your bronze dragon blood and can channel arcane energy to repel foes.
+Copper Dragon Lineage [Draconic]^DM^16^You have learned to channel the powers of your copper dragon ancestry to hinder your enemies' mobility.
+Double Draconic Aura^DM^16^You can project two draconic auras simultaneously.
+Draconic Armor [Draconic]^DM^16^You learn to block damage from successful attacks, lessening the blows with spell energy.
+Draconic Aura^DM^16^You can tap into the raw power of dragons to create a variety of potent auras around you.
+Draconic Heritage [Draconic]^DM^17^You have a greater connection with your draconic bloodline than others of your kind.
+Draconic Knowledge [Draconic]^DM^17^Your draconic blood lets you access ancient draconic knowledge.
+Draconic Senses [Draconic]^DM^17^Your draconic blood grants you great sensory powers.
+Draconic Vigor [Draconic]^DM^17^You gain some of the vitality of your draconic ancestry when casting spells.
+Dragonfire Assault [Draconic]^DM^17^You can augment your most powerful melee attacks with draconic power.
+Dragonfire Channeling [Draconic]^DM^17^You channel draconic fire through your holy symbol.
+Dragonfire Inspiration [Draconic]^DM^17^You can channel the power of your draconic ancestry into the attacks of your allies.
+Dragonfire Strike [Draconic]^DM^18^You can call upon your innate draconic powers to augment certain weapon attacks.
+Dragontouched [Draconic]^DM^18^You have a trace of draconic power, a result of dragons in your ancestry or a spiritual connection between you and the forces of dragonkind.
+Gold Dragon Lineage [Draconic]^DM^19^You can harness the legacy of your gold dragon ancestry to protect your allies.
+Heart of Dragons [Ceremony]^DM^19^You imbue your allies with draconic power.
+Initiate of Aasterinian [Initiate]^DM^20^You live for the moment, reveling in new experiences without fear of consequence.
+Initiate of Astilabor [Initiate]^DM^20^You share your deity's desire to acquire and protect treasure, and she has recognized this by granting you an edge in achieving these goals.
+Initiate of Bahamut [Initiate]^DM^20^The Platinum Dragon has entrusted you with great power in the battle against evil.
+Initiate of Falazure [Initiate]^DM^20^Your celebration of death and decay has opened up new magical secrets involving the living and undead.
+Initiate of Garyx [Initiate]^DM^20^You channel the cleansing fire of destruction, as wielded by your deity.
+Initiate of Hlal [Initiate]^DM^21^Fueled by faith in your deity, your audacity and bravery truly know no bounds.
+Initiate of Io [Initiate]^DM^21^Your deity has entrusted you with the responsibility of tending to dragonkind.
+Initiate of Lendys [Initiate]^DM^21^Your dedication to justice grants you the ability to ferret out and punish wrongdoers.
+Initiate of Tamara [Initiate]^DM^21^You wield the twin powers of mercy and death in service to your draconic patron.
+Initiate of Tiamat [Initiate]^DM^21^Your homage to the creator of evil dragonkind has been rewarded with physical and mental power.
+Red Dragon Lineage [Draconic]^DM^21^The fiery blood of red dragons runs within your veins, allowing you to produce flames from thin air.
+Silver Dragon Lineage [Draconic]^DM^22^You are the descendant of silver dragons and can harness your ancestors' power to paralyze your opponents.
+Slayer of Dragons [Ceremony]^DM^22^You protect your allies from the ravages they are sure to face while hunting dragons.
+White Dragon Lineage [Draconic]^DM^22^Your veins run with the savage blood of white dragons, allowing you to whyp yourself into a ragelike state.
+Words of Draconic Power [Ceremony]^DM^22^You tap into the great tradition of draconic magic to enhance the words of your allies.
+Action Healing^FE^145^You can spend an action point to enhance your healing power.
+Ancestral Whispers^FE^145^Through intense focus and divine energies, you can hear the advice of past ancestors.
+Ceremonial Empowerment^FE^145^Your divine might increases on your patron's holy days.
+Construct Grafter [Item Creation]^FE^145^You can apply construct grafts to other living creatures or to yourself.
+Divine Alacrity [Divine]^FE^145^You can channel divine energies into your own body, increasing your speed.
+Divine Countermagic [Divine]^FE^146^You channel divine energies to counter spells.
+Divine Warrior [Divine]^FE^146^Through divine power, you wield your deity's favored weapon to devastating effect.
+Domain Spontaneity [Divine]^FE^147^You are so familiar with one of your domains that you can convert other prepared spells into spells from that domain.
+Frantic Rage^FE^147^Your divine madness allows you to channel your fury into frenetic agility rather than might.
+Heroic Channeling [Divine]^FE^147^You can call on your personal strength of will to channel positive or negative energy into divine feats.
+Heroic Devotion [Divine]^FE^147^Your devotion to your faith allows you to manipulate fate at the expense of some spellcasting ability.
+Lucid Channeling^FE^147^When you invite a celestial into your body, you open your mind completely to the divine spirit.
+Nightbringer Initiate^FE^147^You have been trained in the ways of the Nightbringers, a new offshoot of the Children of Winter.
+Sacred Resilience^FE^147^You can channel divine energies to protect your allies from harm.
+Touch of Silver^FE^148^Your devotion to the Silver Flame allows you to burn the Church's foes with holy energies.
+Unquenchable Flame of Life^FE^148^You are hardened to the attacks of the undead.
+Unyielding Bond of Soul^FE^148^You are hardened to the attacks of the beings of other worlds.
+Worldly Focus^FE^148^Your belief in the omnipresence of the gods is so strong, you can channel your spells through the environment rather than a holy symbol.
+Wrest Possession^FE^148^If you resist control by a possessing fiend, you can attempt to seize control of its abilities.
+Enduring Life^Rav^200^You can ignore the effect of negative levels for a short time.
+Lasting Life^Rav^200^You can shed negative levels with an act of will.
+Favored in Guild^Rav^205^You are an active and valued member of your guild.
+Acidic Splatter^CM^37^You can channel magical energy into orbs of acid.
+Alacritous Cogitation^CM^37^You can leave a prepared spell slot open to spontaneously cast a spell.
+Aquatic Breath [Reserve]^CM^39^Your reservoir of magic allows you to breathe normally even underwater.
+Battlecaster Defense [Tactical]^CM^39^You have mastered techniques for taking full advantage of spells in melee while remaining unharmed.
+Battlecaster Offense [Tactical]^CM^40^You cunningly mix melee combat and spellcasting to increase the potency of both.
+Blade of Force [Reserve]^CM^40^You can surround a weapon with a short-lived aura of force.
+Borne Aloft [Reserve]^CM^40^You can channel the magic of the winds to briefly grant you flight.
+Captivating Melody^CM^40^You can expend some of your musical abilities to increase the potency of your enchantment or illusion spells.
+Clap of Thunder [Reserve]^CM^40^You can deliver a thunderous roar with a touch.
+Cloudy Conjuration^CM^40^Your conjured creations and summoned beings appear in a puff of sickening black smoke, and you vanish in a cloud of the same when you teleport.
+Clutch of Earth [Reserve]^CM^40^You briefly increase the earth's pull on the target creature.
+Dazzling Illusion^CM^41^Casting illusions causes the air about you to be filled with flashing colors that dazzle your foes.
+Defending Spirit^CM^41^Your watchful spirit helps keep you safe in combat.
+Delay Potion^CM^41^You can drink a potion and postpone its effects.
+Dimensional Jaunt^CM^41^With a single step, you can cross an entire room.
+Dimensional Reach [Reserve]^CM^41^You can transport small objects to you with an act of will.
+Drowning Glance [Reserve]^CM^41^With a look, you create a small but incapacitating amount of water in the subject's lungs.
+Elemental Adept^CM^42^You can spontaneously cast a spell of the element you have mastered.
+Energy Abjuration^CM^42^Casting an abjuration spell grants you protection from energy damage.
+Energy Gestalt [Tactical]^CM^42^You have learned to combine multiple energy effects to great advantage.
+Face-Changer [Reserve]^CM^42^Your mastery of illusions allows you to subtly alter your appearance at whim.
+Favored Magic Foe^CM^42^Through study, you have learned how best to defend yourself against your favored enemies' spells and how to best affect them with your own.
+Fearsome Necromancy^CM^42^Creatures subjected to your necromantic spells feel the chill of fear.
+Fey Heritage [Heritage]^CM^43^You are descended from creatures native to the fey realms. You are naturally resistant to the most common effects produced by
+Fey Legacy [Heritage]^CM^43^The magical powers of your ancestors manifest in you.
+Fey Power [Heritage]^CM^43^Your fey heritage augments the power of certain types of magic.
+Fey Presence [Heritage]^CM^43^You share your ancestor's knack for playing tricks on the minds of others.
+Fey Skin [Heritage]^CM^43^Your fey heritage guards you against all weapons except those crafted from the dreaded cold iron.
+Fiendish Heritage [Heritage]^CM^43^You are descended from creatures native to the Lower Planes.
+Fiendish Legacy [Heritage]^CM^43^The magical powers of your ancestors manifest in you.
+Fiendish Power [Heritage]^CM^43^Your fiendish heritage augments the power of certain types of magic.
+Fiendish Presence [Heritage]^CM^43^You share your ancestors' ability to tamper with the minds of weak-minded fools.
+Fiendish Resistance [Heritage]^CM^43^Your bloodline inures you against corrosion and fire.
+Fiery Burst [Reserve]^CM^43^You channel your magical talent into a blast of fire.
+Hasty Spirit^CM^44^Your watchful spirit lends you a burst of speed in times of great need.
+Hurricane Breath [Reserve]^CM^44^The power of elemental air you hold in your mind allows you to exhale the wind.
+Insightful Divination^CM^44^Casting a divination spell grants you an uncanny insight into danger.
+Invisible Needle [Reserve]^CM^44^You can create tiny darts of force.
+Magic Device Attunement^CM^44^You have a knack for activating familiar magic items.
+Magic Disruption [Reserve]^CM^44^You can use your powers of abjuration to interfere with other casters' spells.
+Magic Sensitive [Reserve]^CM^44^You literally see the emanations of magic around you.
+Master of Undeath^CM^44^You can control an undead that you create . . . for a time.
+Melodic Casting^CM^44^You can weave your music and magic together into a single perfect voice.
+Metamagic School Focus^CM^45^You are unusually skilled at modifying the effects of a particular school of magic.
+Metamagic Spell Trigger^CM^45^You can apply metamagic feats you know to spell effects from magic items you activate with a spell trigger.
+Metamagic Vigor [Tactical]^CM^45^The energy you pour into increasing the power of your spells feeds back upon itself in an ever-increasing cycle.
+Minor Shapeshift [Reserve]^CM^45^Your mastery of shapeshifting magic allows you to reshape your flesh in small but significant ways.
+Mystic Backlash [Reserve]^CM^45^With a touch, your magic corrupts the spells of your enemy.
+Piercing Evocation^CM^46^Your evocation spells ignore an amount of energy resistance.
+Ranged Recall^CM^46^Your magical ranged attacks rarely miss.
+Rapid Metamagic^CM^46^You possess an uncanny mastery of your magic, enabling you to modify spells on the fly much faster than others can.
+Residual Magic [Tactical]^CM^46^You can use the lingering energy from a spell you cast to boost the effect of a later spell.
+Retributive Spell [Metamagic]^CM^47^You can keep a spell in reserve to use when a foe causes you harm.
+Shadow Veil [Reserve]^CM^47^You draw wisps of darkness across your enemy's eyes, obscuring the world around him.
+Sickening Grasp [Reserve]^CM^47^You wreak havoc with the inner organs of a target, causing it to grow ill.
+Somatic Weaponry^CM^47^You are adept at performing somatic spell components while your hands are occupied.
+Storm Bolt [Reserve]^CM^47^The electrical energy contained within your magic rages inside you, begging to be released.
+Summon Elemental [Reserve]^CM^47^You can channel the summoning power you hold to briefly bring forth an elemental servant.
+Sunlight Eyes [Reserve]^CM^48^The bright magic within you allows you to see through the darkest shadow.
+Touch of Distraction [Reserve]^CM^48^Your touch briefly clouds the mind of a foe, impeding its efforts.
+Toughening Transmutation^CM^48^Casting a transmutation spell briefly transforms your skin or that of an ally into sterner stuff.
+Unsettling Enchantment^CM^48^Your enchantment spells cloud the minds of even those who would otherwise resist their effects.
+Vengeful Spirit^CM^48^Your watchful spirit takes revenge on foes that have harmed you.
+Wind-Guided Arrows [Reserve]^CM^48^Your mastery of the wind allows you to alter the flight of a ranged weapon.
+Winter's Blast [Reserve]^CM^48^The frozen magic within you can burst forth in a hail of frost.
--- a/data/dnd3e/dnd3earmor.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3earmor.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,87 +1,87 @@
-<ac>
-<armor  name="Banded mail" cost="250" type="Heavy" maxdex="1" bonus="6" spellfailure="35" checkpenalty="-6" weight="35" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of overlapping strips of metal sewn to a backing of leather and chainmail. The strips cover vulnerable areas, while the chain and leather protect the joints and provide freedom of movement. Straps and buckles distribute the weight evenly. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Breastplate" cost="200" type="Medium" maxdex="3" bonus="5" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
-<description >A breastplate covers the front and back. It comes with a helmet and matching greaves (plates to cover the lower legs). A light suit or skirt of studded leather beneath the breastplate protects limbs without restricting
-movement much.
-</description >
-</armor>
-<armor  name="Buckler" cost="15" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
-<description >This small metal shield is strapped to the forearm, allowing it to be worn and still use the hand. A bow or crossbow can be used without penalty. An off-hand weapon can be used, but a -1 penalty on attack rolls is imposed because of the extra weight on your arm. This penalty stacks with those for fighting with the off hand and, if appropriate, for fighting with two weapons. In any case, if a weapon is used in the off-hand, the character doesn't get the buckler's AC bonus for the rest of the round.
-</description >
-</armor>
-<armor  name="Chainmail" cost="150" type="Medium" maxdex="2" bonus="5" spellfailure="30" checkpenalty="-5" weight="40" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of interlocking metal rings. It includes a layer of quilted fabric underneath it to prevent chafing and to cushion the impact of blows. Several layers of mail are hung over vital areas. Most of the armor's weight hangs from the shoulders, making chainmail uncomfortable to wear for long periods of time. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Chainshirt" cost="100" type="Light" maxdex="4" bonus="4" spellfailure="20" checkpenalty="-2" weight="25" speed="30" speed20="20" speed30="30" >
-<description >A shirt of chainmail protects the torso while leaving the limbs free and mobile. A layer of quilted fabric underneath it prevents chafing and cushions the impact of blows. It comes with a steel cap.
-</description >
-</armor>
-<armor  name="Full Plate" cost="1500" type="Heavy" maxdex="1" bonus="8" spellfailure="35" checkpenalty="-6" weight="50" speed="20" speed20="15" speed30="20" >
-<description >This armor consists of shaped and fitted metal plates riveted and interlocked to cover the entire body. It includes gauntlets, heavy leather boots, and a visored helmet.
-</description >
-</armor>
-<armor  name="Half-Plate" cost="600" type="Heavy" maxdex="0" bonus="7" spellfailure="40" checkpenalty="-7" weight="50" speed="20" speed20="15" speed30="20" >
-<description >This armor is a combination of chainmail with metal plates (breastplate, epaulettes, elbow guards, gauntlets, tasses, and greaves) covering vital areas. Buckles and straps hold the whole suit together and distribute the weight, but the armor still hangs more loosely than full plate. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Hide" cost="15" type="Medium" maxdex="4" bonus="3" spellfailure="20" checkpenalty="-3" weight="25" speed="20" speed20="15" speed30="20" >
-<description >This armor is prepared from multiple layers of leather and animal hides. It is stiff and hard to move in.
-</description >
-</armor>
-<armor  name="Large SteelShield" cost="20" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="15" speed="30" speed20="20" speed30="30" >
-<description >A large shield is too heavy to use the shield hand for anything else.
-</description >
-</armor>
-<armor  name="Large Wooden Shield" cost="7" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="10" speed="30" speed20="20" speed30="30" >
-<description >A large shield is too heavy to use the shield hand for anything else.
-</description >
-</armor>
-<armor  name="Leather" cost="10" type="Light" maxdex="6" bonus="2" spellfailure="10" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
-<description >The breastplate and shoulder protectors of this armor are made of leather that has been stiffened by boiling in oil. The rest of the armor is softer and more flexible leather.
-</description >
-</armor>
-<armor  name="Padded" cost="5" type="Light" maxdex="8" bonus="1" spellfailure="5" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
-<description >Padded armor features quilted layers of cloth and batting.
-</description >
-</armor>
-<armor  name="Samll Steel Shield" cost="9" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="6" speed="30" speed20="20" speed30="30" >
-<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
-</description >
-</armor>
-<armor  name="Scale Mail" cost="50" type="Medium" maxdex="3" bonus="4" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
-<description >This is a coat and leggings (and perhaps a separate skirt) of leather covered with overlapping pieces of metal, much like the scales of a fish. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Small Wooden Shield" cost="300" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
-<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
-</description >
-</armor>
-<armor  name="Splint mail" cost="200" type="Heavy" maxdex="0" bonus="6" spellfailure="40" checkpenalty="-7" weight="45" speed="20" speed20="15" speed30="20" >
-<description >This armor is made of narrow vertical strips of metal riveted to a backing of leather that is worn over cloth padding. Flexible chainmail protects the joints. It includes gauntlets.
-</description >
-</armor>
-<armor  name="Studded Leather" cost="25" type="Light" maxdex="5" bonus="3" spellfailure="15" checkpenalty="-1" weight="20" speed="30" speed20="20" speed30="30" >
-<description >This armor is made from tough but flexible leather (not hardened leather as with normal leather armor) reinforced with close-set metal rivets.
-</description >
-</armor>
-<armor  name="Tower Shield" cost="30" type="Shield" maxdex="100" bonus="0" spellfailure="50" checkpenalty="-10" weight="45" speed="30" speed20="20" speed30="30" >
-<description >This massive wooden shield is nearly as tall as the wielder. Basically, it is a portable wall meant to provide cover. It can provide up to total cover, depending on how far a character comes out from behind it. A tower shield, however, does not provide cover against targeted spells; a spellcaster can cast a spell on a character by targeting the shield. A tower shield cannot be used for the shield bash action.
-</description >
-</armor>
-<armor  name="Ring of Protection +1" cost="xx" type="Ring" maxdex="100" bonus="1" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
-<description >A ring that gives Plus 1 AC
-</description >
-</armor>
-<armor  name="Monk Wisdom Bonus" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
-<description >Bonus is Based on wisdom Bonus, and can not be removed unless I am uncontius
-</description >
-</armor>
-<armor  name="Inertial Armor Feat" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
-<description >Armor Bonus based on the feat
-</description >
-</armor>
-</ac>
+<ac>
+<armor  name="Banded mail" cost="250" type="Heavy" maxdex="1" bonus="6" spellfailure="35" checkpenalty="-6" weight="35" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of overlapping strips of metal sewn to a backing of leather and chainmail. The strips cover vulnerable areas, while the chain and leather protect the joints and provide freedom of movement. Straps and buckles distribute the weight evenly. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Breastplate" cost="200" type="Medium" maxdex="3" bonus="5" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
+<description >A breastplate covers the front and back. It comes with a helmet and matching greaves (plates to cover the lower legs). A light suit or skirt of studded leather beneath the breastplate protects limbs without restricting
+movement much.
+</description >
+</armor>
+<armor  name="Buckler" cost="15" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
+<description >This small metal shield is strapped to the forearm, allowing it to be worn and still use the hand. A bow or crossbow can be used without penalty. An off-hand weapon can be used, but a -1 penalty on attack rolls is imposed because of the extra weight on your arm. This penalty stacks with those for fighting with the off hand and, if appropriate, for fighting with two weapons. In any case, if a weapon is used in the off-hand, the character doesn't get the buckler's AC bonus for the rest of the round.
+</description >
+</armor>
+<armor  name="Chainmail" cost="150" type="Medium" maxdex="2" bonus="5" spellfailure="30" checkpenalty="-5" weight="40" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of interlocking metal rings. It includes a layer of quilted fabric underneath it to prevent chafing and to cushion the impact of blows. Several layers of mail are hung over vital areas. Most of the armor's weight hangs from the shoulders, making chainmail uncomfortable to wear for long periods of time. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Chainshirt" cost="100" type="Light" maxdex="4" bonus="4" spellfailure="20" checkpenalty="-2" weight="25" speed="30" speed20="20" speed30="30" >
+<description >A shirt of chainmail protects the torso while leaving the limbs free and mobile. A layer of quilted fabric underneath it prevents chafing and cushions the impact of blows. It comes with a steel cap.
+</description >
+</armor>
+<armor  name="Full Plate" cost="1500" type="Heavy" maxdex="1" bonus="8" spellfailure="35" checkpenalty="-6" weight="50" speed="20" speed20="15" speed30="20" >
+<description >This armor consists of shaped and fitted metal plates riveted and interlocked to cover the entire body. It includes gauntlets, heavy leather boots, and a visored helmet.
+</description >
+</armor>
+<armor  name="Half-Plate" cost="600" type="Heavy" maxdex="0" bonus="7" spellfailure="40" checkpenalty="-7" weight="50" speed="20" speed20="15" speed30="20" >
+<description >This armor is a combination of chainmail with metal plates (breastplate, epaulettes, elbow guards, gauntlets, tasses, and greaves) covering vital areas. Buckles and straps hold the whole suit together and distribute the weight, but the armor still hangs more loosely than full plate. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Hide" cost="15" type="Medium" maxdex="4" bonus="3" spellfailure="20" checkpenalty="-3" weight="25" speed="20" speed20="15" speed30="20" >
+<description >This armor is prepared from multiple layers of leather and animal hides. It is stiff and hard to move in.
+</description >
+</armor>
+<armor  name="Large SteelShield" cost="20" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="15" speed="30" speed20="20" speed30="30" >
+<description >A large shield is too heavy to use the shield hand for anything else.
+</description >
+</armor>
+<armor  name="Large Wooden Shield" cost="7" type="Shield" maxdex="100" bonus="2" spellfailure="15" checkpenalty="-2" weight="10" speed="30" speed20="20" speed30="30" >
+<description >A large shield is too heavy to use the shield hand for anything else.
+</description >
+</armor>
+<armor  name="Leather" cost="10" type="Light" maxdex="6" bonus="2" spellfailure="10" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
+<description >The breastplate and shoulder protectors of this armor are made of leather that has been stiffened by boiling in oil. The rest of the armor is softer and more flexible leather.
+</description >
+</armor>
+<armor  name="Padded" cost="5" type="Light" maxdex="8" bonus="1" spellfailure="5" checkpenalty="0" weight="10" speed="30" speed20="20" speed30="30" >
+<description >Padded armor features quilted layers of cloth and batting.
+</description >
+</armor>
+<armor  name="Samll Steel Shield" cost="9" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="6" speed="30" speed20="20" speed30="30" >
+<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
+</description >
+</armor>
+<armor  name="Scale Mail" cost="50" type="Medium" maxdex="3" bonus="4" spellfailure="25" checkpenalty="-4" weight="30" speed="20" speed20="15" speed30="20" >
+<description >This is a coat and leggings (and perhaps a separate skirt) of leather covered with overlapping pieces of metal, much like the scales of a fish. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Small Wooden Shield" cost="300" type="Shield" maxdex="100" bonus="1" spellfailure="5" checkpenalty="-1" weight="5" speed="30" speed20="20" speed30="30" >
+<description >A small shield's light weight lets a character carry other items in that hand (although the character cannot use weapons).
+</description >
+</armor>
+<armor  name="Splint mail" cost="200" type="Heavy" maxdex="0" bonus="6" spellfailure="40" checkpenalty="-7" weight="45" speed="20" speed20="15" speed30="20" >
+<description >This armor is made of narrow vertical strips of metal riveted to a backing of leather that is worn over cloth padding. Flexible chainmail protects the joints. It includes gauntlets.
+</description >
+</armor>
+<armor  name="Studded Leather" cost="25" type="Light" maxdex="5" bonus="3" spellfailure="15" checkpenalty="-1" weight="20" speed="30" speed20="20" speed30="30" >
+<description >This armor is made from tough but flexible leather (not hardened leather as with normal leather armor) reinforced with close-set metal rivets.
+</description >
+</armor>
+<armor  name="Tower Shield" cost="30" type="Shield" maxdex="100" bonus="0" spellfailure="50" checkpenalty="-10" weight="45" speed="30" speed20="20" speed30="30" >
+<description >This massive wooden shield is nearly as tall as the wielder. Basically, it is a portable wall meant to provide cover. It can provide up to total cover, depending on how far a character comes out from behind it. A tower shield, however, does not provide cover against targeted spells; a spellcaster can cast a spell on a character by targeting the shield. A tower shield cannot be used for the shield bash action.
+</description >
+</armor>
+<armor  name="Ring of Protection +1" cost="xx" type="Ring" maxdex="100" bonus="1" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
+<description >A ring that gives Plus 1 AC
+</description >
+</armor>
+<armor  name="Monk Wisdom Bonus" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
+<description >Bonus is Based on wisdom Bonus, and can not be removed unless I am uncontius
+</description >
+</armor>
+<armor  name="Inertial Armor Feat" cost="xx" type="NA" maxdex="100" bonus="4" spellfailure="0" checkpenalty="0" weight="0" speed="30" speed20="20" speed30="30" >
+<description >Armor Bonus based on the feat
+</description >
+</armor>
+</ac>
--- a/data/dnd3e/dnd3echaracter.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3echaracter.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,113 +1,113 @@
-
-<nodehandler class="d20char_handler" icon="knight" module="d20" name="D20 Character Tool">
-<howtouse>
-<howto>
-To use this you do:
-
-To use this you just need to add all the stuff you wish, set your stats ect, then click on the
-+(plus) next too the gears, and right click.
-
-This will cause it to roll what is needed to roll, except dmg on spells, you will still need to
-roll that normaly, I will work on a way to add it, but for now it isnt required.
-</howto>
-</howtouse>
-  <general>
-    <name>Player Name</name>
-    <player>Your Name</player>
-    <race>none</race>
-    <alignment abbr="LG">none</alignment>
-    <deity>none</deity>
-    <size acmodifier="0">none</size>
-    <height>none</height>
-    <weight>none</weight>
-    <age>none</age>
-    <gender>none</gender>
-    <eyes>none</eyes>
-    <hair>none</hair>
-    <speed>30</speed>
-  </general>
-  <classes level="0"/>
-  <abilities>
-    <stat abbr="Str" base="0" name="Strength"/>
-    <stat abbr="Dex" base="0" name="Dexterity"/>
-    <stat abbr="Con" base="0" name="Constitution"/>
-    <stat abbr="Int" base="0" name="Intelligence"/>
-    <stat abbr="Wis" base="0" name="Wisdom"/>
-    <stat abbr="Cha" base="0" name="Charisma"/>
-  </abilities>
-<inventory>
-<plat>0</plat>
-<gold>0</gold>
-<silver>0</silver>
-<copper>0</copper>
-<generalgear>None</generalgear>
-<magicalgear>None</magicalgear>
-</inventory>
-  <saves>
-    <save base="0" magmod="0" miscmod="0" name="Fortitude" stat="Con"/>
-    <save base="0" magmod="0" miscmod="0" name="Reflex" stat="Dex"/>
-    <save base="0" magmod="0" miscmod="0" name="Will" stat="Wis"/>
-  </saves>
-  <hp current="0" max="0"/>
-  <pp current1="0" free="0" max1="0" maxfree="0"/>
-  <skills>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Alchemy" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Animal Empathy" rank="0" stat="Cha" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Appraise" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Balance" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Bluff" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="1" crossclass="1" misc="0" name="Climb" rank="0" stat="Str" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Concetration" rank="0" stat="Con" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Craft" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Decipher Script" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Diplomacy" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Disable Device" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Disguise" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Escape Artist" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Forgery" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Gather Information" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Handle Animal" rank="0" stat="Cha" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Heal" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Hide" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Innuendo" rank="0" stat="Wis" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Intimidate" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Intuit Direction" rank="0" stat="Wis" untrained="0"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Jump" rank="0" stat="Str" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Arcana" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Architecture and Engineering" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Geography" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: History" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Local" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nature" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nobility and Royalty" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: The Planes" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Religion" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Listen" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Move Silently" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Open Lock" rank="0" stat="Dex" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Perform" rank="0" stat="Cha" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Pick Pocket" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Profession" rank="0" stat="Wis" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Read Lips" rank="0" stat="Int" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Ride" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Scry" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Search" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Sense Motive" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Spellcraft" rank="0" stat="Int" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Spot" rank="0" stat="Wis" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Swim" rank="0" stat="Str" untrained="1"/>
-    <skill armorcheck="1" crossclass="0" misc="0" name="Tumble" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Use Magic Device" rank="0" stat="Cha" untrained="0"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Use Rope" rank="0" stat="Dex" untrained="1"/>
-    <skill armorcheck="0" crossclass="0" misc="0" name="Wilderness Lore" rank="0" stat="Wis" untrained="1"/>
-  </skills>
-  <feats/>
-  <spells/>
-  <powers/>
-<divine/>
-  <attacks>
-    <melee base="0" misc="0"/>
-    <ranged base="0" misc="0"/>
-  </attacks>
-  <ac misc="" natural=""/>
-</nodehandler>
+
+<nodehandler class="d20char_handler" icon="knight" module="d20" name="D20 Character Tool">
+<howtouse>
+<howto>
+To use this you do:
+
+To use this you just need to add all the stuff you wish, set your stats ect, then click on the
++(plus) next too the gears, and right click.
+
+This will cause it to roll what is needed to roll, except dmg on spells, you will still need to
+roll that normaly, I will work on a way to add it, but for now it isnt required.
+</howto>
+</howtouse>
+  <general>
+    <name>Player Name</name>
+    <player>Your Name</player>
+    <race>none</race>
+    <alignment abbr="LG">none</alignment>
+    <deity>none</deity>
+    <size acmodifier="0">none</size>
+    <height>none</height>
+    <weight>none</weight>
+    <age>none</age>
+    <gender>none</gender>
+    <eyes>none</eyes>
+    <hair>none</hair>
+    <speed>30</speed>
+  </general>
+  <classes level="0"/>
+  <abilities>
+    <stat abbr="Str" base="0" name="Strength"/>
+    <stat abbr="Dex" base="0" name="Dexterity"/>
+    <stat abbr="Con" base="0" name="Constitution"/>
+    <stat abbr="Int" base="0" name="Intelligence"/>
+    <stat abbr="Wis" base="0" name="Wisdom"/>
+    <stat abbr="Cha" base="0" name="Charisma"/>
+  </abilities>
+<inventory>
+<plat>0</plat>
+<gold>0</gold>
+<silver>0</silver>
+<copper>0</copper>
+<generalgear>None</generalgear>
+<magicalgear>None</magicalgear>
+</inventory>
+  <saves>
+    <save base="0" magmod="0" miscmod="0" name="Fortitude" stat="Con"/>
+    <save base="0" magmod="0" miscmod="0" name="Reflex" stat="Dex"/>
+    <save base="0" magmod="0" miscmod="0" name="Will" stat="Wis"/>
+  </saves>
+  <hp current="0" max="0"/>
+  <pp current1="0" free="0" max1="0" maxfree="0"/>
+  <skills>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Alchemy" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Animal Empathy" rank="0" stat="Cha" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Appraise" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Balance" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Bluff" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="1" crossclass="1" misc="0" name="Climb" rank="0" stat="Str" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Concetration" rank="0" stat="Con" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Craft" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Decipher Script" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Diplomacy" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Disable Device" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Disguise" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Escape Artist" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Forgery" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Gather Information" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Handle Animal" rank="0" stat="Cha" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Heal" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Hide" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Innuendo" rank="0" stat="Wis" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Intimidate" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Intuit Direction" rank="0" stat="Wis" untrained="0"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Jump" rank="0" stat="Str" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Arcana" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Architecture and Engineering" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Geography" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: History" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Local" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nature" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Nobility and Royalty" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: The Planes" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Knowledge: Religion" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Listen" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Move Silently" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Open Lock" rank="0" stat="Dex" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Perform" rank="0" stat="Cha" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Pick Pocket" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Profession" rank="0" stat="Wis" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Read Lips" rank="0" stat="Int" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Ride" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Scry" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Search" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Sense Motive" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Spellcraft" rank="0" stat="Int" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Spot" rank="0" stat="Wis" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Swim" rank="0" stat="Str" untrained="1"/>
+    <skill armorcheck="1" crossclass="0" misc="0" name="Tumble" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Use Magic Device" rank="0" stat="Cha" untrained="0"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Use Rope" rank="0" stat="Dex" untrained="1"/>
+    <skill armorcheck="0" crossclass="0" misc="0" name="Wilderness Lore" rank="0" stat="Wis" untrained="1"/>
+  </skills>
+  <feats/>
+  <spells/>
+  <powers/>
+<divine/>
+  <attacks>
+    <melee base="0" misc="0"/>
+    <ranged base="0" misc="0"/>
+  </attacks>
+  <ac misc="" natural=""/>
+</nodehandler>
--- a/data/dnd3e/dnd3eclasses.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3eclasses.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,628 +1,628 @@
-<classes>
-<class level="1" name="Arcane Archer" hd="d8" >
-<requirements>Race: Elf or half-elf.
-Base Attack Bonus: +6.
-Feats: Weapon Focus (any bow other than a crossbow), Point Blank Shot, Precise Shot.
-Spellcasting: Ability to cast 1st-level arcane spells.</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>An arcane archer is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
-<features>Enchant Arrow: At 1st level, every nonmagical arrow an arcane archer nocks and lets fly becomes enchanted, gaining a +1 enhancement bonus. An archer's magic arrows only function for her. For every two levels of arcane archer the character advances past 1st level in the prestige class, the magic arrows she creates gain +1 greater potency.
-
-Imbue Arrow: At 2nd level, an arcane archer gains this spell-like ability, allowing her to place an area spell upon an arrow. When the arrow is fired, the spell's area is centered upon where the arrow lands, even if the spell could normally be centered only on the caster. This ability allows the archer to use the bow's range rather than the spell's range. It takes a standard action to cast the spell and fire the arrow. The arrow must be fired in the round the spell is cast, or the spell is wasted.
-
-Seeker Arrow: At 4th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target, even around corners. Only an unavoidable obstacle or the end of the arrow's range prevents the arrow's flight. This ability negates cover and concealment modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
-
-Phase Arrow: At 6th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target in a straight path, passing through any nonmagical barrier or wall in its way. (A wall of force, a wall of fire, or the like stops the arrow.) This ability negates cover, concealment, and even armor modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
-
-Hail of Arrows: In lieu of her regular attacks, once per day the 8th-level arcane archer can fire an arrow at each and every target within range, to a maximum of one target for every arcane archer level she has earned. Each attack uses the archer's primary attack bonus, and each enemy may only be targeted by a single arrow. This is a spell-like ability.
-
-Arrow of Death: At 10th level, the arcane archer can enchant an arrow of death that forces the target, if damaged by the arrow's attack, to make a Fortitude save (DC 20) or be slain immediately. It takes one day to create an arrow of death, and the arrow only functions for the arcane archer who created it. The enchantment lasts no longer than one year, and the archer can only have one such arrow in existence at a time.</features>
-</class>
-<class level="1" name="Assassin" hd="d6" >
-<requirements>Move Silently: 8 ranks.
-Hide: 8 ranks.
-Disguise: 4 ranks.
-Special: In addition, he must kill someone for no other reason than to join the assassins.</requirements>
-<alignment>Evil</alignment>
-<wa_proficiency>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.</wa_proficiency>
-<features>Sneak Attack: Any time the assassin's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the assassin's attack deals +1d6 points of damage. This extra damage increases by +1d6 points every other level (+2d6 at 3rd level, +3d6 at 5th level, and so on). Should the assassin score a critical hit with a sneak attack, this extra damage is not multiplied.
-
-It takes precision and penetration to hit a vital spot, so ranged attacks can only count as sneak attacks if the target is 30 feet away or less.
-
-With a sap or an unarmed strike, the assassin can make a sneak attack that deals subdual damage instead of normal damage. He cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty, because he must make optimal use of his weapon in order to execute the sneak attack.
-
-An assassin can only sneak attack living creatures with discernible anatomies-undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is similarly immune to sneak attacks. Also, the assassin must also be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The assassin cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
-
-If an assassin gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
-
-Death Attack: If the 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 her Fortitude saving throw (DC 10 + the assassin's class level + the assassin's Intelligence 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 completely 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.
-
-Poison Use: Assassins are trained in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
-
-Spells: Beginning at 1st level, an assassin gains the ability to cast a small number of arcane spells. To cast a spell, the assassin must have an Intelligence score of at least 10 + the spell's level, so an assassin with an Intelligence of 10 or lower cannot cast these spells. Assassin bonus spells are based on Intelligence, and saving throws against these spells have a DC of 10 + spell level + the assassin's Intelligence modifier (if any). When the assassin gets 0 spells of a given level, such as 0 1st-level spells at 1st level, the assassin gets only bonus spells. An assassin without a bonus spell for that level cannot yet cast a spell of that level. The assassin's spell list appears below. An assassin prepares and casts spells just as a wizard does.
-
-Saving Throw Bonus 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 levels the assassin gains (+1 at 2nd level, +2 at 4th level, +3 at 6th level, and so on).
-
-Uncanny Dodge: Starting at 2nd level, the assassin 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 his Dexterity bonus to AC if immobilized.)
-
-At 5th level, the 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).
-
-At 10th level, the assassin gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
-
-If the assassin has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
-
-Assassins choose their spells from the following list:
-
-1st level-change self, detect poison, ghost sound, obscuring mist, spider climb.
-2nd level-alter self, darkness, pass without trace, undetectable alignment.
-3rd level-deeper darkness, invisibility, misdirection, nondetection.
-4th level-dimension door, freedom of movement, improved invisibility, poison.</features>
-</class>
-<class level="1" name="Barbarian" hd="d12" >
-<requirements>None</requirements>
-<alignment>Nonlawful</alignment>
-<wa_proficiency>A barbarian is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
-<features>Barbarian Rage: Barbarian temporarily gains +4 to Strength, +4 to Constitution, and a +2 morale bonus on Will saves, but suffers a -2 penalty to AC.
-
-The increase in Constitution increases the barbarian's hit points by 2 points per level, but these hit points go away at the end of the rage when the Constitution score drops back to normal. While raging, a barbarian cannot use skills or abilities that require patience and concentration. (The only class skills he can't use while raging are Craft, Handle Animal, and Intuit Direction.) He can use any feat he might have except for Expertise, item creation feats, metamagic feats, and Skill Focus (if it's tied to a skill that requires patience or concentration).
-
-A fit of rage lasts for a number of rounds equal to 3 + the character's (newly improved) Constitution modifier. The barbarian may prematurely end the rage voluntarily. At the end of the rage, the barbarian is fatigued (-2 to Strength, -2 to Dexterity, can't charge or run) for the duration of that encounter (unless the barbarian is 20th level, when this limitation no longer applies). The barbarian can only fly into a rage once per encounter, and only a certain number of times per day (determined by level). Entering a rage takes no time itself, but the barbarian can only do it during his action.
-
-Starting at 15th level, the barbarian's rage bonuses become +6 to Strength, +6 to Constitution, and a +3 morale bonus to Will saves. (The AC penalty remains at -2.)
-
-Fast Movement: The barbarian has a speed faster than the norm for his race by +10 feet when wearing no armor, light armor, or medium armor (and not carrying a heavy load).
-
-Uncanny Dodge: At 2nd level and above, the barbarian retains his Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
-
-At 5th level, the barbarian can no longer be flanked. The exception to this defense is that a rogue at least four levels higher than the barbarian can still flank.
-
-At 10th level, the barbarian gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 13th level, these bonuses rise to +2. At 16th, they rise to +3, and at 19th they rise to +4.
-
-Damage Reduction: Starting at 11th level, the barbarian gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 1 from the damage the barbarian takes each time the barbarian is dealt damage. At 14th level, this damage reduction rises to 2. At 17th, it rises to 3. At 20th, it rises to 4. Damage reduction can reduce damage to 0 but not below 0.
-
-Illiteracy: Barbarians are the only characters that do not automatically know how to read and write. A barbarian must spend 2 skill points to gain the ability to read and write any language the barbarian is able to speak.
-
-Ex-Barbarians: A barbarian who becomes lawful loses the ability to rage and cannot gain more levels as a barbarian. The barbarian retains all the other benefits of the class.</features>
-</class>
-<class level="1" name="Bard" hd="d6" >
-<requirements>None</requirements>
-<alignment>Nonlawful</alignment>
-<wa_proficiency>A bard is proficient with all simple weapons. Additionally, the bard is proficient with one of the following weapons: longbow, composite longbow, longsword, rapier, sap, short composite bow, short sword, shortbow, or whip. Bards are proficient with light armor, medium armor, and shields.</wa_proficiency>
-<features>Spells: A bard casts arcane spells. The bard casts these spells without needing to memorize them beforehand or keep a spellbook. Bards receive bonus spells for high Charisma, and to cast a spell a bard must have a Charisma score at least equal to 10 + the level of the spell. The Difficulty Class for a saving throw against a bard's spell is 10 + the spell's level + the bard's Charisma modifier.
-
-Bardic Music: Once per day per level, a bard can use song or poetics to produce magical effects on those around him or her. While these abilities fall under the category of bardic music, they can include reciting poetry, chanting, singing lyrical songs, singing melodies, whistling, playing an instrument, or playing an instrument in combination with some spoken performance. As with casting a spell with a verbal component, a deaf bard suffers a 20% chance to fail with bardic music. If the bard fails, the attempt still counts against the daily limit.
-
-The Bardic Music effects are:
-
-* Inspire Courage: A bard with 3 or more ranks in Perform can to inspire courage in his or her allies. To be affected, an ally must hear the bard sing for a full round. The effect lasts as long as the bard sings and for 5 rounds after the bard stops singing (or 5 rounds after the ally can no longer hear the bard). While singing, the bard can fight but cannot cast spells, activate magic items by spell completion (such as scrolls), or activate magic items by magic word (such as wands). Affected allies receive a +2 morale bonus to saving throws against charm and fear effects and a +1 morale bonus to attack and weapon damage rolls. Inspire courage is a supernatural, mind-affecting ability.
-
-* Countersong: A bard with 3 or more ranks in Perform can counter magical effects that depend on sound (but not spells that simply have verbal components). As with inspire courage, a bard may sing, play, or recite a countersong while taking other mundane actions, but not magical actions. Each round of the countersong, the bard makes a Perform check. Any creature within 30 feet of the bard (including the bard) who is affected by a sonic or language-dependent magical attack may use the bard's Perform check result in place of his saving throw if, after rolling the saving throw, the Perform check result proves to be better. The bard may keep up the countersong for 10 rounds. Countersong is a supernatural ability.
-
-* Fascinate: A bard with 3 or more ranks in Perform can cause a single creature to become fascinated with him. The creature to be fascinated must be able to see and hear the bard and must be within 90 feet. The bard must also see the creature. The creature must be able to pay attention to the bard. The distraction of a nearby combat or other dangers prevents the ability from working. The bard makes a Perform check, and the target can negate the effect with a Will saving throw equal to or greater than the bard's check result. If the saving throw succeeds, the bard cannot attempt to fascinate that creature again for 24 hours. If the saving throw fails, the creature sits quietly and listens to the song for up to 1 round per level of the bard. While fascinated, the target's Spot and Listen checks suffer a -4 penalty. Any potential threat (such as an ally of the bard moving behind the fascinated creature) allows the fascinated creature a second saving throw against a new Perform check result. Any obvious threat, such as casting a spell, drawing a sword, or aiming, automatically breaks the effect.
-
-While fascinating (or attempting to fascinate) a creature, the bard must concentrate, as if casting or maintaining a spell. Fascinate is a spell-like, mind- affecting charm ability.
-
-* Inspire Competence: A bard with 6 or more ranks in Perform can help an ally succeed at a task. The ally must be able to see and hear the bard and must be within 30 feet. The bard must also see the creature. The ally gets a +2 competence bonus on his skill checks with a particular skill as long as he or she continues to hear the bard's music. The DM may rule that certain uses of this ability are infeasible. The bard can maintain the effect for 2 minutes (long enough for the ally to take 20). Inspire competence is a supernatural, mind-affecting ability.
-
-* Suggestion: A bard with 9 or more ranks in Perform can make a suggestion (as the spell) to a creature that he has already fascinated (see above). The suggestion doesn't count against the bard's daily limit on bardic music performances (one per day per level), but the fascination does. A Will saving throw (DC 13 + the bard's Charisma modifier) negates the effect. Suggestion is a spell-like, mind-affecting charm ability.
-
-* Inspire Greatness: A bard with 12 or more ranks in Perform can inspire greatness in another creature. For every three levels the bard attains beyond 9th, the bard can inspire greatness in one additional creature. To inspire greatness, the bard must sing and the creature must hear the bard sing for a full round, as with inspire courage. The creature must also be within 30 feet. A creature inspired with greatness gains temporary Hit Dice, attack bonuses, and saving throw bonuses as long as he or she hears the bard continue to sing and for 5 rounds thereafter. (All these bonuses are competence bonuses.)
-
-The target gains the following boosts:
-* +2 Hit Dice (d10s that grant temporary hit points).
-* +2 competence bonus on attacks.
-* +1 competence bonus on Fortitude saves.
-
-Apply the target's Constitution modifier, if any, to each bonus Hit Die. These extra Hit Dice count as regular Hit Dice for determining effects such as the sleep spell. Inspire greatness is a supernatural, mind-affecting enchantment ability.
-
-Bardic Knowledge: A bard may make a special bardic knowledge check with a bonus equal to his level + his Intelligence modifier to see whether he knows some relevant information about local notable people, legendary items, or noteworthy places. This check will not reveal the powers of a magic item but may give a hint as to its general function. The bard may not take 10 or take 20 on this check; this sort of knowledge is essentially random. The DM will determine the Difficulty Class of the check by referring to the table below. DC      Type of Knowledge
---      -----------------10      Common, known by at least a substantial minority of the local population.
-20      Uncommon but available, known by only a few people in the area.
-25      Obscure, known by few, hard to come by.
-30      Extremely obscure, known by very few, possibly forgotten by most who once knew it, possibly known only by those who don't understand the significance of the knowledge.
-
-Ex-Bards: A bard who becomes lawful in alignment cannot progress in levels as a bard, though he retains all his bard abilities.</features>
-</class>
-<class level="1" name="Blackguard" hd="d10" >
-<requirements>Base Attack Bonus: +6.
-Knowledge (religion): 2 ranks.
-Hide: 5 ranks.
-Feats: Cleave, Sunder.
-Special: The blackguard must have made peaceful contact with an evil outsider who was summoned by him or someone else to have contracted the taint of true evil.</requirements>
-<alignment>Any Evil</alignment>
-<wa_proficiency>Blackguards are proficient with all simple and martial weapons, with all types of armor, and with shields.</wa_proficiency>
-<features>Detect Good: At will, the blackguard can detect good as a spell-like ability. This ability duplicates the effects of the spell detect good.
-
-Poison Use: Blackguards are skilled in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
-
-Dark Blessing: A blackguard applies his Charisma modifier (if positive) as a bonus to all saving throws.
-
-Spells: Beginning at 1st level, a blackguard gains the ability to cast a small number of divine spells. To cast a spell, the 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 of a given level, such as 0 1st-level spells at 1st level, he gets only bonus spells. (A blackguard without a bonus spell for that level cannot yet cast a spell of that 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 like a cleric. A blackguard prepares and casts spells just as a cleric does (though the blackguard cannot spontaneously cast cure or inflict spells).
-
-Smite Good: 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 the blackguard accidentally smites a creature that is not good, the smite has no effect but it is still used up for that day. Smite good is a supernatural ability.
-
-Aura of Despair: Beginning at 3rd level, the blackguard radiates a malign aura that causes enemies within 10 feet of him to suffer a -2 morale penalty on all saving throws. Aura of despair is a supernatural ability.
-
-Command Undead: 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: If a blackguard can catch an opponent when she is unable to defend herself effectively from his attack, he can strike a vital spot for extra damage. Basically, any time the blackguard's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the blackguard's attack deals +1d6 points of damage at 4th level and an additional +1d6 points for every three levels thereafter (+2d6 at 7th level, +3d6 at 10th level, and so on). Should the blackguard score a critical hit with a sneak attack, this extra damage is not multiplied.
-
-Ranged attacks only count as sneak attacks if the target is 30 feet away or less. A blackguard cannot make a sneak attack to deal subdual damage. The blackguard must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. He cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
-
-A blackguard can only sneak attack living creatures with discernible anatomies. Undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is not subject to sneak attacks.
-
-If a blackguard gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
-
-Blackguards choose their spells from the following list:
-
-1st level-cause fear, cure light wounds, doom, inflict light wounds, magic weapon, summon monster I*.
-2nd level-bull's strength, cure moderate wounds, darkness, death knell, inflict moderate wounds, shatter, summon monster II*.
-3rd level-contagion, cure serious wounds, deeper darkness, inflict serious wounds, protection from elements, summon monster III*.
-4th level-cure critical wounds, freedom of movement, inflict critical wounds, poison, summon monster IV*.
-
-*Evil creatures only.
-
-Fallen Paladins
-
-Blackguards who possess levels of paladin (that is to say, are now ex-paladins) gain extra abilities the more levels of paladin they possess. Those who have tasted the light of goodness and justice and turned away make the foulest villains.</features>
-</class>
-<class level="1" name="Cleric" hd="d8" >
-<requirements>None</requirements>
-<alignment>Varies by deity. A cleric's alignment must be within one step of his deity's, and it may not be neutral unless the deity's alignment is neutral.</alignment>
-<wa_proficiency>Clerics are proficient with all simple weapons. Clerics are proficient with all types of armor (light, medium, and heavy) and with shields.</wa_proficiency>
-<features>Some deities have favored weapons, and clerics consider it a point of pride to wield them. A cleric whose deity's favored weapon is a martial weapon and who chooses War as one of his domains receives the Martial Weapon Proficiency feat related to that weapon for free, as well as the Weapon Focus feat related to that weapon.
-
-Spells: A cleric casts divine spells. A cleric may prepare and cast any spell on the cleric spell list, provided he can cast spells of that level. The Difficulty Class for a saving throw against a cleric's spell is 10 + the spell's level + the cleric's Wisdom modifier.
-
-Each cleric must choose a time at which he must spend an hour each day in quiet contemplation or supplication to regain his daily allotment of spells. Time spent resting has no effect on whether a cleric can prepare spells.
-
-In addition to his standard spells, a cleric gets one domain spell of each spell level, starting at 1st. When a cleric prepares a domain spell, it must come from one of his two domains.
-
-Deity, Domains, and Domain Spells: Choose a deity for your cleric. The cleric's deity influences his alignment, what magic he can perform, his values, and how others see him.
-
-Choose two from among the deity's domains for your cleric's domains. You can only select an alignment domain (such as Good) for your cleric if his alignment matches that domain.
-
-If your cleric is not devoted to a particular deity, you still select two domains to represent his spiritual inclinations and abilities (but the restriction on alignment domains still applies).
-
-Each domain gives your cleric access to a domain spell at each spell level, from 1st on up, as well as a granted power. Your cleric gets the granted powers of all the domains selected. With access to two domain spells at a given spell level, a cleric prepares one or the other each day. If a domain spell is not on the Cleric Spells list, a cleric can only prepare it in his domain slot.
-
-Spontaneous Casting: Good clerics (and neutral clerics of good deities) can channel stored spell energy into healing spells that they haven't prepared ahead of time. The cleric can "lose" a prepared spell in order to cast any cure spell of the same level or lower (a cure spell is any spell with "cure" in its name).
-
-An evil cleric (or a neutral cleric of an evil deity), on the other hand, can't convert prepared spells to cure spells but can convert them to inflict spells (an inflict spell is one with "inflict" in the title).
-
-A cleric who is neither good nor evil and whose deity is neither good nor evil can convert spells either to cure spells or to inflict spells (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric turns or commands undead (see below).
-
-A cleric can't use spontaneous casting to convert domain spells into cure or inflict spells. These spells arise from the particular powers of the cleric's deity, not divine energy in general.
-
-Chaotic, Evil, Good, and Lawful Spells: A cleric can't cast spells of an alignment opposed to his own or to his deity's.
-
-Turn or Rebuke Undead: A good cleric (or a neutral cleric who worships a good deity) has the supernatural ability to turn undead. Evil clerics (and neutral clerics who worship evil deities) can rebuke such creatures. Neutral clerics of neutral deities can do one or the other (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric can cast spontaneous cure or inflict spells (see above).
-
-A cleric may attempt to turn or rebuke undead a number of times per day equal to three plus his Charisma modifier.
-
-Extra Turning: As a feat, a cleric may take Extra Turning. This feat allows the cleric to turn undead four more times per day than normal. A cleric can take this feat multiple times, gaining four extra daily turning attempts each time.
-
-Bonus Languages: A cleric's list of bonus languages includes Celestial, Abyssal, and Infernal, in addition to the bonus languages available to the character because of his race.
-
-Ex-Clerics: A cleric who grossly violates the code of conduct expected by his god (generally acting in ways opposed to the god's alignment or purposes) loses all spells and class features and cannot gain levels as a cleric of that god until he atones.</features>
-</class>
-<class level="1" name="Druid" hd="d8" >
-<requirements>None</requirements>
-<alignment>Neutral good, lawful neutral, neutral, chaotic neutral, or neutral evil.</alignment>
-<wa_proficiency>Druids are proficient with the following weapons: club, dagger, dart, halfspear, longspear, quarterstaff, scimitar, sickle, shortspear, and sling. Their spiritual oaths prohibit them from using weapons other than these. They are proficient with light and medium armors but are prohibited from wearing metal armor (thus, they may wear only padded, leather, or hide armor). They are skilled with shields but must use only wooden ones. </wa_proficiency>
-<features>A druid who wears prohibited armor or wields a prohibited weapon is unable to use any of her magical powers while doing so and for 24 hours thereafter. (Note: A druid can use wooden items that have been altered by the ironwood spell so that they function as though they were steel.)
-
-Spells: A druid casts divine spells. A druid may prepare and cast any spell on the druid spell list provided she can cast spells of that level. She prepares and casts spells the way a cleric does (though she cannot lose a prepared spell to cast a cure spell in its place). To prepare or cast a spell, a druid must have a Wisdom score of at least 10 + the spell's level. The Difficulty Class for a saving throw against a druid's spell is 10 + the spell's level + the druid's Wisdom modifier. Bonus spells for druids are based on Wisdom.
-
-Chaotic, Evil, Good, and Lawful Spells: A druid can't cast spells of an alignment opposed to her own.
-
-Bonus Languages: A druid may substitute Sylvan for one of the bonus languages available to her. In addition, a druid knows the Druidic language. This secret language is known only to druids, and druids are forbidden from teaching it to nondruids. Druidic has its own alphabet.
-
-Nature Sense: A druid can identify plants and animals (their species and special traits) with perfect accuracy. The druid can determine whether water is safe to drink or dangerous.
-
-Animal Companion: A 1st-level druid may begin play with an animal companion. This animal is one that the druid has befriended with the spell animal friendship.
-
-Woodland Stride: Starting at 2nd level, a druid may move through natural thorns, briars, overgrown areas, and similar terrain at his or her normal speed and without suffering damage or other impairment. However, thorns, briars, and overgrown areas that are enchanted or magically manipulated to impede motion still affect the druid.
-
-Trackless Step: Starting at 3rd level, a druid leaves no trail in natural surroundings and cannot be tracked.
-
-Resist Nature's Lure: Starting at 4th level, a druid gains a +4 bonus to saving throws against the spell-like abilities of feys.
-
-Wild Shape: At 5th level, a druid gains the spell-like ability to polymorph self into a Small or Medium-size animal (but not a dire animal) and back again once per day. Unlike the standard use of the spell, however, the druid may only adopt one form. As stated in the spell description, the druid regains hit points as if he or she has rested for a day. The druid does not risk the standard penalty for being disoriented while in the wild shape.
-
-The druid can use this ability more times per day at 6th, 7th, 10th, 14th, and 18th level, as noted. In addition, the druid gains the ability to take the shape of a Large animal at 8th level, a Tiny animal at 11th level, and a Huge animal at 15th level. At 12th level or higher, she can take the form of a dire animal.
-
-At 16th level or higher, the druid may use wild shape to change into a Small, Medium-size, or Large air, earth, fire, or water elemental once per day. The druid gains all the elemental's special abilities. At 18th level, the druid can do this three times per day.
-
-Venom Immunity: At 9th level, a druid gains immunity to all organic poisons, including monster poisons but not mineral poisons or poison gas.
-
-A Thousand Faces: At 13th level, a druid gains the supernatural ability to change his or her appearance at will, as if using the spell alter self.
-
-Timeless Body: After achieving 15th level, a druid no longer suffers ability penalties for aging and cannot be magically aged. Any penalties she may have already suffered, however, remain in place. Bonuses still accrue, and the druid still dies of old age when her time is up.
-
-Ex-Druids: A druid who ceases to revere nature or who changes to a prohibited alignment loses all spells and druidic abilities and cannot gain levels as a druid until she atones.</features>
-</class>
-<class level="1" name="Dwarven Defender" hd="d12" >
-<requirements>Race: Dwarf.
-Base Attack Bonus: +7.
-Feats: Dodge, Endurance, Toughness.</requirements>
-<alignment>Any Lawful</alignment>
-<wa_proficiency>The dwarven defender is proficient with all simple and martial weapons, all types of armor, and shields.</wa_proficiency>
-<features>Defensive Stance: When he needs to, the 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 the following benefits:+2 Strength, +4 Constitution, +2 resistance bonus on all saves, +4 dodge bonus to AC.
-
-While defending, 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 3 rounds, plus the character's (newly improved) Constitution modifier. The defender may end the defense voluntarily prior to this limit. At the end of the defense, the defender is winded and suffers a -2 penalty to Strength for the duration of that encounter. The defender can only take his defensive stance a certain number of times per day as determined by his level. Taking the stance takes no time itself, but the defender can only do so during his action.
-
-Defensive Awareness: Starting at 2nd level, the 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.)
-
-At 5th level, the dwarven defender 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 dwarven defender. The exception to this defense is that a rogue at least 4 levels higher than the dwarven defender can flank him (and thus sneak attack him).
-
-At 10th level, the dwarven defender gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
-
-Defensive awareness is cumulative with uncanny dodge. If the dwarven defender has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant these two abilities and determine the character's defensive awareness ability on that basis.
-
-Damage Reduction: At 6th level, the dwarven defender gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 3 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.)</features>
-</class>
-<class level="1" name="Fighter" hd="d10" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The fighter is proficient in the use of all simple and martial weapons and all armor (heavy, medium, and light) and shields.</wa_proficiency>
-<features>Bonus Feats: At 1st level, the fighter gets a bonus feat in addition to the feat that any 1st-level character gets and the bonus feat granted to humans. The fighter gains an additional bonus feat at 2nd level and every two levels thereafter (4th, 6th, 8th, etc.). These bonus feats must be drawn from the following list: Ambidexterity, Blind-Fight, Combat Reflexes, Dodge (Mobility, Spring Attack), Exotic Weapon Proficiency*, Expertise (Improved Disarm, Improved Trip, Whirlwind Attack), Improved Critical*, Improved Initiative, Improved Unarmed Strike (Deflect Arrows, Stunning Fist), Mounted Combat (Mounted Archery, Trample, Ride-By Attack, Spirited Charge), Point Blank Shot (Far Shot, Precise Shot, Rapid Shot, Shot on the Run), Power Attack (Cleave, Improved Bull Rush, Sunder, Great Cleave), Quick Draw, Two- Weapon Fighting (Improved Two-Weapon Fighting), Weapon Finesse*, Weapon Focus*, Weapon Specialization*.
-
-Some of the bonus feats available to a fighter cannot be acquired until the fighter has gained one or more prerequisite feats; these feats are listed parenthetically after the prerequisite feat. A fighter can select feats marked with an asterisk (*) more than once, but it must be for a different weapon each time. A fighter must still meet all prerequisites for a feat, including ability score and base attack bonus minimums.
-
-Weapon Specialization: On achieving 4th level or higher, as a feat the fighter (and only the fighter) may take Weapon Specialization. Weapon Specialization adds a +2 damage bonus with a chosen weapon. The fighter must have Weapon Focus with that weapon to take Weapon Specialization. If the weapon is a ranged weapon, the damage bonus only applies if the target is within 30 feet, because only at that range can the fighter strike precisely enough to hit more effectively. The fighter may take this feat as a bonus feat or as a regular one.</features>
-</class>
-<class level="1" name="Loremasters" hd="d4" >
-<requirements>Spellcasting: Ability to cast seven different divinations, one of which must be 3rd level or higher.
-Two Knowledge Skills (Any Type): 10 ranks in each.
-Feats: Any three metamagic or item creation feats, plus Skill Focus (Knowledge [any individual Knowledge skill]).</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Loremasters gain no proficiency in any weapon or armor.</wa_proficiency>
-<features>Spells per Day: A loremaster continues training in magic as well as her field of research. Thus, when a new loremaster level is gained, the character gains new spells per day as if she had also gained a level in a 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 (improved chance of controlling or rebuking undead, metamagic or item creation feats, and so on). This essentially means that she adds the level of loremaster to the level of some other spellcasting class the character has, then determines spells per day and caster level accordingly.
-
-If a character had more than one spellcasting class before she became a loremaster, she must decide to which class she adds each level of loremaster for purposes of determining spells per day when she adds the new level.
-
-Secret: In their studies, loremasters stumble upon all sorts of applicable knowledge and secrets. At 1st level and every two levels afterward (3rd, 5th, 7th, and 9th levels), the loremaster chooses one secret from Table: Loremaster Secrets. Her level plus Intelligence modifier determines which secrets she can choose. She can't choose the same secret twice.
-
-Lore: Loremasters gather knowledge. At 2nd level, they gain the ability to know legends or information regarding various topics, just like a bard can with bardic knowledge. The loremaster adds her level and her Intelligence modifier to the Knowledge check. See page 29 in the Player's Handbook for more information on bardic knowledge.
-
-Bonus Languages: Loremasters, in their laborious studies, learn new languages in order to access more knowledge. The loremaster can choose any new language at 4th and 8th level.
-
-Greater Lore: At 6th level, a loremaster gains the ability to identify magic items, as the spell, as an extraordinary ability. She may do this once per item examined.
-
-True Lore: At 10th level, once per day a loremaster can use her knowledge to gain the effects of a legend lore spell or an analyze dweomer spell. True lore is an extraordinary ability.</features>
-</class>
-<class level="1" name="Monk" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any Lawful</alignment>
-<wa_proficiency>Monks are proficient with basic peasant weapons and special weapons whose use is part of monk training. The full list includes club, crossbow (light or heavy), dagger, handaxe, javelin, kama, nunchaku, quarterstaff, shuriken, siangham, and sling.
-
-A monk using a kama, nunchaku, or siangham can strike with his or her unarmed base attack, including her more favorable number of attacks per round (see below). His or her damage, however, is standard for the weapon (1d6, crit X2), not his or her unarmed damage. The weapon must be light, so a Small monk must use Tiny versions of these weapons in order to use the more favorable base attack.
-
-A monk adds her Wisdom bonus (if any) to AC, in addition to her normal Dexterity modifier, and her AC improves as she gains levels. (Only add this extra AC bonus if the total of the monk's Wisdom modifier and the number in the "AC Bonus" column is a positive number.) The Wisdom bonus and the AC bonus represent a preternatural awareness of danger, and a monk does not lose either even in situations when he or she loses her Dexterity modifier due to being unprepared, ambushed, stunned, and so on. (Monks do lose these AC bonuses when immobilized.)
-
-When wearing armor, a monk loses her AC bonus for Wisdom, AC bonus for class and level, favorable multiple unarmed attacks per round, and heightened movement. Furthermore, her special abilities all face the arcane spell failure chance that the armor type normally imposes.</wa_proficiency>
-<features>Unarmed Strike: A monk fighting unarmed gains the benefits of the Improved Unarmed Strike feat and thus does not provoke attacks of opportunity from armed opponents that she attacks.
-
-Making an off-hand attack makes no sense for a monk striking unarmed.
-
-A monk fighting with a one-handed weapon can make an unarmed strike as an off-hand attack, but she suffers the standard penalties for two-weapon fighting. Likewise, a monk with a weapon (other than a special monk weapon) in her off hand gets an extra attack with that weapon but suffers the usual penalties for two-weapon fighting and can't strike with a flurry of blows.
-
-Flurry of Blows: The monk may make one extra attack in a round at her highest base attack, but this attack and each other attack made that round suffer a -2 penalty apiece. This penalty applies for 1 round, so it affects attacks of opportunity the monk might make before her next action. The monk must use the full attack action to strike with a flurry of blows. A monk may also use the flurry of blows if armed with a special monk weapon (kama, nunchaku, or siangham). If armed with one such weapon, the monk makes the extra attack either with that weapon or unarmed. If armed with two such weapons, she uses one for the regular attack (or attacks) and the other for the extra attack. In any case, her damage bonus on the attack with her off hand is not reduced.
-
-Usually, a monk's unarmed strikes deal normal damage rather than subdual damage. However, she can choose to deal her damage as subdual damage when grappling.
-
-Stunning Attack: The monk can use this ability once per round, but no more than once per level per day. The monk must declare she is using a stun attack before making the attack roll (thus, a missed attack roll ruins the attempt). A foe struck by the monk is forced to make a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier). In addition to receiving normal damage, If the saving throw fails, the opponent is stunned for 1 round. The stunning attack is a supernatural ability.
-
-Evasion: If a monk makes a successful Reflex saving throw against an attack that normally deals half damage on a successful save, the monk instead takes no damage. Evasion can only be used if the monk is wearing light armor or no armor. It is an extraordinary ability.
-
-Deflect Arrows: At 2nd level, a monk gains the Deflect Arrows feat, even if she doesn't have the prerequisite Dexterity score.
-
-Fast Movement: At 3rd level and higher, a monk moves faster than normal. A monk in armor (even light armor) or carrying a medium or heavy load loses this extra speed. A dwarf or a Small monk moves more slowly than a Medium-size monk.
-
-From 9th level on, the monk's running ability is actually a supernatural ability.
-
-Still Mind: At 3rd level, a monk gains a +2 bonus to saving throws against spells and effects from the Enchantment school.
-
-Slow Fall: At 4th level, the monk takes damage as if a fall were 20 feet shorter than it actually is. At 18th level, the monk can use a nearby wall to slow her descent and fall any distance without harm.
-
-Purity of Body: At 5th level, a monk gains immunity to all diseases except for magical diseases.
-
-Improved Trip: At 6th level, a monk gains the Improved Trip feat. She need not have taken the Expertise feat, normally a prerequisite.
-
-Wholeness of Body: At 7th level, a monk can cure her own wounds. She can cure up to twice her current level in hit points each day, and she can spread this healing out among several uses. Wholeness of body is a supernatural ability.
-
-Leap of the Clouds: At 7th level or higher, a monk's jumping distance (vertical or horizontal) is not limited according to her height.
-
-Improved Evasion: At 9th level, a monk only takes half damage on a failed save.
-
-Ki Strike: At 10th level, a monk's unarmed attack is empowered with ki. The unarmed strike damage from such an attack can deal damage to a creature with damage reduction as if the blow were made with a weapon with a +1 enhancement bonus. Ki strike is a supernatural ability.
-
-Diamond Body: At 11th level, a monk gains immunity to poison of all kinds. Diamond body is a supernatural ability.
-
-Abundant Step: At 12th level, a monk can slip magically between spaces, as per the spell dimension door, once per day. This is a spell-like ability, and the monk's effective casting level is one-half her actual level (rounded down).
-
-Diamond Soul: At 13th level, a monk gains spell resistance. Her spell resistance equals her level + 10.
-
-Quivering Palm: Starting at 15th level, a monk can use the quivering palm.
-
-The monk can use the quivering palm attack once a week, and she must announce her intent before making her attack roll. Creatures immune to critical hits cannot be affected. The monk must be of higher level than the target (or have more levels than the target's number of Hit Dice). If the monk strikes successfully and the target takes damage from the blow, the quivering palm attack succeeds. Thereafter the monk can choose to try to slay the victim at any later time within 1 day per level of the monk. The monk merely wills the target to die (a free action), and unless the target makes a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier), it dies. If the saving throw is successful, the target is no longer in danger from that particular quivering palm attack (but may be affected by another one at a later time). Quivering palm is a supernatural ability.
-
-Timeless Body: After achieving 17th level, a monk no longer suffers ability penalties for aging and cannot be magically aged. (Any penalties she may have already suffered remain in place.) Bonuses still accrue, and the monk still dies of old age when her time is up.
-
-Tongue of the Sun and Moon: A monk of 17th level or above can speak with any living creature.
-
-Empty Body: At 19th level or higher, a monk can assume an ethereal state for 1 round per level per day, as per the spell etherealness. The monk may go ethereal on a number of different occasions during any single day as long as the total number of rounds spent ethereal does not exceed her level. Empty body is a supernatural ability.
-
-Perfect Self: At 20th level, a monk is forevermore treated as an outsider rather than as a humanoid. Additionally, the monk gains damage reduction 20/+1.
-
-Ex-Monks: A monk who becomes nonlawful cannot gain new levels as a monk but retain all monk abilities.</features>
-</class>
-<class level="1" name="Paladin" hd="d10" >
-<requirements>None</requirements>
-<alignment>Lawful</alignment>
-<wa_proficiency>Paladins are proficient with all simple and martial weapons, with all types of armor (heavy, medium, and light), and with shields.</wa_proficiency>
-<features>Detect Evil: At will, the paladin can detect evil as a spell-like ability. This ability duplicates the effects of the spell detect evil.
-
-Divine Grace: A paladin applies her Charisma modifier (if positive) as a bonus to all saving throws.
-
-Lay on Hands: Each day a paladin can cure a total number of hit points equal to the paladin's Charisma bonus (if any) times the paladin's level. The paladin can cure themselves. The paladin may choose to divide her curing among multiple recipients, and he or she doesn't have to use it all at once. Lay on hands is a spell-like ability whose use is a standard action.
-
-Alternatively, the paladin can use any or all of these points to deal damage to undead creatures. Treat this attack just like a touch spell. The paladin decides how many cure points to use as damage after successfully touching the undead creature.
-
-Divine Health: A paladin is immune to all diseases, including magical diseases.
-
-Aura of Courage: Beginning at 2nd level, a paladin is immune to fear (magical or otherwise). Allies within 10 feet of the paladin gain a +4 morale bonus on saving throws against fear effects. Granting the morale bonus to allies is a supernatural ability.
-
-Smite Evil: Once per day, a paladin of 2nd level or higher may attempt to smite evil with one normal melee attack. She adds her Charisma modifier (if positive) to the paladin's attack roll and deals 1 extra point of damage per level. If the paladin accidentally smites a creature that is not evil, the smite has no effect but it is still used up for that day. Smite evil is a supernatural ability.
-
-Remove Disease: Beginning at 3rd level, a paladin can remove disease, as per the spell remove disease, once per week. Remove disease is a spell-like ability for paladins.
-
-Turn Undead: The paladin may use this ability a number of times per day equal to three plus the paladin's Charisma modifier. The paladin turns undead as a cleric of two levels lower would.
-
-Extra Turning: As a feat, a paladin may take Extra Turning. This feat allows the paladin to turn undead four more times per day than normal. A paladin can take this feat multiple times, gaining four extra daily turning attempts each time.
-
-Spells: Beginning at 4th level, a paladin gains the ability to cast a small number of divine spells. To cast a spell, the paladin must have a Wisdom score of at least 10 + the spell's level. Paladin bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the paladin gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the paladin gets only bonus spells. A paladin has access to any spell on the paladin spell list and can freely choose which to prepare, just as a cleric can.
-
-A paladin prepares and casts spells just as a cleric does (though the paladin cannot use spontaneous casting to substitute a cure spell in place of a prepared spell).
-
-Through 3rd level, a paladin has no caster level. Starting at 4th level, a paladin's caster level is one-half his or her class level.
-
-Special Mount: Upon or after reaching 5th level, a paladin can call an unusually intelligent, strong, and loyal steed to serve him or her in her crusade against evil. This mount is usually a heavy warhorse (for a Medium-size paladin) or a warpony (for a Small paladin).
-
-Should the paladin's mount die, another cannot be called for a year and a day. The new mount has all the accumulated abilities due a mount of the paladin's level.
-
-The DM will provide information about the mount that responds to the paladin's call.
-
-Code of Conduct: A paladin must be of lawful good alignment and loses all special class abilities if she ever willingly commits an act of evil. Additionally, a paladin's code requires that she respect legitimate authority, act with honor (not lying, not cheating, not using poison, etc.), help those who need help (provided they do not use the help for evil or chaotic ends), and punish those that harm or threaten innocents.
-
-Associates: While she may adventure with characters of any good or neutral alignment, a paladin will never knowingly associate with evil characters. A paladin will not continue an association with someone who consistently offends her moral code. A paladin may only hire henchmen or accept followers who are lawful good.
-
-Ex-Paladins: A paladin who ceases to be lawful good, who willfully commits an evil act, or who grossly violates the code of conduct loses all special abilities and spells, including the service of the paladin's warhorse. She also may not progress in levels as a paladin. She regains her abilities if she atones for her violations, as appropriate.</features>
-</class>
-<class level="1" name="Ranger" hd="d10" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>A ranger is proficient with all simple and martial weapons, light armor, medium armor, and shields. </wa_proficiency>
-<features>When wearing light armor or no armor, a ranger can fight with two weapons as if he or she had the feats Ambidexterity and Two-Weapon Fighting. The ranger loses this special bonus when fighting in medium or heavy armor, or when using a double-headed weapon (such as a double sword).
-
-Spells: Beginning at 4th level, a ranger gains the ability to cast a small number of divine spells. To cast a spell, the ranger must have a Wisdom score of at least 10 + the spell's level. Ranger bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the ranger gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the ranger gets only bonus spells. A ranger without a bonus spell for that level cannot yet cast a spell of that level. A ranger has access to any spell on the ranger spell list and can freely choose which to prepare. A ranger prepares and casts spells just as a cleric does (though the ranger cannot use spontaneous casting to lose a spell and cast a cure or inflict spell in its place).
-
-Through 3rd level, a ranger has no caster level. Starting at 4th level, a ranger's caster level is one-half his class level.
-
-Track: A ranger gains Track as a bonus feat.
-
-Favored Enemy: At 1st level, a ranger may select a type of creature as a favored enemy. (A ranger can only select his own race as a favored enemy if he is evil.) Due to his extensive study of his foes and training in the proper techniques for combating them, the ranger gains a +1 bonus to Bluff, Listen, Sense Motive, Spot, and Wilderness Lore checks when using these skills against this type of creature. Likewise, he gets the same bonus to weapon damage rolls against creatures of this type. A ranger also gets the damage bonus with ranged weapons, but only against targets within 30 feet (the ranger cannot strike with deadly accuracy beyond that range). The bonus doesn't apply to damage against creatures that are immune to critical hits.
-
-At 5th level and at every five levels thereafter (10th, 15th, and 20th level), the ranger may select a new favored enemy, and the bonus associated with every previously selected favored enemy goes up by +1.
-
-* Rangers may not select "humanoid" or "outsider" as a favored enemy, but they may select a more narrowly defined type of humanoid or outsider. A ranger can only select his own race as a favored enemy if he is evil.
-
-Improved Two-Weapon Fighting: A ranger with a base attack bonus of at least +9 can choose to gain the Improved Two-Weapon Fighting feat even if he does not have the other prerequisites for the feat. The ranger must be wearing light armor or no armor in order to use this benefit. </features>
-</class>
-<class level="1" name="Rogue" hd="d6" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>A rogue's weapon training focuses on weapons suitable for stealth and sneak attacks. Thus, all rogues are proficient with the crossbow (hand or light), dagger (any type), dart, light mace, sap, shortbow (normal and composite), and short sword. Medium-size rogues are also proficient with certain weapons that are too big for Small rogues to use and conceal easily: club, heavy crossbow, heavy mace, morningstar, quarterstaff, and rapier. Rogues are proficient with light armor but not with shields. </wa_proficiency>
-<features>Sneak Attack: Any time the rogue's target would be denied a Dexterity bonus to AC (whether the target actually has a Dexterity bonus or not), or when the rogue flanks the target, the rogue's attack deals extra damage. The extra damage is +1d6 at 1st level and an additional 1d6 every two levels thereafter. Should the rogue score a critical hit with a sneak attack, this extra damage is not multiplied.
-
-Ranged attacks can only count as sneak attacks if the target is within 30 feet. The rogue can't strike with deadly accuracy from beyond that range.
-
-With a sap (blackjack) or an unarmed strike, the rogue can make a sneak attack that deals subdual damage instead of normal damage. The rogue cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty.
-
-A rogue can only sneak attack a living creature with a discernible anatomy. Any creature that is immune to critical hits is also not vulnerable to sneak attacks. The rogue must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The rogue cannot sneak attack while striking a creature with concealment or striking the limbs of a creature whose vitals are beyond reach.
-
-Traps: Rogues (and only rogues) can use the Search skill to locate traps when the task has a Difficulty Class higher than 20. Finding a nonmagical trap has a DC of at least 20, higher if it is well hidden. Finding a magic trap has a DC of 25 + the level of the spell used to create it.
-
-Rogues (and only rogues) can use the Disable Device skill to disarm magic traps. A magic trap generally has a DC of 25 + the level of the spell used to create it.
-
-A rogue who beats a trap's DC by 10 or more with a Disable Device check can generally study a trap, figure out how it works, and bypass it (with his party) without disarming it.
-
-Evasion: At 2nd level, a rogue gains evasion. If exposed to any effect that normally allows a character to attempt a Reflex saving throw for half damage, the rogue takes no damage with a successful saving throw. Evasion can only be used if the rogue is wearing light armor or no armor. It is an extraordinary ability.
-
-Uncanny Dodge: At 3rd level and above, she retains her Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
-
-At 6th level , the rogue can no longer be flanked. Another rogue at least four levels higher can still flank.
-
-At 11th level, the rogue gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 14th level, these bonuses rise to +2. At 17th, they rise to +3, and at 20th they rise to +4.
-
-Special Abilities: On achieving 10th level and every three levels thereafter (13th, 16th, and 19th), a rogue chooses a special ability from among the following:
-
-Crippling Strike: When the rogue damages an opponent with a sneak attack, the target also takes 1 point of Strength damage.
-
-Defensive Roll: Once per day, when a rogue would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the rogue can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. The rogue must be aware of the attack and able to react to it in order to execute the defensive roll - if the Dexterity bonus to AC is denied, the rogue can't roll. Since this effect would not normally allow a character to make a Reflex save for half damage, the rogue's evasion ability does not apply to the defensive roll.
-
-Improved Evasion: The rogue takes only half damage on a failed save.
-
-Opportunist: Once per round, the rogue can make an attack of opportunity against an opponent who has just been struck for damage in melee by another character. This attack counts as the rogue's attacks of opportunity for that round. Even a rogue with the Combat Reflexes feat can't use the opportunist ability more than once per round.
-
-Skill Mastery: The rogue selects a number of skills equal to 3 + Intelligence modifier. When making a skill check with one of these skills, the rogue may take 10 even if stress and distractions would normally prevent the rogue from doing so. The rogue may gain this special ability multiple times, selecting additional skills for it to apply to each time.
-
-Slippery Mind: If a rogue with a slippery mind is affected by an enchantment and fails the saving throw, 1 round later the rogue can attempt the saving throw again. The rogue only gets this one extra chance to succeed. This is an extraordinary ability.
-
-Feat: A rogue may gain a feat in place of a special ability. </features>
-</class>
-<class level="1" name="Shadowdancer" hd="d8" >
-<requirements>Move Silently: 8 ranks.
-Hide: 10 ranks.
-Perform: 5 ranks.
-Feats: Dodge, Mobility, Combat Reflexes</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Shadowdancers are proficient with the club, crossbow (hand, light, or heavy), dagger (any type), dart, mace, morningstar, quarterstaff, rapier, sap, shortbow (normal and composite), and short sword. Shadowdancers are proficient with light armor but not with shields.</wa_proficiency>
-<features>Hide in Plain Sight: Shadowdancers can use the Hide skill even while being observed. As long as they are within 10 feet of some sort of shadow, shadowdancers can hide themselves from view in the open without anything to actually hide behind. They cannot, however, hide in their own shadows. Hide in plain sight is a supernatural ability.
-
-Evasion: At 2nd level, a shadowdancer gains evasion. If exposed to any effect that normally allows her to attempt a Reflex saving throw for half damage (such as a fireball), she takes no damage with a successful saving throw. The evasion ability can only be used if the shadowdancer is wearing light armor or no armor.
-
-Darkvision: At 2nd level, a shadowdancer can see in the dark as though she were permanently under the affect of a darkvision spell. This is a supernatural ability.
-
-Uncanny Dodge: Starting at 2nd level, the shadowdancer gains the extraordinary ability to react to danger before her senses would normally allow her to even be aware of it. At 2nd level and above, she retains her Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (She still loses any Dexterity bonus to AC if immobilized.)
-
-At 5th level, the shadowdancer can no longer be flanked, since she can react to opponents on opposite sides of her as easily as she can react to a single attacker. This defense denies rogues the ability to use flank attacks to sneak attack the shadowdancer. The exception to this defense is that a rogue at least 4 levels higher than the shadowdancer can flank her (and thus sneak attack her).
-
-At 10th level, the shadowdancer gains an intuitive sense that alerts her to danger from traps, giving her a +1 bonus to Reflex saves made to avoid traps.
-
-If the shadowdancer has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
-
-Shadow Illusion: When a shadowdancer reaches 3rd level, she can create visual illusions from surrounding shadows. This spell-like ability is identical to the arcane spell silent image and may be employed once per day.
-
-Summon Shadow: At 3rd level, a shadowdancer can summon a shadow, an undead shade. Unlike a normal shadow, this shadow's alignment matches that of the shadowdancer. The summoned shadow cannot be turned, rebuked, or commanded by any third party. This shadow serves as a companion to the shadowdancer and can communicate intelligibly with the shadowdancer. Every third level gained by the shadowdancer allows her to summon an additional shadow and adds +2 HD (and the requisite base attack and base save bonus increases) to all her shadow companions.
-
-If a shadow companion is destroyed, or the shadowdancer chooses to dismiss it, the shadowdancer must attempt a Fortitude saving throw (DC 15). If the saving throw fails, the shadowdancer loses 200 experience points per shadowdancer level. A successful saving throw reduces the loss by half, to 100 XP per prestige class level. The shadowdancer's experience can never go below 0 as the result of a shadow's dismissal or destruction. A destroyed or dismissed shadow companion cannot be replaced for a year and a day.
-
-Shadow Jump: At 4th level, the shadowdancer gains the ability to travel between shadows as if by means of a dimension door spell. The limitation is that the magical transport must begin and end in an area with at least some shadow. The shadowdancer can jump up to a total of 20 feet each day in this way, although this may be a single jump of 20 feet or two jumps of 10 feet each. Every two levels thereafter, the distance a shadowdancer can jump each day doubles (40 feet at 6th level, 80 feet at 8th level, and 160 feet at 10th level). This amount can be split among many jumps, but each one, no matter how small, counts as a 10-foot increment. (A 6th-level shadowdancer who jumps 32 feet cannot jump again until the next day.)
-
-Defensive Roll: Starting at 5th level, the shadowdancer can roll with a potentially lethal blow to take less damage from it. Once per day, when a shadowdancer would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the shadowdancer can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. She must be aware of the attack and able to react to it in order to execute her defensive roll. If she is in a situation that would deny her any Dexterity bonus to AC, she can't attempt the defensive roll.
-
-Slippery Mind: This extraordinary ability, gained at 7th level, represents the shadowdancer's ability to wriggle free from magical effects that would otherwise control or compel her. If the shadowdancer is affected by an enchantment and fails her saving throw, 1 round later she can attempt her saving throw again. She only gets this one extra chance to succeed at her saving throw. If it fails as well, the spell's effects proceed normally.
-
-Improved Evasion: This extraordinary ability, gained at 10th level, works like evasion (see above). The shadowdancer takes no damage at all on successful saving throws against attacks that allow a Reflex saving throw for half damage (breath weapon, fireball, and so on). What's more, she takes only half damage even if she fails her saving throw, since the shadowdancer's reflexes allow her to get out of harm's way with incredible speed.</features>
-</class>
-<class level="1" name="Sorcerer" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Sorcerers are proficient with all simple weapons. They are not proficient with any type of armor, nor with shields. </wa_proficiency>
-<features>Spells: A sorcerer casts arcane spells. The number of spells a sorcerer knows is not affected by his Charisma bonus. The spells a sorcerer knows can be common spells chosen from the sorcerer and wizard spell list, or they can be unusual spells that the sorcerer has gained some understanding of by study.
-
-A sorcerer is limited to casting a certain number of spells of each level per day, but he need not prepare his spells in advance. The number of spells he can cast per day is improved by his bonus spells, if any.
-
-A sorcerer may use a higher-level slot to cast a lower-level spell if he so chooses. The spell is still treated as its actual level, not the level of the slot used to cast it.
-
-To learn or cast a spell, a sorcerer must have a Charisma score of at least 10 + the spell's level. The Difficulty Class for saving throws against sorcerer spells is 10 + the spell's level + the sorcerer's Charisma modifier.</features>
-</class>
-<class level="1" name="Wizard" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Wizards are skilled with the club, dagger, heavy crossbow, light crossbow, and quarterstaff. Wizards are not proficient with any type of armor nor with shields. </wa_proficiency>
-<features>Spells: A wizard casts arcane spells. She is limited to a certain number of spells of each spell level per day, according to her class level. A wizard must prepare spells ahead of time by getting a good night's sleep and spending 1 hour studying her spellbook. While studying, the wizard decides which spells to prepare. To learn, prepare, or cast a spell, a wizard must have an Intelligence score of at least 10 + the spell's level. A wizard's bonus spells are based on Intelligence. The Difficulty Class for saving throws against wizard spells is 10 + the spell's level + the wizard's Intelligence modifier.
-
-Bonus Languages: A wizard may substitute Draconic for one of the bonus languages available to the character.
-
-Familiar: A wizard can summon a familiar in exactly the same manner as a sorcerer. See the sorcerer description.
-
-Scribe Scroll: A wizard has the bonus item creation feat Scribe Scroll, enabling her to create magic scrolls.
-
-Bonus Feats: Every five levels, a wizard gains a bonus feat. This feat must be a metamagic feat, an item creation feat, or Spell Mastery.
-
-Spellbooks: Wizards must study their spellbooks each day to prepare their spells. A wizard cannot prepare any spell not recorded in her spellbook (except for read magic, which all wizards can prepare from memory).
-
-Spell Mastery: A wizard (and only a wizard) can take the special feat Spell Mastery. Each time the wizard takes this feat, choose a number of spells equal to the wizard's Intelligence modifier (they must be spells that the wizard already knows). From that point on, the wizard can prepare these spells without referring to a spellbook.
-
-School Specialization
-
-A school is one of eight groupings of spells, each defined by a common theme, such as illusion or necromancy. A wizard may specialize in one school of magic.
-
-Specialization allows a wizard to cast extra spells from the chosen school, but the wizard then never learns to cast spells from one or more other schools. Spells of the school or schools that the specialist gives up are not available to her, and she can't even cast such spells from scrolls or wands.
-
-The wizard must choose whether to specialize and how at 1st level. She may not change her specialization later.
-
-The specialist can prepare one additional spell (of the school selected as a specialty) per spell level each day.
-
-The specialist gains a +2 bonus to Spellcraft checks to learn the spells of her chosen school.
-
-The eight schools of arcane magic are Abjuration, Conjuration, Divination, Enchantment, Evocation, Illusion, Necromancy, and Transmutation. Spells that do not fall into any of these schools are called universal spells.
-
-Abjuration: To become an abjurer, a wizard must select a prohibited school or schools from the following choices: (1) either Conjuration, Enchantment, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
-
-Conjuration: To become a conjurer, a wizard must select a prohibited school or schools from one of the following choices: (1) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation, or (4) any three schools.
-
-Divination: To become a diviner, a wizard must select any other single school as a prohibited school.
-
-Enchantment: To become an enchanter, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
-
-Evocation: To become an evoker, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation; or (4) any three schools.
-
-Illusion: To become an illusionist, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Enchantment, Evocation, or Transmutation; or (2) both Divination and Necromancy.
-
-Necromancy: To become a necromancer, a wizard must select any other single school as a prohibited school.
-
-Transmutation: To become a transmuter, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; or (4) any three schools.
-
-Universal: Not a school, but a category for spells all wizards can learn. A wizard cannot select universal as a specialty school or as a school to which she does not have access.</features>
-</class>
-<class level="1" name="Adept" hd="d6" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Adepts are skilled with all simple weapons. Adepts are not proficient with any type of armor nor with shields</wa_proficiency>
-<features>Spells: An adept casts divine spells. She is limited to a certain number of spells of each spell level per day, according to her class level. Like a cleric, an adept may prepare and cast any spell on the adept list, provided she can cast spells of that level. Like a cleric, she prepares her spells ahead of time each day. The DC for a saving throw against an adept's spell is 10 + spell level + the adept's Wisdom modifier.
-
-Adepts, unlike wizards, do not acquire their spells from books or scrolls, nor prepare them through study. Instead, they meditate or pray for their spells, receiving them as divine inspiration or through their own strength of faith. Each adept must choose a time each day at which she must spend an hour in quiet contemplation or supplication to regain her daily allotment of spells. Time spent resting has no effect on whether an adept can prepare spells.
-
-When the adept gets 0 spells of a given level, she gets only bonus spells for that spell slot. An adept without a bonus spell for that level cannot yet cast a spell of that level. Bonus spells are based on Wisdom.
-
-Each adept has a particular holy symbol (as a divine focus) depending on the adept's magical tradition.
-
-Familiar: At 2nd level, an adept can call a familiar, just like a sorcerer or wizard can.
-
-Adept Spell List
-0 level-create water, cure minor wounds, detect magic, ghost sound, guidance, light, mending, purify food and drink, read magic.
-1st level-bless, burning hands, cause fear, command, comprehend languages, cure light wounds, detect chaos, detect evil, detect good, detect law, endure elements, obscuring mist, protection from chaos, protection from evil, protection from good, protection from law, sleep.
-2nd level-aid, animal trance, bull's strength, cat's grace, cure moderate wounds, darkness, delay poison, endurance, invisibility, mirror image, resist elements, see invisibility, web.
-3rd level-animate dead, bestow curse, contagion, continual flame, cure serious wounds, daylight, deeper darkness, lightning bolt, neutralize poison, remove curse, remove disease, tongues.
-4th level-cure critical wounds, minor creation, polymorph other, polymorph self, restoration, stoneskin, wall of fire.
-5th level-break enchantment, commune, heal, major creation, raise dead, true seeing, wall of stone.</features>
-</class>
-<class level="1" name="Aristocrat" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The aristocrat is proficient in the use of all simple and martial weapons and with all types of armor and shields.</wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Commoner" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The commoner is proficient with one simple weapon. He is not proficient with weapons, armor, or shields.</wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Expert" hd="d6" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The expert is proficient in the use of all simple weapons and with light armor but not shields. </wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Warrior" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>The warrior is proficient in the use of all simple and martial weapons and all armor and shields.</wa_proficiency>
-<features>None</features>
-</class>
-<class level="1" name="Psion" hd="d4" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Psions are proficient with all simple weapons. They are not proficient with any type of armor, nor with shields. </wa_proficiency>
-<features>Psionics: A Psion manifests psionic powers. The number of pisonic powers know by a psion is a fixed number, by level. Psions must select a specific Discipline to belong to. The psion is required to take a minimum number of powers from his disipline. The psion does not gain extra powers for high stats.
-
-A psion manifest power through the use of power points. The psion does not need to prepare his power before hand as a wizard does. The psion is more like a sorceror in this regard. The psion gains bonus power points for having a high stat in their displine stat.
-
-To learn or manifest a psionic power, a psion must have a stat score of at least 10 + the powers's level in the stat coresponding to it discipline. The Difficulty Class for saving throws against sorcerer spells is 1d20 + the powers's level + the psions's stat modifier.</features>
-</class>
-<class level="1" name="Psychic Warrior" hd="d8" >
-<requirements>None</requirements>
-<alignment>Any</alignment>
-<wa_proficiency>Psychic Warriors are proficient with all simple and martial weapons, and all armour and shields. </wa_proficiency>
-<features>Psionics: A Psychic manifests psionic powers. The number of pisonic powers know by a psion is a fixed number, by level. The psychic warrior does not gain extra powers for high stats. The psychic warriors psionic abilities are inferior to that of the psions.
-
-A psychic warrior manifest power through the use of power points. The psychic warrior does not need to prepare his power before hand as a wizard does. The psychic warrior is more like a sorceror in this regard. The psychic warrior does not gain bonus power points for having a high stat in their displine stat.
-
-To learn or manifest a psionic power, a psychic warrior must have a stat score of at least 10 + the powers's level in the stat coresponding to it discipline. The Difficulty Class for saving throws against sorcerer spells is 1d20 + the powers's level + the psychic warrior's stat modifier.</features>
-</class>
-</classes>
+<classes>
+<class level="1" name="Arcane Archer" hd="d8" >
+<requirements>Race: Elf or half-elf.
+Base Attack Bonus: +6.
+Feats: Weapon Focus (any bow other than a crossbow), Point Blank Shot, Precise Shot.
+Spellcasting: Ability to cast 1st-level arcane spells.</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>An arcane archer is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
+<features>Enchant Arrow: At 1st level, every nonmagical arrow an arcane archer nocks and lets fly becomes enchanted, gaining a +1 enhancement bonus. An archer's magic arrows only function for her. For every two levels of arcane archer the character advances past 1st level in the prestige class, the magic arrows she creates gain +1 greater potency.
+
+Imbue Arrow: At 2nd level, an arcane archer gains this spell-like ability, allowing her to place an area spell upon an arrow. When the arrow is fired, the spell's area is centered upon where the arrow lands, even if the spell could normally be centered only on the caster. This ability allows the archer to use the bow's range rather than the spell's range. It takes a standard action to cast the spell and fire the arrow. The arrow must be fired in the round the spell is cast, or the spell is wasted.
+
+Seeker Arrow: At 4th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target, even around corners. Only an unavoidable obstacle or the end of the arrow's range prevents the arrow's flight. This ability negates cover and concealment modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
+
+Phase Arrow: At 6th level, the arcane archer can launch an arrow once per day at a target known to her within range, and the arrow travels to the target in a straight path, passing through any nonmagical barrier or wall in its way. (A wall of force, a wall of fire, or the like stops the arrow.) This ability negates cover, concealment, and even armor modifiers, but otherwise the attack is rolled normally. This is a spell-like ability. (Shooting the arrow is part of the action.)
+
+Hail of Arrows: In lieu of her regular attacks, once per day the 8th-level arcane archer can fire an arrow at each and every target within range, to a maximum of one target for every arcane archer level she has earned. Each attack uses the archer's primary attack bonus, and each enemy may only be targeted by a single arrow. This is a spell-like ability.
+
+Arrow of Death: At 10th level, the arcane archer can enchant an arrow of death that forces the target, if damaged by the arrow's attack, to make a Fortitude save (DC 20) or be slain immediately. It takes one day to create an arrow of death, and the arrow only functions for the arcane archer who created it. The enchantment lasts no longer than one year, and the archer can only have one such arrow in existence at a time.</features>
+</class>
+<class level="1" name="Assassin" hd="d6" >
+<requirements>Move Silently: 8 ranks.
+Hide: 8 ranks.
+Disguise: 4 ranks.
+Special: In addition, he must kill someone for no other reason than to join the assassins.</requirements>
+<alignment>Evil</alignment>
+<wa_proficiency>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.</wa_proficiency>
+<features>Sneak Attack: Any time the assassin's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the assassin's attack deals +1d6 points of damage. This extra damage increases by +1d6 points every other level (+2d6 at 3rd level, +3d6 at 5th level, and so on). Should the assassin score a critical hit with a sneak attack, this extra damage is not multiplied.
+
+It takes precision and penetration to hit a vital spot, so ranged attacks can only count as sneak attacks if the target is 30 feet away or less.
+
+With a sap or an unarmed strike, the assassin can make a sneak attack that deals subdual damage instead of normal damage. He cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty, because he must make optimal use of his weapon in order to execute the sneak attack.
+
+An assassin can only sneak attack living creatures with discernible anatomies-undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is similarly immune to sneak attacks. Also, the assassin must also be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The assassin cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
+
+If an assassin gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
+
+Death Attack: If the 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 her Fortitude saving throw (DC 10 + the assassin's class level + the assassin's Intelligence 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 completely 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.
+
+Poison Use: Assassins are trained in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
+
+Spells: Beginning at 1st level, an assassin gains the ability to cast a small number of arcane spells. To cast a spell, the assassin must have an Intelligence score of at least 10 + the spell's level, so an assassin with an Intelligence of 10 or lower cannot cast these spells. Assassin bonus spells are based on Intelligence, and saving throws against these spells have a DC of 10 + spell level + the assassin's Intelligence modifier (if any). When the assassin gets 0 spells of a given level, such as 0 1st-level spells at 1st level, the assassin gets only bonus spells. An assassin without a bonus spell for that level cannot yet cast a spell of that level. The assassin's spell list appears below. An assassin prepares and casts spells just as a wizard does.
+
+Saving Throw Bonus 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 levels the assassin gains (+1 at 2nd level, +2 at 4th level, +3 at 6th level, and so on).
+
+Uncanny Dodge: Starting at 2nd level, the assassin 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 his Dexterity bonus to AC if immobilized.)
+
+At 5th level, the 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).
+
+At 10th level, the assassin gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
+
+If the assassin has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
+
+Assassins choose their spells from the following list:
+
+1st level-change self, detect poison, ghost sound, obscuring mist, spider climb.
+2nd level-alter self, darkness, pass without trace, undetectable alignment.
+3rd level-deeper darkness, invisibility, misdirection, nondetection.
+4th level-dimension door, freedom of movement, improved invisibility, poison.</features>
+</class>
+<class level="1" name="Barbarian" hd="d12" >
+<requirements>None</requirements>
+<alignment>Nonlawful</alignment>
+<wa_proficiency>A barbarian is proficient with all simple and martial weapons, light armor, medium armor, and shields.</wa_proficiency>
+<features>Barbarian Rage: Barbarian temporarily gains +4 to Strength, +4 to Constitution, and a +2 morale bonus on Will saves, but suffers a -2 penalty to AC.
+
+The increase in Constitution increases the barbarian's hit points by 2 points per level, but these hit points go away at the end of the rage when the Constitution score drops back to normal. While raging, a barbarian cannot use skills or abilities that require patience and concentration. (The only class skills he can't use while raging are Craft, Handle Animal, and Intuit Direction.) He can use any feat he might have except for Expertise, item creation feats, metamagic feats, and Skill Focus (if it's tied to a skill that requires patience or concentration).
+
+A fit of rage lasts for a number of rounds equal to 3 + the character's (newly improved) Constitution modifier. The barbarian may prematurely end the rage voluntarily. At the end of the rage, the barbarian is fatigued (-2 to Strength, -2 to Dexterity, can't charge or run) for the duration of that encounter (unless the barbarian is 20th level, when this limitation no longer applies). The barbarian can only fly into a rage once per encounter, and only a certain number of times per day (determined by level). Entering a rage takes no time itself, but the barbarian can only do it during his action.
+
+Starting at 15th level, the barbarian's rage bonuses become +6 to Strength, +6 to Constitution, and a +3 morale bonus to Will saves. (The AC penalty remains at -2.)
+
+Fast Movement: The barbarian has a speed faster than the norm for his race by +10 feet when wearing no armor, light armor, or medium armor (and not carrying a heavy load).
+
+Uncanny Dodge: At 2nd level and above, the barbarian retains his Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
+
+At 5th level, the barbarian can no longer be flanked. The exception to this defense is that a rogue at least four levels higher than the barbarian can still flank.
+
+At 10th level, the barbarian gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 13th level, these bonuses rise to +2. At 16th, they rise to +3, and at 19th they rise to +4.
+
+Damage Reduction: Starting at 11th level, the barbarian gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 1 from the damage the barbarian takes each time the barbarian is dealt damage. At 14th level, this damage reduction rises to 2. At 17th, it rises to 3. At 20th, it rises to 4. Damage reduction can reduce damage to 0 but not below 0.
+
+Illiteracy: Barbarians are the only characters that do not automatically know how to read and write. A barbarian must spend 2 skill points to gain the ability to read and write any language the barbarian is able to speak.
+
+Ex-Barbarians: A barbarian who becomes lawful loses the ability to rage and cannot gain more levels as a barbarian. The barbarian retains all the other benefits of the class.</features>
+</class>
+<class level="1" name="Bard" hd="d6" >
+<requirements>None</requirements>
+<alignment>Nonlawful</alignment>
+<wa_proficiency>A bard is proficient with all simple weapons. Additionally, the bard is proficient with one of the following weapons: longbow, composite longbow, longsword, rapier, sap, short composite bow, short sword, shortbow, or whip. Bards are proficient with light armor, medium armor, and shields.</wa_proficiency>
+<features>Spells: A bard casts arcane spells. The bard casts these spells without needing to memorize them beforehand or keep a spellbook. Bards receive bonus spells for high Charisma, and to cast a spell a bard must have a Charisma score at least equal to 10 + the level of the spell. The Difficulty Class for a saving throw against a bard's spell is 10 + the spell's level + the bard's Charisma modifier.
+
+Bardic Music: Once per day per level, a bard can use song or poetics to produce magical effects on those around him or her. While these abilities fall under the category of bardic music, they can include reciting poetry, chanting, singing lyrical songs, singing melodies, whistling, playing an instrument, or playing an instrument in combination with some spoken performance. As with casting a spell with a verbal component, a deaf bard suffers a 20% chance to fail with bardic music. If the bard fails, the attempt still counts against the daily limit.
+
+The Bardic Music effects are:
+
+* Inspire Courage: A bard with 3 or more ranks in Perform can to inspire courage in his or her allies. To be affected, an ally must hear the bard sing for a full round. The effect lasts as long as the bard sings and for 5 rounds after the bard stops singing (or 5 rounds after the ally can no longer hear the bard). While singing, the bard can fight but cannot cast spells, activate magic items by spell completion (such as scrolls), or activate magic items by magic word (such as wands). Affected allies receive a +2 morale bonus to saving throws against charm and fear effects and a +1 morale bonus to attack and weapon damage rolls. Inspire courage is a supernatural, mind-affecting ability.
+
+* Countersong: A bard with 3 or more ranks in Perform can counter magical effects that depend on sound (but not spells that simply have verbal components). As with inspire courage, a bard may sing, play, or recite a countersong while taking other mundane actions, but not magical actions. Each round of the countersong, the bard makes a Perform check. Any creature within 30 feet of the bard (including the bard) who is affected by a sonic or language-dependent magical attack may use the bard's Perform check result in place of his saving throw if, after rolling the saving throw, the Perform check result proves to be better. The bard may keep up the countersong for 10 rounds. Countersong is a supernatural ability.
+
+* Fascinate: A bard with 3 or more ranks in Perform can cause a single creature to become fascinated with him. The creature to be fascinated must be able to see and hear the bard and must be within 90 feet. The bard must also see the creature. The creature must be able to pay attention to the bard. The distraction of a nearby combat or other dangers prevents the ability from working. The bard makes a Perform check, and the target can negate the effect with a Will saving throw equal to or greater than the bard's check result. If the saving throw succeeds, the bard cannot attempt to fascinate that creature again for 24 hours. If the saving throw fails, the creature sits quietly and listens to the song for up to 1 round per level of the bard. While fascinated, the target's Spot and Listen checks suffer a -4 penalty. Any potential threat (such as an ally of the bard moving behind the fascinated creature) allows the fascinated creature a second saving throw against a new Perform check result. Any obvious threat, such as casting a spell, drawing a sword, or aiming, automatically breaks the effect.
+
+While fascinating (or attempting to fascinate) a creature, the bard must concentrate, as if casting or maintaining a spell. Fascinate is a spell-like, mind- affecting charm ability.
+
+* Inspire Competence: A bard with 6 or more ranks in Perform can help an ally succeed at a task. The ally must be able to see and hear the bard and must be within 30 feet. The bard must also see the creature. The ally gets a +2 competence bonus on his skill checks with a particular skill as long as he or she continues to hear the bard's music. The DM may rule that certain uses of this ability are infeasible. The bard can maintain the effect for 2 minutes (long enough for the ally to take 20). Inspire competence is a supernatural, mind-affecting ability.
+
+* Suggestion: A bard with 9 or more ranks in Perform can make a suggestion (as the spell) to a creature that he has already fascinated (see above). The suggestion doesn't count against the bard's daily limit on bardic music performances (one per day per level), but the fascination does. A Will saving throw (DC 13 + the bard's Charisma modifier) negates the effect. Suggestion is a spell-like, mind-affecting charm ability.
+
+* Inspire Greatness: A bard with 12 or more ranks in Perform can inspire greatness in another creature. For every three levels the bard attains beyond 9th, the bard can inspire greatness in one additional creature. To inspire greatness, the bard must sing and the creature must hear the bard sing for a full round, as with inspire courage. The creature must also be within 30 feet. A creature inspired with greatness gains temporary Hit Dice, attack bonuses, and saving throw bonuses as long as he or she hears the bard continue to sing and for 5 rounds thereafter. (All these bonuses are competence bonuses.)
+
+The target gains the following boosts:
+* +2 Hit Dice (d10s that grant temporary hit points).
+* +2 competence bonus on attacks.
+* +1 competence bonus on Fortitude saves.
+
+Apply the target's Constitution modifier, if any, to each bonus Hit Die. These extra Hit Dice count as regular Hit Dice for determining effects such as the sleep spell. Inspire greatness is a supernatural, mind-affecting enchantment ability.
+
+Bardic Knowledge: A bard may make a special bardic knowledge check with a bonus equal to his level + his Intelligence modifier to see whether he knows some relevant information about local notable people, legendary items, or noteworthy places. This check will not reveal the powers of a magic item but may give a hint as to its general function. The bard may not take 10 or take 20 on this check; this sort of knowledge is essentially random. The DM will determine the Difficulty Class of the check by referring to the table below. DC      Type of Knowledge
+--      -----------------10      Common, known by at least a substantial minority of the local population.
+20      Uncommon but available, known by only a few people in the area.
+25      Obscure, known by few, hard to come by.
+30      Extremely obscure, known by very few, possibly forgotten by most who once knew it, possibly known only by those who don't understand the significance of the knowledge.
+
+Ex-Bards: A bard who becomes lawful in alignment cannot progress in levels as a bard, though he retains all his bard abilities.</features>
+</class>
+<class level="1" name="Blackguard" hd="d10" >
+<requirements>Base Attack Bonus: +6.
+Knowledge (religion): 2 ranks.
+Hide: 5 ranks.
+Feats: Cleave, Sunder.
+Special: The blackguard must have made peaceful contact with an evil outsider who was summoned by him or someone else to have contracted the taint of true evil.</requirements>
+<alignment>Any Evil</alignment>
+<wa_proficiency>Blackguards are proficient with all simple and martial weapons, with all types of armor, and with shields.</wa_proficiency>
+<features>Detect Good: At will, the blackguard can detect good as a spell-like ability. This ability duplicates the effects of the spell detect good.
+
+Poison Use: Blackguards are skilled in the use of poison and never risk accidentally poisoning themselves when applying poison to a blade.
+
+Dark Blessing: A blackguard applies his Charisma modifier (if positive) as a bonus to all saving throws.
+
+Spells: Beginning at 1st level, a blackguard gains the ability to cast a small number of divine spells. To cast a spell, the 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 of a given level, such as 0 1st-level spells at 1st level, he gets only bonus spells. (A blackguard without a bonus spell for that level cannot yet cast a spell of that 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 like a cleric. A blackguard prepares and casts spells just as a cleric does (though the blackguard cannot spontaneously cast cure or inflict spells).
+
+Smite Good: 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 the blackguard accidentally smites a creature that is not good, the smite has no effect but it is still used up for that day. Smite good is a supernatural ability.
+
+Aura of Despair: Beginning at 3rd level, the blackguard radiates a malign aura that causes enemies within 10 feet of him to suffer a -2 morale penalty on all saving throws. Aura of despair is a supernatural ability.
+
+Command Undead: 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: If a blackguard can catch an opponent when she is unable to defend herself effectively from his attack, he can strike a vital spot for extra damage. Basically, any time the blackguard's target would be denied her Dexterity bonus to AC (whether she actually has a Dexterity bonus or not), the blackguard's attack deals +1d6 points of damage at 4th level and an additional +1d6 points for every three levels thereafter (+2d6 at 7th level, +3d6 at 10th level, and so on). Should the blackguard score a critical hit with a sneak attack, this extra damage is not multiplied.
+
+Ranged attacks only count as sneak attacks if the target is 30 feet away or less. A blackguard cannot make a sneak attack to deal subdual damage. The blackguard must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. He cannot sneak attack while striking at a creature with concealment or by striking the limbs of a creature whose vitals are beyond reach.
+
+A blackguard can only sneak attack living creatures with discernible anatomies. Undead, constructs, oozes, plants, and incorporeal creatures lack vital areas to attack. Additionally, any creature immune to critical hits is not subject to sneak attacks.
+
+If a blackguard gets a sneak attack bonus from another source (such as rogue levels), the bonuses to damage stack.
+
+Blackguards choose their spells from the following list:
+
+1st level-cause fear, cure light wounds, doom, inflict light wounds, magic weapon, summon monster I*.
+2nd level-bull's strength, cure moderate wounds, darkness, death knell, inflict moderate wounds, shatter, summon monster II*.
+3rd level-contagion, cure serious wounds, deeper darkness, inflict serious wounds, protection from elements, summon monster III*.
+4th level-cure critical wounds, freedom of movement, inflict critical wounds, poison, summon monster IV*.
+
+*Evil creatures only.
+
+Fallen Paladins
+
+Blackguards who possess levels of paladin (that is to say, are now ex-paladins) gain extra abilities the more levels of paladin they possess. Those who have tasted the light of goodness and justice and turned away make the foulest villains.</features>
+</class>
+<class level="1" name="Cleric" hd="d8" >
+<requirements>None</requirements>
+<alignment>Varies by deity. A cleric's alignment must be within one step of his deity's, and it may not be neutral unless the deity's alignment is neutral.</alignment>
+<wa_proficiency>Clerics are proficient with all simple weapons. Clerics are proficient with all types of armor (light, medium, and heavy) and with shields.</wa_proficiency>
+<features>Some deities have favored weapons, and clerics consider it a point of pride to wield them. A cleric whose deity's favored weapon is a martial weapon and who chooses War as one of his domains receives the Martial Weapon Proficiency feat related to that weapon for free, as well as the Weapon Focus feat related to that weapon.
+
+Spells: A cleric casts divine spells. A cleric may prepare and cast any spell on the cleric spell list, provided he can cast spells of that level. The Difficulty Class for a saving throw against a cleric's spell is 10 + the spell's level + the cleric's Wisdom modifier.
+
+Each cleric must choose a time at which he must spend an hour each day in quiet contemplation or supplication to regain his daily allotment of spells. Time spent resting has no effect on whether a cleric can prepare spells.
+
+In addition to his standard spells, a cleric gets one domain spell of each spell level, starting at 1st. When a cleric prepares a domain spell, it must come from one of his two domains.
+
+Deity, Domains, and Domain Spells: Choose a deity for your cleric. The cleric's deity influences his alignment, what magic he can perform, his values, and how others see him.
+
+Choose two from among the deity's domains for your cleric's domains. You can only select an alignment domain (such as Good) for your cleric if his alignment matches that domain.
+
+If your cleric is not devoted to a particular deity, you still select two domains to represent his spiritual inclinations and abilities (but the restriction on alignment domains still applies).
+
+Each domain gives your cleric access to a domain spell at each spell level, from 1st on up, as well as a granted power. Your cleric gets the granted powers of all the domains selected. With access to two domain spells at a given spell level, a cleric prepares one or the other each day. If a domain spell is not on the Cleric Spells list, a cleric can only prepare it in his domain slot.
+
+Spontaneous Casting: Good clerics (and neutral clerics of good deities) can channel stored spell energy into healing spells that they haven't prepared ahead of time. The cleric can "lose" a prepared spell in order to cast any cure spell of the same level or lower (a cure spell is any spell with "cure" in its name).
+
+An evil cleric (or a neutral cleric of an evil deity), on the other hand, can't convert prepared spells to cure spells but can convert them to inflict spells (an inflict spell is one with "inflict" in the title).
+
+A cleric who is neither good nor evil and whose deity is neither good nor evil can convert spells either to cure spells or to inflict spells (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric turns or commands undead (see below).
+
+A cleric can't use spontaneous casting to convert domain spells into cure or inflict spells. These spells arise from the particular powers of the cleric's deity, not divine energy in general.
+
+Chaotic, Evil, Good, and Lawful Spells: A cleric can't cast spells of an alignment opposed to his own or to his deity's.
+
+Turn or Rebuke Undead: A good cleric (or a neutral cleric who worships a good deity) has the supernatural ability to turn undead. Evil clerics (and neutral clerics who worship evil deities) can rebuke such creatures. Neutral clerics of neutral deities can do one or the other (player's choice), depending on whether the cleric is more proficient at wielding positive or negative energy. Once the player makes this choice, it cannot be reversed. This choice also determines whether the neutral cleric can cast spontaneous cure or inflict spells (see above).
+
+A cleric may attempt to turn or rebuke undead a number of times per day equal to three plus his Charisma modifier.
+
+Extra Turning: As a feat, a cleric may take Extra Turning. This feat allows the cleric to turn undead four more times per day than normal. A cleric can take this feat multiple times, gaining four extra daily turning attempts each time.
+
+Bonus Languages: A cleric's list of bonus languages includes Celestial, Abyssal, and Infernal, in addition to the bonus languages available to the character because of his race.
+
+Ex-Clerics: A cleric who grossly violates the code of conduct expected by his god (generally acting in ways opposed to the god's alignment or purposes) loses all spells and class features and cannot gain levels as a cleric of that god until he atones.</features>
+</class>
+<class level="1" name="Druid" hd="d8" >
+<requirements>None</requirements>
+<alignment>Neutral good, lawful neutral, neutral, chaotic neutral, or neutral evil.</alignment>
+<wa_proficiency>Druids are proficient with the following weapons: club, dagger, dart, halfspear, longspear, quarterstaff, scimitar, sickle, shortspear, and sling. Their spiritual oaths prohibit them from using weapons other than these. They are proficient with light and medium armors but are prohibited from wearing metal armor (thus, they may wear only padded, leather, or hide armor). They are skilled with shields but must use only wooden ones. </wa_proficiency>
+<features>A druid who wears prohibited armor or wields a prohibited weapon is unable to use any of her magical powers while doing so and for 24 hours thereafter. (Note: A druid can use wooden items that have been altered by the ironwood spell so that they function as though they were steel.)
+
+Spells: A druid casts divine spells. A druid may prepare and cast any spell on the druid spell list provided she can cast spells of that level. She prepares and casts spells the way a cleric does (though she cannot lose a prepared spell to cast a cure spell in its place). To prepare or cast a spell, a druid must have a Wisdom score of at least 10 + the spell's level. The Difficulty Class for a saving throw against a druid's spell is 10 + the spell's level + the druid's Wisdom modifier. Bonus spells for druids are based on Wisdom.
+
+Chaotic, Evil, Good, and Lawful Spells: A druid can't cast spells of an alignment opposed to her own.
+
+Bonus Languages: A druid may substitute Sylvan for one of the bonus languages available to her. In addition, a druid knows the Druidic language. This secret language is known only to druids, and druids are forbidden from teaching it to nondruids. Druidic has its own alphabet.
+
+Nature Sense: A druid can identify plants and animals (their species and special traits) with perfect accuracy. The druid can determine whether water is safe to drink or dangerous.
+
+Animal Companion: A 1st-level druid may begin play with an animal companion. This animal is one that the druid has befriended with the spell animal friendship.
+
+Woodland Stride: Starting at 2nd level, a druid may move through natural thorns, briars, overgrown areas, and similar terrain at his or her normal speed and without suffering damage or other impairment. However, thorns, briars, and overgrown areas that are enchanted or magically manipulated to impede motion still affect the druid.
+
+Trackless Step: Starting at 3rd level, a druid leaves no trail in natural surroundings and cannot be tracked.
+
+Resist Nature's Lure: Starting at 4th level, a druid gains a +4 bonus to saving throws against the spell-like abilities of feys.
+
+Wild Shape: At 5th level, a druid gains the spell-like ability to polymorph self into a Small or Medium-size animal (but not a dire animal) and back again once per day. Unlike the standard use of the spell, however, the druid may only adopt one form. As stated in the spell description, the druid regains hit points as if he or she has rested for a day. The druid does not risk the standard penalty for being disoriented while in the wild shape.
+
+The druid can use this ability more times per day at 6th, 7th, 10th, 14th, and 18th level, as noted. In addition, the druid gains the ability to take the shape of a Large animal at 8th level, a Tiny animal at 11th level, and a Huge animal at 15th level. At 12th level or higher, she can take the form of a dire animal.
+
+At 16th level or higher, the druid may use wild shape to change into a Small, Medium-size, or Large air, earth, fire, or water elemental once per day. The druid gains all the elemental's special abilities. At 18th level, the druid can do this three times per day.
+
+Venom Immunity: At 9th level, a druid gains immunity to all organic poisons, including monster poisons but not mineral poisons or poison gas.
+
+A Thousand Faces: At 13th level, a druid gains the supernatural ability to change his or her appearance at will, as if using the spell alter self.
+
+Timeless Body: After achieving 15th level, a druid no longer suffers ability penalties for aging and cannot be magically aged. Any penalties she may have already suffered, however, remain in place. Bonuses still accrue, and the druid still dies of old age when her time is up.
+
+Ex-Druids: A druid who ceases to revere nature or who changes to a prohibited alignment loses all spells and druidic abilities and cannot gain levels as a druid until she atones.</features>
+</class>
+<class level="1" name="Dwarven Defender" hd="d12" >
+<requirements>Race: Dwarf.
+Base Attack Bonus: +7.
+Feats: Dodge, Endurance, Toughness.</requirements>
+<alignment>Any Lawful</alignment>
+<wa_proficiency>The dwarven defender is proficient with all simple and martial weapons, all types of armor, and shields.</wa_proficiency>
+<features>Defensive Stance: When he needs to, the 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 the following benefits:+2 Strength, +4 Constitution, +2 resistance bonus on all saves, +4 dodge bonus to AC.
+
+While defending, 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 3 rounds, plus the character's (newly improved) Constitution modifier. The defender may end the defense voluntarily prior to this limit. At the end of the defense, the defender is winded and suffers a -2 penalty to Strength for the duration of that encounter. The defender can only take his defensive stance a certain number of times per day as determined by his level. Taking the stance takes no time itself, but the defender can only do so during his action.
+
+Defensive Awareness: Starting at 2nd level, the 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.)
+
+At 5th level, the dwarven defender 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 dwarven defender. The exception to this defense is that a rogue at least 4 levels higher than the dwarven defender can flank him (and thus sneak attack him).
+
+At 10th level, the dwarven defender gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus to Reflex saves made to avoid traps.
+
+Defensive awareness is cumulative with uncanny dodge. If the dwarven defender has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant these two abilities and determine the character's defensive awareness ability on that basis.
+
+Damage Reduction: At 6th level, the dwarven defender gains the extraordinary ability to shrug off some amount of injury from each blow or attack. Subtract 3 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.)</features>
+</class>
+<class level="1" name="Fighter" hd="d10" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The fighter is proficient in the use of all simple and martial weapons and all armor (heavy, medium, and light) and shields.</wa_proficiency>
+<features>Bonus Feats: At 1st level, the fighter gets a bonus feat in addition to the feat that any 1st-level character gets and the bonus feat granted to humans. The fighter gains an additional bonus feat at 2nd level and every two levels thereafter (4th, 6th, 8th, etc.). These bonus feats must be drawn from the following list: Ambidexterity, Blind-Fight, Combat Reflexes, Dodge (Mobility, Spring Attack), Exotic Weapon Proficiency*, Expertise (Improved Disarm, Improved Trip, Whirlwind Attack), Improved Critical*, Improved Initiative, Improved Unarmed Strike (Deflect Arrows, Stunning Fist), Mounted Combat (Mounted Archery, Trample, Ride-By Attack, Spirited Charge), Point Blank Shot (Far Shot, Precise Shot, Rapid Shot, Shot on the Run), Power Attack (Cleave, Improved Bull Rush, Sunder, Great Cleave), Quick Draw, Two- Weapon Fighting (Improved Two-Weapon Fighting), Weapon Finesse*, Weapon Focus*, Weapon Specialization*.
+
+Some of the bonus feats available to a fighter cannot be acquired until the fighter has gained one or more prerequisite feats; these feats are listed parenthetically after the prerequisite feat. A fighter can select feats marked with an asterisk (*) more than once, but it must be for a different weapon each time. A fighter must still meet all prerequisites for a feat, including ability score and base attack bonus minimums.
+
+Weapon Specialization: On achieving 4th level or higher, as a feat the fighter (and only the fighter) may take Weapon Specialization. Weapon Specialization adds a +2 damage bonus with a chosen weapon. The fighter must have Weapon Focus with that weapon to take Weapon Specialization. If the weapon is a ranged weapon, the damage bonus only applies if the target is within 30 feet, because only at that range can the fighter strike precisely enough to hit more effectively. The fighter may take this feat as a bonus feat or as a regular one.</features>
+</class>
+<class level="1" name="Loremasters" hd="d4" >
+<requirements>Spellcasting: Ability to cast seven different divinations, one of which must be 3rd level or higher.
+Two Knowledge Skills (Any Type): 10 ranks in each.
+Feats: Any three metamagic or item creation feats, plus Skill Focus (Knowledge [any individual Knowledge skill]).</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Loremasters gain no proficiency in any weapon or armor.</wa_proficiency>
+<features>Spells per Day: A loremaster continues training in magic as well as her field of research. Thus, when a new loremaster level is gained, the character gains new spells per day as if she had also gained a level in a 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 (improved chance of controlling or rebuking undead, metamagic or item creation feats, and so on). This essentially means that she adds the level of loremaster to the level of some other spellcasting class the character has, then determines spells per day and caster level accordingly.
+
+If a character had more than one spellcasting class before she became a loremaster, she must decide to which class she adds each level of loremaster for purposes of determining spells per day when she adds the new level.
+
+Secret: In their studies, loremasters stumble upon all sorts of applicable knowledge and secrets. At 1st level and every two levels afterward (3rd, 5th, 7th, and 9th levels), the loremaster chooses one secret from Table: Loremaster Secrets. Her level plus Intelligence modifier determines which secrets she can choose. She can't choose the same secret twice.
+
+Lore: Loremasters gather knowledge. At 2nd level, they gain the ability to know legends or information regarding various topics, just like a bard can with bardic knowledge. The loremaster adds her level and her Intelligence modifier to the Knowledge check. See page 29 in the Player's Handbook for more information on bardic knowledge.
+
+Bonus Languages: Loremasters, in their laborious studies, learn new languages in order to access more knowledge. The loremaster can choose any new language at 4th and 8th level.
+
+Greater Lore: At 6th level, a loremaster gains the ability to identify magic items, as the spell, as an extraordinary ability. She may do this once per item examined.
+
+True Lore: At 10th level, once per day a loremaster can use her knowledge to gain the effects of a legend lore spell or an analyze dweomer spell. True lore is an extraordinary ability.</features>
+</class>
+<class level="1" name="Monk" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any Lawful</alignment>
+<wa_proficiency>Monks are proficient with basic peasant weapons and special weapons whose use is part of monk training. The full list includes club, crossbow (light or heavy), dagger, handaxe, javelin, kama, nunchaku, quarterstaff, shuriken, siangham, and sling.
+
+A monk using a kama, nunchaku, or siangham can strike with his or her unarmed base attack, including her more favorable number of attacks per round (see below). His or her damage, however, is standard for the weapon (1d6, crit X2), not his or her unarmed damage. The weapon must be light, so a Small monk must use Tiny versions of these weapons in order to use the more favorable base attack.
+
+A monk adds her Wisdom bonus (if any) to AC, in addition to her normal Dexterity modifier, and her AC improves as she gains levels. (Only add this extra AC bonus if the total of the monk's Wisdom modifier and the number in the "AC Bonus" column is a positive number.) The Wisdom bonus and the AC bonus represent a preternatural awareness of danger, and a monk does not lose either even in situations when he or she loses her Dexterity modifier due to being unprepared, ambushed, stunned, and so on. (Monks do lose these AC bonuses when immobilized.)
+
+When wearing armor, a monk loses her AC bonus for Wisdom, AC bonus for class and level, favorable multiple unarmed attacks per round, and heightened movement. Furthermore, her special abilities all face the arcane spell failure chance that the armor type normally imposes.</wa_proficiency>
+<features>Unarmed Strike: A monk fighting unarmed gains the benefits of the Improved Unarmed Strike feat and thus does not provoke attacks of opportunity from armed opponents that she attacks.
+
+Making an off-hand attack makes no sense for a monk striking unarmed.
+
+A monk fighting with a one-handed weapon can make an unarmed strike as an off-hand attack, but she suffers the standard penalties for two-weapon fighting. Likewise, a monk with a weapon (other than a special monk weapon) in her off hand gets an extra attack with that weapon but suffers the usual penalties for two-weapon fighting and can't strike with a flurry of blows.
+
+Flurry of Blows: The monk may make one extra attack in a round at her highest base attack, but this attack and each other attack made that round suffer a -2 penalty apiece. This penalty applies for 1 round, so it affects attacks of opportunity the monk might make before her next action. The monk must use the full attack action to strike with a flurry of blows. A monk may also use the flurry of blows if armed with a special monk weapon (kama, nunchaku, or siangham). If armed with one such weapon, the monk makes the extra attack either with that weapon or unarmed. If armed with two such weapons, she uses one for the regular attack (or attacks) and the other for the extra attack. In any case, her damage bonus on the attack with her off hand is not reduced.
+
+Usually, a monk's unarmed strikes deal normal damage rather than subdual damage. However, she can choose to deal her damage as subdual damage when grappling.
+
+Stunning Attack: The monk can use this ability once per round, but no more than once per level per day. The monk must declare she is using a stun attack before making the attack roll (thus, a missed attack roll ruins the attempt). A foe struck by the monk is forced to make a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier). In addition to receiving normal damage, If the saving throw fails, the opponent is stunned for 1 round. The stunning attack is a supernatural ability.
+
+Evasion: If a monk makes a successful Reflex saving throw against an attack that normally deals half damage on a successful save, the monk instead takes no damage. Evasion can only be used if the monk is wearing light armor or no armor. It is an extraordinary ability.
+
+Deflect Arrows: At 2nd level, a monk gains the Deflect Arrows feat, even if she doesn't have the prerequisite Dexterity score.
+
+Fast Movement: At 3rd level and higher, a monk moves faster than normal. A monk in armor (even light armor) or carrying a medium or heavy load loses this extra speed. A dwarf or a Small monk moves more slowly than a Medium-size monk.
+
+From 9th level on, the monk's running ability is actually a supernatural ability.
+
+Still Mind: At 3rd level, a monk gains a +2 bonus to saving throws against spells and effects from the Enchantment school.
+
+Slow Fall: At 4th level, the monk takes damage as if a fall were 20 feet shorter than it actually is. At 18th level, the monk can use a nearby wall to slow her descent and fall any distance without harm.
+
+Purity of Body: At 5th level, a monk gains immunity to all diseases except for magical diseases.
+
+Improved Trip: At 6th level, a monk gains the Improved Trip feat. She need not have taken the Expertise feat, normally a prerequisite.
+
+Wholeness of Body: At 7th level, a monk can cure her own wounds. She can cure up to twice her current level in hit points each day, and she can spread this healing out among several uses. Wholeness of body is a supernatural ability.
+
+Leap of the Clouds: At 7th level or higher, a monk's jumping distance (vertical or horizontal) is not limited according to her height.
+
+Improved Evasion: At 9th level, a monk only takes half damage on a failed save.
+
+Ki Strike: At 10th level, a monk's unarmed attack is empowered with ki. The unarmed strike damage from such an attack can deal damage to a creature with damage reduction as if the blow were made with a weapon with a +1 enhancement bonus. Ki strike is a supernatural ability.
+
+Diamond Body: At 11th level, a monk gains immunity to poison of all kinds. Diamond body is a supernatural ability.
+
+Abundant Step: At 12th level, a monk can slip magically between spaces, as per the spell dimension door, once per day. This is a spell-like ability, and the monk's effective casting level is one-half her actual level (rounded down).
+
+Diamond Soul: At 13th level, a monk gains spell resistance. Her spell resistance equals her level + 10.
+
+Quivering Palm: Starting at 15th level, a monk can use the quivering palm.
+
+The monk can use the quivering palm attack once a week, and she must announce her intent before making her attack roll. Creatures immune to critical hits cannot be affected. The monk must be of higher level than the target (or have more levels than the target's number of Hit Dice). If the monk strikes successfully and the target takes damage from the blow, the quivering palm attack succeeds. Thereafter the monk can choose to try to slay the victim at any later time within 1 day per level of the monk. The monk merely wills the target to die (a free action), and unless the target makes a Fortitude saving throw (DC 10 + one-half the monk's level + Wisdom modifier), it dies. If the saving throw is successful, the target is no longer in danger from that particular quivering palm attack (but may be affected by another one at a later time). Quivering palm is a supernatural ability.
+
+Timeless Body: After achieving 17th level, a monk no longer suffers ability penalties for aging and cannot be magically aged. (Any penalties she may have already suffered remain in place.) Bonuses still accrue, and the monk still dies of old age when her time is up.
+
+Tongue of the Sun and Moon: A monk of 17th level or above can speak with any living creature.
+
+Empty Body: At 19th level or higher, a monk can assume an ethereal state for 1 round per level per day, as per the spell etherealness. The monk may go ethereal on a number of different occasions during any single day as long as the total number of rounds spent ethereal does not exceed her level. Empty body is a supernatural ability.
+
+Perfect Self: At 20th level, a monk is forevermore treated as an outsider rather than as a humanoid. Additionally, the monk gains damage reduction 20/+1.
+
+Ex-Monks: A monk who becomes nonlawful cannot gain new levels as a monk but retain all monk abilities.</features>
+</class>
+<class level="1" name="Paladin" hd="d10" >
+<requirements>None</requirements>
+<alignment>Lawful</alignment>
+<wa_proficiency>Paladins are proficient with all simple and martial weapons, with all types of armor (heavy, medium, and light), and with shields.</wa_proficiency>
+<features>Detect Evil: At will, the paladin can detect evil as a spell-like ability. This ability duplicates the effects of the spell detect evil.
+
+Divine Grace: A paladin applies her Charisma modifier (if positive) as a bonus to all saving throws.
+
+Lay on Hands: Each day a paladin can cure a total number of hit points equal to the paladin's Charisma bonus (if any) times the paladin's level. The paladin can cure themselves. The paladin may choose to divide her curing among multiple recipients, and he or she doesn't have to use it all at once. Lay on hands is a spell-like ability whose use is a standard action.
+
+Alternatively, the paladin can use any or all of these points to deal damage to undead creatures. Treat this attack just like a touch spell. The paladin decides how many cure points to use as damage after successfully touching the undead creature.
+
+Divine Health: A paladin is immune to all diseases, including magical diseases.
+
+Aura of Courage: Beginning at 2nd level, a paladin is immune to fear (magical or otherwise). Allies within 10 feet of the paladin gain a +4 morale bonus on saving throws against fear effects. Granting the morale bonus to allies is a supernatural ability.
+
+Smite Evil: Once per day, a paladin of 2nd level or higher may attempt to smite evil with one normal melee attack. She adds her Charisma modifier (if positive) to the paladin's attack roll and deals 1 extra point of damage per level. If the paladin accidentally smites a creature that is not evil, the smite has no effect but it is still used up for that day. Smite evil is a supernatural ability.
+
+Remove Disease: Beginning at 3rd level, a paladin can remove disease, as per the spell remove disease, once per week. Remove disease is a spell-like ability for paladins.
+
+Turn Undead: The paladin may use this ability a number of times per day equal to three plus the paladin's Charisma modifier. The paladin turns undead as a cleric of two levels lower would.
+
+Extra Turning: As a feat, a paladin may take Extra Turning. This feat allows the paladin to turn undead four more times per day than normal. A paladin can take this feat multiple times, gaining four extra daily turning attempts each time.
+
+Spells: Beginning at 4th level, a paladin gains the ability to cast a small number of divine spells. To cast a spell, the paladin must have a Wisdom score of at least 10 + the spell's level. Paladin bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the paladin gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the paladin gets only bonus spells. A paladin has access to any spell on the paladin spell list and can freely choose which to prepare, just as a cleric can.
+
+A paladin prepares and casts spells just as a cleric does (though the paladin cannot use spontaneous casting to substitute a cure spell in place of a prepared spell).
+
+Through 3rd level, a paladin has no caster level. Starting at 4th level, a paladin's caster level is one-half his or her class level.
+
+Special Mount: Upon or after reaching 5th level, a paladin can call an unusually intelligent, strong, and loyal steed to serve him or her in her crusade against evil. This mount is usually a heavy warhorse (for a Medium-size paladin) or a warpony (for a Small paladin).
+
+Should the paladin's mount die, another cannot be called for a year and a day. The new mount has all the accumulated abilities due a mount of the paladin's level.
+
+The DM will provide information about the mount that responds to the paladin's call.
+
+Code of Conduct: A paladin must be of lawful good alignment and loses all special class abilities if she ever willingly commits an act of evil. Additionally, a paladin's code requires that she respect legitimate authority, act with honor (not lying, not cheating, not using poison, etc.), help those who need help (provided they do not use the help for evil or chaotic ends), and punish those that harm or threaten innocents.
+
+Associates: While she may adventure with characters of any good or neutral alignment, a paladin will never knowingly associate with evil characters. A paladin will not continue an association with someone who consistently offends her moral code. A paladin may only hire henchmen or accept followers who are lawful good.
+
+Ex-Paladins: A paladin who ceases to be lawful good, who willfully commits an evil act, or who grossly violates the code of conduct loses all special abilities and spells, including the service of the paladin's warhorse. She also may not progress in levels as a paladin. She regains her abilities if she atones for her violations, as appropriate.</features>
+</class>
+<class level="1" name="Ranger" hd="d10" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>A ranger is proficient with all simple and martial weapons, light armor, medium armor, and shields. </wa_proficiency>
+<features>When wearing light armor or no armor, a ranger can fight with two weapons as if he or she had the feats Ambidexterity and Two-Weapon Fighting. The ranger loses this special bonus when fighting in medium or heavy armor, or when using a double-headed weapon (such as a double sword).
+
+Spells: Beginning at 4th level, a ranger gains the ability to cast a small number of divine spells. To cast a spell, the ranger must have a Wisdom score of at least 10 + the spell's level. Ranger bonus spells are based on Wisdom, and saving throws against these spells have a Difficulty Class of 10 + spell level + Wisdom modifier. When the ranger gets 0 spells of a given level, such as 0 1st-level spells at 4th level, the ranger gets only bonus spells. A ranger without a bonus spell for that level cannot yet cast a spell of that level. A ranger has access to any spell on the ranger spell list and can freely choose which to prepare. A ranger prepares and casts spells just as a cleric does (though the ranger cannot use spontaneous casting to lose a spell and cast a cure or inflict spell in its place).
+
+Through 3rd level, a ranger has no caster level. Starting at 4th level, a ranger's caster level is one-half his class level.
+
+Track: A ranger gains Track as a bonus feat.
+
+Favored Enemy: At 1st level, a ranger may select a type of creature as a favored enemy. (A ranger can only select his own race as a favored enemy if he is evil.) Due to his extensive study of his foes and training in the proper techniques for combating them, the ranger gains a +1 bonus to Bluff, Listen, Sense Motive, Spot, and Wilderness Lore checks when using these skills against this type of creature. Likewise, he gets the same bonus to weapon damage rolls against creatures of this type. A ranger also gets the damage bonus with ranged weapons, but only against targets within 30 feet (the ranger cannot strike with deadly accuracy beyond that range). The bonus doesn't apply to damage against creatures that are immune to critical hits.
+
+At 5th level and at every five levels thereafter (10th, 15th, and 20th level), the ranger may select a new favored enemy, and the bonus associated with every previously selected favored enemy goes up by +1.
+
+* Rangers may not select "humanoid" or "outsider" as a favored enemy, but they may select a more narrowly defined type of humanoid or outsider. A ranger can only select his own race as a favored enemy if he is evil.
+
+Improved Two-Weapon Fighting: A ranger with a base attack bonus of at least +9 can choose to gain the Improved Two-Weapon Fighting feat even if he does not have the other prerequisites for the feat. The ranger must be wearing light armor or no armor in order to use this benefit. </features>
+</class>
+<class level="1" name="Rogue" hd="d6" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>A rogue's weapon training focuses on weapons suitable for stealth and sneak attacks. Thus, all rogues are proficient with the crossbow (hand or light), dagger (any type), dart, light mace, sap, shortbow (normal and composite), and short sword. Medium-size rogues are also proficient with certain weapons that are too big for Small rogues to use and conceal easily: club, heavy crossbow, heavy mace, morningstar, quarterstaff, and rapier. Rogues are proficient with light armor but not with shields. </wa_proficiency>
+<features>Sneak Attack: Any time the rogue's target would be denied a Dexterity bonus to AC (whether the target actually has a Dexterity bonus or not), or when the rogue flanks the target, the rogue's attack deals extra damage. The extra damage is +1d6 at 1st level and an additional 1d6 every two levels thereafter. Should the rogue score a critical hit with a sneak attack, this extra damage is not multiplied.
+
+Ranged attacks can only count as sneak attacks if the target is within 30 feet. The rogue can't strike with deadly accuracy from beyond that range.
+
+With a sap (blackjack) or an unarmed strike, the rogue can make a sneak attack that deals subdual damage instead of normal damage. The rogue cannot use a weapon that deals normal damage to deal subdual damage in a sneak attack, not even with the usual -4 penalty.
+
+A rogue can only sneak attack a living creature with a discernible anatomy. Any creature that is immune to critical hits is also not vulnerable to sneak attacks. The rogue must be able to see the target well enough to pick out a vital spot and must be able to reach a vital spot. The rogue cannot sneak attack while striking a creature with concealment or striking the limbs of a creature whose vitals are beyond reach.
+
+Traps: Rogues (and only rogues) can use the Search skill to locate traps when the task has a Difficulty Class higher than 20. Finding a nonmagical trap has a DC of at least 20, higher if it is well hidden. Finding a magic trap has a DC of 25 + the level of the spell used to create it.
+
+Rogues (and only rogues) can use the Disable Device skill to disarm magic traps. A magic trap generally has a DC of 25 + the level of the spell used to create it.
+
+A rogue who beats a trap's DC by 10 or more with a Disable Device check can generally study a trap, figure out how it works, and bypass it (with his party) without disarming it.
+
+Evasion: At 2nd level, a rogue gains evasion. If exposed to any effect that normally allows a character to attempt a Reflex saving throw for half damage, the rogue takes no damage with a successful saving throw. Evasion can only be used if the rogue is wearing light armor or no armor. It is an extraordinary ability.
+
+Uncanny Dodge: At 3rd level and above, she retains her Dexterity bonus to AC (if any) if caught flat-footed or struck by an invisible attacker.
+
+At 6th level , the rogue can no longer be flanked. Another rogue at least four levels higher can still flank.
+
+At 11th level, the rogue gains a +1 bonus to Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 14th level, these bonuses rise to +2. At 17th, they rise to +3, and at 20th they rise to +4.
+
+Special Abilities: On achieving 10th level and every three levels thereafter (13th, 16th, and 19th), a rogue chooses a special ability from among the following:
+
+Crippling Strike: When the rogue damages an opponent with a sneak attack, the target also takes 1 point of Strength damage.
+
+Defensive Roll: Once per day, when a rogue would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the rogue can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. The rogue must be aware of the attack and able to react to it in order to execute the defensive roll - if the Dexterity bonus to AC is denied, the rogue can't roll. Since this effect would not normally allow a character to make a Reflex save for half damage, the rogue's evasion ability does not apply to the defensive roll.
+
+Improved Evasion: The rogue takes only half damage on a failed save.
+
+Opportunist: Once per round, the rogue can make an attack of opportunity against an opponent who has just been struck for damage in melee by another character. This attack counts as the rogue's attacks of opportunity for that round. Even a rogue with the Combat Reflexes feat can't use the opportunist ability more than once per round.
+
+Skill Mastery: The rogue selects a number of skills equal to 3 + Intelligence modifier. When making a skill check with one of these skills, the rogue may take 10 even if stress and distractions would normally prevent the rogue from doing so. The rogue may gain this special ability multiple times, selecting additional skills for it to apply to each time.
+
+Slippery Mind: If a rogue with a slippery mind is affected by an enchantment and fails the saving throw, 1 round later the rogue can attempt the saving throw again. The rogue only gets this one extra chance to succeed. This is an extraordinary ability.
+
+Feat: A rogue may gain a feat in place of a special ability. </features>
+</class>
+<class level="1" name="Shadowdancer" hd="d8" >
+<requirements>Move Silently: 8 ranks.
+Hide: 10 ranks.
+Perform: 5 ranks.
+Feats: Dodge, Mobility, Combat Reflexes</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Shadowdancers are proficient with the club, crossbow (hand, light, or heavy), dagger (any type), dart, mace, morningstar, quarterstaff, rapier, sap, shortbow (normal and composite), and short sword. Shadowdancers are proficient with light armor but not with shields.</wa_proficiency>
+<features>Hide in Plain Sight: Shadowdancers can use the Hide skill even while being observed. As long as they are within 10 feet of some sort of shadow, shadowdancers can hide themselves from view in the open without anything to actually hide behind. They cannot, however, hide in their own shadows. Hide in plain sight is a supernatural ability.
+
+Evasion: At 2nd level, a shadowdancer gains evasion. If exposed to any effect that normally allows her to attempt a Reflex saving throw for half damage (such as a fireball), she takes no damage with a successful saving throw. The evasion ability can only be used if the shadowdancer is wearing light armor or no armor.
+
+Darkvision: At 2nd level, a shadowdancer can see in the dark as though she were permanently under the affect of a darkvision spell. This is a supernatural ability.
+
+Uncanny Dodge: Starting at 2nd level, the shadowdancer gains the extraordinary ability to react to danger before her senses would normally allow her to even be aware of it. At 2nd level and above, she retains her Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (She still loses any Dexterity bonus to AC if immobilized.)
+
+At 5th level, the shadowdancer can no longer be flanked, since she can react to opponents on opposite sides of her as easily as she can react to a single attacker. This defense denies rogues the ability to use flank attacks to sneak attack the shadowdancer. The exception to this defense is that a rogue at least 4 levels higher than the shadowdancer can flank her (and thus sneak attack her).
+
+At 10th level, the shadowdancer gains an intuitive sense that alerts her to danger from traps, giving her a +1 bonus to Reflex saves made to avoid traps.
+
+If the shadowdancer has another class that grants the uncanny dodge ability, add together all the class levels of the classes that grant the ability and determine the character's uncanny dodge ability on that basis.
+
+Shadow Illusion: When a shadowdancer reaches 3rd level, she can create visual illusions from surrounding shadows. This spell-like ability is identical to the arcane spell silent image and may be employed once per day.
+
+Summon Shadow: At 3rd level, a shadowdancer can summon a shadow, an undead shade. Unlike a normal shadow, this shadow's alignment matches that of the shadowdancer. The summoned shadow cannot be turned, rebuked, or commanded by any third party. This shadow serves as a companion to the shadowdancer and can communicate intelligibly with the shadowdancer. Every third level gained by the shadowdancer allows her to summon an additional shadow and adds +2 HD (and the requisite base attack and base save bonus increases) to all her shadow companions.
+
+If a shadow companion is destroyed, or the shadowdancer chooses to dismiss it, the shadowdancer must attempt a Fortitude saving throw (DC 15). If the saving throw fails, the shadowdancer loses 200 experience points per shadowdancer level. A successful saving throw reduces the loss by half, to 100 XP per prestige class level. The shadowdancer's experience can never go below 0 as the result of a shadow's dismissal or destruction. A destroyed or dismissed shadow companion cannot be replaced for a year and a day.
+
+Shadow Jump: At 4th level, the shadowdancer gains the ability to travel between shadows as if by means of a dimension door spell. The limitation is that the magical transport must begin and end in an area with at least some shadow. The shadowdancer can jump up to a total of 20 feet each day in this way, although this may be a single jump of 20 feet or two jumps of 10 feet each. Every two levels thereafter, the distance a shadowdancer can jump each day doubles (40 feet at 6th level, 80 feet at 8th level, and 160 feet at 10th level). This amount can be split among many jumps, but each one, no matter how small, counts as a 10-foot increment. (A 6th-level shadowdancer who jumps 32 feet cannot jump again until the next day.)
+
+Defensive Roll: Starting at 5th level, the shadowdancer can roll with a potentially lethal blow to take less damage from it. Once per day, when a shadowdancer would be reduced to 0 hit points or less by damage in combat (from a weapon or other blow, not a spell or special ability), the shadowdancer can attempt to roll with the damage. She makes a Reflex saving throw (DC = damage dealt) and, if successful, takes only half damage from the blow. She must be aware of the attack and able to react to it in order to execute her defensive roll. If she is in a situation that would deny her any Dexterity bonus to AC, she can't attempt the defensive roll.
+
+Slippery Mind: This extraordinary ability, gained at 7th level, represents the shadowdancer's ability to wriggle free from magical effects that would otherwise control or compel her. If the shadowdancer is affected by an enchantment and fails her saving throw, 1 round later she can attempt her saving throw again. She only gets this one extra chance to succeed at her saving throw. If it fails as well, the spell's effects proceed normally.
+
+Improved Evasion: This extraordinary ability, gained at 10th level, works like evasion (see above). The shadowdancer takes no damage at all on successful saving throws against attacks that allow a Reflex saving throw for half damage (breath weapon, fireball, and so on). What's more, she takes only half damage even if she fails her saving throw, since the shadowdancer's reflexes allow her to get out of harm's way with incredible speed.</features>
+</class>
+<class level="1" name="Sorcerer" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Sorcerers are proficient with all simple weapons. They are not proficient with any type of armor, nor with shields. </wa_proficiency>
+<features>Spells: A sorcerer casts arcane spells. The number of spells a sorcerer knows is not affected by his Charisma bonus. The spells a sorcerer knows can be common spells chosen from the sorcerer and wizard spell list, or they can be unusual spells that the sorcerer has gained some understanding of by study.
+
+A sorcerer is limited to casting a certain number of spells of each level per day, but he need not prepare his spells in advance. The number of spells he can cast per day is improved by his bonus spells, if any.
+
+A sorcerer may use a higher-level slot to cast a lower-level spell if he so chooses. The spell is still treated as its actual level, not the level of the slot used to cast it.
+
+To learn or cast a spell, a sorcerer must have a Charisma score of at least 10 + the spell's level. The Difficulty Class for saving throws against sorcerer spells is 10 + the spell's level + the sorcerer's Charisma modifier.</features>
+</class>
+<class level="1" name="Wizard" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Wizards are skilled with the club, dagger, heavy crossbow, light crossbow, and quarterstaff. Wizards are not proficient with any type of armor nor with shields. </wa_proficiency>
+<features>Spells: A wizard casts arcane spells. She is limited to a certain number of spells of each spell level per day, according to her class level. A wizard must prepare spells ahead of time by getting a good night's sleep and spending 1 hour studying her spellbook. While studying, the wizard decides which spells to prepare. To learn, prepare, or cast a spell, a wizard must have an Intelligence score of at least 10 + the spell's level. A wizard's bonus spells are based on Intelligence. The Difficulty Class for saving throws against wizard spells is 10 + the spell's level + the wizard's Intelligence modifier.
+
+Bonus Languages: A wizard may substitute Draconic for one of the bonus languages available to the character.
+
+Familiar: A wizard can summon a familiar in exactly the same manner as a sorcerer. See the sorcerer description.
+
+Scribe Scroll: A wizard has the bonus item creation feat Scribe Scroll, enabling her to create magic scrolls.
+
+Bonus Feats: Every five levels, a wizard gains a bonus feat. This feat must be a metamagic feat, an item creation feat, or Spell Mastery.
+
+Spellbooks: Wizards must study their spellbooks each day to prepare their spells. A wizard cannot prepare any spell not recorded in her spellbook (except for read magic, which all wizards can prepare from memory).
+
+Spell Mastery: A wizard (and only a wizard) can take the special feat Spell Mastery. Each time the wizard takes this feat, choose a number of spells equal to the wizard's Intelligence modifier (they must be spells that the wizard already knows). From that point on, the wizard can prepare these spells without referring to a spellbook.
+
+School Specialization
+
+A school is one of eight groupings of spells, each defined by a common theme, such as illusion or necromancy. A wizard may specialize in one school of magic.
+
+Specialization allows a wizard to cast extra spells from the chosen school, but the wizard then never learns to cast spells from one or more other schools. Spells of the school or schools that the specialist gives up are not available to her, and she can't even cast such spells from scrolls or wands.
+
+The wizard must choose whether to specialize and how at 1st level. She may not change her specialization later.
+
+The specialist can prepare one additional spell (of the school selected as a specialty) per spell level each day.
+
+The specialist gains a +2 bonus to Spellcraft checks to learn the spells of her chosen school.
+
+The eight schools of arcane magic are Abjuration, Conjuration, Divination, Enchantment, Evocation, Illusion, Necromancy, and Transmutation. Spells that do not fall into any of these schools are called universal spells.
+
+Abjuration: To become an abjurer, a wizard must select a prohibited school or schools from the following choices: (1) either Conjuration, Enchantment, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
+
+Conjuration: To become a conjurer, a wizard must select a prohibited school or schools from one of the following choices: (1) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation, or (4) any three schools.
+
+Divination: To become a diviner, a wizard must select any other single school as a prohibited school.
+
+Enchantment: To become an enchanter, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Evocation, Illusion, or Transmutation; or (2) both Divination and Necromancy.
+
+Evocation: To become an evoker, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; (3) Transmutation; or (4) any three schools.
+
+Illusion: To become an illusionist, a wizard must select a prohibited school or schools from the following choices: (1) either Abjuration, Conjuration, Enchantment, Evocation, or Transmutation; or (2) both Divination and Necromancy.
+
+Necromancy: To become a necromancer, a wizard must select any other single school as a prohibited school.
+
+Transmutation: To become a transmuter, a wizard must select a prohibited school or schools from one of the following choices: (1) Conjuration; (2) Evocation; (2) any two of the following three schools: Abjuration, Enchantment, and Illusion; or (4) any three schools.
+
+Universal: Not a school, but a category for spells all wizards can learn. A wizard cannot select universal as a specialty school or as a school to which she does not have access.</features>
+</class>
+<class level="1" name="Adept" hd="d6" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Adepts are skilled with all simple weapons. Adepts are not proficient with any type of armor nor with shields</wa_proficiency>
+<features>Spells: An adept casts divine spells. She is limited to a certain number of spells of each spell level per day, according to her class level. Like a cleric, an adept may prepare and cast any spell on the adept list, provided she can cast spells of that level. Like a cleric, she prepares her spells ahead of time each day. The DC for a saving throw against an adept's spell is 10 + spell level + the adept's Wisdom modifier.
+
+Adepts, unlike wizards, do not acquire their spells from books or scrolls, nor prepare them through study. Instead, they meditate or pray for their spells, receiving them as divine inspiration or through their own strength of faith. Each adept must choose a time each day at which she must spend an hour in quiet contemplation or supplication to regain her daily allotment of spells. Time spent resting has no effect on whether an adept can prepare spells.
+
+When the adept gets 0 spells of a given level, she gets only bonus spells for that spell slot. An adept without a bonus spell for that level cannot yet cast a spell of that level. Bonus spells are based on Wisdom.
+
+Each adept has a particular holy symbol (as a divine focus) depending on the adept's magical tradition.
+
+Familiar: At 2nd level, an adept can call a familiar, just like a sorcerer or wizard can.
+
+Adept Spell List
+0 level-create water, cure minor wounds, detect magic, ghost sound, guidance, light, mending, purify food and drink, read magic.
+1st level-bless, burning hands, cause fear, command, comprehend languages, cure light wounds, detect chaos, detect evil, detect good, detect law, endure elements, obscuring mist, protection from chaos, protection from evil, protection from good, protection from law, sleep.
+2nd level-aid, animal trance, bull's strength, cat's grace, cure moderate wounds, darkness, delay poison, endurance, invisibility, mirror image, resist elements, see invisibility, web.
+3rd level-animate dead, bestow curse, contagion, continual flame, cure serious wounds, daylight, deeper darkness, lightning bolt, neutralize poison, remove curse, remove disease, tongues.
+4th level-cure critical wounds, minor creation, polymorph other, polymorph self, restoration, stoneskin, wall of fire.
+5th level-break enchantment, commune, heal, major creation, raise dead, true seeing, wall of stone.</features>
+</class>
+<class level="1" name="Aristocrat" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The aristocrat is proficient in the use of all simple and martial weapons and with all types of armor and shields.</wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Commoner" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The commoner is proficient with one simple weapon. He is not proficient with weapons, armor, or shields.</wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Expert" hd="d6" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The expert is proficient in the use of all simple weapons and with light armor but not shields. </wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Warrior" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>The warrior is proficient in the use of all simple and martial weapons and all armor and shields.</wa_proficiency>
+<features>None</features>
+</class>
+<class level="1" name="Psion" hd="d4" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Psions are proficient with all simple weapons. They are not proficient with any type of armor, nor with shields. </wa_proficiency>
+<features>Psionics: A Psion manifests psionic powers. The number of pisonic powers know by a psion is a fixed number, by level. Psions must select a specific Discipline to belong to. The psion is required to take a minimum number of powers from his disipline. The psion does not gain extra powers for high stats.
+
+A psion manifest power through the use of power points. The psion does not need to prepare his power before hand as a wizard does. The psion is more like a sorceror in this regard. The psion gains bonus power points for having a high stat in their displine stat.
+
+To learn or manifest a psionic power, a psion must have a stat score of at least 10 + the powers's level in the stat coresponding to it discipline. The Difficulty Class for saving throws against sorcerer spells is 1d20 + the powers's level + the psions's stat modifier.</features>
+</class>
+<class level="1" name="Psychic Warrior" hd="d8" >
+<requirements>None</requirements>
+<alignment>Any</alignment>
+<wa_proficiency>Psychic Warriors are proficient with all simple and martial weapons, and all armour and shields. </wa_proficiency>
+<features>Psionics: A Psychic manifests psionic powers. The number of pisonic powers know by a psion is a fixed number, by level. The psychic warrior does not gain extra powers for high stats. The psychic warriors psionic abilities are inferior to that of the psions.
+
+A psychic warrior manifest power through the use of power points. The psychic warrior does not need to prepare his power before hand as a wizard does. The psychic warrior is more like a sorceror in this regard. The psychic warrior does not gain bonus power points for having a high stat in their displine stat.
+
+To learn or manifest a psionic power, a psychic warrior must have a stat score of at least 10 + the powers's level in the stat coresponding to it discipline. The Difficulty Class for saving throws against sorcerer spells is 1d20 + the powers's level + the psychic warrior's stat modifier.</features>
+</class>
+</classes>
--- a/data/dnd3e/dnd3edivine.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3edivine.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,660 +1,660 @@
-<divine>
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Druid Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Create Water' memrz='0' level='0' desc='Creates 2 gallons/level of pure water' />
-<gift name='Cure Minor Wounds' memrz='0' level='0' desc='Cures 1 point of damage' />
-<gift name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft' />
-<gift name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object' />
-<gift name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack)' />
-<gift name='Guidance' memrz='0' level='0' desc='+1 on one roll, throw, or check' />
-<gift name='Know Direction' memrz='0' level='0' desc='You discern north' />
-<gift name='Light' memrz='0' level='0' desc='Object shines like a torch' />
-<gift name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object' />
-<gift name='Purify Food and Drink' memrz='0' level='0' desc='Purifies 1 cu. ft./level of food or water' />
-<gift name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks' />
-<gift name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws' />
-<gift name='Animal Friendship' memrz='0' level='1' desc='Gain permanent animal companions' />
-<gift name='Calm Animals' memrz='0' level='1' desc='Calms 2d4 +1/level HD of animals, beasts, and magical beasts' />
-<gift name='Cure Light Wounds' memrz='0' level='1' desc='Cures 1d8 +1/level damage (max +5)' />
-<gift name='Detect Animals or Plants' memrz='0' level='1' desc='Detects species of animals or plants' />
-<gift name='Detect Snares and Pits' memrz='0' level='1' desc='Reveals natural or primitive traps' />
-<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type' />
-<gift name='Entangle' memrz='0' level='1' desc='Plants entangle everyone in 40-ft.-radius circle' />
-<gift name='Faerie Fire' memrz='0' level='1' desc='Outlines subjects with light, canceling blur, concealment, etc' />
-<gift name='Goodberry' memrz='0' level='1' desc='2d4 berries each cure 1 hp (max 8 hp/24 hours)' />
-<gift name='Invisibility to Animals' memrz='0' level='1' desc='Animals cannot perceive one subject/level' />
-<gift name='Magic Fang' memrz='0' level='1' desc='One natural weapon of subject creature gets +1 bonus to attack and damage' />
-<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
-<gift name='Pass without Trace' memrz='0' level='1' desc='One subject/level leaves no tracks' />
-<gift name='Shillelagh' memrz='0' level='1' desc='Cudgel or quarterstaff becomes +1 weapon (1d10 damage) for 1 minute/level' />
-<gift name='Summon Natures Ally I' memrz='0' level='1' desc='Calls creature to fight' />
-<gift name='Animal Messenger' memrz='0' level='2' desc='Sends a Tiny animal to a specific place' />
-<gift name='Animal Trance' memrz='0' level='2' desc='Fascinates 2d6 HD of animals' />
-<gift name='Barkskin' memrz='0' level='2' desc='Grants +3 natural armor bonus (or higher)' />
-<gift name='Charm Person or Animal' memrz='0' level='2' desc='Makes one person or animal your friend' />
-<gift name='Chill Metal' memrz='0' level='2' desc='Cold metal damages those who touch it' />
-<gift name='Delay Poison' memrz='0' level='2' desc='Stops poison from harming subject for 1 hour/level' />
-<gift name='Fire Trap' memrz='0' level='2' desc='Opened object deals 1d4 +1/level damage' />
-<gift name='Flame Blade' memrz='0' level='2' desc='Touch attack deals 1d8 +1/two levels damage' />
-<gift name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level' />
-<gift name='Heat Metal' memrz='0' level='2' desc='Hot metal damages those who touch it' />
-<gift name='Hold Animal' memrz='0' level='2' desc='Holds one animal helpless, 1 round/level' />
-<gift name='Lesser Restoration' memrz='0' level='2' desc='Dispels magic ability penalty or repairs 1d4 ability damage' />
-<gift name='Produce Flame' memrz='0' level='2' desc='1d4 +1/two levels damage, touch or thrown' />
-<gift name='Resist Elements' memrz='0' level='2' desc='Ignores first 12 damage from one energy type each round' />
-<gift name='Soften Earth and Stone' memrz='0' level='2' desc='Turns stone to clay or dirt to sand or mud' />
-<gift name='Speak with Animals' memrz='0' level='2' desc='You can communicate with natural animals' />
-<gift name='Summon Natures Ally II' memrz='0' level='2' desc='Calls creature to fight' />
-<gift name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures' />
-<gift name='Tree Shape' memrz='0' level='2' desc='You look exactly like a tree for 1 hour/level' />
-<gift name='Warp Wood' memrz='0' level='2' desc='Bends wood (shaft, handle, door, plank)' />
-<gift name='Wood Shape' memrz='0' level='2' desc='Rearranges wooden objects to suit you' />
-<gift name='Call Lightning' memrz='0' level='3' desc='Directs lightning bolts (1d10/level) during storms' />
-<gift name='Contagion' memrz='0' level='3' desc='Infects subject with chosen disease' />
-<gift name='Cure Moderate Wounds' memrz='0' level='3' desc='Cures 2d8 +1/level damage (max +10)' />
-<gift name='Diminish Plants' memrz='0' level='3' desc='Reduces size or blights growth of normal plants' />
-<gift name='Dominate Animal' memrz='0' level='3' desc='Subject animal obeys silent mental commands' />
-<gift name='Greater Magic Fang' memrz='0' level='3' desc='One natural weapon of subject creature gets +1 for each 3 caster levels (max +5)' />
-<gift name='Meld into Stone' memrz='0' level='3' desc='You and your gear merge with stone' />
-<gift name='Neutralize Poison' memrz='0' level='3' desc='Detoxifies venom in or on subject' />
-<gift name='Plant Growth' memrz='0' level='3' desc='Grows vegetation, improves crops' />
-<gift name='Poison' memrz='0' level='3' desc='Touch deals 1d10 Con damage, repeats in 1 min' />
-<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
-<gift name='Remove Disease' memrz='0' level='3' desc='Cures all diseases affecting subject' />
-<gift name='Snare' memrz='0' level='3' desc='Creates a magical booby trap' />
-<gift name='Speak with Plants' memrz='0' level='3' desc='You can talk to normal plants and plant creatures' />
-<gift name='Spike Growth' memrz='0' level='3' desc='Creatures in area take 1d4 damage, may be slowed' />
-<gift name='Stone Shape' memrz='0' level='3' desc='Sculpts stone into any form' />
-<gift name='Summon Natures Ally III' memrz='0' level='3' desc='Calls creature to fight' />
-<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater' />
-<gift name='Antiplant Shell' memrz='0' level='4' desc='Keeps animated plants at bay' />
-<gift name='Control Plants' memrz='0' level='4' desc='Talk to and control plants and fungi' />
-<gift name='Cure Serious Wounds' memrz='0' level='4' desc='Cures 3d8 +1/level damage (max +15)' />
-<gift name='Dispel Magic' memrz='0' level='4' desc='Cancels magical spells and effects' />
-<gift name='Flame Strike' memrz='0' level='4' desc='Smites foes with divine fire (1d6/level)' />
-<gift name='Freedom of Movement' memrz='0' level='4' desc='Subject moves normally despite impediments' />
-<gift name='Giant Vermin' memrz='0' level='4' desc='Turns insects into giant vermin' />
-<gift name='Quench' memrz='0' level='4' desc='Extinguishes nonmagical fires or one magic item' />
-<gift name='Reincarnate' memrz='0' level='4' desc='Brings dead subject back in a random body' />
-<gift name='Repel Vermin' memrz='0' level='4' desc='Insects stay 10 ft. away' />
-<gift name='Rusting Grasp' memrz='0' level='4' desc='Your touch corrodes iron and alloys' />
-<gift name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance' />
-<gift name='Sleet Storm' memrz='0' level='4' desc='Hampers vision and movement' />
-<gift name='Spike Stones' memrz='0' level='4' desc='Creatures in area take 1d8 damage, may be slowed' />
-<gift name='Summon Natures Ally IV' memrz='0' level='4' desc='Calls creature to fight' />
-<gift name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD' />
-<gift name='Atonement' memrz='0' level='5' desc='Removes burden of misdeeds from subject' />
-<gift name='Awaken' memrz='0' level='5' desc='Animal or tree gains human intellect' />
-<gift name='Commune with Nature' memrz='0' level='5' desc='Learn about terrain for one mile/level' />
-<gift name='Control Winds' memrz='0' level='5' desc='Change wind direction and speed' />
-<gift name='Cure Critical Wounds' memrz='0' level='5' desc='Cures 4d8 +1/level damage (max +20)' />
-<gift name='Death Ward' memrz='0' level='5' desc='Grants immunity to all death spells and effects' />
-<gift name='Hallow' memrz='0' level='5' desc='Designates location as holy' />
-<gift name='Ice Storm' memrz='0' level='5' desc='Hail deals 5d6 damage in cylinder 40 ft. across' />
-<gift name='Insect Plague' memrz='0' level='5' desc='Insect horde limits vision, inflicts damage, and weak creatures flee' />
-<gift name='Summon Natures Ally V' memrz='0' level='5' desc='Calls creature to fight' />
-<gift name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level' />
-<gift name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level' />
-<gift name='Tree Stride' memrz='0' level='5' desc='Step from one tree to another far away' />
-<gift name='Unhallow' memrz='0' level='5' desc='Designates location as unholy' />
-<gift name='Wall of Fire' memrz='0' level='5' desc='2d4 fire damage out to 10 ft. and 1d4 out to 20 ft. Passing through wall deals 2d6 +1/level' />
-<gift name='Wall of Thorns' memrz='0' level='5' desc='Thorns damage anyone who tries to pass' />
-<gift name='Antilife Shell' memrz='0' level='6' desc='10-ft. field hedges out living creatures' />
-<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
-<gift name='Fire Seeds' memrz='0' level='6' desc='Acorns and berries become grenades and bombs' />
-<gift name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but +20 on check' />
-<gift name='Healing Circle' memrz='0' level='6' desc='Cures 1d8 +1/level damage in all directions' />
-<gift name='Ironwood' memrz='0' level='6' desc='Magical wood is strong as steel' />
-<gift name='Liveoak' memrz='0' level='6' desc='Oak becomes treant guardian' />
-<gift name='Repel Wood' memrz='0' level='6' desc='Pushes away wooden objects' />
-<gift name='Spellstaff' memrz='0' level='6' desc='Stores one spell in wooden quarterstaff' />
-<gift name='Stone Tell' memrz='0' level='6' desc='Talk to natural or worked stone' />
-<gift name='Summon Natures Ally VI' memrz='0' level='6' desc='Calls creature to fight' />
-<gift name='Transport via Plants' memrz='0' level='6' desc='Move instantly from one plant to another of the same species' />
-<gift name='Wall of Stone' memrz='0' level='6' desc='20 hp/four levels; can be shaped' />
-<gift name='Changestaff' memrz='0' level='7' desc='Your staff becomes a treant on command' />
-<gift name='Control Weather' memrz='0' level='7' desc='Changes weather in local area' />
-<gift name='Creeping Doom' memrz='0' level='7' desc='Carpet of insects attacks at your command' />
-<gift name='Fire Storm' memrz='0' level='7' desc='Deals 1d6 fire damage/level' />
-<gift name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer' />
-<gift name='Harm' memrz='0' level='7' desc='Subject loses all but 1d4 hp' />
-<gift name='Heal' memrz='0' level='7' desc='Cures all damage, diseases, and mental conditions' />
-<gift name='Summon Natures Ally VII' memrz='0' level='7' desc='Calls creature to fight' />
-<gift name='Sunbeam' memrz='0' level='7' desc='Beam blinds and deals 3d6 damage' />
-<gift name='Transmute Metal to Wood' memrz='0' level='7' desc='Metal within 40 ft. becomes wood' />
-<gift name='True Seeing' memrz='0' level='7' desc='See all things as they really are' />
-<gift name='Wind Walk' memrz='0' level='7' desc='You and your allies turn vaporous and travel fast' />
-<gift name='Animal Shapes' memrz='0' level='8' desc='One ally/level polymorphs into chosen animal' />
-<gift name='Command Plants' memrz='0' level='8' desc='Plants animate and vegetation entangles' />
-<gift name='Finger of Death' memrz='0' level='8' desc='Kills one subject' />
-<gift name='Repel Metal or Stone' memrz='0' level='8' desc='Pushes away metal and stone' />
-<gift name='Reverse Gravity' memrz='0' level='8' desc='Objects and creatures fall upward' />
-<gift name='Summon Natures Ally VIII' memrz='0' level='8' desc='Calls creature to fight' />
-<gift name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage' />
-<gift name='Whirlwind' memrz='0' level='8' desc='Cyclone inflicts damage and can pick up creatures' />
-<gift name='Word of Recall' memrz='0' level='8' desc='Teleports you back to designated place' />
-<gift name='Antipathy' memrz='0' level='9' desc='Object or location affected by spell repels certain creatures' />
-<gift name='Earthquake' memrz='0' level='9' desc='Intense tremor shakes 5-ft./level radius' />
-<gift name='Elemental Swarm' memrz='0' level='9' desc='Summons 2d4 Large, 1d4 Huge elementals' />
-<gift name='Foresight' memrz='0' level='9' desc='6th sense warns of impending danger' />
-<gift name='Mass Heal' memrz='0' level='9' desc='As heal, but with several subjects' />
-<gift name='Shambler' memrz='0' level='9' desc='Summons 1d4+2 shambling mounds to fight for you' />
-<gift name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round' />
-<gift name='Summon Natures Ally IX' memrz='0' level='9' desc='Calls creature to fight' />
-<gift name='Sympathy' memrz='0' level='9' desc='Object or location attracts certain creatures' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Cleric Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Create Water' memrz='0' level='0' desc='Creates 2 gallons/level of pure water' />
-<gift name='Cure Minor Wounds' memrz='0' level='0' desc='Cures 1 point of damage' />
-<gift name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft' />
-<gift name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object' />
-<gift name='Guidance' memrz='0' level='0' desc='+1 on one roll, save, or check' />
-<gift name='Inflict Minor Wounds' memrz='0' level='0' desc='Touch attack, 1 point of damage' />
-<gift name='Light' memrz='0' level='0' desc='Object shines like a torch' />
-<gift name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object' />
-<gift name='Purify Food and Drink' memrz='0' level='0' desc='Purifies 1 cu. ft./level of food or water' />
-<gift name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks' />
-<gift name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws' />
-<gift name='Virtue' memrz='0' level='0' desc='Subject gains 1 temporary hp' />
-<gift name='Bane' memrz='0' level='1' desc='Enemies suffer -1 attack, -1 on saves against fear' />
-<gift name='Bless' memrz='0' level='1' desc='Allies gain +1 attack and +1 on saves against fear' />
-<gift name='Bless Water' memrz='0' level='1' desc='Makes holy water' />
-<gift name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds' />
-<gift name='Command' memrz='0' level='1' desc='One subject obeys one-word command for 1 round' />
-<gift name='Comprehend Languages' memrz='0' level='1' desc='Understand all spoken and written languages' />
-<gift name='Cure Light Wounds' memrz='0' level='1' desc='Cures 1d8 +1/level damage (max +5)' />
-<gift name='Curse Water' memrz='0' level='1' desc='Makes unholy water' />
-<gift name='Deathwatch' memrz='0' level='1' desc='Sees how wounded subjects within 30 ft. are' />
-<gift name='Detect Chaos/Evil/Good/Law' memrz='0' level='1' desc='Reveals creatures, spells, or objects' />
-<gift name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft' />
-<gift name='Divine Favor' memrz='0' level='1' desc='You gain attack, damage bonus, +1/three levels' />
-<gift name='Doom' memrz='0' level='1' desc='One subject suffers -2 on attacks, damage, saves, and checks' />
-<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type' />
-<gift name='Entropic Shield' memrz='0' level='1' desc='Ranged attacks against you suffer 20 percent miss chance' />
-<gift name='Inflict Light Wounds' memrz='0' level='1' desc='Touch, 1d8 +1/level damage (max +5)' />
-<gift name='Invisibility to Undead' memrz='0' level='1' desc='Undead can not perceive one subject/level' />
-<gift name='Magic Stone' memrz='0' level='1' desc='Three stones gain +1 attack, deal 1d6+1 damage' />
-<gift name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus' />
-<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
-<gift name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals/outsiders' />
-<gift name='Random Action' memrz='0' level='1' desc='One creature acts randomly for one round' />
-<gift name='Remove Fear' memrz='0' level='1' desc='+4 on saves against fear for one subject +1/four levels' />
-<gift name='Sanctuary' memrz='0' level='1' desc='Opponents can not attack you, and you can not attack' />
-<gift name='Shield of Faith' memrz='0' level='1' desc='Aura grants +2 or higher deflection bonus' />
-<gift name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you' />
-<gift name='Aid' memrz='0' level='2' desc='+1 attack, +1 on saves against fear, 1d8 temporary hit points' />
-<gift name='Animal Messenger' memrz='0' level='2' desc='Sends a Tiny animal to a specific place' />
-<gift name='Augury' memrz='0' level='2' desc='Learns whether an action will be good or bad' />
-<gift name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level' />
-<gift name='Calm Emotions' memrz='0' level='2' desc='Calms 1d6 subjects/level, negating emotion effects' />
-<gift name='Consecrate' memrz='0' level='2' desc='Fills area with positive energy, making undead weaker' />
-<gift name='Cure Moderate Wounds' memrz='0' level='2' desc='Cures 2d8 +1/level damage (max +10)' />
-<gift name='Darkness. 20-ft' memrz='0' level='2' desc='radius of supernatural darkness' />
-<gift name='Death Knell' memrz='0' level='2' desc='Kills dying creature; you gain 1d8 temporary hp, +2 Str, and +1 level' />
-<gift name='Delay Poison' memrz='0' level='2' desc='Stops poison from harming subject for 1 hour/level' />
-<gift name='Desecrate' memrz='0' level='2' desc='Fills area with negative energy, making undead stronger' />
-<gift name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level' />
-<gift name='Enthrall' memrz='0' level='2' desc='Captivates all within 100 ft. + 10 ft./level' />
-<gift name='Find Traps' memrz='0' level='2' desc='Notice traps as a rogue does' />
-<gift name='Gentle Repose' memrz='0' level='2' desc='Preserves one corpse' />
-<gift name='Hold Person' memrz='0' level='2' desc='Holds one person helpless; 1 round/level' />
-<gift name='Inflict Moderate Wounds' memrz='0' level='2' desc='Touch attack, 2d8 +1/level damage (max +10)' />
-<gift name='Lesser Restoration' memrz='0' level='2' desc='Dispels magic ability penalty or repairs 1d4 ability damage' />
-<gift name='Make Whole' memrz='0' level='2' desc='Repairs an object' />
-<gift name='Remove Paralysis' memrz='0' level='2' desc='Frees one or more creatures from paralysis, hold, or slow' />
-<gift name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type' />
-<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures' />
-<gift name='Shield Other' memrz='0' level='2' desc='You take half of subjects damage' />
-<gift name='Silence' memrz='0' level='2' desc='Negates sound in 15-ft. radius' />
-<gift name='Sound Burst' memrz='0' level='2' desc='Deals 1d8 sonic damage to subjects; may stun them' />
-<gift name='Speak with Animals' memrz='0' level='2' desc='You can communicate with natural animals' />
-<gift name='Spiritual Weapon' memrz='0' level='2' desc='Magical weapon attacks on its own' />
-<gift name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you' />
-<gift name='Undetectable Alignment' memrz='0' level='2' desc='Conceals alignment for 24 hours' />
-<gift name='Zone of Truth' memrz='0' level='2' desc='Subjects within range cannot lie' />
-<gift name='Animate Dead' memrz='0' level='3' desc='Creates undead skeletons and zombies' />
-<gift name='Bestow Curse' memrz='0' level='3' desc='-6 to an ability; -4 on attacks/saves/checks; or 50 percent chance of losing each action' />
-<gift name='Blindness/Deafness' memrz='0' level='3' desc='Makes subject blind or deaf' />
-<gift name='Contagion' memrz='0' level='3' desc='Infects subject with chosen disease' />
-<gift name='Continual Flame' memrz='0' level='3' desc='Makes a permanent, heatless torch' />
-<gift name='Create Food and Water' memrz='0' level='3' desc='Feeds three humans (or one horse)/level' />
-<gift name='Cure Serious Wounds' memrz='0' level='3' desc='Cures 3d8 +1/level damage (max +15)' />
-<gift name='Daylight' memrz='0' level='3' desc='60-ft. radius of bright light' />
-<gift name='Deeper Darkness' memrz='0' level='3' desc='Object sheds absolute darkness in 60-ft. radius' />
-<gift name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects' />
-<gift name='Glyph of Warding' memrz='0' level='3' desc='Inscription harms those who pass it' />
-<gift name='Helping Hand' memrz='0' level='3' desc='Ghostly hand leads subject to you' />
-<gift name='Inflict Serious Wounds' memrz='0' level='3' desc='Touch attack, 3d8 +1/level damage (max +15)' />
-<gift name='Invisibility Purge' memrz='0' level='3' desc='Dispels invisibility within 5 ft./level' />
-<gift name='Locate Object' memrz='0' level='3' desc='Senses direction toward object (specific or type)' />
-<gift name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10min./level' />
-<gift name='Magic Vestment' memrz='0' level='3' desc='Armor or shield gains +1 enhancement/three levels' />
-<gift name='Meld into Stone' memrz='0' level='3' desc='You and your gear merge with stone' />
-<gift name='Negative Energy Protection' memrz='0' level='3' desc='Subject resists level and ability drains' />
-<gift name='Obscure Object' memrz='0' level='3' desc='Masks object against divination' />
-<gift name='Prayer' memrz='0' level='3' desc='Allies gain +1 on most rolls, and enemies suffer -1' />
-<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
-<gift name='Remove Blindness/Deafness' memrz='0' level='3' desc='Cures normal or magical conditions' />
-<gift name='Remove Curse' memrz='0' level='3' desc='Frees object or person from curse' />
-<gift name='Remove Disease' memrz='0' level='3' desc='Cures all diseases affecting subject' />
-<gift name='Searing Light' memrz='0' level='3' desc='Ray deals 1d8/two levels, more against undead' />
-<gift name='Speak with Dead' memrz='0' level='3' desc='Corpse answers one question/two levels' />
-<gift name='Speak with Plants' memrz='0' level='3' desc='You can talk to normal plants and plant creatures' />
-<gift name='Stone Shape' memrz='0' level='3' desc='Sculpts stone into any form' />
-<gift name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you' />
-<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater' />
-<gift name='Water Walk' memrz='0' level='3' desc='Subject treads on water as if solid' />
-<gift name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases' />
-<gift name='Air Walk' memrz='0' level='4' desc='Subject treads on air as if solid (climb at 45-degree angle)' />
-<gift name='Control Water' memrz='0' level='4' desc='Raises, lowers, or parts bodies of water' />
-<gift name='Cure Critical Wounds' memrz='0' level='4' desc='Cures 4d8 +1/level damage (max +20)' />
-<gift name='Death Ward' memrz='0' level='4' desc='Grants immunity to death spells and effects' />
-<gift name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement' />
-<gift name='Discern Lies' memrz='0' level='4' desc='Reveals deliberate falsehoods' />
-<gift name='Dismissal' memrz='0' level='4' desc='Forces a creature to return to native plane' />
-<gift name='Divination' memrz='0' level='4' desc='Provides useful advice for specific proposed actions' />
-<gift name='Divine Power' memrz='0' level='4' desc='You gain attack bonus, 18 Str, and 1 hp/level' />
-<gift name='Freedom of Movement' memrz='0' level='4' desc='Subject moves normally despite impediments' />
-<gift name='Giant Vermin' memrz='0' level='4' desc='Turns insects into giant vermin' />
-<gift name='Greater Magic Weapon' memrz='0' level='4' desc='+1 bonus/three levels (max +5)' />
-<gift name='Imbue with Spell Ability' memrz='0' level='4' desc='Transfer spells to subject' />
-<gift name='Inflict Critical Wounds' memrz='0' level='4' desc='Touch attack, 4d8 +1/level damage (max +20)' />
-<gift name='Lesser Planar Ally' memrz='0' level='4' desc='Exchange services with an 8 HD outsider' />
-<gift name='Neutralize Poison' memrz='0' level='4' desc='Detoxifies venom in or on subject' />
-<gift name='Poison' memrz='0' level='4' desc='Touch deals 1d10 Con damage, repeats in 1 min' />
-<gift name='Repel Vermin' memrz='0' level='4' desc='Insects stay 10 ft. away' />
-<gift name='Restoration' memrz='0' level='4' desc='Restores level and ability score drains' />
-<gift name='Sending' memrz='0' level='4' desc='Delivers short message anywhere, instantly' />
-<gift name='Spell Immunity' memrz='0' level='4' desc='Subject is immune to one spell/four levels' />
-<gift name='Status' memrz='0' level='4' desc='Monitors condition, position of allies' />
-<gift name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you' />
-<gift name='Tongues' memrz='0' level='4' desc='Speak any language' />
-<gift name='Atonement' memrz='0' level='5' desc='Removes burden of misdeeds from subject' />
-<gift name='Break Enchantment' memrz='0' level='5' desc='Frees subjects from enchantments, alterations, curses, and petrification' />
-<gift name='Circle of Doom' memrz='0' level='5' desc='Deals 1d8 +1/level damage in all directions' />
-<gift name='Commune' memrz='0' level='5' desc='Deity answers one yes-or-no question/level' />
-<gift name='Dispel Chaos/Evil/Good/Law' memrz='0' level='5' desc='+4 bonus against attacks' />
-<gift name='Ethereal Jaunt' memrz='0' level='5' desc='You become ethereal for 1 round/level' />
-<gift name='Flame Strike' memrz='0' level='5' desc='Smites foes with divine fire (1d6/level)' />
-<gift name='Greater Command' memrz='0' level='5' desc='As command, but affects one subject/level' />
-<gift name='Hallow' memrz='0' level='5' desc='Designates location as holy' />
-<gift name='Healing Circle' memrz='0' level='5' desc='Cures 1d8 +1/level damage in all directions' />
-<gift name='Insect Plague' memrz='0' level='5' desc='Insect horde limits vision, inflicts damage, and weak creatures flee' />
-<gift name='Mark of Justice' memrz='0' level='5' desc='Designates action that will trigger curse on subject' />
-<gift name='Plane Shift' memrz='0' level='5' desc='Up to eight subjects travel to another plane' />
-<gift name='Raise Dead' memrz='0' level='5' desc='Restores life to subject who died up to 1 day/level ago' />
-<gift name='Righteous Might' memrz='0' level='5' desc='Your size increases, and you gain +4 Str' />
-<gift name='Scrying' memrz='0' level='5' desc='Spies on subject from a distance' />
-<gift name='Slay Living' memrz='0' level='5' desc='Touch attack kills subject' />
-<gift name='Spell Resistance' memrz='0' level='5' desc='Subject gains +12 +1/level SR' />
-<gift name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you' />
-<gift name='True Seeing' memrz='0' level='5' desc='See all things as they really are' />
-<gift name='Unhallow' memrz='0' level='5' desc='Designates location as unholy' />
-<gift name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped' />
-<gift name='Animate Objects' memrz='0' level='6' desc='Objects attack your foes' />
-<gift name='Antilife Shell' memrz='0' level='6' desc='10-ft. field hedges out living creatures' />
-<gift name='Banishment' memrz='0' level='6' desc='Banishes 2 HD/level extraplanar creatures' />
-<gift name='Blade Barrier' memrz='0' level='6' desc='Blades encircling you deal 1d6 damage/level' />
-<gift name='Create Undead' memrz='0' level='6' desc='Ghouls, shadows, ghasts, wights, or wraiths' />
-<gift name='Etherealness' memrz='0' level='6' desc='Travel to Ethereal Plane with companions' />
-<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
-<gift name='Forbiddance' memrz='0' level='6' desc='Denies area to creatures of another alignment' />
-<gift name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature' />
-<gift name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but up to +20 on check' />
-<gift name='Greater Glyph of Warding' memrz='0' level='6' desc='As glyph of warding, but up to 10d8 damage or 6th-level spell' />
-<gift name='Harm' memrz='0' level='6' desc='Subject loses all but 1d4 hp' />
-<gift name='Heal' memrz='0' level='6' desc='Cures all damage, diseases, and mental conditions' />
-<gift name='Heroes Feast' memrz='0' level='6' desc='Food for one creature/level cures and blesses' />
-<gift name='Planar Ally' memrz='0' level='6' desc='As lesser planar ally, but up to 16 HD' />
-<gift name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you' />
-<gift name='Wind Walk' memrz='0' level='6' desc='You and your allies turn vaporous and travel fast' />
-<gift name='Word of Recall' memrz='0' level='6' desc='Teleports you back to designated place' />
-<gift name='Blasphemy' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonevil subjects' />
-<gift name='Control Weather' memrz='0' level='7' desc='Changes weather in local area' />
-<gift name='Destruction' memrz='0' level='7' desc='Kills subject and destroys remains' />
-<gift name='Dictum' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonlawful subjects' />
-<gift name='Greater Restoration' memrz='0' level='7' desc='As restoration, plus restores all levels and ability scores' />
-<gift name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer' />
-<gift name='Holy Word' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nongood subjects' />
-<gift name='Refuge' memrz='0' level='7' desc='Alters item to transport its possessor to you' />
-<gift name='Regenerate' memrz='0' level='7' desc='Subjects severed limbs grow back' />
-<gift name='Repulsion' memrz='0' level='7' desc='Creatures can not approach you' />
-<gift name='Resurrection' memrz='0' level='7' desc='Fully restore dead subject' />
-<gift name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you' />
-<gift name='Word of Chaos' memrz='0' level='7' desc='Kills, confuses, stuns, or deafens nonchaotic subjects' />
-<gift name='Antimagic Field' memrz='0' level='8' desc='Negates magic within 10 ft' />
-<gift name='Cloak of Chaos' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against lawful spells' />
-<gift name='Create Greater Undead' memrz='0' level='8' desc='Mummies, spectres, vampires, or ghosts' />
-<gift name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object' />
-<gift name='Earthquake' memrz='0' level='8' desc='Intense tremor shakes 5-ft./level radius' />
-<gift name='Fire Storm' memrz='0' level='8' desc='Deals 1d6 fire damage/level' />
-<gift name='Greater Planar Ally' memrz='0' level='8' desc='As lesser planar ally, but up to 24 HD' />
-<gift name='Holy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against evil spells' />
-<gift name='Mass Heal' memrz='0' level='8' desc='As heal, but with several subjects' />
-<gift name='Shield of Law' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against chaotic spells' />
-<gift name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you' />
-<gift name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects' />
-<gift name='Unholy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against good spells' />
-<gift name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane' />
-<gift name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels' />
-<gift name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning' />
-<gift name='Implosion' memrz='0' level='9' desc='Kills one creature/round' />
-<gift name='Miracle' memrz='0' level='9' desc='Requests a deitys intercession' />
-<gift name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection' />
-<gift name='Storm of Vengeance' memrz='0' level='9' desc='Storm rains acid, lightning, and hail' />
-<gift name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you' />
-<gift name='True Resurrection' memrz='0' level='9' desc='As resurrection, plus remains are not needed' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Air Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
-<gift name='Wind Wall' memrz='0' level='2' desc='Deflects arrows, smaller creatures, and gases' />
-<gift name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly' />
-<gift name='Air Walk' memrz='0' level='4' desc='Subject treads on air as if solid (climb at 45-degree angle)' />
-<gift name='Control Winds' memrz='0' level='5' desc='Change wind direction and speed' />
-<gift name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts' />
-<gift name='Control Weather' memrz='0' level='7' desc='Changes weather in local area' />
-<gift name='Whirlwind' memrz='0' level='8' desc='Cyclone inflicts damage and can pick up creatures' />
-<gift name='Elemental Swarm' memrz='0' level='9' desc='(Air spell only) Summons 2d4 Large, 1d4 Huge elementals' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Animal Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Calm Animals' memrz='0' level='1' desc='Calms 2d4 +1/level HD of animals, beasts, and magical beasts' />
-<gift name='Hold Animal' memrz='0' level='2' desc='Hold one animal helpless; 1 round/level' />
-<gift name='Dominate Animal' memrz='0' level='3' desc='Subject animal obeys silent mental commands' />
-<gift name='Repel Vermin' memrz='0' level='4' desc='Insects stay 10 ft. away' />
-<gift name='Commune with Nature' memrz='0' level='5' desc='Learn about terrain for one mile/level' />
-<gift name='Antilife Shell' memrz='0' level='6' desc='10-ft. field hedges out living creatures' />
-<gift name='Animal Shapes' memrz='0' level='7' desc='One ally/level polymorphs into chosen animal' />
-<gift name='Creeping Doom' memrz='0' level='8' desc='Carpet of insects attacks at your command' />
-<gift name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Chaos Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Protection from Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
-<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures' />
-<gift name='Magic Circle against Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
-<gift name='Chaos Hammer' memrz='0' level='4' desc='Damages and staggers lawful creatures' />
-<gift name='Dispel Law' memrz='0' level='5' desc='+4 bonus against attacks by lawful creatures' />
-<gift name='Animate Objects' memrz='0' level='6' desc='Objects attack your foes' />
-<gift name='Word of Chaos' memrz='0' level='7' desc='Kills, confuses, stuns, or deafens nonchaotic subjects' />
-<gift name='Cloak of Chaos' memrz='0' level='8' desc='+4 AC, +4 resistance, SR 25 against lawful spells' />
-<gift name='Summon Monster IX' memrz='0' level='9' desc='(Chaos spell only) Calls outsider to fight for you' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Death Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds' />
-<gift name='Death Knell' memrz='0' level='2' desc='Kill dying creature and gain 1d8 temp. hp, +2 Str, and +1 caster level' />
-<gift name='Animate Dead' memrz='0' level='3' desc='Creates undead skeletons and zombies' />
-<gift name='Death Ward' memrz='0' level='4' desc='Grants immunity to death spells and effects' />
-<gift name='Slay Living' memrz='0' level='5' desc='Touch attack kills subject' />
-<gift name='Create Undead' memrz='0' level='6' desc='Ghouls, shadows, ghasts, wights, or wraiths' />
-<gift name='Destruction' memrz='0' level='7' desc='Kills subject and destroys remains' />
-<gift name='Create Greater Undead' memrz='0' level='8' desc='Mummies, spectres, vampires, or ghosts' />
-<gift name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Destruction Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Inflict Light Wounds' memrz='0' level='1' desc='Touch attack, 1d8 +1/level damage (max +5)' />
-<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures' />
-<gift name='Contagion' memrz='0' level='3' desc='Infects subject with chosen disease' />
-<gift name='Inflict Critical Wounds' memrz='0' level='4' desc='Touch attack, 4d8 +1/level damage (max +20)' />
-<gift name='Circle of Doom' memrz='0' level='5' desc='Deals 1d8 +1/level damage in all directions' />
-<gift name='Harm' memrz='0' level='6' desc='Subject loses all but 1d4 hp' />
-<gift name='Disintegrate' memrz='0' level='7' desc='Makes one creature or object vanish' />
-<gift name='Earthquake' memrz='0' level='8' desc='Intense tremor shakes 5-ft./level radius' />
-<gift name='Implosion' memrz='0' level='9' desc='Kills one creature/round' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Earth Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Magic Stone' memrz='0' level='1' desc='Three stones become +1 projectiles, 1d6+1 damage' />
-<gift name='Soften Earth and Stone' memrz='0' level='2' desc='Turns stone to clay or dirt to sand or mud' />
-<gift name='Stone Shape' memrz='0' level='3' desc='Sculpts stone into any form' />
-<gift name='Spike Stones' memrz='0' level='4' desc='Creatures in area take 1d8 damage, may be slowed' />
-<gift name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped' />
-<gift name='Stoneskin' memrz='0' level='6' desc='Stops blows, cuts, stabs, and slashes' />
-<gift name='Earthquake' memrz='0' level='7' desc='Intense tremor shakes 5-ft./level radius' />
-<gift name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron' />
-<gift name='Elemental Swarm' memrz='0' level='9' desc='(Earth spell only) Summons 2d4 Large, 1d4 Huge elementals' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Evil Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Protection from Good' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
-<gift name='Desecrate' memrz='0' level='2' desc='Fills area with negative energy, making undead stronger' />
-<gift name='Magic Circle against Good' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
-<gift name='Unholy Blight' memrz='0' level='4' desc='Damages and sickens good creatures' />
-<gift name='Dispel Good' memrz='0' level='5' desc='+4 bonus against attacks by good creatures' />
-<gift name='Create Undead' memrz='0' level='6' desc='Ghouls, shadows, ghasts, wights, or wraiths' />
-<gift name='Blasphemy' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonevil subjects' />
-<gift name='Unholy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, SR 25 against good spells' />
-<gift name='Summon Monster IX' memrz='0' level='9' desc='(Evil spell only) Calls outsider to fight for you' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Fire Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max 5d4)' />
-<gift name='Produce Flame' memrz='0' level='2' desc='1d4 +1/two levels damage, touch or thrown' />
-<gift name='Resist Elements' memrz='0' level='3' desc='Ignore first 12 damage from one energy type (cold or fire only) each round' />
-<gift name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft. Passing through wall deals 2d6 +1/level' />
-<gift name='Fire Shield' memrz='0' level='5' desc='Creatures attacking you take fire damage; you are protected from heat or cold' />
-<gift name='Fire Seeds' memrz='0' level='6' desc='Acorns and berries become grenades and bombs' />
-<gift name='Fire Storm' memrz='0' level='7' desc='Deals 1d6 fire damage/level' />
-<gift name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round' />
-<gift name='Elemental Swarm' memrz='0' level='9' desc='(Fire spell only) Summons 2d4 Large, 1d4 Huge elementals' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Good Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Protection from Evil' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
-<gift name='Aid' memrz='0' level='2' desc='+1 attack, +1 on saves against fear, 1d6 temporary hit points' />
-<gift name='Magic Circle against Evil' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
-<gift name='Holy Smite' memrz='0' level='4' desc='Damages and blinds evil creatures' />
-<gift name='Dispel Evil' memrz='0' level='5' desc='+4 bonus against attacks by evil creatures' />
-<gift name='Blade Barrier' memrz='0' level='6' desc='Blades encircling you deal 1d6 damage/level' />
-<gift name='Holy Word' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nongood subjects' />
-<gift name='Holy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against evil spells' />
-<gift name='Summon Monster IX' memrz='0' level='9' desc='(Good spell only) Calls outsider to fight for you' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Healing Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Cure Light Wounds' memrz='0' level='1' desc='Cures 1d8 +1/level damage (max +5)' />
-<gift name='Cure Moderate Wounds' memrz='0' level='2' desc='Cures 2d8 +1/level damage (max +10)' />
-<gift name='Cure Serious Wounds' memrz='0' level='3' desc='Cures 3d8 +1/level damage (max +15)' />
-<gift name='Cure Critical Wounds' memrz='0' level='4' desc='Cures 4d8 +1/level damage (max +20)' />
-<gift name='Healing Circle' memrz='0' level='5' desc='Cures 1d8 +1/level damage in all directions' />
-<gift name='Heal' memrz='0' level='6' desc='Cures all damage, diseases, and mental conditions' />
-<gift name='Regenerate' memrz='0' level='7' desc='Subjects severed limbs grow back' />
-<gift name='Mass Heal' memrz='0' level='8' desc='As heal, but with several subjects' />
-<gift name='True Resurrection' memrz='0' level='9' desc='As resurrection, plus remains are not needed' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Knowledge Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft' />
-<gift name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts' />
-<gift name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level' />
-<gift name='Divination' memrz='0' level='4' desc='Provides useful advice on to specific proposed actions' />
-<gift name='True Seeing' memrz='0' level='5' desc='See all things as they really are' />
-<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
-<gift name='Legend Lore' memrz='0' level='7' desc='Learn tales about a person, place, or thing' />
-<gift name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object' />
-<gift name='Foresight' memrz='0' level='9' desc='6th sense warns of impending danger' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Law Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Protection from Chaos' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
-<gift name='Calm Emotions' memrz='0' level='2' desc='Calms 1d6 creatures/level, negating emotion effects' />
-<gift name='Magic Circle against Chaos' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
-<gift name='Orders Wrath' memrz='0' level='4' desc='Damages and dazes chaotic creatures' />
-<gift name='Dispel Chaos' memrz='0' level='5' desc='+4 bonus against attacks by chaotic creatures' />
-<gift name='Hold Monster' memrz='0' level='6' desc='As hold person, but any creature' />
-<gift name='Dictum' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonlawful subjects' />
-<gift name='Shield of Law' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against chaotic spells' />
-<gift name='Summon Monster IX' memrz='0' level='9' desc='(Law spell only) Calls outsider to fight for you' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Luck Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Entropic Shield' memrz='0' level='1' desc='Ranged attacks against you suffer 20% miss chance' />
-<gift name='Aid' memrz='0' level='2' desc='+1 attack, +1 against fear, 1d8 temporary hit points' />
-<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
-<gift name='Freedom of Movement' memrz='0' level='4' desc='Subject moves normally despite impediments' />
-<gift name='Break Enchantment' memrz='0' level='5' desc='Frees subjects from enchantments, alterations, curses, and petrification' />
-<gift name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double' />
-<gift name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster' />
-<gift name='Holy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against evil spells' />
-<gift name='Miracle' memrz='0' level='9' desc='Requests a deitys intercession' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Magic Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura' />
-<gift name='Identify' memrz='0' level='2' desc='Determines single feature of magic item' />
-<gift name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects' />
-<gift name='Imbue with Spell Ability' memrz='0' level='4' desc='Transfer spells to subject' />
-<gift name='Spell Resistance' memrz='0' level='5' desc='Subject gains +12 +1/level SR' />
-<gift name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft' />
-<gift name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster' />
-<gift name='Protection from Spells' memrz='0' level='8' desc='Confers +8 resistance bonus' />
-<gift name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Plant Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Entangle' memrz='0' level='1' desc='Plants entangle everyone in 40-ft.-radius circle' />
-<gift name='Barkskin' memrz='0' level='2' desc='Grants +3 natural armor bonus (or higher)' />
-<gift name='Plant Growth' memrz='0' level='3' desc='Grows vegetation, improves crops' />
-<gift name='Control Plants' memrz='0' level='4' desc='Talk to and control plants and fungi' />
-<gift name='Wall of Thorns' memrz='0' level='5' desc='Thorns damage anyone who tries to pass' />
-<gift name='Repel Wood' memrz='0' level='6' desc='Pushes away wooden objects' />
-<gift name='Changestaff' memrz='0' level='7' desc='Your staff becomes a treant on command' />
-<gift name='Command Plants' memrz='0' level='8' desc='Plants animate and vegetation entangles' />
-<gift name='Shambler' memrz='0' level='9' desc='Summons 1d4+2 shambling mounds to fight for you' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Protection Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Sanctuary' memrz='0' level='1' desc='Opponents cannot attack you, and you cannot attack' />
-<gift name='Shield Other' memrz='0' level='2' desc='You take half of subjects damage' />
-<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
-<gift name='Spell Immunity' memrz='0' level='4' desc='Subject is immune to one spell/four levels' />
-<gift name='Spell Resistance' memrz='0' level='5' desc='Subject gains +12 +1/level SR' />
-<gift name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft' />
-<gift name='Repulsion' memrz='0' level='7' desc='Creatures cannot approach you' />
-<gift name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying' />
-<gift name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Strength Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type' />
-<gift name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level' />
-<gift name='Magic Vestment' memrz='0' level='3' desc='Armor or shield gains +1 enhancement/three levels' />
-<gift name='Spell Immunity' memrz='0' level='4' desc='Subject is immune to one spell/four levels' />
-<gift name='Righteous Might' memrz='0' level='5' desc='Your size increases, and you gain +4 Str' />
-<gift name='Stoneskin' memrz='0' level='6' desc='Stops blows, cuts, stabs, and slashes' />
-<gift name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples' />
-<gift name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes' />
-<gift name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys grasping hand, but stronger' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Sun Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type (cold or fire only)' />
-<gift name='Heat Metal' memrz='0' level='2' desc='Make metal so hot it damages those that touch it' />
-<gift name='Searing Light' memrz='0' level='3' desc='Ray deals 1d8/two levels, more against undead' />
-<gift name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold' />
-<gift name='Flame Strike' memrz='0' level='5' desc='Smite foes with divine fire (1d8/level)' />
-<gift name='Fire Seeds' memrz='0' level='6' desc='Acorns and berries become grenades and bombs' />
-<gift name='Sunbeam' memrz='0' level='7' desc='Beam blinds and deals 3d6 damage' />
-<gift name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage' />
-<gift name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Travel Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed' />
-<gift name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type)' />
-<gift name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90' />
-<gift name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb' />
-<gift name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere' />
-<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
-<gift name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival' />
-<gift name='Phase Door' memrz='0' level='8' desc='Invisible passage through wood or stone' />
-<gift name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Trickery Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Change Self' memrz='0' level='1' desc='Change own appearance' />
-<gift name='Invisibility' memrz='0' level='2' desc='Subject invisible 10 min./level or until it attacks' />
-<gift name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying' />
-<gift name='Confusion' memrz='0' level='4' desc='Makes subjects behave oddly for 1 round/level' />
-<gift name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion' />
-<gift name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double' />
-<gift name='Screen' memrz='0' level='7' desc='Illusion hides area from vision, scrying' />
-<gift name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else' />
-<gift name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      War Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus' />
-<gift name='Spiritual Weapon' memrz='0' level='2' desc='Magical weapon attacks on its own' />
-<gift name='Magic Vestment' memrz='0' level='3' desc='Armor or shield gains +1 enhancement/three levels' />
-<gift name='Divine Power' memrz='0' level='4' desc='You gain attack bonus, 18 Str, and 1 hp/level' />
-<gift name='Flame Strike' memrz='0' level='5' desc='Smite foes with divine fire (1d6 damage/level)' />
-<gift name='Blade Barrier' memrz='0' level='6' desc='Blades encircling you deal 1d6 damage/level' />
-<gift name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp' />
-<gift name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures' />
-<gift name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name='      Water Domain Spells' memrz='0' level=' ' desc=' ' />
-<gift name='============================' memrz='0' level=' ' desc=' ' />
-<gift name=' ' memrz='0' level=' ' desc=' ' />
-<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
-<gift name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision' />
-<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater' />
-<gift name='Control Water' memrz='0' level='4' desc='Raise, lower, or part bodies of water' />
-<gift name='Ice Storm' memrz='0' level='5' desc='Hail deals 5d6 damage in cylinder 40 ft. across' />
-<gift name='Cone of Cold' memrz='0' level='6' desc='1d6 cold damage/level' />
-<gift name='Acid Fog' memrz='0' level='7' desc='Fog deals 2d6/round acid damage for 1round/level' />
-<gift name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft' />
-<gift name='Elemental Swarm' memrz='0' level='9' desc='(Water spell only) Summons 2d4 Large, 1d4 Huge elementals' />
-</divine>
+<divine>
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Druid Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Create Water' memrz='0' level='0' desc='Creates 2 gallons/level of pure water' />
+<gift name='Cure Minor Wounds' memrz='0' level='0' desc='Cures 1 point of damage' />
+<gift name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft' />
+<gift name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object' />
+<gift name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack)' />
+<gift name='Guidance' memrz='0' level='0' desc='+1 on one roll, throw, or check' />
+<gift name='Know Direction' memrz='0' level='0' desc='You discern north' />
+<gift name='Light' memrz='0' level='0' desc='Object shines like a torch' />
+<gift name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object' />
+<gift name='Purify Food and Drink' memrz='0' level='0' desc='Purifies 1 cu. ft./level of food or water' />
+<gift name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks' />
+<gift name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws' />
+<gift name='Animal Friendship' memrz='0' level='1' desc='Gain permanent animal companions' />
+<gift name='Calm Animals' memrz='0' level='1' desc='Calms 2d4 +1/level HD of animals, beasts, and magical beasts' />
+<gift name='Cure Light Wounds' memrz='0' level='1' desc='Cures 1d8 +1/level damage (max +5)' />
+<gift name='Detect Animals or Plants' memrz='0' level='1' desc='Detects species of animals or plants' />
+<gift name='Detect Snares and Pits' memrz='0' level='1' desc='Reveals natural or primitive traps' />
+<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type' />
+<gift name='Entangle' memrz='0' level='1' desc='Plants entangle everyone in 40-ft.-radius circle' />
+<gift name='Faerie Fire' memrz='0' level='1' desc='Outlines subjects with light, canceling blur, concealment, etc' />
+<gift name='Goodberry' memrz='0' level='1' desc='2d4 berries each cure 1 hp (max 8 hp/24 hours)' />
+<gift name='Invisibility to Animals' memrz='0' level='1' desc='Animals cannot perceive one subject/level' />
+<gift name='Magic Fang' memrz='0' level='1' desc='One natural weapon of subject creature gets +1 bonus to attack and damage' />
+<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
+<gift name='Pass without Trace' memrz='0' level='1' desc='One subject/level leaves no tracks' />
+<gift name='Shillelagh' memrz='0' level='1' desc='Cudgel or quarterstaff becomes +1 weapon (1d10 damage) for 1 minute/level' />
+<gift name='Summon Natures Ally I' memrz='0' level='1' desc='Calls creature to fight' />
+<gift name='Animal Messenger' memrz='0' level='2' desc='Sends a Tiny animal to a specific place' />
+<gift name='Animal Trance' memrz='0' level='2' desc='Fascinates 2d6 HD of animals' />
+<gift name='Barkskin' memrz='0' level='2' desc='Grants +3 natural armor bonus (or higher)' />
+<gift name='Charm Person or Animal' memrz='0' level='2' desc='Makes one person or animal your friend' />
+<gift name='Chill Metal' memrz='0' level='2' desc='Cold metal damages those who touch it' />
+<gift name='Delay Poison' memrz='0' level='2' desc='Stops poison from harming subject for 1 hour/level' />
+<gift name='Fire Trap' memrz='0' level='2' desc='Opened object deals 1d4 +1/level damage' />
+<gift name='Flame Blade' memrz='0' level='2' desc='Touch attack deals 1d8 +1/two levels damage' />
+<gift name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level' />
+<gift name='Heat Metal' memrz='0' level='2' desc='Hot metal damages those who touch it' />
+<gift name='Hold Animal' memrz='0' level='2' desc='Holds one animal helpless, 1 round/level' />
+<gift name='Lesser Restoration' memrz='0' level='2' desc='Dispels magic ability penalty or repairs 1d4 ability damage' />
+<gift name='Produce Flame' memrz='0' level='2' desc='1d4 +1/two levels damage, touch or thrown' />
+<gift name='Resist Elements' memrz='0' level='2' desc='Ignores first 12 damage from one energy type each round' />
+<gift name='Soften Earth and Stone' memrz='0' level='2' desc='Turns stone to clay or dirt to sand or mud' />
+<gift name='Speak with Animals' memrz='0' level='2' desc='You can communicate with natural animals' />
+<gift name='Summon Natures Ally II' memrz='0' level='2' desc='Calls creature to fight' />
+<gift name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures' />
+<gift name='Tree Shape' memrz='0' level='2' desc='You look exactly like a tree for 1 hour/level' />
+<gift name='Warp Wood' memrz='0' level='2' desc='Bends wood (shaft, handle, door, plank)' />
+<gift name='Wood Shape' memrz='0' level='2' desc='Rearranges wooden objects to suit you' />
+<gift name='Call Lightning' memrz='0' level='3' desc='Directs lightning bolts (1d10/level) during storms' />
+<gift name='Contagion' memrz='0' level='3' desc='Infects subject with chosen disease' />
+<gift name='Cure Moderate Wounds' memrz='0' level='3' desc='Cures 2d8 +1/level damage (max +10)' />
+<gift name='Diminish Plants' memrz='0' level='3' desc='Reduces size or blights growth of normal plants' />
+<gift name='Dominate Animal' memrz='0' level='3' desc='Subject animal obeys silent mental commands' />
+<gift name='Greater Magic Fang' memrz='0' level='3' desc='One natural weapon of subject creature gets +1 for each 3 caster levels (max +5)' />
+<gift name='Meld into Stone' memrz='0' level='3' desc='You and your gear merge with stone' />
+<gift name='Neutralize Poison' memrz='0' level='3' desc='Detoxifies venom in or on subject' />
+<gift name='Plant Growth' memrz='0' level='3' desc='Grows vegetation, improves crops' />
+<gift name='Poison' memrz='0' level='3' desc='Touch deals 1d10 Con damage, repeats in 1 min' />
+<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
+<gift name='Remove Disease' memrz='0' level='3' desc='Cures all diseases affecting subject' />
+<gift name='Snare' memrz='0' level='3' desc='Creates a magical booby trap' />
+<gift name='Speak with Plants' memrz='0' level='3' desc='You can talk to normal plants and plant creatures' />
+<gift name='Spike Growth' memrz='0' level='3' desc='Creatures in area take 1d4 damage, may be slowed' />
+<gift name='Stone Shape' memrz='0' level='3' desc='Sculpts stone into any form' />
+<gift name='Summon Natures Ally III' memrz='0' level='3' desc='Calls creature to fight' />
+<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater' />
+<gift name='Antiplant Shell' memrz='0' level='4' desc='Keeps animated plants at bay' />
+<gift name='Control Plants' memrz='0' level='4' desc='Talk to and control plants and fungi' />
+<gift name='Cure Serious Wounds' memrz='0' level='4' desc='Cures 3d8 +1/level damage (max +15)' />
+<gift name='Dispel Magic' memrz='0' level='4' desc='Cancels magical spells and effects' />
+<gift name='Flame Strike' memrz='0' level='4' desc='Smites foes with divine fire (1d6/level)' />
+<gift name='Freedom of Movement' memrz='0' level='4' desc='Subject moves normally despite impediments' />
+<gift name='Giant Vermin' memrz='0' level='4' desc='Turns insects into giant vermin' />
+<gift name='Quench' memrz='0' level='4' desc='Extinguishes nonmagical fires or one magic item' />
+<gift name='Reincarnate' memrz='0' level='4' desc='Brings dead subject back in a random body' />
+<gift name='Repel Vermin' memrz='0' level='4' desc='Insects stay 10 ft. away' />
+<gift name='Rusting Grasp' memrz='0' level='4' desc='Your touch corrodes iron and alloys' />
+<gift name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance' />
+<gift name='Sleet Storm' memrz='0' level='4' desc='Hampers vision and movement' />
+<gift name='Spike Stones' memrz='0' level='4' desc='Creatures in area take 1d8 damage, may be slowed' />
+<gift name='Summon Natures Ally IV' memrz='0' level='4' desc='Calls creature to fight' />
+<gift name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD' />
+<gift name='Atonement' memrz='0' level='5' desc='Removes burden of misdeeds from subject' />
+<gift name='Awaken' memrz='0' level='5' desc='Animal or tree gains human intellect' />
+<gift name='Commune with Nature' memrz='0' level='5' desc='Learn about terrain for one mile/level' />
+<gift name='Control Winds' memrz='0' level='5' desc='Change wind direction and speed' />
+<gift name='Cure Critical Wounds' memrz='0' level='5' desc='Cures 4d8 +1/level damage (max +20)' />
+<gift name='Death Ward' memrz='0' level='5' desc='Grants immunity to all death spells and effects' />
+<gift name='Hallow' memrz='0' level='5' desc='Designates location as holy' />
+<gift name='Ice Storm' memrz='0' level='5' desc='Hail deals 5d6 damage in cylinder 40 ft. across' />
+<gift name='Insect Plague' memrz='0' level='5' desc='Insect horde limits vision, inflicts damage, and weak creatures flee' />
+<gift name='Summon Natures Ally V' memrz='0' level='5' desc='Calls creature to fight' />
+<gift name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level' />
+<gift name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level' />
+<gift name='Tree Stride' memrz='0' level='5' desc='Step from one tree to another far away' />
+<gift name='Unhallow' memrz='0' level='5' desc='Designates location as unholy' />
+<gift name='Wall of Fire' memrz='0' level='5' desc='2d4 fire damage out to 10 ft. and 1d4 out to 20 ft. Passing through wall deals 2d6 +1/level' />
+<gift name='Wall of Thorns' memrz='0' level='5' desc='Thorns damage anyone who tries to pass' />
+<gift name='Antilife Shell' memrz='0' level='6' desc='10-ft. field hedges out living creatures' />
+<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
+<gift name='Fire Seeds' memrz='0' level='6' desc='Acorns and berries become grenades and bombs' />
+<gift name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but +20 on check' />
+<gift name='Healing Circle' memrz='0' level='6' desc='Cures 1d8 +1/level damage in all directions' />
+<gift name='Ironwood' memrz='0' level='6' desc='Magical wood is strong as steel' />
+<gift name='Liveoak' memrz='0' level='6' desc='Oak becomes treant guardian' />
+<gift name='Repel Wood' memrz='0' level='6' desc='Pushes away wooden objects' />
+<gift name='Spellstaff' memrz='0' level='6' desc='Stores one spell in wooden quarterstaff' />
+<gift name='Stone Tell' memrz='0' level='6' desc='Talk to natural or worked stone' />
+<gift name='Summon Natures Ally VI' memrz='0' level='6' desc='Calls creature to fight' />
+<gift name='Transport via Plants' memrz='0' level='6' desc='Move instantly from one plant to another of the same species' />
+<gift name='Wall of Stone' memrz='0' level='6' desc='20 hp/four levels; can be shaped' />
+<gift name='Changestaff' memrz='0' level='7' desc='Your staff becomes a treant on command' />
+<gift name='Control Weather' memrz='0' level='7' desc='Changes weather in local area' />
+<gift name='Creeping Doom' memrz='0' level='7' desc='Carpet of insects attacks at your command' />
+<gift name='Fire Storm' memrz='0' level='7' desc='Deals 1d6 fire damage/level' />
+<gift name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer' />
+<gift name='Harm' memrz='0' level='7' desc='Subject loses all but 1d4 hp' />
+<gift name='Heal' memrz='0' level='7' desc='Cures all damage, diseases, and mental conditions' />
+<gift name='Summon Natures Ally VII' memrz='0' level='7' desc='Calls creature to fight' />
+<gift name='Sunbeam' memrz='0' level='7' desc='Beam blinds and deals 3d6 damage' />
+<gift name='Transmute Metal to Wood' memrz='0' level='7' desc='Metal within 40 ft. becomes wood' />
+<gift name='True Seeing' memrz='0' level='7' desc='See all things as they really are' />
+<gift name='Wind Walk' memrz='0' level='7' desc='You and your allies turn vaporous and travel fast' />
+<gift name='Animal Shapes' memrz='0' level='8' desc='One ally/level polymorphs into chosen animal' />
+<gift name='Command Plants' memrz='0' level='8' desc='Plants animate and vegetation entangles' />
+<gift name='Finger of Death' memrz='0' level='8' desc='Kills one subject' />
+<gift name='Repel Metal or Stone' memrz='0' level='8' desc='Pushes away metal and stone' />
+<gift name='Reverse Gravity' memrz='0' level='8' desc='Objects and creatures fall upward' />
+<gift name='Summon Natures Ally VIII' memrz='0' level='8' desc='Calls creature to fight' />
+<gift name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage' />
+<gift name='Whirlwind' memrz='0' level='8' desc='Cyclone inflicts damage and can pick up creatures' />
+<gift name='Word of Recall' memrz='0' level='8' desc='Teleports you back to designated place' />
+<gift name='Antipathy' memrz='0' level='9' desc='Object or location affected by spell repels certain creatures' />
+<gift name='Earthquake' memrz='0' level='9' desc='Intense tremor shakes 5-ft./level radius' />
+<gift name='Elemental Swarm' memrz='0' level='9' desc='Summons 2d4 Large, 1d4 Huge elementals' />
+<gift name='Foresight' memrz='0' level='9' desc='6th sense warns of impending danger' />
+<gift name='Mass Heal' memrz='0' level='9' desc='As heal, but with several subjects' />
+<gift name='Shambler' memrz='0' level='9' desc='Summons 1d4+2 shambling mounds to fight for you' />
+<gift name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round' />
+<gift name='Summon Natures Ally IX' memrz='0' level='9' desc='Calls creature to fight' />
+<gift name='Sympathy' memrz='0' level='9' desc='Object or location attracts certain creatures' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Cleric Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Create Water' memrz='0' level='0' desc='Creates 2 gallons/level of pure water' />
+<gift name='Cure Minor Wounds' memrz='0' level='0' desc='Cures 1 point of damage' />
+<gift name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft' />
+<gift name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object' />
+<gift name='Guidance' memrz='0' level='0' desc='+1 on one roll, save, or check' />
+<gift name='Inflict Minor Wounds' memrz='0' level='0' desc='Touch attack, 1 point of damage' />
+<gift name='Light' memrz='0' level='0' desc='Object shines like a torch' />
+<gift name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object' />
+<gift name='Purify Food and Drink' memrz='0' level='0' desc='Purifies 1 cu. ft./level of food or water' />
+<gift name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks' />
+<gift name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws' />
+<gift name='Virtue' memrz='0' level='0' desc='Subject gains 1 temporary hp' />
+<gift name='Bane' memrz='0' level='1' desc='Enemies suffer -1 attack, -1 on saves against fear' />
+<gift name='Bless' memrz='0' level='1' desc='Allies gain +1 attack and +1 on saves against fear' />
+<gift name='Bless Water' memrz='0' level='1' desc='Makes holy water' />
+<gift name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds' />
+<gift name='Command' memrz='0' level='1' desc='One subject obeys one-word command for 1 round' />
+<gift name='Comprehend Languages' memrz='0' level='1' desc='Understand all spoken and written languages' />
+<gift name='Cure Light Wounds' memrz='0' level='1' desc='Cures 1d8 +1/level damage (max +5)' />
+<gift name='Curse Water' memrz='0' level='1' desc='Makes unholy water' />
+<gift name='Deathwatch' memrz='0' level='1' desc='Sees how wounded subjects within 30 ft. are' />
+<gift name='Detect Chaos/Evil/Good/Law' memrz='0' level='1' desc='Reveals creatures, spells, or objects' />
+<gift name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft' />
+<gift name='Divine Favor' memrz='0' level='1' desc='You gain attack, damage bonus, +1/three levels' />
+<gift name='Doom' memrz='0' level='1' desc='One subject suffers -2 on attacks, damage, saves, and checks' />
+<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type' />
+<gift name='Entropic Shield' memrz='0' level='1' desc='Ranged attacks against you suffer 20 percent miss chance' />
+<gift name='Inflict Light Wounds' memrz='0' level='1' desc='Touch, 1d8 +1/level damage (max +5)' />
+<gift name='Invisibility to Undead' memrz='0' level='1' desc='Undead can not perceive one subject/level' />
+<gift name='Magic Stone' memrz='0' level='1' desc='Three stones gain +1 attack, deal 1d6+1 damage' />
+<gift name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus' />
+<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
+<gift name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals/outsiders' />
+<gift name='Random Action' memrz='0' level='1' desc='One creature acts randomly for one round' />
+<gift name='Remove Fear' memrz='0' level='1' desc='+4 on saves against fear for one subject +1/four levels' />
+<gift name='Sanctuary' memrz='0' level='1' desc='Opponents can not attack you, and you can not attack' />
+<gift name='Shield of Faith' memrz='0' level='1' desc='Aura grants +2 or higher deflection bonus' />
+<gift name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you' />
+<gift name='Aid' memrz='0' level='2' desc='+1 attack, +1 on saves against fear, 1d8 temporary hit points' />
+<gift name='Animal Messenger' memrz='0' level='2' desc='Sends a Tiny animal to a specific place' />
+<gift name='Augury' memrz='0' level='2' desc='Learns whether an action will be good or bad' />
+<gift name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level' />
+<gift name='Calm Emotions' memrz='0' level='2' desc='Calms 1d6 subjects/level, negating emotion effects' />
+<gift name='Consecrate' memrz='0' level='2' desc='Fills area with positive energy, making undead weaker' />
+<gift name='Cure Moderate Wounds' memrz='0' level='2' desc='Cures 2d8 +1/level damage (max +10)' />
+<gift name='Darkness. 20-ft' memrz='0' level='2' desc='radius of supernatural darkness' />
+<gift name='Death Knell' memrz='0' level='2' desc='Kills dying creature; you gain 1d8 temporary hp, +2 Str, and +1 level' />
+<gift name='Delay Poison' memrz='0' level='2' desc='Stops poison from harming subject for 1 hour/level' />
+<gift name='Desecrate' memrz='0' level='2' desc='Fills area with negative energy, making undead stronger' />
+<gift name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level' />
+<gift name='Enthrall' memrz='0' level='2' desc='Captivates all within 100 ft. + 10 ft./level' />
+<gift name='Find Traps' memrz='0' level='2' desc='Notice traps as a rogue does' />
+<gift name='Gentle Repose' memrz='0' level='2' desc='Preserves one corpse' />
+<gift name='Hold Person' memrz='0' level='2' desc='Holds one person helpless; 1 round/level' />
+<gift name='Inflict Moderate Wounds' memrz='0' level='2' desc='Touch attack, 2d8 +1/level damage (max +10)' />
+<gift name='Lesser Restoration' memrz='0' level='2' desc='Dispels magic ability penalty or repairs 1d4 ability damage' />
+<gift name='Make Whole' memrz='0' level='2' desc='Repairs an object' />
+<gift name='Remove Paralysis' memrz='0' level='2' desc='Frees one or more creatures from paralysis, hold, or slow' />
+<gift name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type' />
+<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures' />
+<gift name='Shield Other' memrz='0' level='2' desc='You take half of subjects damage' />
+<gift name='Silence' memrz='0' level='2' desc='Negates sound in 15-ft. radius' />
+<gift name='Sound Burst' memrz='0' level='2' desc='Deals 1d8 sonic damage to subjects; may stun them' />
+<gift name='Speak with Animals' memrz='0' level='2' desc='You can communicate with natural animals' />
+<gift name='Spiritual Weapon' memrz='0' level='2' desc='Magical weapon attacks on its own' />
+<gift name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you' />
+<gift name='Undetectable Alignment' memrz='0' level='2' desc='Conceals alignment for 24 hours' />
+<gift name='Zone of Truth' memrz='0' level='2' desc='Subjects within range cannot lie' />
+<gift name='Animate Dead' memrz='0' level='3' desc='Creates undead skeletons and zombies' />
+<gift name='Bestow Curse' memrz='0' level='3' desc='-6 to an ability; -4 on attacks/saves/checks; or 50 percent chance of losing each action' />
+<gift name='Blindness/Deafness' memrz='0' level='3' desc='Makes subject blind or deaf' />
+<gift name='Contagion' memrz='0' level='3' desc='Infects subject with chosen disease' />
+<gift name='Continual Flame' memrz='0' level='3' desc='Makes a permanent, heatless torch' />
+<gift name='Create Food and Water' memrz='0' level='3' desc='Feeds three humans (or one horse)/level' />
+<gift name='Cure Serious Wounds' memrz='0' level='3' desc='Cures 3d8 +1/level damage (max +15)' />
+<gift name='Daylight' memrz='0' level='3' desc='60-ft. radius of bright light' />
+<gift name='Deeper Darkness' memrz='0' level='3' desc='Object sheds absolute darkness in 60-ft. radius' />
+<gift name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects' />
+<gift name='Glyph of Warding' memrz='0' level='3' desc='Inscription harms those who pass it' />
+<gift name='Helping Hand' memrz='0' level='3' desc='Ghostly hand leads subject to you' />
+<gift name='Inflict Serious Wounds' memrz='0' level='3' desc='Touch attack, 3d8 +1/level damage (max +15)' />
+<gift name='Invisibility Purge' memrz='0' level='3' desc='Dispels invisibility within 5 ft./level' />
+<gift name='Locate Object' memrz='0' level='3' desc='Senses direction toward object (specific or type)' />
+<gift name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10min./level' />
+<gift name='Magic Vestment' memrz='0' level='3' desc='Armor or shield gains +1 enhancement/three levels' />
+<gift name='Meld into Stone' memrz='0' level='3' desc='You and your gear merge with stone' />
+<gift name='Negative Energy Protection' memrz='0' level='3' desc='Subject resists level and ability drains' />
+<gift name='Obscure Object' memrz='0' level='3' desc='Masks object against divination' />
+<gift name='Prayer' memrz='0' level='3' desc='Allies gain +1 on most rolls, and enemies suffer -1' />
+<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
+<gift name='Remove Blindness/Deafness' memrz='0' level='3' desc='Cures normal or magical conditions' />
+<gift name='Remove Curse' memrz='0' level='3' desc='Frees object or person from curse' />
+<gift name='Remove Disease' memrz='0' level='3' desc='Cures all diseases affecting subject' />
+<gift name='Searing Light' memrz='0' level='3' desc='Ray deals 1d8/two levels, more against undead' />
+<gift name='Speak with Dead' memrz='0' level='3' desc='Corpse answers one question/two levels' />
+<gift name='Speak with Plants' memrz='0' level='3' desc='You can talk to normal plants and plant creatures' />
+<gift name='Stone Shape' memrz='0' level='3' desc='Sculpts stone into any form' />
+<gift name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you' />
+<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater' />
+<gift name='Water Walk' memrz='0' level='3' desc='Subject treads on water as if solid' />
+<gift name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases' />
+<gift name='Air Walk' memrz='0' level='4' desc='Subject treads on air as if solid (climb at 45-degree angle)' />
+<gift name='Control Water' memrz='0' level='4' desc='Raises, lowers, or parts bodies of water' />
+<gift name='Cure Critical Wounds' memrz='0' level='4' desc='Cures 4d8 +1/level damage (max +20)' />
+<gift name='Death Ward' memrz='0' level='4' desc='Grants immunity to death spells and effects' />
+<gift name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement' />
+<gift name='Discern Lies' memrz='0' level='4' desc='Reveals deliberate falsehoods' />
+<gift name='Dismissal' memrz='0' level='4' desc='Forces a creature to return to native plane' />
+<gift name='Divination' memrz='0' level='4' desc='Provides useful advice for specific proposed actions' />
+<gift name='Divine Power' memrz='0' level='4' desc='You gain attack bonus, 18 Str, and 1 hp/level' />
+<gift name='Freedom of Movement' memrz='0' level='4' desc='Subject moves normally despite impediments' />
+<gift name='Giant Vermin' memrz='0' level='4' desc='Turns insects into giant vermin' />
+<gift name='Greater Magic Weapon' memrz='0' level='4' desc='+1 bonus/three levels (max +5)' />
+<gift name='Imbue with Spell Ability' memrz='0' level='4' desc='Transfer spells to subject' />
+<gift name='Inflict Critical Wounds' memrz='0' level='4' desc='Touch attack, 4d8 +1/level damage (max +20)' />
+<gift name='Lesser Planar Ally' memrz='0' level='4' desc='Exchange services with an 8 HD outsider' />
+<gift name='Neutralize Poison' memrz='0' level='4' desc='Detoxifies venom in or on subject' />
+<gift name='Poison' memrz='0' level='4' desc='Touch deals 1d10 Con damage, repeats in 1 min' />
+<gift name='Repel Vermin' memrz='0' level='4' desc='Insects stay 10 ft. away' />
+<gift name='Restoration' memrz='0' level='4' desc='Restores level and ability score drains' />
+<gift name='Sending' memrz='0' level='4' desc='Delivers short message anywhere, instantly' />
+<gift name='Spell Immunity' memrz='0' level='4' desc='Subject is immune to one spell/four levels' />
+<gift name='Status' memrz='0' level='4' desc='Monitors condition, position of allies' />
+<gift name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you' />
+<gift name='Tongues' memrz='0' level='4' desc='Speak any language' />
+<gift name='Atonement' memrz='0' level='5' desc='Removes burden of misdeeds from subject' />
+<gift name='Break Enchantment' memrz='0' level='5' desc='Frees subjects from enchantments, alterations, curses, and petrification' />
+<gift name='Circle of Doom' memrz='0' level='5' desc='Deals 1d8 +1/level damage in all directions' />
+<gift name='Commune' memrz='0' level='5' desc='Deity answers one yes-or-no question/level' />
+<gift name='Dispel Chaos/Evil/Good/Law' memrz='0' level='5' desc='+4 bonus against attacks' />
+<gift name='Ethereal Jaunt' memrz='0' level='5' desc='You become ethereal for 1 round/level' />
+<gift name='Flame Strike' memrz='0' level='5' desc='Smites foes with divine fire (1d6/level)' />
+<gift name='Greater Command' memrz='0' level='5' desc='As command, but affects one subject/level' />
+<gift name='Hallow' memrz='0' level='5' desc='Designates location as holy' />
+<gift name='Healing Circle' memrz='0' level='5' desc='Cures 1d8 +1/level damage in all directions' />
+<gift name='Insect Plague' memrz='0' level='5' desc='Insect horde limits vision, inflicts damage, and weak creatures flee' />
+<gift name='Mark of Justice' memrz='0' level='5' desc='Designates action that will trigger curse on subject' />
+<gift name='Plane Shift' memrz='0' level='5' desc='Up to eight subjects travel to another plane' />
+<gift name='Raise Dead' memrz='0' level='5' desc='Restores life to subject who died up to 1 day/level ago' />
+<gift name='Righteous Might' memrz='0' level='5' desc='Your size increases, and you gain +4 Str' />
+<gift name='Scrying' memrz='0' level='5' desc='Spies on subject from a distance' />
+<gift name='Slay Living' memrz='0' level='5' desc='Touch attack kills subject' />
+<gift name='Spell Resistance' memrz='0' level='5' desc='Subject gains +12 +1/level SR' />
+<gift name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you' />
+<gift name='True Seeing' memrz='0' level='5' desc='See all things as they really are' />
+<gift name='Unhallow' memrz='0' level='5' desc='Designates location as unholy' />
+<gift name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped' />
+<gift name='Animate Objects' memrz='0' level='6' desc='Objects attack your foes' />
+<gift name='Antilife Shell' memrz='0' level='6' desc='10-ft. field hedges out living creatures' />
+<gift name='Banishment' memrz='0' level='6' desc='Banishes 2 HD/level extraplanar creatures' />
+<gift name='Blade Barrier' memrz='0' level='6' desc='Blades encircling you deal 1d6 damage/level' />
+<gift name='Create Undead' memrz='0' level='6' desc='Ghouls, shadows, ghasts, wights, or wraiths' />
+<gift name='Etherealness' memrz='0' level='6' desc='Travel to Ethereal Plane with companions' />
+<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
+<gift name='Forbiddance' memrz='0' level='6' desc='Denies area to creatures of another alignment' />
+<gift name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature' />
+<gift name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but up to +20 on check' />
+<gift name='Greater Glyph of Warding' memrz='0' level='6' desc='As glyph of warding, but up to 10d8 damage or 6th-level spell' />
+<gift name='Harm' memrz='0' level='6' desc='Subject loses all but 1d4 hp' />
+<gift name='Heal' memrz='0' level='6' desc='Cures all damage, diseases, and mental conditions' />
+<gift name='Heroes Feast' memrz='0' level='6' desc='Food for one creature/level cures and blesses' />
+<gift name='Planar Ally' memrz='0' level='6' desc='As lesser planar ally, but up to 16 HD' />
+<gift name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you' />
+<gift name='Wind Walk' memrz='0' level='6' desc='You and your allies turn vaporous and travel fast' />
+<gift name='Word of Recall' memrz='0' level='6' desc='Teleports you back to designated place' />
+<gift name='Blasphemy' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonevil subjects' />
+<gift name='Control Weather' memrz='0' level='7' desc='Changes weather in local area' />
+<gift name='Destruction' memrz='0' level='7' desc='Kills subject and destroys remains' />
+<gift name='Dictum' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonlawful subjects' />
+<gift name='Greater Restoration' memrz='0' level='7' desc='As restoration, plus restores all levels and ability scores' />
+<gift name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer' />
+<gift name='Holy Word' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nongood subjects' />
+<gift name='Refuge' memrz='0' level='7' desc='Alters item to transport its possessor to you' />
+<gift name='Regenerate' memrz='0' level='7' desc='Subjects severed limbs grow back' />
+<gift name='Repulsion' memrz='0' level='7' desc='Creatures can not approach you' />
+<gift name='Resurrection' memrz='0' level='7' desc='Fully restore dead subject' />
+<gift name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you' />
+<gift name='Word of Chaos' memrz='0' level='7' desc='Kills, confuses, stuns, or deafens nonchaotic subjects' />
+<gift name='Antimagic Field' memrz='0' level='8' desc='Negates magic within 10 ft' />
+<gift name='Cloak of Chaos' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against lawful spells' />
+<gift name='Create Greater Undead' memrz='0' level='8' desc='Mummies, spectres, vampires, or ghosts' />
+<gift name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object' />
+<gift name='Earthquake' memrz='0' level='8' desc='Intense tremor shakes 5-ft./level radius' />
+<gift name='Fire Storm' memrz='0' level='8' desc='Deals 1d6 fire damage/level' />
+<gift name='Greater Planar Ally' memrz='0' level='8' desc='As lesser planar ally, but up to 24 HD' />
+<gift name='Holy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against evil spells' />
+<gift name='Mass Heal' memrz='0' level='8' desc='As heal, but with several subjects' />
+<gift name='Shield of Law' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against chaotic spells' />
+<gift name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you' />
+<gift name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects' />
+<gift name='Unholy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against good spells' />
+<gift name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane' />
+<gift name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels' />
+<gift name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning' />
+<gift name='Implosion' memrz='0' level='9' desc='Kills one creature/round' />
+<gift name='Miracle' memrz='0' level='9' desc='Requests a deitys intercession' />
+<gift name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection' />
+<gift name='Storm of Vengeance' memrz='0' level='9' desc='Storm rains acid, lightning, and hail' />
+<gift name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you' />
+<gift name='True Resurrection' memrz='0' level='9' desc='As resurrection, plus remains are not needed' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Air Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
+<gift name='Wind Wall' memrz='0' level='2' desc='Deflects arrows, smaller creatures, and gases' />
+<gift name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly' />
+<gift name='Air Walk' memrz='0' level='4' desc='Subject treads on air as if solid (climb at 45-degree angle)' />
+<gift name='Control Winds' memrz='0' level='5' desc='Change wind direction and speed' />
+<gift name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts' />
+<gift name='Control Weather' memrz='0' level='7' desc='Changes weather in local area' />
+<gift name='Whirlwind' memrz='0' level='8' desc='Cyclone inflicts damage and can pick up creatures' />
+<gift name='Elemental Swarm' memrz='0' level='9' desc='(Air spell only) Summons 2d4 Large, 1d4 Huge elementals' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Animal Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Calm Animals' memrz='0' level='1' desc='Calms 2d4 +1/level HD of animals, beasts, and magical beasts' />
+<gift name='Hold Animal' memrz='0' level='2' desc='Hold one animal helpless; 1 round/level' />
+<gift name='Dominate Animal' memrz='0' level='3' desc='Subject animal obeys silent mental commands' />
+<gift name='Repel Vermin' memrz='0' level='4' desc='Insects stay 10 ft. away' />
+<gift name='Commune with Nature' memrz='0' level='5' desc='Learn about terrain for one mile/level' />
+<gift name='Antilife Shell' memrz='0' level='6' desc='10-ft. field hedges out living creatures' />
+<gift name='Animal Shapes' memrz='0' level='7' desc='One ally/level polymorphs into chosen animal' />
+<gift name='Creeping Doom' memrz='0' level='8' desc='Carpet of insects attacks at your command' />
+<gift name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Chaos Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Protection from Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
+<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures' />
+<gift name='Magic Circle against Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
+<gift name='Chaos Hammer' memrz='0' level='4' desc='Damages and staggers lawful creatures' />
+<gift name='Dispel Law' memrz='0' level='5' desc='+4 bonus against attacks by lawful creatures' />
+<gift name='Animate Objects' memrz='0' level='6' desc='Objects attack your foes' />
+<gift name='Word of Chaos' memrz='0' level='7' desc='Kills, confuses, stuns, or deafens nonchaotic subjects' />
+<gift name='Cloak of Chaos' memrz='0' level='8' desc='+4 AC, +4 resistance, SR 25 against lawful spells' />
+<gift name='Summon Monster IX' memrz='0' level='9' desc='(Chaos spell only) Calls outsider to fight for you' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Death Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds' />
+<gift name='Death Knell' memrz='0' level='2' desc='Kill dying creature and gain 1d8 temp. hp, +2 Str, and +1 caster level' />
+<gift name='Animate Dead' memrz='0' level='3' desc='Creates undead skeletons and zombies' />
+<gift name='Death Ward' memrz='0' level='4' desc='Grants immunity to death spells and effects' />
+<gift name='Slay Living' memrz='0' level='5' desc='Touch attack kills subject' />
+<gift name='Create Undead' memrz='0' level='6' desc='Ghouls, shadows, ghasts, wights, or wraiths' />
+<gift name='Destruction' memrz='0' level='7' desc='Kills subject and destroys remains' />
+<gift name='Create Greater Undead' memrz='0' level='8' desc='Mummies, spectres, vampires, or ghosts' />
+<gift name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Destruction Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Inflict Light Wounds' memrz='0' level='1' desc='Touch attack, 1d8 +1/level damage (max +5)' />
+<gift name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures' />
+<gift name='Contagion' memrz='0' level='3' desc='Infects subject with chosen disease' />
+<gift name='Inflict Critical Wounds' memrz='0' level='4' desc='Touch attack, 4d8 +1/level damage (max +20)' />
+<gift name='Circle of Doom' memrz='0' level='5' desc='Deals 1d8 +1/level damage in all directions' />
+<gift name='Harm' memrz='0' level='6' desc='Subject loses all but 1d4 hp' />
+<gift name='Disintegrate' memrz='0' level='7' desc='Makes one creature or object vanish' />
+<gift name='Earthquake' memrz='0' level='8' desc='Intense tremor shakes 5-ft./level radius' />
+<gift name='Implosion' memrz='0' level='9' desc='Kills one creature/round' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Earth Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Magic Stone' memrz='0' level='1' desc='Three stones become +1 projectiles, 1d6+1 damage' />
+<gift name='Soften Earth and Stone' memrz='0' level='2' desc='Turns stone to clay or dirt to sand or mud' />
+<gift name='Stone Shape' memrz='0' level='3' desc='Sculpts stone into any form' />
+<gift name='Spike Stones' memrz='0' level='4' desc='Creatures in area take 1d8 damage, may be slowed' />
+<gift name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped' />
+<gift name='Stoneskin' memrz='0' level='6' desc='Stops blows, cuts, stabs, and slashes' />
+<gift name='Earthquake' memrz='0' level='7' desc='Intense tremor shakes 5-ft./level radius' />
+<gift name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron' />
+<gift name='Elemental Swarm' memrz='0' level='9' desc='(Earth spell only) Summons 2d4 Large, 1d4 Huge elementals' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Evil Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Protection from Good' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
+<gift name='Desecrate' memrz='0' level='2' desc='Fills area with negative energy, making undead stronger' />
+<gift name='Magic Circle against Good' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
+<gift name='Unholy Blight' memrz='0' level='4' desc='Damages and sickens good creatures' />
+<gift name='Dispel Good' memrz='0' level='5' desc='+4 bonus against attacks by good creatures' />
+<gift name='Create Undead' memrz='0' level='6' desc='Ghouls, shadows, ghasts, wights, or wraiths' />
+<gift name='Blasphemy' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonevil subjects' />
+<gift name='Unholy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, SR 25 against good spells' />
+<gift name='Summon Monster IX' memrz='0' level='9' desc='(Evil spell only) Calls outsider to fight for you' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Fire Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max 5d4)' />
+<gift name='Produce Flame' memrz='0' level='2' desc='1d4 +1/two levels damage, touch or thrown' />
+<gift name='Resist Elements' memrz='0' level='3' desc='Ignore first 12 damage from one energy type (cold or fire only) each round' />
+<gift name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft. Passing through wall deals 2d6 +1/level' />
+<gift name='Fire Shield' memrz='0' level='5' desc='Creatures attacking you take fire damage; you are protected from heat or cold' />
+<gift name='Fire Seeds' memrz='0' level='6' desc='Acorns and berries become grenades and bombs' />
+<gift name='Fire Storm' memrz='0' level='7' desc='Deals 1d6 fire damage/level' />
+<gift name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round' />
+<gift name='Elemental Swarm' memrz='0' level='9' desc='(Fire spell only) Summons 2d4 Large, 1d4 Huge elementals' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Good Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Protection from Evil' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
+<gift name='Aid' memrz='0' level='2' desc='+1 attack, +1 on saves against fear, 1d6 temporary hit points' />
+<gift name='Magic Circle against Evil' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
+<gift name='Holy Smite' memrz='0' level='4' desc='Damages and blinds evil creatures' />
+<gift name='Dispel Evil' memrz='0' level='5' desc='+4 bonus against attacks by evil creatures' />
+<gift name='Blade Barrier' memrz='0' level='6' desc='Blades encircling you deal 1d6 damage/level' />
+<gift name='Holy Word' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nongood subjects' />
+<gift name='Holy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against evil spells' />
+<gift name='Summon Monster IX' memrz='0' level='9' desc='(Good spell only) Calls outsider to fight for you' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Healing Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Cure Light Wounds' memrz='0' level='1' desc='Cures 1d8 +1/level damage (max +5)' />
+<gift name='Cure Moderate Wounds' memrz='0' level='2' desc='Cures 2d8 +1/level damage (max +10)' />
+<gift name='Cure Serious Wounds' memrz='0' level='3' desc='Cures 3d8 +1/level damage (max +15)' />
+<gift name='Cure Critical Wounds' memrz='0' level='4' desc='Cures 4d8 +1/level damage (max +20)' />
+<gift name='Healing Circle' memrz='0' level='5' desc='Cures 1d8 +1/level damage in all directions' />
+<gift name='Heal' memrz='0' level='6' desc='Cures all damage, diseases, and mental conditions' />
+<gift name='Regenerate' memrz='0' level='7' desc='Subjects severed limbs grow back' />
+<gift name='Mass Heal' memrz='0' level='8' desc='As heal, but with several subjects' />
+<gift name='True Resurrection' memrz='0' level='9' desc='As resurrection, plus remains are not needed' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Knowledge Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft' />
+<gift name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts' />
+<gift name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level' />
+<gift name='Divination' memrz='0' level='4' desc='Provides useful advice on to specific proposed actions' />
+<gift name='True Seeing' memrz='0' level='5' desc='See all things as they really are' />
+<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
+<gift name='Legend Lore' memrz='0' level='7' desc='Learn tales about a person, place, or thing' />
+<gift name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object' />
+<gift name='Foresight' memrz='0' level='9' desc='6th sense warns of impending danger' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Law Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Protection from Chaos' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders' />
+<gift name='Calm Emotions' memrz='0' level='2' desc='Calms 1d6 creatures/level, negating emotion effects' />
+<gift name='Magic Circle against Chaos' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level' />
+<gift name='Orders Wrath' memrz='0' level='4' desc='Damages and dazes chaotic creatures' />
+<gift name='Dispel Chaos' memrz='0' level='5' desc='+4 bonus against attacks by chaotic creatures' />
+<gift name='Hold Monster' memrz='0' level='6' desc='As hold person, but any creature' />
+<gift name='Dictum' memrz='0' level='7' desc='Kills, paralyzes, weakens, or dazes nonlawful subjects' />
+<gift name='Shield of Law' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against chaotic spells' />
+<gift name='Summon Monster IX' memrz='0' level='9' desc='(Law spell only) Calls outsider to fight for you' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Luck Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Entropic Shield' memrz='0' level='1' desc='Ranged attacks against you suffer 20% miss chance' />
+<gift name='Aid' memrz='0' level='2' desc='+1 attack, +1 against fear, 1d8 temporary hit points' />
+<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
+<gift name='Freedom of Movement' memrz='0' level='4' desc='Subject moves normally despite impediments' />
+<gift name='Break Enchantment' memrz='0' level='5' desc='Frees subjects from enchantments, alterations, curses, and petrification' />
+<gift name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double' />
+<gift name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster' />
+<gift name='Holy Aura' memrz='0' level='8' desc='+4 AC, +4 resistance, and SR 25 against evil spells' />
+<gift name='Miracle' memrz='0' level='9' desc='Requests a deitys intercession' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Magic Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura' />
+<gift name='Identify' memrz='0' level='2' desc='Determines single feature of magic item' />
+<gift name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects' />
+<gift name='Imbue with Spell Ability' memrz='0' level='4' desc='Transfer spells to subject' />
+<gift name='Spell Resistance' memrz='0' level='5' desc='Subject gains +12 +1/level SR' />
+<gift name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft' />
+<gift name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster' />
+<gift name='Protection from Spells' memrz='0' level='8' desc='Confers +8 resistance bonus' />
+<gift name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Plant Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Entangle' memrz='0' level='1' desc='Plants entangle everyone in 40-ft.-radius circle' />
+<gift name='Barkskin' memrz='0' level='2' desc='Grants +3 natural armor bonus (or higher)' />
+<gift name='Plant Growth' memrz='0' level='3' desc='Grows vegetation, improves crops' />
+<gift name='Control Plants' memrz='0' level='4' desc='Talk to and control plants and fungi' />
+<gift name='Wall of Thorns' memrz='0' level='5' desc='Thorns damage anyone who tries to pass' />
+<gift name='Repel Wood' memrz='0' level='6' desc='Pushes away wooden objects' />
+<gift name='Changestaff' memrz='0' level='7' desc='Your staff becomes a treant on command' />
+<gift name='Command Plants' memrz='0' level='8' desc='Plants animate and vegetation entangles' />
+<gift name='Shambler' memrz='0' level='9' desc='Summons 1d4+2 shambling mounds to fight for you' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Protection Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Sanctuary' memrz='0' level='1' desc='Opponents cannot attack you, and you cannot attack' />
+<gift name='Shield Other' memrz='0' level='2' desc='You take half of subjects damage' />
+<gift name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy' />
+<gift name='Spell Immunity' memrz='0' level='4' desc='Subject is immune to one spell/four levels' />
+<gift name='Spell Resistance' memrz='0' level='5' desc='Subject gains +12 +1/level SR' />
+<gift name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft' />
+<gift name='Repulsion' memrz='0' level='7' desc='Creatures cannot approach you' />
+<gift name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying' />
+<gift name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Strength Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type' />
+<gift name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level' />
+<gift name='Magic Vestment' memrz='0' level='3' desc='Armor or shield gains +1 enhancement/three levels' />
+<gift name='Spell Immunity' memrz='0' level='4' desc='Subject is immune to one spell/four levels' />
+<gift name='Righteous Might' memrz='0' level='5' desc='Your size increases, and you gain +4 Str' />
+<gift name='Stoneskin' memrz='0' level='6' desc='Stops blows, cuts, stabs, and slashes' />
+<gift name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples' />
+<gift name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes' />
+<gift name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys grasping hand, but stronger' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Sun Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type (cold or fire only)' />
+<gift name='Heat Metal' memrz='0' level='2' desc='Make metal so hot it damages those that touch it' />
+<gift name='Searing Light' memrz='0' level='3' desc='Ray deals 1d8/two levels, more against undead' />
+<gift name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold' />
+<gift name='Flame Strike' memrz='0' level='5' desc='Smite foes with divine fire (1d8/level)' />
+<gift name='Fire Seeds' memrz='0' level='6' desc='Acorns and berries become grenades and bombs' />
+<gift name='Sunbeam' memrz='0' level='7' desc='Beam blinds and deals 3d6 damage' />
+<gift name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage' />
+<gift name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Travel Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed' />
+<gift name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type)' />
+<gift name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90' />
+<gift name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb' />
+<gift name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere' />
+<gift name='Find the Path' memrz='0' level='6' desc='Shows most direct way to a location' />
+<gift name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival' />
+<gift name='Phase Door' memrz='0' level='8' desc='Invisible passage through wood or stone' />
+<gift name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Trickery Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Change Self' memrz='0' level='1' desc='Change own appearance' />
+<gift name='Invisibility' memrz='0' level='2' desc='Subject invisible 10 min./level or until it attacks' />
+<gift name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying' />
+<gift name='Confusion' memrz='0' level='4' desc='Makes subjects behave oddly for 1 round/level' />
+<gift name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion' />
+<gift name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double' />
+<gift name='Screen' memrz='0' level='7' desc='Illusion hides area from vision, scrying' />
+<gift name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else' />
+<gift name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      War Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus' />
+<gift name='Spiritual Weapon' memrz='0' level='2' desc='Magical weapon attacks on its own' />
+<gift name='Magic Vestment' memrz='0' level='3' desc='Armor or shield gains +1 enhancement/three levels' />
+<gift name='Divine Power' memrz='0' level='4' desc='You gain attack bonus, 18 Str, and 1 hp/level' />
+<gift name='Flame Strike' memrz='0' level='5' desc='Smite foes with divine fire (1d6 damage/level)' />
+<gift name='Blade Barrier' memrz='0' level='6' desc='Blades encircling you deal 1d6 damage/level' />
+<gift name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp' />
+<gift name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures' />
+<gift name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name='      Water Domain Spells' memrz='0' level=' ' desc=' ' />
+<gift name='============================' memrz='0' level=' ' desc=' ' />
+<gift name=' ' memrz='0' level=' ' desc=' ' />
+<gift name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you' />
+<gift name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision' />
+<gift name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater' />
+<gift name='Control Water' memrz='0' level='4' desc='Raise, lower, or part bodies of water' />
+<gift name='Ice Storm' memrz='0' level='5' desc='Hail deals 5d6 damage in cylinder 40 ft. across' />
+<gift name='Cone of Cold' memrz='0' level='6' desc='1d6 cold damage/level' />
+<gift name='Acid Fog' memrz='0' level='7' desc='Fog deals 2d6/round acid damage for 1round/level' />
+<gift name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft' />
+<gift name='Elemental Swarm' memrz='0' level='9' desc='(Water spell only) Summons 2d4 Large, 1d4 Huge elementals' />
+</divine>
--- a/data/dnd3e/dnd3efeats.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3efeats.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,558 +1,558 @@
-<feats>
-     <feat name="A Thousand Furs" type="Special" desc="Touched by the Gods page 71"/>
-     <feat name="Acrobatic" type="General" desc="Song and Silence page 38"/>
-     <feat name="Acrobatic (Legends and Lairs version)" type="General" desc="Traps and Treachery page 34"/>
-     <feat name="Airy Gallop" type="Special" desc="Dragon Magazine d20 Special-Annual 6 page 65"/>
-     <feat name="Alertness" type="General" desc="Players Handbook page 80"/>
-     <feat name="Alluring" type="General" desc="Song and Silence page 38"/>
-     <feat name="Ambidexterity" type="General" desc="Players Handbook page 80"/>
-     <feat name="Ancient Lineage" type="General" desc="The Taan page 81"/>
-     <feat name="Arcane Defense" type="General" desc="Tome and Blood page 38"/>
-     <feat name="Arcane Preparation" type="General" desc="Tome and Blood page 38"/>
-     <feat name="Arcane Schooling" type="General" desc="Forgotten Realms Campaign Setting page 33"/>
-     <feat name="Armor Proficiency (Heavy)" type="General" desc="Players Handbook page80"/>
-     <feat name="Armor Proficiency (Light)" type="General" desc="Players Handbook page 80"/>
-     <feat name="Armor Proficiency (Medium)" type="General" desc="Players Handbook page 80"/>
-     <feat name="Art of Fascination" type="Ancestor" desc="Oriental Adventures page 60"/>
-     <feat name="Arterial Strike" type="General" desc="Song and Silence page 38"/>
-     <feat name="Artist" type="General" desc="Forgotten Realms Campaign Setting page 33"/>
-     <feat name="Artist" type="Ancestor" desc="Oriental Adventures page 61"/>
-     <feat name="Athletic" type="General" desc="Song and Silence page 38"/>
-     <feat name="Attention to Detail" type="Ancestor" desc="Oriental Adventures page 61"/>
-     <feat name="Attune Gem" type="Item Creation" desc="Magic of Faerun page 21"/>
-     <feat name="Augment Construct" type="Psionic" desc="Dragon Magazine 287 page 54"/>
-     <feat name="Augment Summoning" type="General" desc="Tome and Blood page 39"/>
-     <feat name="Aura of Serenity" type="Mystic Warrior" desc="Mystic Warriors page 112"/>
-     <feat name="Battle Howl" type="General" desc="Touched by the Gods page 109"/>
-     <feat name="Battle Roar" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
-     <feat name="Blind Casting" type="General" desc="Dungeons page 81"/>
-     <feat name="Blind-Fight" type="General" desc="Players Handbook page 80"/>
-     <feat name="Blindsight 5-foot Radius" type="General" desc="Sword and Fist page 5"/>
-     <feat name="Blood Frenzy" type="General" desc="The Taan page 81"/>
-     <feat name="Blood Sorcerer" type="Ancestor" desc="Oriental Adventures page 61"/>
-     <feat name="Blooded" type="General" desc="Forgotten Realms Campaign Setting page 33"/>
-     <feat name="Bloodline of Fire" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Body Fuel" type="Psionic" desc="Psionics Handbook page 24"/>
-     <feat name="Bootlicker" type="General" desc="Evil page 58"/>
-     <feat name="Born Duelist" type="Ancestor" desc="Oriental Adventures page 61"/>
-     <feat name="Breeze Dance" type="Fighting Stance" desc="Mystic Warriors page 112"/>
-     <feat name="Brew Poison" type="Item Creation" desc="Traps and Treachery page 45"/>
-     <feat name="Brew Potion" type="Item Creation" desc="Players Handbook page 80"/>
-     <feat name="Bribery" type="General" desc="Evil page 58"/>
-     <feat name="Bullheaded" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Cabalistic Spellcasting" type="Metamagic" desc="Sovereign Stone Campaign Sourcebook page 60"/>
-     <feat name="Casing Sense" type="General" desc="Traps and Treachery page 34"/>
-     <feat name="Chain Power" type="Metapsionic" desc="Dragon Magazine 287 page 54"/>
-     <feat name="Chain Spell" type="Metamagic" desc="Tome and Blood page 39"/>
-     <feat name="Chain Spell (Scarred Lands version)" type="Metamagic" desc="Relics and Rituals page 25"/>
-     <feat name="Change Instruction" type="Special" desc="Demonology page 41"/>
-     <feat name="Chariot Archery" type="General" desc="Sword and Fist page 78"/>
-     <feat name="Chariot Charge" type="General" desc="Sword and Fist page 79"/>
-     <feat name="Chariot Combat" type="General" desc="Sword and Fist page 78"/>
-     <feat name="Chariot Sideswipe" type="General" desc="Sword and Fist page 79"/>
-     <feat name="Chariot Trample" type="General" desc="Sword and Fist page 78"/>
-     <feat name="Charlatan" type="General" desc="Song and Silence page 38"/>
-     <feat name="Chink in the Armor" type="General" desc="Song and Silence page 38"/>
-     <feat name="Choke Hold" type="General" desc="Oriental Adventures page 61"/>
-     <feat name="Circle Kick" type="General" desc="Sword and Fist page 5"/>
-     <feat name="Claws/Fangs" type="Infernal" desc="Evil page 24"/>
-     <feat name="Cleave" type="General" desc="Players Handbook page 80"/>
-     <feat name="Close-Order Fighting" type="Special" desc="Dragon Lords of Melnibone page 63"/>
-     <feat name="Close-Quarters Fighting" type="General" desc="Sword and Fist page 5"/>
-     <feat name="Cloud Running" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Combat Agility" type="General" desc="Dragon Magazine 284 page 123"/>
-     <feat name="Combat Casting" type="General" desc="Players Handbook page 80"/>
-     <feat name="Combat Manifestation" type="Psionic" desc="Psionics Handbook page 24"/>
-     <feat name="Combat Reflexes" type="General" desc="Players Handbook page 80"/>
-     <feat name="Combat Sense" type="General" desc="The Taan page 81"/>
-     <feat name="Conjure Mastery" type="Eldritch" desc="The Book of Eldritch Might page 4"/>
-     <feat name="Construct Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
-     <feat name="Controlled Breathing" type="General" desc="Dungeons page 81"/>
-     <feat name="Cool Head" type="General" desc="Oriental Adventures page 61"/>
-     <feat name="Cooperative Spell" type="Metamagic" desc="Tome and Blood page 39"/>
-     <feat name="Cooperative Spellcasting" type="Metamagic" desc="Sovereign Stone Campaign Sourcebook page 60"/>
-     <feat name="Cosmopolitan" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Courteous Magocracy" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Crab Walk" type="Fighting Stance" desc="Mystic Warriors page 112"/>
-     <feat name="Craft Anaema Tool" type="Item Creation" desc="Mythic Races page 15"/>
-     <feat name="Craft Crystal Capacitor" type="Item Creation" desc="Psionics Handbook page 24"/>
-     <feat name="Craft Crystal Weapon" type="Item Creation" desc="Oriental Adventures page 61"/>
-     <feat name="Craft Dorje" type="Item Creation" desc="Psionics Handbook page 24"/>
-     <feat name="Craft Kirpan" type="Item Creation" desc="Mystic Warriors page 112"/>
-     <feat name="Craft Magic Arms and Armor" type="Item Creation" desc="Players Handbook page 81"/>
-     <feat name="Craft Magic Trap" type="Item Creation" desc="Traps and Treachery page 34"/>
-     <feat name="Craft Mystic Talisman" type="Item Creation" desc="Mystic Warriors page 112"/>
-     <feat name="Craft Named Weapon" type="Item Creation" desc="Mystic Warriors page 112"/>
-     <feat name="Craft Psionic Arms and Armor" type="Item Creation" desc="Psionics Handbook page 24"/>
-     <feat name="Craft Rod" type="Item Creation" desc="Players Handbook page 81"/>
-     <feat name="Craft Staff" type="Item Creation" desc="Players Handbook page 81"/>
-     <feat name="Craft Talisman" type="Item Creation" desc="Oriental Adventures page 61"/>
-     <feat name="Craft Universal Item" type="Item Creation" desc="Psionics Handbook page 24"/>
-     <feat name="Craft Vitus Amulet" type="Item Creation" desc="Mystic Warriors page 113"/>
-     <feat name="Craft Wand" type="Item Creation" desc="Players Handbook page 81"/>
-     <feat name="Craft Wondrous Item" type="Item Creation" desc="Players Handbook page 81"/>
-     <feat name="Create Graft" type="Item Creation" desc="Touched by the Gods page 26"/>
-     <feat name="Create Portal" type="Item Creation" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Dance of the Dirk" type="Fighting Stance" desc="Mystic Warriors page 113"/>
-     <feat name="Darkvision" type="Infernal" desc="Evil page 24"/>
-     <feat name="Dash" type="General" desc="Song and Silence page 38"/>
-     <feat name="Daylight Adaptation" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Dead Shot" type="General" desc="Sovereign Stone Campaign Sourcebook page 60"/>
-     <feat name="Death Blow" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Deep Impact" type="Psionic" desc="Psionics Handbook page 25"/>
-     <feat name="Defensive Strike" type="General" desc="Oriental Adventures page 62"/>
-     <feat name="Defensive Throw" type="General" desc="Oriental Adventures page 62"/>
-     <feat name="Deflect Arrows" type="General" desc="Players Handbook page 81"/>
-     <feat name="Deflect Ranged Attack" type="General" desc="Dragon Magazine 274 page 60"/>
-     <feat name="Delay Power" type="Metapsionic" desc="Psionics Handbook page 25"/>
-     <feat name="Delay Spell" type="Metamagic" desc="Tome and Blood page 39"/>
-     <feat name="Dirty Fighting" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Disarm Mind" type="Psionic" desc="Psionics Handbook page 25"/>
-     <feat name="Discipline" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Discipline" type="Ancestor" desc="Oriental Adventures page 62"/>
-     <feat name="Disguise Spell" type="Metamagic" desc="Song and Silence page 38"/>
-     <feat name="Dismiss Demon" type="Special" desc="Demonlogy page 41"/>
-     <feat name="Divine Cleansing" type="Divine" desc="Defenders of the Faith page 19"/>
-     <feat name="Divine Might" type="Divine" desc="Defenders of the Faith page 19"/>
-     <feat name="Divine Perception" type="General" desc="Touched by the Gods page 34"/>
-     <feat name="Divine Resistance" type="Divine" desc="Defenders of the Faith page 19"/>
-     <feat name="Divine Shield" type="Divine" desc="Defenders of the Faith page 19"/>
-     <feat name="Divine Vengeance" type="Divine" desc="Defenders of the Faith page 20"/>
-     <feat name="Divine Vigor" type="Divine" desc="Defenders of the Faith page 20"/>
-     <feat name="Dodge" type="General" desc="Players Handbook page 81"/>
-     <feat name="Dreamspeaking" type="General" desc="The Book of Eldritch Might page 4"/>
-     <feat name="Drug Tolerance" type="General" desc="Caravan of Hope page 27"/>
-     <feat name="Dual Strike" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Eagle Claw Attack" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Earths Embrace" type="General" desc="Oriental Adventures page 62"/>
-     <feat name="Education" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Eidetic Memory" type="General" desc="Dungeons page 81"/>
-     <feat name="Element Resistance" type="Infernal" desc="Evil page 24"/>
-     <feat name="Empathy" type="General" desc="Traps and Treachery page 35"/>
-     <feat name="Empower Spell" type="Metamagic" desc="Players Handbook page 82"/>
-     <feat name="Empower Turning" type="Special" desc="Defenders of the Faith page 20"/>
-     <feat name="Enchant Stone" type="Item Creation" desc="The Taan page 81"/>
-     <feat name="Encode Stone" type="Item Creation" desc="Psionics Handbook page 25"/>
-     <feat name="Endurance" type="General" desc="Players Handbook page 82"/>
-     <feat name="Energy Admixture" type="Metamagic" desc="Tome and Blood page 39"/>
-     <feat name="Energy of Life" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Energy Substitution" type="Metamagic" desc="Tome and Blood page 40"/>
-     <feat name="Enlarge Power" type="Metapsionic" desc="Psionics Handbook page 25"/>
-     <feat name="Enlarge Spell" type="Metamagic" desc="Players Handbook page 82"/>
-     <feat name="Enspell Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
-     <feat name="Eschew Materials" type="Metamagic" desc="Tome and Blood page 40"/>
-     <feat name="Etch Object Rune" type="Item Creation" desc="The Book of Eldritch Might page 4"/>
-     <feat name="Ethran" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Exotic Weapon Proficiency" type="General" desc="Players Handbook page 82"/>
-     <feat name="Expert Tactician" type="General" desc="Song and Silence page 38"/>
-     <feat name="Expertise" type="General" desc="Players Handbook page 82"/>
-     <feat name="Extend Power" type="Metapsionic" desc="Psionics Handbook page 25"/>
-     <feat name="Extend Spell" type="Metamagic" desc="Players Handbook page 82"/>
-     <feat name="Extra Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
-     <feat name="Extra Music" type="General" desc="Song and Silence page 39"/>
-     <feat name="Extra Power" type="Psionic" desc="Dragon Magazine 287 page 55"/>
-     <feat name="Extra Slot" type="General" desc="Tome and Blood page 40"/>
-     <feat name="Extra Smiting" type="Special" desc="Defenders of the Faith page 20"/>
-     <feat name="Extra Spell" type="General" desc="Tome and Blood page 40"/>
-     <feat name="Extra Stunning Attacks" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Extra Turning" type="Special" desc="Players Handbook page 82 (rules: ppage 32 42)"/>
-     <feat name="Eye for Detail" type="General" desc="Traps and Treachery page 35"/>
-     <feat name="Eyes in the Back of Your Head" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Eyes of Calaam" type="Special" desc="Touched by the Gods page 59"/>
-     <feat name="Falling Star Strike" type="General" desc="Oriental Adventures page 62"/>
-     <feat name="Far Shot" type="General" desc="Players Handbook page 82"/>
-     <feat name="Fast Armor" type="General" desc="Dragon Magazine 284 page 123"/>
-     <feat name="Fast Rider" type="General" desc="Dragon Magazine 285 page 98"/>
-     <feat name="Fast Talker" type="General" desc="Traps and Treachery page 35"/>
-     <feat name="Fearsome and Fearless" type="Ancestor" desc="Oriental Adventures page 62"/>
-     <feat name="Feign Weakness" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Fell Shot" type="Psionic" desc="Psionics Handbook page 25"/>
-     <feat name="Firearms Drill" type="General" desc="Dragon Magazine d20 Special/Annual 6 page 70"/>
-     <feat name="Fists of Calaam" type="Special" desc="Touched by the Gods page 59"/>
-     <feat name="Fists of Iron" type="General" desc="Sword and Fist page 6"/>
-     <feat name="Fleet of Foot" type="General" desc="Song and Silence page 39"/>
-     <feat name="Flick of the Wrist" type="General" desc="Song and Silence page 39"/>
-     <feat name="Flight" type="Infernal" desc="Evil page 25"/>
-     <feat name="Flying Kick" type="General] -Oriental Adventures page 62" desc=""/>
-     <feat name="Foe Hunter" type="Fighter General" desc="Forgotten Realms Campaign Setting page 34"/>
-     <feat name="Forester" type="General" desc="Forgotten Realms Campaign Setting page 35"/>
-     <feat name="Forge Ring" type="Item Creation" desc="Players Handbook page 82"/>
-     <feat name="Fortify Power" type="Metapsionic" desc="Dragon Magazine 287 page 55"/>
-     <feat name="Freezing the Lifeblood" type="General" desc="Oriental Adventures page 62 "/>
-     <feat name="Gifted General" type="Ancestor" desc="Oriental Adventures page 62"/>
-     <feat name="Golden Tongue" type="General" desc="Dungeons page 81"/>
-     <feat name="Grace Under Pressure" type="General" desc="Dungeons page 81"/>
-     <feat name="Grappling Block" type="General" desc="Oriental Adventures page 63"/>
-     <feat name="Grasshopper Strike" type="General" desc="Dragon Magazine 279 page 63"/>
-     <feat name="Great Cleave" type="General" desc="Players Handbook page 82"/>
-     <feat name="Great Crafter" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Great Diplomat" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Great Fortitude" type="General" desc="Players Handbook page 82"/>
-     <feat name="Great Ki Shout" type="General" desc="Oriental Adventures page 63"/>
-     <feat name="Great Stamina" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Great Sunder" type="Psionic" desc="Psionics Handbook page 26"/>
-     <feat name="Great Teamwork" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Greater Power Penetration" type="Psionic" desc="Psionics Handbook page 26"/>
-     <feat name="Greater Psionic Focus" type="Psionic" desc="Psionics Handbook page 26"/>
-     <feat name="Greater Spell Focus" type="General" desc="Tome and Blood page 40"/>
-     <feat name="Greater Spell Penetration" type="General" desc="Tome and Blood page 40"/>
-     <feat name="Green Ear" type="General" desc="Song and Silence page 39"/>
-     <feat name="Green Viper Style" type="Fighting Stance" desc="Mystic Warriors page 113"/>
-     <feat name="Hammer Fist" type="General" desc="Dragon Magazine 279 page 63"/>
-     <feat name="Hamstring" type="General" desc="Song and Silence page 39"/>
-     <feat name="Heavy Scarring" type="General" desc="The Taan page 82"/>
-     <feat name="Heighten Power" type="Metapsionic" desc="Psionics Handbook page 26"/>
-     <feat name="Heighten Spell" type="Metamagic" desc="Players Handbook page 82"/>
-     <feat name="Heighten Turning" type="Special" desc="Defenders of the Faith page 20"/>
-     <feat name="Heroic Destiny" type="Special" desc="Touched by the Gods page 109"/>
-     <feat name="Hide Power" type="Metapsionic" desc="Psionics Handbook page 26"/>
-     <feat name="Hide Spell" type="Metamagic" desc="Relics and Rituals page 25"/>
-     <feat name="Hill Fighter" type="General" desc="Dragon Magazine 285 page 98"/>
-     <feat name="Hold the Line" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Honest Merchant" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Horse Nomad" type="Fighter General" desc="Forgotten Realms Campaign Setting page 35"/>
-     <feat name="Iaijutsu Master" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Immortality" type="Infernal" desc="Evil page 25"/>
-     <feat name="Immunity" type="Infernal" desc="Evil page 25"/>
-     <feat name="Imp" type="Infernal" desc="Evil page 25"/>
-     <feat name="Improved Aid" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Improved Alertness" type="General" desc="Dungeons page 82"/>
-     <feat name="Improved Bull Rush" type="General" desc="Players Handbook page 82"/>
-     <feat name="Improved Counterspell" type="General" desc="Forgotten Realms Campaign Setting page 35"/>
-     <feat name="Improved Critical" type="General" desc="Players Handbook page 82"/>
-     <feat name="Improved Disarm" type="General" desc="Players Handbook page 83"/>
-     <feat name="Improved Endurance" type="General" desc="Dungeons page 82"/>
-     <feat name="Improved Familiar" type="General" desc="Tome and Blood page 40"/>
-     <feat name="Improved Feint" type="General" desc="Evil page 59"/>
-     <feat name="Improved Flight" type="Infernal" desc="Evil page 25"/>
-     <feat name="Improved Grab" type="General" desc="Mythic Races page 77"/>
-     <feat name="Improved Grapple" type="General" desc="Oriental Adventures page 63"/>
-     <feat name="Improved Initiative" type="General" desc="Players Handbook page 83"/>
-     <feat name="Improved Knockout Attack" type="General" desc="Traps and Treachery page 35"/>
-     <feat name="Improved Low Blow" type="General" desc="Dragon Magazine 285 page 33"/>
-     <feat name="Improved Mounted Archery" type="General" desc="Dragon Magazine 285 page 99"/>
-     <feat name="Improved Mounted Combat" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
-     <feat name="Improved Multiweapon Fighting" type="General" desc="Mythic Races page 137"/>
-     <feat name="Improved Overrun" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Improved Psicrystal" type="Psionic" desc="Psionics Handbook page 26"/>
-     <feat name="Improved Ranged Sneak Attack" type="General" desc="Traps and Treachery page 36"/>
-     <feat name="Improved Rapid Shot" type="General" desc="Dragon Magazine 275 page 41"/>
-     <feat name="Improved Regeneration" type="Infernal" desc="Evil page 25"/>
-     <feat name="Improved Shield Bash" type="General" desc="Defenders of the Faith page 20"/>
-     <feat name="Improved Sneak Attack" type="General" desc="Traps and Treachery page 36"/>
-     <feat name="Improved Sunder" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Improved Trample" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
-     <feat name="Improved Trip" type="General" desc="Players Handbook page 83"/>
-     <feat name="Improved Two-Weapon Fighting" type="General" desc="Players Handbook page 83"/>
-     <feat name="Improved Unarmed Strike" type="General" desc="Players Handbook page 83"/>
-     <feat name="Improvise Thieves Tools" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Improvised Weapon" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
-     <feat name="Increased Carrying Capacity" type="General" desc="Dungeons page 82"/>
-     <feat name="Increased Movement" type="Infernal" desc="Evil page 26"/>
-     <feat name="Inertial Armor" type="Psionic" desc="Psionics Handbook page 26"/>
-     <feat name="Infernal Pact" type="Infernal" desc="Evil page 26"/>
-     <feat name="Infernal Soul" type="Infernal" desc="Evil page 26"/>
-     <feat name="Information Exchange" type="Special" desc="Touched by the Gods page 7"/>
-     <feat name="Innate Spell" type="General" desc="Tome and Blood page 41"/>
-     <feat name="Inner Peace" type="Mystic Warrior" desc="Mystic Warriors page 113"/>
-     <feat name="Inner Strength" type="Psionic" desc="Psionics Handbook page 26"/>
-     <feat name="Inscribe Magical Tattoo" type="Item Creation" desc="Relics and Rituals page 198"/>
-     <feat name="Inscribe Rune" type="Item Creation" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Insidious Magic" type="Metamagic" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Invisibility" type="Infernal" desc="Evil page 27"/>
-     <feat name="Ironbone" type="Special" desc="Creature Collection page 71"/>
-     <feat name="Ironskin" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Iron Will" type="General" desc="Players Handbook page 83"/>
-     <feat name="Item Image" type="Eldritch" desc="The Book of Eldritch Might page 4"/>
-     <feat name="Jack of All Trades" type="General" desc="Song and Silence page 40"/>
-     <feat name="Kamis Intuition" type="Ancestor" desc="Oriental Adventures page 63"/>
-     <feat name="Karmic Strike" type="General" desc="Oriental Adventures page 63"/>
-     <feat name="Karmic Twin" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Keen Intellect" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Keen Vision" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Ki Projection" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Ki Shout" type="General" desc="Oriental Adventures page 64"/>
-     <feat name="Knock-Down" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Knockout Attack" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Knowledgeable" type="General" desc="Dungeons page 82"/>
-     <feat name="Lace Spell: Elemental Energies" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
-     <feat name="Lace Spell: Enemy Bane" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
-     <feat name="Lace Spell: Holy/Unholy" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
-     <feat name="Lace Spell: Lawful/Chaotic" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
-     <feat name="Lead Missile Fire" type="General" desc="Evil page 59"/>
-     <feat name="Leadership" type="General" desc="Players Handbook page 83 (rules: Dungeon Masters Guide page 45)"/>
-     <feat name="Lightning Fists" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Lightning Reflexes" type="General" desc="Players Handbook page 83"/>
-     <feat name="Light Sleeper" type="General" desc="Dungeons page 82"/>
-     <feat name="Lingering Song" type="General" desc="Song and Silence page 40"/>
-     <feat name="Lion Spy" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Lions Rage" type="Mystic Warrior Stance" desc="Mystic Warriors page 113"/>
-     <feat name="Living Shield" type="General" desc="Evil page 58"/>
-     <feat name="Low Blow" type="General" desc="Dragon Magazine 285 page 33"/>
-     <feat name="Luck of Heroes" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Luck of Heroes" type="Ancestor" desc="Oriental Adventures page 64 "/>
-     <feat name="Magekiss" type="Metamagic" desc="Traps and Treachery page 22"/>
-     <feat name="Magic in the Blood" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Magic Item" type="Infernal" desc="Evil page 27"/>
-     <feat name="Magical Artisan" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Magical Artisan" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Magical Talent" type="General" desc="The Book of Eldritch Might page 6"/>
-     <feat name="Magical Training" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Magistrates Mind" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Mantis Leap" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Manufacture Magic Poison" type="Item Creation" desc="The Book of Eldritch Might page 6"/>
-     <feat name="Many Masks" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Martial Weapon Proficiency" type="General" desc="Players Handbook page 83"/>
-     <feat name="Master Dorje" type="Metapsionic" desc="Psionics Handbook page 26"/>
-     <feat name="Maximize Power" type="Metapsionic" desc="Psionics Handbook page 26"/>
-     <feat name="Maximize Spell" type="Metamagic" desc="Players Handbook page 83"/>
-     <feat name="Mechanical Aptitude" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Mental Adversary" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Mental Leap" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Mercantile Background" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Metacreative" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Militia" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
-     <feat name="Mind Blind" type="Psionic" desc="Dragon Magazine 287 page 55"/>
-     <feat name="Mind Over Body" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Mind Trap" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Mirror Sight" type="Eldritch" desc="The Book of Eldritch Might page 6"/>
-     <feat name="Mobility" type="General" desc="Players Handbook page 83"/>
-     <feat name="Monkey Grip" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Mounted Archery" type="General" desc="Players Handbook page 83"/>
-     <feat name="Mounted Combat" type="General" desc="Players Handbook page 83"/>
-     <feat name="Moving Meditation" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Multiattack (Taan version)" type="General" desc="The Taan page 83"/>
-     <feat name="Multicultural" type="General" desc="Song and Silence page 40"/>
-     <feat name="Multiple Limbs" type="Infernal" desc="Evil page 27"/>
-     <feat name="Multiweapon Fighting (Legends and Lairs version)" type="General" desc="Mythic Races page 137"/>
-     <feat name="Natural Weaponry" type="General" desc="The Taan page 83"/>
-     <feat name="Nature Sense" type="Special" desc="Touched by the Gods page 71"/>
-     <feat name="Nerve Strikes" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Nobodys Fool" type="General" desc="Dragon Magazine 285 page 33"/>
-     <feat name="Obscure Lore" type="General" desc="Song and Silence page 40"/>
-     <feat name="Off-Hand Parry" type="General" desc="Sword and Fist page 7"/>
-     <feat name="Off-Handed" type="General" desc="Evil page 59"/>
-     <feat name="Onis Bane" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Pain Touch" type="General" desc="Sword and Fist page 8"/>
-     <feat name="Pebble Underfoot" type="General" desc="Dragon Magazine 279 page 63"/>
-     <feat name="Penetrate Hardness" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
-     <feat name="Perfect Memory" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Permanent Control" type="Special" desc="Demonology page 41"/>
-     <feat name="Pernicious Magic" type="Metamagic" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Persistent Power" type="Metapsionic" desc="Psionics Handbook page 27"/>
-     <feat name="Persistent Spell" type="Metamagic" desc="Tome and Blood page 42"/>
-     <feat name="Persuasive" type="General" desc="Song and Silence page 40"/>
-     <feat name="Pin Shield" type="General" desc="Sword and Fist page 8"/>
-     <feat name="Pinpoint Accuracy" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
-     <feat name="Point Blank Shot" type="General" desc="Players Handbook page 84"/>
-     <feat name="Poison Blood" type="Infernal" desc="Evil page 28"/>
-     <feat name="Poison Immunity" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Pounce" type="General" desc="Mythic Races page 77"/>
-     <feat name="Pounce and Strike" type="General" desc="Dragon Lords of Melnibone page 50"/>
-     <feat name="Power Attack" type="General" desc="Players Handbook page 84"/>
-     <feat name="Power Attack--Iaijutsu" type="Ancestor" desc="Oriental Adventures page 64"/>
-     <feat name="Power Attack--Shadowlands" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Power Lunge" type="General" desc="Sword and Fist page 8"/>
-     <feat name="Power Penetration" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Power Specialization" type="Psionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Power Touch" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Powerful Voice" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Precise Shot" type="General" desc="Players Handbook page 84"/>
-     <feat name="Primal Shout" type="General" desc="The Taan page 83"/>
-     <feat name="Prone Attack" type="General" desc="Sword and Fist page 8"/>
-     <feat name="Psionic Body" type="Psionic" desc="Psionics Handbook page 27"/>
-     <feat name="Psionic Charge" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psionic Defense" type="Psionic" desc="Dragon Magazine 287 page 54"/>
-     <feat name="Psionic Dodge" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psionic Energy Admixture" type="Metapsionic" desc="Dragon Magazine 287 page 55"/>
-     <feat name="Psionic Energy Substitution" type="Metapsionic" desc="Dragon Magazine 287 page 54"/>
-     <feat name="Psionic Fist" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psionic Focus" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psionic Metabolism" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psionic Shot" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psionic Weapon" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psychic Bastion" type="Psionic" desc="Psionics Handbook page 28"/>
-     <feat name="Psychic Inquisitor" type="Psionic" desc="Psionics Handbook page 29"/>
-     <feat name="Psychoanalyst" type="Psionic" desc="Psionics Handbook page 29"/>
-     <feat name="Purifying Light" type="General" desc="Mythic Races page 69"/>
-     <feat name="Pyro" type="General" desc="Song and Silence page 40"/>
-     <feat name="Quick Draw" type="General" desc="Players Handbook page 84"/>
-     <feat name="Quicken Power" type="Metapsionic" desc="Psionics Handbook page 29"/>
-     <feat name="Quicken Spell" type="Metamagic" desc="Players Handbook page 84"/>
-     <feat name="Quicken Summoning" type="Special" desc="Demonology page 41"/>
-     <feat name="Quicken Turning" type="Special" desc="Defenders of the Faith page 20"/>
-     <feat name="Quicker Than the Eye" type="General" desc="Song and Silence page 40"/>
-     <feat name="Quickstrike" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Rake" type="General" desc="Mythic Races page 77"/>
-     <feat name="Raking Nails" type="General" desc="Mystic Warriors page 113"/>
-     <feat name="Ranged Disarm" type="General" desc="Dragon Magazine 274 page 60"/>
-     <feat name="Ranged Pin" type="General" desc="Dragon Magazine 274 page 60"/>
-     <feat name="Ranged Sunder" type="General" desc="Dragon Magazine 274 page 60"/>
-     <feat name="Rapid Metabolism" type="Psionic" desc="Psionics Handbook page 29"/>
-     <feat name="Rapid Reload" type="General" desc="Sword and Fist page 9"/>
-     <feat name="Rapid Shot" type="General" desc="Players Handbook page 84"/>
-     <feat name="Ray Burst" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
-     <feat name="Ray Coning" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
-     <feat name="Ray Extension" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
-     <feat name="Ray Focus" type="General" desc="Dragon Magazine Annual 5 page 26"/>
-     <feat name="Ray Splitting" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
-     <feat name="Reactive Counterspell" type="General" desc="Magic of Faerun page 22"/>
-     <feat name="Reach Power" type="Metapsionic" desc="Dragon Magazine 287 page 55"/>
-     <feat name="Reach Spell" type="Metamagic" desc="Defenders of the Faith page 20"/>
-     <feat name="Reckless Offensive" type="General" desc="Enemies and Allies page 41"/>
-     <feat name="Recognize Omen" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
-     <feat name="Redirect Attacks" type="General" desc="Evil page 59"/>
-     <feat name="Regeneration" type="Infernal" desc="Evil page 28"/>
-     <feat name="Remain Conscious" type="General" desc="Sword and Fist page 9"/>
-     <feat name="Repeat Power" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Repeat Spell" type="Metamagic" desc="Tome and Blood page 41"/>
-     <feat name="Requiem" type="General" desc="Song and Silence page 40"/>
-     <feat name="Resculpt Mind" type="Psionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Resist Poison" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Resist Poison" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Resist Taint" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Return Shot" type="Psionic" desc="Psionics Handbook page 29"/>
-     <feat name="Ride-By-Attack" type="General" desc="Players Handbook page 84"/>
-     <feat name="Rot" type="Infernal" desc="Evil page 28"/>
-     <feat name="Roundabout Kick" type="General" desc="Oriental Adventures page 65"/>
-     <feat name="Run" type="General" desc="Players Handbook page 84 "/>
-     <feat name="Sacred Spell" type="Metamagic" desc="Defenders of the Faith page 20"/>
-     <feat name="Saddleback" type="Fighter General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Saddleback" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Sanctum Spell" type="Metamagic" desc="Tome and Blood page 41"/>
-     <feat name="Scent" type="General" desc="Dungeon Masters Guide page 81 (variant rule)"/>
-     <feat name="Scholar of Nature" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Scribe Scroll" type="Item Creation" desc="Players Handbook page 84"/>
-     <feat name="Scribe Tattoo" type="Item Creation" desc="Psionics Handbook page 29"/>
-     <feat name="Sculpt Power" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Sculpt Spell" type="Metamagic" desc="Tome and Blood page 42"/>
-     <feat name="Sea Legs" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Second Wind" type="General" desc="Sovereign Stone Campaign Sourcebook page 63"/>
-     <feat name="Set Spear" type="General" desc="Dragon Lords of Melnibone page 63"/>
-     <feat name="Shadow" type="General" desc="Song and Silence page 40"/>
-     <feat name="Shadow (Legends and Lairs version)" type="General" desc="Traps and Treachery page 37"/>
-     <feat name="Shadow Weave Magic" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Shapechange" type="Infernal" desc="Evil page 27"/>
-     <feat name="Shared Spellcasting" type="Metamagic" desc="Sovereign Stone Campaign Sourcebook page 63"/>
-     <feat name="Sharp-Shooting" type="General" desc="Sword and Fist page 9"/>
-     <feat name="Shield Charge" type="General" desc="Defenders of the Faith page 20"/>
-     <feat name="Shield Expert" type="General" desc="Sword and Fist page 9"/>
-     <feat name="Shield Proficiency" type="General" desc="Players Handbook page 85"/>
-     <feat name="Shot on the Run" type="General" desc="Players Handbook page 85"/>
-     <feat name="Side Step" type="General" desc="Mystic Warriors page 113"/>
-     <feat name="Signature Skill" type="General" desc="Traps and Treachery page 38"/>
-     <feat name="Signature Spell" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Silent Spell" type="Metamagic" desc="Players Handbook page 85"/>
-     <feat name="Silver Palm" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Silver Tongue" type="Ancestor" desc="Oriental Adventures page 65"/>
-     <feat name="Simple Weapon Proficiency" type="General" desc="Players Handbook page 85"/>
-     <feat name="Skill Focus" type="General" desc="Players Handbook page 85"/>
-     <feat name="Smooth Talk" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
-     <feat name="Smooth Talk" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Snake Blood" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Snatch Arrows" type="General" desc="Sword and Fist page 9"/>
-     <feat name="Snatch Weapon" type="General" desc="Song and Silence page 40"/>
-     <feat name="Soul of Honor" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Soul of Loyalty" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Soul of Sincerity" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Speed of Thought" type="Psionic" desc="Psionics Handbook page 29"/>
-     <feat name="Spell Focus" type="General" desc="Players Handbook page 85"/>
-     <feat name="Spell Girding" type="General" desc="Magic of Faerun page 22"/>
-     <feat name="Spell Mastery" type="Special" desc="Players Handbook page 85 (rules: page 54)"/>
-     <feat name="Spell Penetration" type="General" desc="Players Handbook page 85"/>
-     <feat name="Spell Power" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Spell Specialization" type="General" desc="Tome and Blood page 42"/>
-     <feat name="Spell Thematics" type="General" desc="Magic of Faerun page 22"/>
-     <feat name="Spellcaster Support" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Spellcasting Prodigy" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Spellfire Wielder" type="General" desc="Magic of Faerun page 23"/>
-     <feat name="Spirited Charge" type="General" desc="Players Handbook page 85"/>
-     <feat name="Split Psionic Ray" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Split Ray" type="Metamagic" desc="Tome and Blood page 42"/>
-     <feat name="Spook Animals" type="Special" desc="Dragon Magazine d20 Special/Annual 6 page 65"/>
-     <feat name="Spring Attack" type="General" desc="Players Handbook page 85"/>
-     <feat name="Staggering Blow" type="General" desc="Dragon Magazine 279 page 63"/>
-     <feat name="Stand Still" type="Psionic" desc="Psionics Handbook page 29"/>
-     <feat name="Stare-Down" type="General" desc="Scrollworks 11 page 5"/>
-     <feat name="Stealth" type="General" desc="Traps and Treachery page 39"/>
-     <feat name="Stealthy" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Still Spell" type="Metamagic" desc="Players Handbook page 85"/>
-     <feat name="Stoic Composure" type="General" desc="Dragon Magazine 284 page 123"/>
-     <feat name="Street Smart" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Strength of the Charger" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Strength of the Crab" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Strength of Personality" type="Special" desc="Demonology page 41"/>
-     <feat name="Strong Soul" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Strong Soul" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Stunning Fist" type="General" desc="Players Handbook page 85"/>
-     <feat name="Stunning Roar" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
-     <feat name="Subdual Substitution" type="Metamagic" desc="Tome and Blood page 42"/>
-     <feat name="Subduing Strike" type="General" desc="Sovereign Stone Campaign Sourcebook page 63"/>
-     <feat name="Subsonics" type="General" desc="Song and Silence page 40"/>
-     <feat name="Subtle Charm" type="Special" desc="Touched by the Gods page 71"/>
-     <feat name="Sunder" type="General" desc="Players Handbook page 85"/>
-     <feat name="Superior Expertise" type="General" desc="Oriental Adventures page 66"/>
-     <feat name="Survival Instincts" type="General" desc="The Taan page 83"/>
-     <feat name="Survivor" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Swarmfighting" type="General" desc="Dragon Magazine 285 page 33"/>
-     <feat name="Swift Twist Glance" type="General" desc="Mystic Warriors page 113"/>
-     <feat name="Tail Attack" type="Special" desc="Dragon Magazine d20 Special/Annual 6 page 61"/>
-     <feat name="Talented" type="Psionic" desc="Psionics Handbook page 30"/>
-     <feat name="Tattoo Focus" type="Special" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Taut Tug" type="General" desc="Mystic Warriors page 113"/>
-     <feat name="Ten Animal Style" type="Special" desc="Creature Collection page 72"/>
-     <feat name="Tenacious Magic" type="Metamagic" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Thick Hide" type="General" desc="The Taan page 83"/>
-     <feat name="Thick Skin" type="General" desc="Dungeons page 82"/>
-     <feat name="Thrall Master" type="Special" desc="Touched by the Gods page 71"/>
-     <feat name="Throw Anything" type="General" desc="Sword and Fist page 9"/>
-     <feat name="Thug" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Thunder Twin" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Thunderous Roar" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
-     <feat name="Tinker" type="General" desc="Dungeons page 82"/>
-     <feat name="Token Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
-     <feat name="Toughness" type="General" desc="Players Handbook page 85"/>
-     <feat name="Track" type="General" desc="Players Handbook page 85"/>
-     <feat name="Trample" type="General" desc="Players Handbook page 86"/>
-     <feat name="Treetopper" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
-     <feat name="Trigger Power" type="Psionic" desc="Psionics Handbook page 30"/>
-     <feat name="Trustworthy" type="General" desc="Song and Silence page 40"/>
-     <feat name="Turn Outsider" type="Special" desc="Evil page 60"/>
-     <feat name="Turn Resistance" type="General" desc="Mythic Races page 50"/>
-     <feat name="Twin Power" type="Psionic" desc="Psionics Handbook page 30"/>
-     <feat name="Twin Spell" type="Metamagic" desc="Tome and Blood page 42"/>
-     <feat name="Twin Sword Style" type="Fighter General" desc="Forgotten Realms Campaign Setting page 39"/>
-     <feat name="Two-Weapon Fighting" type="General" desc="Players Handbook page 86"/>
-     <feat name="Tyrant" type="General" desc="Evil page 60"/>
-     <feat name="Ultimate Feint" type="General" desc="Evil page 62"/>
-     <feat name="Unavoidable Strike" type="Psionic" desc="Psionics Handbook page 30"/>
-     <feat name="Unbalancing Strike" type="General" desc="Oriental Adventures page 66"/>
-     <feat name="Undead Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
-     <feat name="Undetectable Lie" type="Infernal" desc="Evil page 28"/>
-     <feat name="Unholy Blessing" type="Infernal" desc="Evil page 28"/>
-     <feat name="Unholy Strength" type="Infernal" desc="Evil page 28"/>
-     <feat name="Unorthodox Flurry" type="Special" desc="Dragon Magazine 279 page 63"/>
-     <feat name="Unusual Background" type="General" desc="Diomin page 43"/>
-     <feat name="Unyielding Aura" type="General" desc="Mythic Races page 69"/>
-     <feat name="Up the Walls" type="Psionic" desc="Psionics Handbook page 30"/>
-     <feat name="Upgrade Power" type="Psionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Vengeful Strike" type="General" desc="Touched by the Gods page 109"/>
-     <feat name="Vitus Kata" type="Mystic Warrior" desc="Mystic Warriors page 113"/>
-     <feat name="Wall Breaker" type="General" desc="Dragon Magazine 285 page 98"/>
-     <feat name="Warrior Instinct" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Warrior Shugenja" type="Ancestor" desc="Oriental Adventures page 66"/>
-     <feat name="Warsinger" type="Special" desc="Touched by the Gods page 109"/>
-     <feat name="Water-ken" type="General" desc="The Taan page 83"/>
-     <feat name="Wealth" type="Infernal" desc="Evil page 29"/>
-     <feat name="Weapon Expertise: Throwing Spear" type="General" desc="Ragnarok! page 10"/>
-     <feat name="Weapon Finesse" type="General" desc="Players Handbook page 86"/>
-     <feat name="Weapon Focus" type="General" desc="Players Handbook page 86"/>
-     <feat name="Weapon Specialization" type="Special" desc="Players Handbook page 86 (rules: page 37)"/>
-     <feat name="Weapon-Catching" type="General" desc="Ragnarok! page 9"/>
-     <feat name="Whirlwind Attack" type="General" desc="Players Handbook page 86"/>
-     <feat name="Widen Power" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
-     <feat name="Widen Spell" type="Metamagic" desc="Tome and Blood page 42"/>
-     <feat name="Wish" type="Infernal" desc="Evil page 29"/>
-     <feat name="Wrath of Calaam" type="Special" desc="Touched by the Gods page 59"/>
-     <feat name="Zen Archery" type="General" desc="Sword and Fist page 9"/>
-</feats>
+<feats>
+     <feat name="A Thousand Furs" type="Special" desc="Touched by the Gods page 71"/>
+     <feat name="Acrobatic" type="General" desc="Song and Silence page 38"/>
+     <feat name="Acrobatic (Legends and Lairs version)" type="General" desc="Traps and Treachery page 34"/>
+     <feat name="Airy Gallop" type="Special" desc="Dragon Magazine d20 Special-Annual 6 page 65"/>
+     <feat name="Alertness" type="General" desc="Players Handbook page 80"/>
+     <feat name="Alluring" type="General" desc="Song and Silence page 38"/>
+     <feat name="Ambidexterity" type="General" desc="Players Handbook page 80"/>
+     <feat name="Ancient Lineage" type="General" desc="The Taan page 81"/>
+     <feat name="Arcane Defense" type="General" desc="Tome and Blood page 38"/>
+     <feat name="Arcane Preparation" type="General" desc="Tome and Blood page 38"/>
+     <feat name="Arcane Schooling" type="General" desc="Forgotten Realms Campaign Setting page 33"/>
+     <feat name="Armor Proficiency (Heavy)" type="General" desc="Players Handbook page80"/>
+     <feat name="Armor Proficiency (Light)" type="General" desc="Players Handbook page 80"/>
+     <feat name="Armor Proficiency (Medium)" type="General" desc="Players Handbook page 80"/>
+     <feat name="Art of Fascination" type="Ancestor" desc="Oriental Adventures page 60"/>
+     <feat name="Arterial Strike" type="General" desc="Song and Silence page 38"/>
+     <feat name="Artist" type="General" desc="Forgotten Realms Campaign Setting page 33"/>
+     <feat name="Artist" type="Ancestor" desc="Oriental Adventures page 61"/>
+     <feat name="Athletic" type="General" desc="Song and Silence page 38"/>
+     <feat name="Attention to Detail" type="Ancestor" desc="Oriental Adventures page 61"/>
+     <feat name="Attune Gem" type="Item Creation" desc="Magic of Faerun page 21"/>
+     <feat name="Augment Construct" type="Psionic" desc="Dragon Magazine 287 page 54"/>
+     <feat name="Augment Summoning" type="General" desc="Tome and Blood page 39"/>
+     <feat name="Aura of Serenity" type="Mystic Warrior" desc="Mystic Warriors page 112"/>
+     <feat name="Battle Howl" type="General" desc="Touched by the Gods page 109"/>
+     <feat name="Battle Roar" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
+     <feat name="Blind Casting" type="General" desc="Dungeons page 81"/>
+     <feat name="Blind-Fight" type="General" desc="Players Handbook page 80"/>
+     <feat name="Blindsight 5-foot Radius" type="General" desc="Sword and Fist page 5"/>
+     <feat name="Blood Frenzy" type="General" desc="The Taan page 81"/>
+     <feat name="Blood Sorcerer" type="Ancestor" desc="Oriental Adventures page 61"/>
+     <feat name="Blooded" type="General" desc="Forgotten Realms Campaign Setting page 33"/>
+     <feat name="Bloodline of Fire" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Body Fuel" type="Psionic" desc="Psionics Handbook page 24"/>
+     <feat name="Bootlicker" type="General" desc="Evil page 58"/>
+     <feat name="Born Duelist" type="Ancestor" desc="Oriental Adventures page 61"/>
+     <feat name="Breeze Dance" type="Fighting Stance" desc="Mystic Warriors page 112"/>
+     <feat name="Brew Poison" type="Item Creation" desc="Traps and Treachery page 45"/>
+     <feat name="Brew Potion" type="Item Creation" desc="Players Handbook page 80"/>
+     <feat name="Bribery" type="General" desc="Evil page 58"/>
+     <feat name="Bullheaded" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Cabalistic Spellcasting" type="Metamagic" desc="Sovereign Stone Campaign Sourcebook page 60"/>
+     <feat name="Casing Sense" type="General" desc="Traps and Treachery page 34"/>
+     <feat name="Chain Power" type="Metapsionic" desc="Dragon Magazine 287 page 54"/>
+     <feat name="Chain Spell" type="Metamagic" desc="Tome and Blood page 39"/>
+     <feat name="Chain Spell (Scarred Lands version)" type="Metamagic" desc="Relics and Rituals page 25"/>
+     <feat name="Change Instruction" type="Special" desc="Demonology page 41"/>
+     <feat name="Chariot Archery" type="General" desc="Sword and Fist page 78"/>
+     <feat name="Chariot Charge" type="General" desc="Sword and Fist page 79"/>
+     <feat name="Chariot Combat" type="General" desc="Sword and Fist page 78"/>
+     <feat name="Chariot Sideswipe" type="General" desc="Sword and Fist page 79"/>
+     <feat name="Chariot Trample" type="General" desc="Sword and Fist page 78"/>
+     <feat name="Charlatan" type="General" desc="Song and Silence page 38"/>
+     <feat name="Chink in the Armor" type="General" desc="Song and Silence page 38"/>
+     <feat name="Choke Hold" type="General" desc="Oriental Adventures page 61"/>
+     <feat name="Circle Kick" type="General" desc="Sword and Fist page 5"/>
+     <feat name="Claws/Fangs" type="Infernal" desc="Evil page 24"/>
+     <feat name="Cleave" type="General" desc="Players Handbook page 80"/>
+     <feat name="Close-Order Fighting" type="Special" desc="Dragon Lords of Melnibone page 63"/>
+     <feat name="Close-Quarters Fighting" type="General" desc="Sword and Fist page 5"/>
+     <feat name="Cloud Running" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Combat Agility" type="General" desc="Dragon Magazine 284 page 123"/>
+     <feat name="Combat Casting" type="General" desc="Players Handbook page 80"/>
+     <feat name="Combat Manifestation" type="Psionic" desc="Psionics Handbook page 24"/>
+     <feat name="Combat Reflexes" type="General" desc="Players Handbook page 80"/>
+     <feat name="Combat Sense" type="General" desc="The Taan page 81"/>
+     <feat name="Conjure Mastery" type="Eldritch" desc="The Book of Eldritch Might page 4"/>
+     <feat name="Construct Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
+     <feat name="Controlled Breathing" type="General" desc="Dungeons page 81"/>
+     <feat name="Cool Head" type="General" desc="Oriental Adventures page 61"/>
+     <feat name="Cooperative Spell" type="Metamagic" desc="Tome and Blood page 39"/>
+     <feat name="Cooperative Spellcasting" type="Metamagic" desc="Sovereign Stone Campaign Sourcebook page 60"/>
+     <feat name="Cosmopolitan" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Courteous Magocracy" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Crab Walk" type="Fighting Stance" desc="Mystic Warriors page 112"/>
+     <feat name="Craft Anaema Tool" type="Item Creation" desc="Mythic Races page 15"/>
+     <feat name="Craft Crystal Capacitor" type="Item Creation" desc="Psionics Handbook page 24"/>
+     <feat name="Craft Crystal Weapon" type="Item Creation" desc="Oriental Adventures page 61"/>
+     <feat name="Craft Dorje" type="Item Creation" desc="Psionics Handbook page 24"/>
+     <feat name="Craft Kirpan" type="Item Creation" desc="Mystic Warriors page 112"/>
+     <feat name="Craft Magic Arms and Armor" type="Item Creation" desc="Players Handbook page 81"/>
+     <feat name="Craft Magic Trap" type="Item Creation" desc="Traps and Treachery page 34"/>
+     <feat name="Craft Mystic Talisman" type="Item Creation" desc="Mystic Warriors page 112"/>
+     <feat name="Craft Named Weapon" type="Item Creation" desc="Mystic Warriors page 112"/>
+     <feat name="Craft Psionic Arms and Armor" type="Item Creation" desc="Psionics Handbook page 24"/>
+     <feat name="Craft Rod" type="Item Creation" desc="Players Handbook page 81"/>
+     <feat name="Craft Staff" type="Item Creation" desc="Players Handbook page 81"/>
+     <feat name="Craft Talisman" type="Item Creation" desc="Oriental Adventures page 61"/>
+     <feat name="Craft Universal Item" type="Item Creation" desc="Psionics Handbook page 24"/>
+     <feat name="Craft Vitus Amulet" type="Item Creation" desc="Mystic Warriors page 113"/>
+     <feat name="Craft Wand" type="Item Creation" desc="Players Handbook page 81"/>
+     <feat name="Craft Wondrous Item" type="Item Creation" desc="Players Handbook page 81"/>
+     <feat name="Create Graft" type="Item Creation" desc="Touched by the Gods page 26"/>
+     <feat name="Create Portal" type="Item Creation" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Dance of the Dirk" type="Fighting Stance" desc="Mystic Warriors page 113"/>
+     <feat name="Darkvision" type="Infernal" desc="Evil page 24"/>
+     <feat name="Dash" type="General" desc="Song and Silence page 38"/>
+     <feat name="Daylight Adaptation" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Dead Shot" type="General" desc="Sovereign Stone Campaign Sourcebook page 60"/>
+     <feat name="Death Blow" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Deep Impact" type="Psionic" desc="Psionics Handbook page 25"/>
+     <feat name="Defensive Strike" type="General" desc="Oriental Adventures page 62"/>
+     <feat name="Defensive Throw" type="General" desc="Oriental Adventures page 62"/>
+     <feat name="Deflect Arrows" type="General" desc="Players Handbook page 81"/>
+     <feat name="Deflect Ranged Attack" type="General" desc="Dragon Magazine 274 page 60"/>
+     <feat name="Delay Power" type="Metapsionic" desc="Psionics Handbook page 25"/>
+     <feat name="Delay Spell" type="Metamagic" desc="Tome and Blood page 39"/>
+     <feat name="Dirty Fighting" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Disarm Mind" type="Psionic" desc="Psionics Handbook page 25"/>
+     <feat name="Discipline" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Discipline" type="Ancestor" desc="Oriental Adventures page 62"/>
+     <feat name="Disguise Spell" type="Metamagic" desc="Song and Silence page 38"/>
+     <feat name="Dismiss Demon" type="Special" desc="Demonlogy page 41"/>
+     <feat name="Divine Cleansing" type="Divine" desc="Defenders of the Faith page 19"/>
+     <feat name="Divine Might" type="Divine" desc="Defenders of the Faith page 19"/>
+     <feat name="Divine Perception" type="General" desc="Touched by the Gods page 34"/>
+     <feat name="Divine Resistance" type="Divine" desc="Defenders of the Faith page 19"/>
+     <feat name="Divine Shield" type="Divine" desc="Defenders of the Faith page 19"/>
+     <feat name="Divine Vengeance" type="Divine" desc="Defenders of the Faith page 20"/>
+     <feat name="Divine Vigor" type="Divine" desc="Defenders of the Faith page 20"/>
+     <feat name="Dodge" type="General" desc="Players Handbook page 81"/>
+     <feat name="Dreamspeaking" type="General" desc="The Book of Eldritch Might page 4"/>
+     <feat name="Drug Tolerance" type="General" desc="Caravan of Hope page 27"/>
+     <feat name="Dual Strike" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Eagle Claw Attack" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Earths Embrace" type="General" desc="Oriental Adventures page 62"/>
+     <feat name="Education" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Eidetic Memory" type="General" desc="Dungeons page 81"/>
+     <feat name="Element Resistance" type="Infernal" desc="Evil page 24"/>
+     <feat name="Empathy" type="General" desc="Traps and Treachery page 35"/>
+     <feat name="Empower Spell" type="Metamagic" desc="Players Handbook page 82"/>
+     <feat name="Empower Turning" type="Special" desc="Defenders of the Faith page 20"/>
+     <feat name="Enchant Stone" type="Item Creation" desc="The Taan page 81"/>
+     <feat name="Encode Stone" type="Item Creation" desc="Psionics Handbook page 25"/>
+     <feat name="Endurance" type="General" desc="Players Handbook page 82"/>
+     <feat name="Energy Admixture" type="Metamagic" desc="Tome and Blood page 39"/>
+     <feat name="Energy of Life" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Energy Substitution" type="Metamagic" desc="Tome and Blood page 40"/>
+     <feat name="Enlarge Power" type="Metapsionic" desc="Psionics Handbook page 25"/>
+     <feat name="Enlarge Spell" type="Metamagic" desc="Players Handbook page 82"/>
+     <feat name="Enspell Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
+     <feat name="Eschew Materials" type="Metamagic" desc="Tome and Blood page 40"/>
+     <feat name="Etch Object Rune" type="Item Creation" desc="The Book of Eldritch Might page 4"/>
+     <feat name="Ethran" type="General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Exotic Weapon Proficiency" type="General" desc="Players Handbook page 82"/>
+     <feat name="Expert Tactician" type="General" desc="Song and Silence page 38"/>
+     <feat name="Expertise" type="General" desc="Players Handbook page 82"/>
+     <feat name="Extend Power" type="Metapsionic" desc="Psionics Handbook page 25"/>
+     <feat name="Extend Spell" type="Metamagic" desc="Players Handbook page 82"/>
+     <feat name="Extra Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
+     <feat name="Extra Music" type="General" desc="Song and Silence page 39"/>
+     <feat name="Extra Power" type="Psionic" desc="Dragon Magazine 287 page 55"/>
+     <feat name="Extra Slot" type="General" desc="Tome and Blood page 40"/>
+     <feat name="Extra Smiting" type="Special" desc="Defenders of the Faith page 20"/>
+     <feat name="Extra Spell" type="General" desc="Tome and Blood page 40"/>
+     <feat name="Extra Stunning Attacks" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Extra Turning" type="Special" desc="Players Handbook page 82 (rules: ppage 32 42)"/>
+     <feat name="Eye for Detail" type="General" desc="Traps and Treachery page 35"/>
+     <feat name="Eyes in the Back of Your Head" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Eyes of Calaam" type="Special" desc="Touched by the Gods page 59"/>
+     <feat name="Falling Star Strike" type="General" desc="Oriental Adventures page 62"/>
+     <feat name="Far Shot" type="General" desc="Players Handbook page 82"/>
+     <feat name="Fast Armor" type="General" desc="Dragon Magazine 284 page 123"/>
+     <feat name="Fast Rider" type="General" desc="Dragon Magazine 285 page 98"/>
+     <feat name="Fast Talker" type="General" desc="Traps and Treachery page 35"/>
+     <feat name="Fearsome and Fearless" type="Ancestor" desc="Oriental Adventures page 62"/>
+     <feat name="Feign Weakness" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Fell Shot" type="Psionic" desc="Psionics Handbook page 25"/>
+     <feat name="Firearms Drill" type="General" desc="Dragon Magazine d20 Special/Annual 6 page 70"/>
+     <feat name="Fists of Calaam" type="Special" desc="Touched by the Gods page 59"/>
+     <feat name="Fists of Iron" type="General" desc="Sword and Fist page 6"/>
+     <feat name="Fleet of Foot" type="General" desc="Song and Silence page 39"/>
+     <feat name="Flick of the Wrist" type="General" desc="Song and Silence page 39"/>
+     <feat name="Flight" type="Infernal" desc="Evil page 25"/>
+     <feat name="Flying Kick" type="General] -Oriental Adventures page 62" desc=""/>
+     <feat name="Foe Hunter" type="Fighter General" desc="Forgotten Realms Campaign Setting page 34"/>
+     <feat name="Forester" type="General" desc="Forgotten Realms Campaign Setting page 35"/>
+     <feat name="Forge Ring" type="Item Creation" desc="Players Handbook page 82"/>
+     <feat name="Fortify Power" type="Metapsionic" desc="Dragon Magazine 287 page 55"/>
+     <feat name="Freezing the Lifeblood" type="General" desc="Oriental Adventures page 62 "/>
+     <feat name="Gifted General" type="Ancestor" desc="Oriental Adventures page 62"/>
+     <feat name="Golden Tongue" type="General" desc="Dungeons page 81"/>
+     <feat name="Grace Under Pressure" type="General" desc="Dungeons page 81"/>
+     <feat name="Grappling Block" type="General" desc="Oriental Adventures page 63"/>
+     <feat name="Grasshopper Strike" type="General" desc="Dragon Magazine 279 page 63"/>
+     <feat name="Great Cleave" type="General" desc="Players Handbook page 82"/>
+     <feat name="Great Crafter" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Great Diplomat" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Great Fortitude" type="General" desc="Players Handbook page 82"/>
+     <feat name="Great Ki Shout" type="General" desc="Oriental Adventures page 63"/>
+     <feat name="Great Stamina" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Great Sunder" type="Psionic" desc="Psionics Handbook page 26"/>
+     <feat name="Great Teamwork" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Greater Power Penetration" type="Psionic" desc="Psionics Handbook page 26"/>
+     <feat name="Greater Psionic Focus" type="Psionic" desc="Psionics Handbook page 26"/>
+     <feat name="Greater Spell Focus" type="General" desc="Tome and Blood page 40"/>
+     <feat name="Greater Spell Penetration" type="General" desc="Tome and Blood page 40"/>
+     <feat name="Green Ear" type="General" desc="Song and Silence page 39"/>
+     <feat name="Green Viper Style" type="Fighting Stance" desc="Mystic Warriors page 113"/>
+     <feat name="Hammer Fist" type="General" desc="Dragon Magazine 279 page 63"/>
+     <feat name="Hamstring" type="General" desc="Song and Silence page 39"/>
+     <feat name="Heavy Scarring" type="General" desc="The Taan page 82"/>
+     <feat name="Heighten Power" type="Metapsionic" desc="Psionics Handbook page 26"/>
+     <feat name="Heighten Spell" type="Metamagic" desc="Players Handbook page 82"/>
+     <feat name="Heighten Turning" type="Special" desc="Defenders of the Faith page 20"/>
+     <feat name="Heroic Destiny" type="Special" desc="Touched by the Gods page 109"/>
+     <feat name="Hide Power" type="Metapsionic" desc="Psionics Handbook page 26"/>
+     <feat name="Hide Spell" type="Metamagic" desc="Relics and Rituals page 25"/>
+     <feat name="Hill Fighter" type="General" desc="Dragon Magazine 285 page 98"/>
+     <feat name="Hold the Line" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Honest Merchant" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Horse Nomad" type="Fighter General" desc="Forgotten Realms Campaign Setting page 35"/>
+     <feat name="Iaijutsu Master" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Immortality" type="Infernal" desc="Evil page 25"/>
+     <feat name="Immunity" type="Infernal" desc="Evil page 25"/>
+     <feat name="Imp" type="Infernal" desc="Evil page 25"/>
+     <feat name="Improved Aid" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Improved Alertness" type="General" desc="Dungeons page 82"/>
+     <feat name="Improved Bull Rush" type="General" desc="Players Handbook page 82"/>
+     <feat name="Improved Counterspell" type="General" desc="Forgotten Realms Campaign Setting page 35"/>
+     <feat name="Improved Critical" type="General" desc="Players Handbook page 82"/>
+     <feat name="Improved Disarm" type="General" desc="Players Handbook page 83"/>
+     <feat name="Improved Endurance" type="General" desc="Dungeons page 82"/>
+     <feat name="Improved Familiar" type="General" desc="Tome and Blood page 40"/>
+     <feat name="Improved Feint" type="General" desc="Evil page 59"/>
+     <feat name="Improved Flight" type="Infernal" desc="Evil page 25"/>
+     <feat name="Improved Grab" type="General" desc="Mythic Races page 77"/>
+     <feat name="Improved Grapple" type="General" desc="Oriental Adventures page 63"/>
+     <feat name="Improved Initiative" type="General" desc="Players Handbook page 83"/>
+     <feat name="Improved Knockout Attack" type="General" desc="Traps and Treachery page 35"/>
+     <feat name="Improved Low Blow" type="General" desc="Dragon Magazine 285 page 33"/>
+     <feat name="Improved Mounted Archery" type="General" desc="Dragon Magazine 285 page 99"/>
+     <feat name="Improved Mounted Combat" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
+     <feat name="Improved Multiweapon Fighting" type="General" desc="Mythic Races page 137"/>
+     <feat name="Improved Overrun" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Improved Psicrystal" type="Psionic" desc="Psionics Handbook page 26"/>
+     <feat name="Improved Ranged Sneak Attack" type="General" desc="Traps and Treachery page 36"/>
+     <feat name="Improved Rapid Shot" type="General" desc="Dragon Magazine 275 page 41"/>
+     <feat name="Improved Regeneration" type="Infernal" desc="Evil page 25"/>
+     <feat name="Improved Shield Bash" type="General" desc="Defenders of the Faith page 20"/>
+     <feat name="Improved Sneak Attack" type="General" desc="Traps and Treachery page 36"/>
+     <feat name="Improved Sunder" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Improved Trample" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
+     <feat name="Improved Trip" type="General" desc="Players Handbook page 83"/>
+     <feat name="Improved Two-Weapon Fighting" type="General" desc="Players Handbook page 83"/>
+     <feat name="Improved Unarmed Strike" type="General" desc="Players Handbook page 83"/>
+     <feat name="Improvise Thieves Tools" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Improvised Weapon" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
+     <feat name="Increased Carrying Capacity" type="General" desc="Dungeons page 82"/>
+     <feat name="Increased Movement" type="Infernal" desc="Evil page 26"/>
+     <feat name="Inertial Armor" type="Psionic" desc="Psionics Handbook page 26"/>
+     <feat name="Infernal Pact" type="Infernal" desc="Evil page 26"/>
+     <feat name="Infernal Soul" type="Infernal" desc="Evil page 26"/>
+     <feat name="Information Exchange" type="Special" desc="Touched by the Gods page 7"/>
+     <feat name="Innate Spell" type="General" desc="Tome and Blood page 41"/>
+     <feat name="Inner Peace" type="Mystic Warrior" desc="Mystic Warriors page 113"/>
+     <feat name="Inner Strength" type="Psionic" desc="Psionics Handbook page 26"/>
+     <feat name="Inscribe Magical Tattoo" type="Item Creation" desc="Relics and Rituals page 198"/>
+     <feat name="Inscribe Rune" type="Item Creation" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Insidious Magic" type="Metamagic" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Invisibility" type="Infernal" desc="Evil page 27"/>
+     <feat name="Ironbone" type="Special" desc="Creature Collection page 71"/>
+     <feat name="Ironskin" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Iron Will" type="General" desc="Players Handbook page 83"/>
+     <feat name="Item Image" type="Eldritch" desc="The Book of Eldritch Might page 4"/>
+     <feat name="Jack of All Trades" type="General" desc="Song and Silence page 40"/>
+     <feat name="Kamis Intuition" type="Ancestor" desc="Oriental Adventures page 63"/>
+     <feat name="Karmic Strike" type="General" desc="Oriental Adventures page 63"/>
+     <feat name="Karmic Twin" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Keen Intellect" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Keen Vision" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Ki Projection" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Ki Shout" type="General" desc="Oriental Adventures page 64"/>
+     <feat name="Knock-Down" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Knockout Attack" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Knowledgeable" type="General" desc="Dungeons page 82"/>
+     <feat name="Lace Spell: Elemental Energies" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
+     <feat name="Lace Spell: Enemy Bane" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
+     <feat name="Lace Spell: Holy/Unholy" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
+     <feat name="Lace Spell: Lawful/Chaotic" type="Eldritch" desc="The Book of Eldritch Might page 5"/>
+     <feat name="Lead Missile Fire" type="General" desc="Evil page 59"/>
+     <feat name="Leadership" type="General" desc="Players Handbook page 83 (rules: Dungeon Masters Guide page 45)"/>
+     <feat name="Lightning Fists" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Lightning Reflexes" type="General" desc="Players Handbook page 83"/>
+     <feat name="Light Sleeper" type="General" desc="Dungeons page 82"/>
+     <feat name="Lingering Song" type="General" desc="Song and Silence page 40"/>
+     <feat name="Lion Spy" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Lions Rage" type="Mystic Warrior Stance" desc="Mystic Warriors page 113"/>
+     <feat name="Living Shield" type="General" desc="Evil page 58"/>
+     <feat name="Low Blow" type="General" desc="Dragon Magazine 285 page 33"/>
+     <feat name="Luck of Heroes" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Luck of Heroes" type="Ancestor" desc="Oriental Adventures page 64 "/>
+     <feat name="Magekiss" type="Metamagic" desc="Traps and Treachery page 22"/>
+     <feat name="Magic in the Blood" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Magic Item" type="Infernal" desc="Evil page 27"/>
+     <feat name="Magical Artisan" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Magical Artisan" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Magical Talent" type="General" desc="The Book of Eldritch Might page 6"/>
+     <feat name="Magical Training" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Magistrates Mind" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Mantis Leap" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Manufacture Magic Poison" type="Item Creation" desc="The Book of Eldritch Might page 6"/>
+     <feat name="Many Masks" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Martial Weapon Proficiency" type="General" desc="Players Handbook page 83"/>
+     <feat name="Master Dorje" type="Metapsionic" desc="Psionics Handbook page 26"/>
+     <feat name="Maximize Power" type="Metapsionic" desc="Psionics Handbook page 26"/>
+     <feat name="Maximize Spell" type="Metamagic" desc="Players Handbook page 83"/>
+     <feat name="Mechanical Aptitude" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Mental Adversary" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Mental Leap" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Mercantile Background" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Metacreative" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Militia" type="General" desc="Forgotten Realms Campaign Setting page 36"/>
+     <feat name="Mind Blind" type="Psionic" desc="Dragon Magazine 287 page 55"/>
+     <feat name="Mind Over Body" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Mind Trap" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Mirror Sight" type="Eldritch" desc="The Book of Eldritch Might page 6"/>
+     <feat name="Mobility" type="General" desc="Players Handbook page 83"/>
+     <feat name="Monkey Grip" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Mounted Archery" type="General" desc="Players Handbook page 83"/>
+     <feat name="Mounted Combat" type="General" desc="Players Handbook page 83"/>
+     <feat name="Moving Meditation" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Multiattack (Taan version)" type="General" desc="The Taan page 83"/>
+     <feat name="Multicultural" type="General" desc="Song and Silence page 40"/>
+     <feat name="Multiple Limbs" type="Infernal" desc="Evil page 27"/>
+     <feat name="Multiweapon Fighting (Legends and Lairs version)" type="General" desc="Mythic Races page 137"/>
+     <feat name="Natural Weaponry" type="General" desc="The Taan page 83"/>
+     <feat name="Nature Sense" type="Special" desc="Touched by the Gods page 71"/>
+     <feat name="Nerve Strikes" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Nobodys Fool" type="General" desc="Dragon Magazine 285 page 33"/>
+     <feat name="Obscure Lore" type="General" desc="Song and Silence page 40"/>
+     <feat name="Off-Hand Parry" type="General" desc="Sword and Fist page 7"/>
+     <feat name="Off-Handed" type="General" desc="Evil page 59"/>
+     <feat name="Onis Bane" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Pain Touch" type="General" desc="Sword and Fist page 8"/>
+     <feat name="Pebble Underfoot" type="General" desc="Dragon Magazine 279 page 63"/>
+     <feat name="Penetrate Hardness" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
+     <feat name="Perfect Memory" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Permanent Control" type="Special" desc="Demonology page 41"/>
+     <feat name="Pernicious Magic" type="Metamagic" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Persistent Power" type="Metapsionic" desc="Psionics Handbook page 27"/>
+     <feat name="Persistent Spell" type="Metamagic" desc="Tome and Blood page 42"/>
+     <feat name="Persuasive" type="General" desc="Song and Silence page 40"/>
+     <feat name="Pin Shield" type="General" desc="Sword and Fist page 8"/>
+     <feat name="Pinpoint Accuracy" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
+     <feat name="Point Blank Shot" type="General" desc="Players Handbook page 84"/>
+     <feat name="Poison Blood" type="Infernal" desc="Evil page 28"/>
+     <feat name="Poison Immunity" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Pounce" type="General" desc="Mythic Races page 77"/>
+     <feat name="Pounce and Strike" type="General" desc="Dragon Lords of Melnibone page 50"/>
+     <feat name="Power Attack" type="General" desc="Players Handbook page 84"/>
+     <feat name="Power Attack--Iaijutsu" type="Ancestor" desc="Oriental Adventures page 64"/>
+     <feat name="Power Attack--Shadowlands" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Power Lunge" type="General" desc="Sword and Fist page 8"/>
+     <feat name="Power Penetration" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Power Specialization" type="Psionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Power Touch" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Powerful Voice" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Precise Shot" type="General" desc="Players Handbook page 84"/>
+     <feat name="Primal Shout" type="General" desc="The Taan page 83"/>
+     <feat name="Prone Attack" type="General" desc="Sword and Fist page 8"/>
+     <feat name="Psionic Body" type="Psionic" desc="Psionics Handbook page 27"/>
+     <feat name="Psionic Charge" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psionic Defense" type="Psionic" desc="Dragon Magazine 287 page 54"/>
+     <feat name="Psionic Dodge" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psionic Energy Admixture" type="Metapsionic" desc="Dragon Magazine 287 page 55"/>
+     <feat name="Psionic Energy Substitution" type="Metapsionic" desc="Dragon Magazine 287 page 54"/>
+     <feat name="Psionic Fist" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psionic Focus" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psionic Metabolism" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psionic Shot" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psionic Weapon" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psychic Bastion" type="Psionic" desc="Psionics Handbook page 28"/>
+     <feat name="Psychic Inquisitor" type="Psionic" desc="Psionics Handbook page 29"/>
+     <feat name="Psychoanalyst" type="Psionic" desc="Psionics Handbook page 29"/>
+     <feat name="Purifying Light" type="General" desc="Mythic Races page 69"/>
+     <feat name="Pyro" type="General" desc="Song and Silence page 40"/>
+     <feat name="Quick Draw" type="General" desc="Players Handbook page 84"/>
+     <feat name="Quicken Power" type="Metapsionic" desc="Psionics Handbook page 29"/>
+     <feat name="Quicken Spell" type="Metamagic" desc="Players Handbook page 84"/>
+     <feat name="Quicken Summoning" type="Special" desc="Demonology page 41"/>
+     <feat name="Quicken Turning" type="Special" desc="Defenders of the Faith page 20"/>
+     <feat name="Quicker Than the Eye" type="General" desc="Song and Silence page 40"/>
+     <feat name="Quickstrike" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Rake" type="General" desc="Mythic Races page 77"/>
+     <feat name="Raking Nails" type="General" desc="Mystic Warriors page 113"/>
+     <feat name="Ranged Disarm" type="General" desc="Dragon Magazine 274 page 60"/>
+     <feat name="Ranged Pin" type="General" desc="Dragon Magazine 274 page 60"/>
+     <feat name="Ranged Sunder" type="General" desc="Dragon Magazine 274 page 60"/>
+     <feat name="Rapid Metabolism" type="Psionic" desc="Psionics Handbook page 29"/>
+     <feat name="Rapid Reload" type="General" desc="Sword and Fist page 9"/>
+     <feat name="Rapid Shot" type="General" desc="Players Handbook page 84"/>
+     <feat name="Ray Burst" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
+     <feat name="Ray Coning" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
+     <feat name="Ray Extension" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
+     <feat name="Ray Focus" type="General" desc="Dragon Magazine Annual 5 page 26"/>
+     <feat name="Ray Splitting" type="Metamagic" desc="Dragon Magazine Annual 5 page 26"/>
+     <feat name="Reactive Counterspell" type="General" desc="Magic of Faerun page 22"/>
+     <feat name="Reach Power" type="Metapsionic" desc="Dragon Magazine 287 page 55"/>
+     <feat name="Reach Spell" type="Metamagic" desc="Defenders of the Faith page 20"/>
+     <feat name="Reckless Offensive" type="General" desc="Enemies and Allies page 41"/>
+     <feat name="Recognize Omen" type="General" desc="Sovereign Stone Campaign Sourcebook page 62"/>
+     <feat name="Redirect Attacks" type="General" desc="Evil page 59"/>
+     <feat name="Regeneration" type="Infernal" desc="Evil page 28"/>
+     <feat name="Remain Conscious" type="General" desc="Sword and Fist page 9"/>
+     <feat name="Repeat Power" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Repeat Spell" type="Metamagic" desc="Tome and Blood page 41"/>
+     <feat name="Requiem" type="General" desc="Song and Silence page 40"/>
+     <feat name="Resculpt Mind" type="Psionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Resist Poison" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Resist Poison" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Resist Taint" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Return Shot" type="Psionic" desc="Psionics Handbook page 29"/>
+     <feat name="Ride-By-Attack" type="General" desc="Players Handbook page 84"/>
+     <feat name="Rot" type="Infernal" desc="Evil page 28"/>
+     <feat name="Roundabout Kick" type="General" desc="Oriental Adventures page 65"/>
+     <feat name="Run" type="General" desc="Players Handbook page 84 "/>
+     <feat name="Sacred Spell" type="Metamagic" desc="Defenders of the Faith page 20"/>
+     <feat name="Saddleback" type="Fighter General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Saddleback" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Sanctum Spell" type="Metamagic" desc="Tome and Blood page 41"/>
+     <feat name="Scent" type="General" desc="Dungeon Masters Guide page 81 (variant rule)"/>
+     <feat name="Scholar of Nature" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Scribe Scroll" type="Item Creation" desc="Players Handbook page 84"/>
+     <feat name="Scribe Tattoo" type="Item Creation" desc="Psionics Handbook page 29"/>
+     <feat name="Sculpt Power" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Sculpt Spell" type="Metamagic" desc="Tome and Blood page 42"/>
+     <feat name="Sea Legs" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Second Wind" type="General" desc="Sovereign Stone Campaign Sourcebook page 63"/>
+     <feat name="Set Spear" type="General" desc="Dragon Lords of Melnibone page 63"/>
+     <feat name="Shadow" type="General" desc="Song and Silence page 40"/>
+     <feat name="Shadow (Legends and Lairs version)" type="General" desc="Traps and Treachery page 37"/>
+     <feat name="Shadow Weave Magic" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Shapechange" type="Infernal" desc="Evil page 27"/>
+     <feat name="Shared Spellcasting" type="Metamagic" desc="Sovereign Stone Campaign Sourcebook page 63"/>
+     <feat name="Sharp-Shooting" type="General" desc="Sword and Fist page 9"/>
+     <feat name="Shield Charge" type="General" desc="Defenders of the Faith page 20"/>
+     <feat name="Shield Expert" type="General" desc="Sword and Fist page 9"/>
+     <feat name="Shield Proficiency" type="General" desc="Players Handbook page 85"/>
+     <feat name="Shot on the Run" type="General" desc="Players Handbook page 85"/>
+     <feat name="Side Step" type="General" desc="Mystic Warriors page 113"/>
+     <feat name="Signature Skill" type="General" desc="Traps and Treachery page 38"/>
+     <feat name="Signature Spell" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Silent Spell" type="Metamagic" desc="Players Handbook page 85"/>
+     <feat name="Silver Palm" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Silver Tongue" type="Ancestor" desc="Oriental Adventures page 65"/>
+     <feat name="Simple Weapon Proficiency" type="General" desc="Players Handbook page 85"/>
+     <feat name="Skill Focus" type="General" desc="Players Handbook page 85"/>
+     <feat name="Smooth Talk" type="General" desc="Forgotten Realms Campaign Setting page 37"/>
+     <feat name="Smooth Talk" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Snake Blood" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Snatch Arrows" type="General" desc="Sword and Fist page 9"/>
+     <feat name="Snatch Weapon" type="General" desc="Song and Silence page 40"/>
+     <feat name="Soul of Honor" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Soul of Loyalty" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Soul of Sincerity" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Speed of Thought" type="Psionic" desc="Psionics Handbook page 29"/>
+     <feat name="Spell Focus" type="General" desc="Players Handbook page 85"/>
+     <feat name="Spell Girding" type="General" desc="Magic of Faerun page 22"/>
+     <feat name="Spell Mastery" type="Special" desc="Players Handbook page 85 (rules: page 54)"/>
+     <feat name="Spell Penetration" type="General" desc="Players Handbook page 85"/>
+     <feat name="Spell Power" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Spell Specialization" type="General" desc="Tome and Blood page 42"/>
+     <feat name="Spell Thematics" type="General" desc="Magic of Faerun page 22"/>
+     <feat name="Spellcaster Support" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Spellcasting Prodigy" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Spellfire Wielder" type="General" desc="Magic of Faerun page 23"/>
+     <feat name="Spirited Charge" type="General" desc="Players Handbook page 85"/>
+     <feat name="Split Psionic Ray" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Split Ray" type="Metamagic" desc="Tome and Blood page 42"/>
+     <feat name="Spook Animals" type="Special" desc="Dragon Magazine d20 Special/Annual 6 page 65"/>
+     <feat name="Spring Attack" type="General" desc="Players Handbook page 85"/>
+     <feat name="Staggering Blow" type="General" desc="Dragon Magazine 279 page 63"/>
+     <feat name="Stand Still" type="Psionic" desc="Psionics Handbook page 29"/>
+     <feat name="Stare-Down" type="General" desc="Scrollworks 11 page 5"/>
+     <feat name="Stealth" type="General" desc="Traps and Treachery page 39"/>
+     <feat name="Stealthy" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Still Spell" type="Metamagic" desc="Players Handbook page 85"/>
+     <feat name="Stoic Composure" type="General" desc="Dragon Magazine 284 page 123"/>
+     <feat name="Street Smart" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Strength of the Charger" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Strength of the Crab" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Strength of Personality" type="Special" desc="Demonology page 41"/>
+     <feat name="Strong Soul" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Strong Soul" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Stunning Fist" type="General" desc="Players Handbook page 85"/>
+     <feat name="Stunning Roar" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
+     <feat name="Subdual Substitution" type="Metamagic" desc="Tome and Blood page 42"/>
+     <feat name="Subduing Strike" type="General" desc="Sovereign Stone Campaign Sourcebook page 63"/>
+     <feat name="Subsonics" type="General" desc="Song and Silence page 40"/>
+     <feat name="Subtle Charm" type="Special" desc="Touched by the Gods page 71"/>
+     <feat name="Sunder" type="General" desc="Players Handbook page 85"/>
+     <feat name="Superior Expertise" type="General" desc="Oriental Adventures page 66"/>
+     <feat name="Survival Instincts" type="General" desc="The Taan page 83"/>
+     <feat name="Survivor" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Swarmfighting" type="General" desc="Dragon Magazine 285 page 33"/>
+     <feat name="Swift Twist Glance" type="General" desc="Mystic Warriors page 113"/>
+     <feat name="Tail Attack" type="Special" desc="Dragon Magazine d20 Special/Annual 6 page 61"/>
+     <feat name="Talented" type="Psionic" desc="Psionics Handbook page 30"/>
+     <feat name="Tattoo Focus" type="Special" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Taut Tug" type="General" desc="Mystic Warriors page 113"/>
+     <feat name="Ten Animal Style" type="Special" desc="Creature Collection page 72"/>
+     <feat name="Tenacious Magic" type="Metamagic" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Thick Hide" type="General" desc="The Taan page 83"/>
+     <feat name="Thick Skin" type="General" desc="Dungeons page 82"/>
+     <feat name="Thrall Master" type="Special" desc="Touched by the Gods page 71"/>
+     <feat name="Throw Anything" type="General" desc="Sword and Fist page 9"/>
+     <feat name="Thug" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Thunder Twin" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Thunderous Roar" type="Kaiju" desc="Dragon Magazine 289 page 70"/>
+     <feat name="Tinker" type="General" desc="Dungeons page 82"/>
+     <feat name="Token Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
+     <feat name="Toughness" type="General" desc="Players Handbook page 85"/>
+     <feat name="Track" type="General" desc="Players Handbook page 85"/>
+     <feat name="Trample" type="General" desc="Players Handbook page 86"/>
+     <feat name="Treetopper" type="General" desc="Forgotten Realms Campaign Setting page 38"/>
+     <feat name="Trigger Power" type="Psionic" desc="Psionics Handbook page 30"/>
+     <feat name="Trustworthy" type="General" desc="Song and Silence page 40"/>
+     <feat name="Turn Outsider" type="Special" desc="Evil page 60"/>
+     <feat name="Turn Resistance" type="General" desc="Mythic Races page 50"/>
+     <feat name="Twin Power" type="Psionic" desc="Psionics Handbook page 30"/>
+     <feat name="Twin Spell" type="Metamagic" desc="Tome and Blood page 42"/>
+     <feat name="Twin Sword Style" type="Fighter General" desc="Forgotten Realms Campaign Setting page 39"/>
+     <feat name="Two-Weapon Fighting" type="General" desc="Players Handbook page 86"/>
+     <feat name="Tyrant" type="General" desc="Evil page 60"/>
+     <feat name="Ultimate Feint" type="General" desc="Evil page 62"/>
+     <feat name="Unavoidable Strike" type="Psionic" desc="Psionics Handbook page 30"/>
+     <feat name="Unbalancing Strike" type="General" desc="Oriental Adventures page 66"/>
+     <feat name="Undead Familiar" type="General" desc="Dragon Magazine 280 page 62"/>
+     <feat name="Undetectable Lie" type="Infernal" desc="Evil page 28"/>
+     <feat name="Unholy Blessing" type="Infernal" desc="Evil page 28"/>
+     <feat name="Unholy Strength" type="Infernal" desc="Evil page 28"/>
+     <feat name="Unorthodox Flurry" type="Special" desc="Dragon Magazine 279 page 63"/>
+     <feat name="Unusual Background" type="General" desc="Diomin page 43"/>
+     <feat name="Unyielding Aura" type="General" desc="Mythic Races page 69"/>
+     <feat name="Up the Walls" type="Psionic" desc="Psionics Handbook page 30"/>
+     <feat name="Upgrade Power" type="Psionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Vengeful Strike" type="General" desc="Touched by the Gods page 109"/>
+     <feat name="Vitus Kata" type="Mystic Warrior" desc="Mystic Warriors page 113"/>
+     <feat name="Wall Breaker" type="General" desc="Dragon Magazine 285 page 98"/>
+     <feat name="Warrior Instinct" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Warrior Shugenja" type="Ancestor" desc="Oriental Adventures page 66"/>
+     <feat name="Warsinger" type="Special" desc="Touched by the Gods page 109"/>
+     <feat name="Water-ken" type="General" desc="The Taan page 83"/>
+     <feat name="Wealth" type="Infernal" desc="Evil page 29"/>
+     <feat name="Weapon Expertise: Throwing Spear" type="General" desc="Ragnarok! page 10"/>
+     <feat name="Weapon Finesse" type="General" desc="Players Handbook page 86"/>
+     <feat name="Weapon Focus" type="General" desc="Players Handbook page 86"/>
+     <feat name="Weapon Specialization" type="Special" desc="Players Handbook page 86 (rules: page 37)"/>
+     <feat name="Weapon-Catching" type="General" desc="Ragnarok! page 9"/>
+     <feat name="Whirlwind Attack" type="General" desc="Players Handbook page 86"/>
+     <feat name="Widen Power" type="Metapsionic" desc="Dragon Magazine 287 page 56"/>
+     <feat name="Widen Spell" type="Metamagic" desc="Tome and Blood page 42"/>
+     <feat name="Wish" type="Infernal" desc="Evil page 29"/>
+     <feat name="Wrath of Calaam" type="Special" desc="Touched by the Gods page 59"/>
+     <feat name="Zen Archery" type="General" desc="Sword and Fist page 9"/>
+</feats>
--- a/data/dnd3e/dnd3epowers.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3epowers.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,294 +1,294 @@
-<powers>
-<power test='============================' name=' ' level=' ' desc=' ' />
-<power test='    Psionic Combat Powers' name=' ' level=' ' desc=' ' />
-<power test='============================' name=' ' level=' ' desc=' ' />
-<power test='Psionic Attack' name='Ego Whip' level='2' desc='Mental Lash (DC 1d20 + Dex Mod + DC Mod) Damage: 1d4 Dex' point='3' />
-<power test='Psionic Defense' name='Empty Mind' level='1' desc='Hide your mind - DC Mods EW: +1 II: -2 MB: +3 MT: -3 PC: -5' point='1' />
-<power test='Psionic Attack' name='Id Insinuation' level='2' desc='Tendrils of thought disrupt target (DC 1d20 + ST Mod + DC Mod) Damage:1d2 Str' point='3' />
-<power test='Psionic Defense' name='Intellect Fortress' level='1' desc='Incase mind in fortress of determination - DC Mods EW: -2 II: +1 MB: +0 MT: +6 PC: +4 / Mental Hardness 3' point='5' />
-<power test='Psionic Defense' name='Mental Barrier' level='1' desc='A construct of dissembling thoughts - DC Mods EW: -1 II: +1 MB: +0 MT: +1 PC: +3 / Mental Hardness 2' point='3' />
-<power test='Psionic Attack' name='Mind Blast' level='5' desc='Blast the minds of all in 60ft-cone (DC 1d20 + Chr Mod + DC Mod) Damage : 1d4 Chr (nonpsionics stunned for 3d4 rounds)' point='9' />
-<power test='Psionic Attack' name='Mind Thrust' level='1' desc='Massive assult on mental pathways (DC 1d20 + Int Mod + DC Mod) Damage: 1d2 Int' point='1' />
-<power test='Psionic Attack' name='Psychic Crush' level='3' desc='Your will surrounds target squeezes mercilessly (DC 1d20 + Wis Mod + DC Mod)' point='5' />
-<power test='Psionic Defense' name='Thought Shield' level='1' desc='Erect a shield of hope - DC Mods EW: -4 II: -1 MB: -2 MT: +4 PC: +2 / Mental Hardness 1' point='1' />
-<power test='Psionic Defense' name='Tower of Iron Will' level='1' desc='Generates a bastion of thought - DC Mods EW: +3 II: +0 MB: -1 MT: +5 PC: -3 / Mental Hardness 2 (10ft-radius)' point='5' />
-<power test='============================' name=' ' level=' ' desc=' ' />
-<power test='       Psionic Powers' name=' ' level=' ' desc=' ' />
-<power test='============================' name=' ' level=' ' desc=' ' />
-<power test='Metacreativity' name='Bolt' level='0' desc='Create a bolt, arrow, bullet' point='1' />
-<power test='Psychoportation' name='Burst' level='0' desc='Speed +10ft for 1 round' point='1' />
-<power test='Psychoportation' name='Catfall' level='0' desc='You recover well from a fall' point='1' />
-<power test='Psycokinesis' name='Control Shadow' level='0' desc='Control normal shadow like puppet' point='1' />
-<power test='Telepathy' name='Daze' level='0' desc='Creature loses next action' point='1' />
-<power test='Clairsentience' name='Detect Posion' level='0' desc='Detect the presence of poison' point='1' />
-<power test='Clairsentience' name='Detect Psionics' level='0' desc='Detect the presence of psionics' point='1' />
-<power test='Telepathy' name='Distract' level='0' desc='Subjects mind wanders -1 to some actions' point='1' />
-<power test='Psychometabolism' name='Elfsight' level='0' desc='You have low-light vision' point='1' />
-<power test='Psychokinesis' name='Far Hand' level='0' desc='Minor Telekinesis' point='1' />
-<power test='Psychokinesis' name='Far Punch' level='0' desc='Telekinetic punch deals 1 damage' point='1' />
-<power test='Metacreativity' name='Finger of Fire' level='0' desc='Deal 1d3 damage to target' point='1' />
-<power test='Psychoportation' name='Float' level='0' desc='You buoy a subject in water or liquid' point='1' />
-<power test='Telepathy' name='Inkling' level='0' desc='50% likely to know if action is good/bad' point='1' />
-<power test='Clairsentience' name='Know Direction' level='0' desc='You know which way is North' point='1' />
-<power test='Psychometabolism' name='Lesser Natural Armor' level='0' desc='+1 Natural Armor Bonus' point='1' />
-<power test='Telepathy' name='Missive' level='0' desc='Send one-way message to subject' point='1' />
-<power test='Psychokinesis' name='My Light' level='0' desc='Eyes emit 20ft cone of light' point='1' />
-<power test='Psychometabolism' name='Talons' level='0' desc='Unarmed attacks deal +1 damage' point='1' />
-<power test='Telepathy' name='Telempathic Projection' level='0' desc='You modify targets emotions' point='1' />
-<power test='Metacreativity' name='Trinket' level='0' desc='You create a short lived trinket' point='1' />
-<power test='Psychometabolism' name='Valor' level='0' desc='+1 Moral Bonus on saves' point='1' />
-<power test='Psychometabolism' name='Verve' level='0' desc='Gain +1 temp hit point' point='1' />
-<power test='Metacreativity' name='Astral Construct I' level='1' desc='Create Astral construct to fight for you' point='1' />
-<power test='Telepathy' name='Attraction' level='1' desc='Subject has an attraction you specify' point='1' />
-<power test='Psychokinesis' name='Biocurrent' level='1' desc='Deal 1d4 electrical / round to target' point='1' />
-<power test='Psychometabolism' name='Biofeedback' level='1' desc='Take some damage as subdual damage' point='1' />
-<power test='Psychometabolism' name='Bite of the Wolf' level='1' desc='Gain bite attack 1d8 damage' point='1' />
-<power test='Psychoportation' name='Call Weaponry' level='1' desc='Summon weapon' point='1+' />
-<power test='Telepathy' name='Charm Person' level='1' desc='Makes one person your friend' point='1' />
-<power test='Clairsentience' name='Combat Precognition' level='1' desc='+1 insight bonus to AC' point='1' />
-<power test='Psychometabolism' name='Compression' level='1' desc='You shrink 10%/Lvl max 50%' point='1' />
-<power test='Telepathy' name='Conceal Thoughts' level='1' desc='Conceal motive +20 bluff +4 save vs mind reading' point='1' />
-<power test='Psychokinesis' name='Control Light' level='1' desc='Adjust light levels up or down' point='1' />
-<power test='Psychokinesis' name='Control Object' level='1' desc='Telekinetically control small object' point='1' />
-<power test='Psychokinesis' name='Create Sound' level='1' desc='Create any sound desired' point='1' />
-<power test='Telepathy' name='Demoralize' level='1' desc='Foes suffer -1 on some actions' point='1' />
-<power test='Clairsentience' name='Destiny Dissonance' level='1' desc='Touch attack 1d8 subdual' point='1' />
-<power test='Telepathy' name='Disable' level='1' desc='Hold creatures in 15ft radius' point='1' />
-<power test='Psychoportation' name='Dissipating Touch' level='1' desc='Touch deals 1d8 damage' point='1' />
-<power test='Psychometabolism' name='Emapthic Transfer' level='1' desc='Transfer others wounds' point='1' />
-<power test='Telepathy' name='Empathy' level='1' desc='You know targets surface emotions' point='1' />
-<power test='Clairsentience' name='Expanded Vision' level='1' desc='315-degree sight' point='1' />
-<power test='Psychoportation' name='Feather Fall' level='1' desc='Target falls slowly' point='1' />
-<power test='Psychometabolism' name='Feel Light' level='1' desc='Use tactile sensations to see' point='1' />
-<power test='Psychometabolism' name='Feel Sound' level='1' desc='Use tactile sensations to hear' point='1' />
-<power test='Metacreativity' name='Firefall' level='1' desc='Fiery sparks deal 1d4 within 10ft radius' point='1' />
-<power test='Metacreativity' name='Grease' level='1' desc='Makes 10ft square or object slippery' point='1' />
-<power test='Psychometabolism' name='Hammer' level='1' desc='Touch attack deals 1d8' point='1' />
-<power test='Psychometabolism' name='Hear Light' level='1' desc='Use auditory senses to see' point='1' />
-<power test='Psychometabolism' name='Hustle' level='1' desc='You gain one extra partial action next round' point='1' />
-<power test='Clairsentience' name='Identify' level='1' desc='Identify single feature of psionic item' point='1' />
-<power test='Clairsentience' name='Know Location' level='1' desc='You know, generally, where you are' point='1' />
-<power test='Psychometabolism' name='Lesser Body Adjustment' level='1' desc='Heal 1d8 or +1 fort save, or heal 1 abil pt.' point='1' />
-<power test='Psychokinesis' name='Lesser Concussion' level='1' desc='Pummel foe for 1d6' point='1' />
-<power test='Metacreativity' name='Lesser Metaphysical Weapon' level='1' desc='Weapon gains +1 bonus' point='1' />
-<power test='Telepathy' name='Lesser MindLink' level='1' desc='Limited mental bond with target' point='1' />
-<power test='Psychokinesis' name='Matter Agitation' level='1' desc='Heat creature or object' point='1' />
-<power test='Metacreativity' name='Minor Creation' level='1' desc='Create one wood or cloth item' point='1' />
-<power test='Clairsentience' name='Object Reading' level='1' desc='You know about an objects past' point='1' />
-<power test='Metacreativity' name='Psycoluminescence' level='1' desc='Object emits silvery light 20ft-radius' point='1' />
-<power test='Psychometabolism' name='See Sound' level='1' desc='Use visual senses to hear' point='1' />
-<power test='Telepathy' name='Sense Link' level='1' desc='You sense what a subject senses' point='1' />
-<power test='Psychoportation' name='Skate' level='1' desc='Target slides along ground as if ice' point='1' />
-<power test='Psychoportation' name='Spider Climb' level='1' desc='You can walk on walls or ceilings' point='1' />
-<power test='Clairsentience' name='Steadfast Gaze' level='1' desc='Immune to gaze attacks' point='1' />
-<power test='Psychokinesis' name='Stomp' level='1' desc='Create shockwave does 1d4 subdual' point='1' />
-<power test='Clairsentience' name='Steadfast Gaze' level='1' desc='Immune to gaze attacks' point='1' />
-<power test='Psychometabolism' name='Vigor' level='1' desc='Gain +3 temp hp / lvl (18 max)' point='1' />
-<power test='Psychometabolism' name='Animal Affinity' level='2' desc='Increase ability score by 1d4+1 by emulating an animal' point='3' />
-<power test='Metacreativity' name='Astral Construct II' level='2' desc='Create Astral Construct to fight for you' point='3' />
-<power test='Clairsentience' name='Augury' level='2' desc='Learn if action will be good or bad' point='3' />
-<power test='Telepathy' name='Aversion' level='2' desc='Subject has aversion you specify' point='3' />
-<power test='Psychometabolism' name='Body Adjustment' level='2' desc='Heal 3d6, or fort save bonus, or heal 2 abil pts.' point='3' />
-<power test='Psychometabolism' name='Body Equilibrium' level='2' desc='You can walk on non-solid surfaces' point='3' />
-<power test='Telepathy' name='Brain Lock' level='2' desc='Target cant move or take actions' point='3' />
-<power test='Metacreativity' name='Burning Ray' level='2' desc='Do 3d6 damage to target' point='3' />
-<power test='Psychometabolism' name='Chameleon' level='2' desc='+10 bonus to hide' point='3' />
-<power test='Clairsentience' name='Clairaudience/Clairvoyance' level='2' desc='Hear or See at a distance' point='3' />
-<power test='Psychometabolism' name='Claws of the Bear' level='2' desc='Hands do base 1d12 damage' point='3' />
-<power test='Clairsentience' name='Combat Prescience' level='2' desc='+2 Insight Bonus to attack rolls' point='3' />
-<power test='Psychokinesis' name='Concussion' level='2' desc='Pummel foe for 3d6' point='3' />
-<power test='Psychokinesis' name='Control Air' level='2' desc='Increase air speed 10 + 5/lvl mph' point='3' />
-<power test='Psychokinesis' name='Control Body' level='2' desc='Take control of targets limbs' point='3' />
-<power test='Psychokinesis' name='Control Fire' level='2' desc='Control heat and movement of fire' point='3' />
-<power test='Clairsentience' name='Darkvision' level='2' desc='You gain darkvision' point='3' />
-<power test='Telepathy' name='Detect Thoughts' level='2' desc='Detect subjects surface thoughts' point='3' />
-<power test='Metacreativity' name='Ectoplasmic Cocoon' level='2' desc='Encapsulate target, they cant move' point='3' />
-<power test='Metacreativity' name='Ecto Puppet' level='2' desc='Create an astral construct you control' point='3' />
-<power test='Psychometabolism' name='Expansion' level='2' desc='Grow 10%/lvl Max 100%' point='3' />
-<power test='Psychoportation' name='Glide' level='2' desc='Subject glides at 20ft/rd' point='3' />
-<power test='Telepathy' name='Inflict Pain' level='2' desc='Telepathic strike causing 3d6 damage' point='3' />
-<power test='Telepathy' name='Intrusive Sense Link' level='2' desc='Subject senses what you sense' point='3' />
-<power test='Psychokinesis' name='Invisibility' level='2' desc='Subject is invis for 10min/lvl or until attacks' point='3' />
-<power test='Psychoportation' name='Knock' level='2' desc='Opens locked or psionically locked doors' point='3' />
-<power test='Psychoportation' name='Levitate' level='2' desc='Subject moves up or down' point='3' />
-<power test='Psychometabolism' name='Painful Touch' level='2' desc='Touch causes 1d6 subdual damage' point='3' />
-<power test='Psychoportation' name='Psionic Lock' level='2' desc='Psionically lock portal or chest' point='3' />
-<power test='Clairsentience' name='Recall Pain' level='2' desc='Cause 3d6 damage to target' point='3' />
-<power test='Clairsentience' name='See Invisibility' level='2' desc='Reveals invisible objects' point='3' />
-<power test='Psychoportation' name='Sense Psychoportation' level='2' desc='Know when others use this discipline' point='3' />
-<power test='Clairsentience' name='Sensitivity to Psychic Impressions' level='2' desc='Find out about areas past' point='3' />
-<power test='Psychokinesis' name='Sever the Tie' level='2' desc='Cause 3d8 to undead within 10ft radius' point='3' />
-<power test='Metacreativity' name='Sudden Minor Creation' level='2' desc='Quickly create wood or cloth items' point='3' />
-<power test='Telepathy' name='Suggestion' level='2' desc='Compel target to follow suggestion' point='3' />
-<power test='Psychometabolism' name='Sustenance' level='2' desc='You can go with out food or water' point='3' />
-<power test='Clairsentience' name='Vigilance' level='2' desc='See through mists, murk and darkness' point='3' />
-<power test='Metacreativity' name='Astral Construct III' level='3' desc='Create Astral Construct to fight for you' point='5' />
-<power test='Psychoportation' name='Astral Steed' level='3' desc='Astral Steed appears for 1 hour/lvl' point='5' />
-<power test='Psychometabolism' name='Bite of the Tiger' level='3' desc='Your bite deals 2d8 damage' point='5' />
-<power test='Telepathy' name='Charm Monster' level='3' desc='Make monster your ally' point='5' />
-<power test='Psychometabolism' name='Claws of the Vampire' level='3' desc='Your hands deal 1d8 damage and you heal' point='5' />
-<power test='Psychokinesis' name='Cone of Sound' level='3' desc='Sonic Energy deals 5d4 damage' point='5' />
-<power test='Psychokinesis' name='Control Sound' level='3' desc='You can create very specific sounds' point='5' />
-<power test='Metacreativity' name='Create Food and Water' level='3' desc='Feed 3 humans/lvl' point='5' />
-<power test='Telepathy' name='Crisis of Breath' level='3' desc='Disrupt targets breathing' point='5' />
-<power test='Clairsentience' name='Danger Sense' level='3' desc='You gain +4 insight bonus vs traps' point='5' />
-<power test='Psychoportation' name='Dimension Slide' level='3' desc='Move to any spot you can see' point='5' />
-<power test='Psychometabolism' name='Displacement' level='3' desc='Attacks miss you 50% of the time' point='5' />
-<power test='Psychometabolism' name='Duodimensional Hand' level='3' desc='Hands deal slashing damage' point='5' />
-<power test='Psychometabolism' name='Ectoplasmic Form' level='3' desc='Your form becomes hard to damage' point='5' />
-<power test='Telepathy' name='False Sensory Input' level='3' desc='You falsify one of subjects senses' point='5' />
-<power test='Telepathy' name='Fate Link' level='3' desc='You link the fates of 2 targets' point='5' />
-<power test='Psychoportation' name='Fly' level='3' desc='Subject flies at a speed of 90ft' point='5' />
-<power test='Psychokinesis' name='Greater Concussion' level='3' desc='Pummel foe for 5d6' point='5' />
-<power test='Psychometabolism' name='Improved Biofeedback' level='3' desc='You control your damage' point='5' />
-<power test='Clairsentience' name='Invisibility Purge' level='3' desc='Dispell Invis in 5ft/lvl radius' point='5' />
-<power test='Telepathy' name='Lesser Domination' level='3' desc='Forces subject to obey your will' point='5' />
-<power test='Metacreativity' name='Metaphysical Weapon' level='3' desc='Weapon gains +3 Bonus' point='5' />
-<power test='Telepathy' name='Mindlink' level='3' desc='You have a mental bond with others' point='5' />
-<power test='Psychokinesis' name='Negate Psionics' level='3' desc='Cancel psionic powers and effects' point='5' />
-<power test='Clairsentience' name='Nondetection' level='3' desc='Hides subject from remote viewing' point='5' />
-<power test='Clairsentience' name='Poison Sense' level='3' desc='Sense posion in 30ft radius' point='5' />
-<power test='Clairsentience' name='Prowess' level='3' desc='Gain extra attack of opportunity' point='5' />
-<power test='Psychometabolism' name='Rejuventaion' level='3' desc='Heal 1 ability point / hour' point='5' />
-<power test='Clairsentience' name='Remote Viewing' level='3' desc='You see subject from a distance' point='5' />
-<power test='Telepathy' name='Schism' level='3' desc='Split your mind into 2 parts' point='5' />
-<power test='Psychoportation' name='Time Hop' level='3' desc='Subject hops forwardin time 3d6 rounds' point='5' />
-<power test='Clairsentience' name='Ubiquitous Vision' level='3' desc='You have all-around vision' point='5' />
-<power test='Clairsentience' name='Undead Sense' level='3' desc='Detect Undead 25ft + 5ft/2lvl radius' point='5' />
-<power test='Metacreativity' name='Whitefire' level='3' desc='Deals 5d4 damage in 20ft radius' point='5' />
-<power test='Psychokinesis' name='Amplified Invisibility' level='4' desc='Invisibility that lasts 1 attack' point='7' />
-<power test='Clairsentience' name='Anchored Navigation' level='4' desc='You navigate from a fixed reference point that you mentally sense' point='7' />
-<power test='Metacreativity' name='Astral Construct IV' level='4' desc='Create Astral Construct to fight for you' point='7' />
-<power test='Clairsentience' name='Aura Sight' level='4' desc='You can read auras' point='7' />
-<power test='Clairsentience' name='Detect Remote Viewing' level='4' desc='You know when others spy on you remotely' point='7' />
-<power test='Psychoportation' name='Dimensional Anchor' level='4' desc='Bars extradimensional travel' point='7' />
-<power test='Psychoportation' name='Dimension Door' level='4' desc='Teleport short distances (400ft + 40ft/lvl)' point='7' />
-<power test='Psychoportation' name='Dismissal' level='4' desc='Forces target to return to native plane' point='7' />
-<power test='Metacreativity' name='Dismiss Ectoplasm' level='4' desc='Dissipates ectoplasmic targets' point='7' />
-<power test='Psychometabolism' name='Dissolving Touch' level='4' desc='Touch deals 7d6 acid damage' point='7' />
-<power test='Clairsentience' name='Divination' level='4' desc='Provides advice for actions' point='7' />
-<power test='Telepathy' name='Domination' level='4' desc='Subject obeys your will' point='7' />
-<power test='Metacreativity' name='Fabricate' level='4' desc='Make raw goods into finished items' point='7' />
-<power test='Telepathy' name='Fatal Attraction' level='4' desc='Implant death urge into target' point='7' />
-<power test='Clairsentience' name='Fate of One' level='4' desc='You can reroll an bad roll' point='7' />
-<power test='Telepathy' name='Forced Mindlink' level='4' desc='Create mental bond with unwilling subject' point='7' />
-<power test='Psychoportation' name='Freedom of Movement' level='4' desc='Move normally despite impediments' point='7' />
-<power test='Psychometabolism' name='Immovability' level='4' desc='You are alomst impossible to move' point='7' />
-<power test='Psychokinesis' name='Inertial Barrier' level='4' desc='Damage reduction 10/+5 up to 10/lvl (max 150)' point='7' />
-<power test='Psychokinesis' name='Mass Concussion' level='4' desc='Foes take 7d4 in 20-ft radius' point='7' />
-<power test='Telepathy' name='Mindwipe' level='4' desc='Subject has recent experiences wiped away' point='7' />
-<power test='Psychometabolism' name='Natural Armor' level='4' desc='Gain +4 Natural Armor Bonus' point='7' />
-<power test='Psychometabolism' name='Polymorph Self' level='4' desc='Assume a new form' point='7' />
-<power test='Psychometabolism' name='Psychofeedback' level='4' desc='Use power points to boost Str, Con or Dex' point='7' />
-<power test='Metacreativity' name='Quintessence' level='4' desc='Collapse a bit of time into a dollop' point='7' />
-<power test='Clairsentience' name='Steadfast Perception' level='4' desc='+4 Bonus vs illusion +2 to Spot and Search' point='7' />
-<power test='Telepathy' name='Tailor Memory' level='4' desc='Implant false memory' point='7' />
-<power test='Psychokinesis' name='Telekinesis' level='4' desc='Move up to 25lbs/lvl' point='7' />
-<power test='Metacreativity' name='Wall of Ectoplasm' level='4' desc='Create a protective barrier' point='7' />
-<power test='Psychometabolism' name='Adamant Grasp' level='5' desc='+10 Bonus to Grapple' point='9' />
-<power test='Psychometabolism' name='Adapt Body' level='5' desc='Adapt your body to hostile enviornments ' point='9' />
-<power test='Metacreativity' name='Astral Construct V' level='5' desc='Create Astral Construct to fight for you' point='9' />
-<power test='Psychoportation' name='Baleful Teleport' level='5' desc='Destructive teleport causes 9d6' point='9' />
-<power test='Psychokinesis' name='Brilliant Blast' level='5' desc='Light blast deals 9d4 in 20ft-radius' point='9' />
-<power test='Telepathy' name='Catapsi' level='5' desc='Psychic static is a drag' point='9' />
-<power test='Psychokinesis' name='Clairtangency' level='5' desc='Use far hand at any distance' point='9' />
-<power test='Metacreativity' name='Ectoplasmic Armor' level='5' desc='Gain +10 Armor Bonus' point='9' />
-<power test='Metacreativity' name='Ectoplasmic Shambler' level='5' desc='Foglike predator deals 1pt/round to creatures it surrounds' point='9' />
-<power test='Psychometabolism' name='Energy Barrier' level='5' desc='Convert energy attacks into harmless light' point='9' />
-<power test='Psychometabolism' name='Graft Weapon' level='5' desc='Cause a weapon to become part of your body' point='9' />
-<power test='Telepathy' name='Greater Domination' level='5' desc='Subject obeys your will' point='9' />
-<power test='Metacreativity' name='Incarnate' level='5' desc='Make some psionic effects permanent' point='9' />
-<power test='Metacreativity' name='Major Creation' level='5' desc='As minor creation plus stone and metal' point='9' />
-<power test='Psychokinesis' name='Matter Rearrangement' level='5' desc='Transmute one metal into another' point='9' />
-<power test='Telepathy' name='Metaconcert' level='5' desc='Join minds with others who also use this power to create an ubermind ' point='9' />
-<power test='Psychometabolism' name='Metamorphosis' level='5' desc='Take the form of creatures or objects' point='9' />
-<power test='Telepathy' name='Mind Probe' level='5' desc='Discover subjects secret thoughts' point='9' />
-<power test='Clairsentience' name='Power Resistance' level='5' desc='Gain Power Resistance 12 + Level' point='9' />
-<power test='Psychokinesis' name='Psychic Vampire' level='5' desc='Touch attack drains 2 power pts/lvl which you gain' point='9' />
-<power test='Clairsentience' name='Recall Agony' level='5' desc='Target takes 9d6 damage' point='9' />
-<power test='Psychoportation' name='Sending' level='5' desc='Send short message anywhere instantly' point='9' />
-<power test='Telepathy' name='Sense Psionics' level='5' desc='Detect Psionics over a large area' point='9' />
-<power test='Psychoportation' name='Teleport' level='5' desc='Instantly transport anywhere' point='9' />
-<power test='Psychoportation' name='Teleport Trigger' level='5' desc='Event triggers teleport' point='9' />
-<power test='Clairsentience' name='True Seeing' level='5' desc='See all things as they really are' point='9' />
-<power test='Psychokinesis' name='Ablating' level='6' desc='Subject is shielded from one negate psionic effect' point='11' />
-<power test='Metacreativity' name='Astral Construct VI' level='6' desc='Create Astral Construct to fight for you' point='11' />
-<power test='Telepathy' name='Aura Alteration' level='6' desc='Subject sees something it is not' point='11' />
-<power test='Psychoportation' name='Banishment' level='6' desc='Banish extraplanar creatures' point='11' />
-<power test='Psychometabolism' name='Breath of the Dragon' level='6' desc='Breath fire for 11d4 damage' point='11' />
-<power test='Psychoportation' name='Call Cohort' level='6' desc='Teleport your cohort to you' point='11' />
-<power test='Psychokinesis' name='Disintegrate' level='6' desc='Disintegrate 1 creature or object' point='11' />
-<power test='Psychoportation' name='Ethereal Jaunt' level='6' desc='Become ethereal for 1rd/lvl' point='11' />
-<power test='Metacreativity' name='Flaming Shroud' level='6' desc='Target takes 11d6' point='11' />
-<power test='Psychokinesis' name='Greater Biocurrent' level='6' desc='Deal 4d6 damage/rd to up to 4 creatures' point='11' />
-<power test='Metacreativity' name='Improved Fabricate' level='6' desc='As fabricate but x10' point='11' />
-<power test='Psychoportation' name='Improved Fly' level='6' desc='Fly at speed of 180ft' point='11' />
-<power test='Psychometabolism' name='Improved Vigor' level='6' desc='Gain 13 temporary hit points' point='11' />
-<power test='Telepathy' name='Mass Suggestion' level='6' desc='Many targets follow suggested action ' point='11' />
-<power test='Telepathy' name='Mind Switch' level='6' desc='You switch minds with another' point='11' />
-<power test='Psychokinesis' name='Null Psionics Field' level='6' desc='Negates psionics within 10ft' point='11' />
-<power test='Clairsentience' name='Precognition' level='6' desc='More indepth then divination' point='11' />
-<power test='Clairsentience' name='Remote View Trap' level='6' desc='Enemy remote viewers take 4d6 damage' point='11' />
-<power test='Psychoportation' name='Retrieve' level='6' desc='Teleport any item you see to your hand' point='11' />
-<power test='Clairsentience' name='Shield of Prudence' level='6' desc='Gain +6 insight bonus to AC' point='11' />
-<power test='Psychometabolism' name='Suspend Life' level='6' desc='Slow your life functions' point='11' />
-<power test='Psychoportation' name='Trace Teleport' level='6' desc='Learn orgin or goal of subjects teleport' point='11' />
-<power test='Metacreativity' name='Astral Construct VII' level='7' desc='Create Astral Construct to fight for you' point='13' />
-<power test='Metacreativity' name='Contingency' level='7' desc='Sets trigger condition for another power' point='13' />
-<power test='Psychoportation' name='Divert Teleport' level='7' desc='Choose destination for anothers teleport' point='13' />
-<power test='Clairsentience' name='Emulate Power' level='7' desc='Manifest any psionic power of 6th level or lower' point='13' />
-<power test='Psychometabolism' name='Energy Conversion' level='7' desc='Convert energy attacks to one ray energy attack of your own' point='13' />
-<power test='Psychoportation' name='Etherlealness' level='7' desc='Travel to the ethereal plane with compainions' point='13' />
-<power test='Psychometabolism' name='Fission' level='7' desc='You briefly duplicate yourself' point='13' />
-<power test='Clairsentience' name='Improved Anchored Navigation' level='7' desc='You can navigate from a fixed point even across planes' point='13' />
-<power test='Telepathy' name='Insanity' level='7' desc='Subject is permanently confused' point='13' />
-<power test='Metacreativity' name='Mass Cocoon' level='7' desc='As ectoplasmic cocoon but bigger' point='13' />
-<power test='Telepathy' name='Mass Domination' level='7' desc='Many targets subject to your will' point='13' />
-<power test='Psychometabolism' name='Oak Body' level='7' desc='Your body becomes living wood' point='13' />
-<power test='Psychoportation' name='Phase Door' level='7' desc='Invisible passage through wood or stone' point='13' />
-<power test='Psychoportation' name='Plane Shift' level='7' desc='Up to 8 subjects can travel to another plane' point='13' />
-<power test='Psychokinesis' name='Power Turning' level='7' desc='Reflect 1d4+6 power level back at manifester' point='13' />
-<power test='Psychokinesis' name='Reddopsi' level='7' desc='Reflect psionic powers' point='13' />
-<power test='Clairsentience' name='Sequester' level='7' desc='Subject is invisible to sight and remote viewing' point='13' />
-<power test='Psychoportation' name='Teleport without Error' level='7' desc='As Teleport but no off target arrivals' point='13' />
-<power test='Psychokinesis' name='True Concussion' level='7' desc='Pummel foe for 13d6 damage' point='13' />
-<power test='Telepathy' name='Ultrablast' level='7' desc='Mental scream deals 13d4 to all within 15ft' point='13' />
-<power test='Metacreativity' name='Astral Construct VIII' level='8' desc='Create Astral Construct to fight for you' point='15' />
-<power test='Psychoportation' name='Dream Travel' level='8' desc='You travel to other places through your dreams' point='15' />
-<power test='Clairsentience' name='Foresight' level='8' desc='Psionic senses warn you of impending danger' point='15' />
-<power test='Clairsentience' name='Hypercognition' level='8' desc='You can deduce almost anything' point='15' />
-<power test='Psychokinesis' name='Improved Clairtangency' level='8' desc='You use telekinesis at any distance.' point='15' />
-<power test='Psychoportation' name='Improved Etherealness' level='8' desc='As etherealness but longer (10 mins/lvl).' point='15' />
-<power test='Psychometabolism' name='Iron Body' level='8' desc='Your body becomes living iron. Damage Reduction 50/+3' point='15' />
-<power test='Psychokinesis' name='Matter Manipulation' level='8' desc='Increase or decrease an objects base hardness by 5.' point='15' />
-<power test='Telepathy' name='Mind Blank' level='8' desc='Immune to mental/emotional effects, scrying and remotve viewing.' point='15' />
-<power test='Telepathy' name='Mind Seed' level='8' desc='Subject slowly becomes you.' point='15' />
-<power test='Metacreativity' name='Mind Stone' level='8' desc='Store your personality against future need.' point='15' />
-<power test='Clairsentience' name='Recall Death' level='8' desc='Save vs Will or die, else take 3d6+15 damage.' point='15' />
-<power test='Psychometabolism' name='Shadow Body' level='8' desc='You become a living shadow (damage reduction 50/+5)' point='15' />
-<power test='Psychokinesis' name='Telekinetic Sphere' level='8' desc='Mobile force globe protects one subject' point='15' />
-<power test='Psychoportation' name='Teleportation Circle' level='8' desc='Circle teleports any creatures inside it.' point='15' />
-<power test='Psychoportation' name='Temporal Acceleration' level='8' desc='Your time frame accelerates for 2 rounds' point='15' />
-<power test='Metacreativity' name='True Creation' level='8' desc='As major creation but items are permanent.' point='15' />
-<power test='Telepathy' name='True Domination' level='8' desc='Dominated subjects less likely to defy your will.' point='15' />
-<power test='Psychometabolism' name='Affinity Field' level='9' desc='Effects that affect you also affect others.' point='17' />
-<power test='Telepathy' name='Apopsi' level='9' desc='Delete the psionic power of another.' point='17' />
-<power test='Metacreativity' name='Astral Construct IX' level='9' desc='Create Astral Construct to fight for you' point='17' />
-<power test='Psychoportation' name='Astral Projection' level='9' desc='Project yourself and others into the Astral Plane.' point='17' />
-<power test='Telepathy' name='Confidante' level='9' desc='You and antoher share a permanent mental bond.' point='17' />
-<power test='Psychokinesis' name='Detonation' level='9' desc='Pummel foe for 17d6 damage.' point='17' />
-<power test='Psychokinesis' name='Dissolution' level='9' desc='Disintegrate very large obecjts or creatures' point='17' />
-<power test='Metacreativity' name='Genesis' level='9' desc='You instigate a new demiplane in the Astral Plane.' point='17' />
-<power test='Clairsentience' name='Greater Emulation' level='9' desc='Manifest any psionic power of 8th level or lower.' point='17' />
-<power test='Clairsentience' name='Metafaculty' level='9' desc='Subject can not hide name or location from you.' point='17' />
-<power test='Telepathy' name='Microcosm' level='9' desc='Subject explores imaginary world at expense of the real one.' point='17' />
-<power test='Telepathy' name='Monster Domination' level='9' desc='Controls any creature but for shorter time.' point='17' />
-<power test='Psychoportation' name='Probability Travel' level='9' desc='You and others physically enter Astral Plane.' point='17' />
-<power test='Telepathy' name='Psychic Chirurgery' level='9' desc='Repair psychic damage or impart new psionic power' point='17' />
-<power test='Psychometabolism' name='Shapechange' level='9' desc='You become any creature, change forms 1 per/rd.' point='17' />
-<power test='Psychoportation' name='Temporal Velocity' level='9' desc='Your time frame accelerates for 3d4 rounds.' point='17' />
-<power test='Psychoportation' name='Time Regression' level='9' desc='Relive the last 1d4+1 rounds.' point='17' />
-<power test='Telepathy' name='Thrall' level='9' desc='Subject is your slave forever.' point='17' />
-<power test='Psychometabolism' name='True Metabolism' level='9' desc='Regenerate 10pts / round for 1 min.' point='17' />
-<power test='Psychokinesis' name='True Telekinesis' level='9' desc='Lift or move 500lbs/level at long range.' point='17' />
-</powers>
+<powers>
+<power test='============================' name=' ' level=' ' desc=' ' />
+<power test='    Psionic Combat Powers' name=' ' level=' ' desc=' ' />
+<power test='============================' name=' ' level=' ' desc=' ' />
+<power test='Psionic Attack' name='Ego Whip' level='2' desc='Mental Lash (DC 1d20 + Dex Mod + DC Mod) Damage: 1d4 Dex' point='3' />
+<power test='Psionic Defense' name='Empty Mind' level='1' desc='Hide your mind - DC Mods EW: +1 II: -2 MB: +3 MT: -3 PC: -5' point='1' />
+<power test='Psionic Attack' name='Id Insinuation' level='2' desc='Tendrils of thought disrupt target (DC 1d20 + ST Mod + DC Mod) Damage:1d2 Str' point='3' />
+<power test='Psionic Defense' name='Intellect Fortress' level='1' desc='Incase mind in fortress of determination - DC Mods EW: -2 II: +1 MB: +0 MT: +6 PC: +4 / Mental Hardness 3' point='5' />
+<power test='Psionic Defense' name='Mental Barrier' level='1' desc='A construct of dissembling thoughts - DC Mods EW: -1 II: +1 MB: +0 MT: +1 PC: +3 / Mental Hardness 2' point='3' />
+<power test='Psionic Attack' name='Mind Blast' level='5' desc='Blast the minds of all in 60ft-cone (DC 1d20 + Chr Mod + DC Mod) Damage : 1d4 Chr (nonpsionics stunned for 3d4 rounds)' point='9' />
+<power test='Psionic Attack' name='Mind Thrust' level='1' desc='Massive assult on mental pathways (DC 1d20 + Int Mod + DC Mod) Damage: 1d2 Int' point='1' />
+<power test='Psionic Attack' name='Psychic Crush' level='3' desc='Your will surrounds target squeezes mercilessly (DC 1d20 + Wis Mod + DC Mod)' point='5' />
+<power test='Psionic Defense' name='Thought Shield' level='1' desc='Erect a shield of hope - DC Mods EW: -4 II: -1 MB: -2 MT: +4 PC: +2 / Mental Hardness 1' point='1' />
+<power test='Psionic Defense' name='Tower of Iron Will' level='1' desc='Generates a bastion of thought - DC Mods EW: +3 II: +0 MB: -1 MT: +5 PC: -3 / Mental Hardness 2 (10ft-radius)' point='5' />
+<power test='============================' name=' ' level=' ' desc=' ' />
+<power test='       Psionic Powers' name=' ' level=' ' desc=' ' />
+<power test='============================' name=' ' level=' ' desc=' ' />
+<power test='Metacreativity' name='Bolt' level='0' desc='Create a bolt, arrow, bullet' point='1' />
+<power test='Psychoportation' name='Burst' level='0' desc='Speed +10ft for 1 round' point='1' />
+<power test='Psychoportation' name='Catfall' level='0' desc='You recover well from a fall' point='1' />
+<power test='Psycokinesis' name='Control Shadow' level='0' desc='Control normal shadow like puppet' point='1' />
+<power test='Telepathy' name='Daze' level='0' desc='Creature loses next action' point='1' />
+<power test='Clairsentience' name='Detect Posion' level='0' desc='Detect the presence of poison' point='1' />
+<power test='Clairsentience' name='Detect Psionics' level='0' desc='Detect the presence of psionics' point='1' />
+<power test='Telepathy' name='Distract' level='0' desc='Subjects mind wanders -1 to some actions' point='1' />
+<power test='Psychometabolism' name='Elfsight' level='0' desc='You have low-light vision' point='1' />
+<power test='Psychokinesis' name='Far Hand' level='0' desc='Minor Telekinesis' point='1' />
+<power test='Psychokinesis' name='Far Punch' level='0' desc='Telekinetic punch deals 1 damage' point='1' />
+<power test='Metacreativity' name='Finger of Fire' level='0' desc='Deal 1d3 damage to target' point='1' />
+<power test='Psychoportation' name='Float' level='0' desc='You buoy a subject in water or liquid' point='1' />
+<power test='Telepathy' name='Inkling' level='0' desc='50% likely to know if action is good/bad' point='1' />
+<power test='Clairsentience' name='Know Direction' level='0' desc='You know which way is North' point='1' />
+<power test='Psychometabolism' name='Lesser Natural Armor' level='0' desc='+1 Natural Armor Bonus' point='1' />
+<power test='Telepathy' name='Missive' level='0' desc='Send one-way message to subject' point='1' />
+<power test='Psychokinesis' name='My Light' level='0' desc='Eyes emit 20ft cone of light' point='1' />
+<power test='Psychometabolism' name='Talons' level='0' desc='Unarmed attacks deal +1 damage' point='1' />
+<power test='Telepathy' name='Telempathic Projection' level='0' desc='You modify targets emotions' point='1' />
+<power test='Metacreativity' name='Trinket' level='0' desc='You create a short lived trinket' point='1' />
+<power test='Psychometabolism' name='Valor' level='0' desc='+1 Moral Bonus on saves' point='1' />
+<power test='Psychometabolism' name='Verve' level='0' desc='Gain +1 temp hit point' point='1' />
+<power test='Metacreativity' name='Astral Construct I' level='1' desc='Create Astral construct to fight for you' point='1' />
+<power test='Telepathy' name='Attraction' level='1' desc='Subject has an attraction you specify' point='1' />
+<power test='Psychokinesis' name='Biocurrent' level='1' desc='Deal 1d4 electrical / round to target' point='1' />
+<power test='Psychometabolism' name='Biofeedback' level='1' desc='Take some damage as subdual damage' point='1' />
+<power test='Psychometabolism' name='Bite of the Wolf' level='1' desc='Gain bite attack 1d8 damage' point='1' />
+<power test='Psychoportation' name='Call Weaponry' level='1' desc='Summon weapon' point='1+' />
+<power test='Telepathy' name='Charm Person' level='1' desc='Makes one person your friend' point='1' />
+<power test='Clairsentience' name='Combat Precognition' level='1' desc='+1 insight bonus to AC' point='1' />
+<power test='Psychometabolism' name='Compression' level='1' desc='You shrink 10%/Lvl max 50%' point='1' />
+<power test='Telepathy' name='Conceal Thoughts' level='1' desc='Conceal motive +20 bluff +4 save vs mind reading' point='1' />
+<power test='Psychokinesis' name='Control Light' level='1' desc='Adjust light levels up or down' point='1' />
+<power test='Psychokinesis' name='Control Object' level='1' desc='Telekinetically control small object' point='1' />
+<power test='Psychokinesis' name='Create Sound' level='1' desc='Create any sound desired' point='1' />
+<power test='Telepathy' name='Demoralize' level='1' desc='Foes suffer -1 on some actions' point='1' />
+<power test='Clairsentience' name='Destiny Dissonance' level='1' desc='Touch attack 1d8 subdual' point='1' />
+<power test='Telepathy' name='Disable' level='1' desc='Hold creatures in 15ft radius' point='1' />
+<power test='Psychoportation' name='Dissipating Touch' level='1' desc='Touch deals 1d8 damage' point='1' />
+<power test='Psychometabolism' name='Emapthic Transfer' level='1' desc='Transfer others wounds' point='1' />
+<power test='Telepathy' name='Empathy' level='1' desc='You know targets surface emotions' point='1' />
+<power test='Clairsentience' name='Expanded Vision' level='1' desc='315-degree sight' point='1' />
+<power test='Psychoportation' name='Feather Fall' level='1' desc='Target falls slowly' point='1' />
+<power test='Psychometabolism' name='Feel Light' level='1' desc='Use tactile sensations to see' point='1' />
+<power test='Psychometabolism' name='Feel Sound' level='1' desc='Use tactile sensations to hear' point='1' />
+<power test='Metacreativity' name='Firefall' level='1' desc='Fiery sparks deal 1d4 within 10ft radius' point='1' />
+<power test='Metacreativity' name='Grease' level='1' desc='Makes 10ft square or object slippery' point='1' />
+<power test='Psychometabolism' name='Hammer' level='1' desc='Touch attack deals 1d8' point='1' />
+<power test='Psychometabolism' name='Hear Light' level='1' desc='Use auditory senses to see' point='1' />
+<power test='Psychometabolism' name='Hustle' level='1' desc='You gain one extra partial action next round' point='1' />
+<power test='Clairsentience' name='Identify' level='1' desc='Identify single feature of psionic item' point='1' />
+<power test='Clairsentience' name='Know Location' level='1' desc='You know, generally, where you are' point='1' />
+<power test='Psychometabolism' name='Lesser Body Adjustment' level='1' desc='Heal 1d8 or +1 fort save, or heal 1 abil pt.' point='1' />
+<power test='Psychokinesis' name='Lesser Concussion' level='1' desc='Pummel foe for 1d6' point='1' />
+<power test='Metacreativity' name='Lesser Metaphysical Weapon' level='1' desc='Weapon gains +1 bonus' point='1' />
+<power test='Telepathy' name='Lesser MindLink' level='1' desc='Limited mental bond with target' point='1' />
+<power test='Psychokinesis' name='Matter Agitation' level='1' desc='Heat creature or object' point='1' />
+<power test='Metacreativity' name='Minor Creation' level='1' desc='Create one wood or cloth item' point='1' />
+<power test='Clairsentience' name='Object Reading' level='1' desc='You know about an objects past' point='1' />
+<power test='Metacreativity' name='Psycoluminescence' level='1' desc='Object emits silvery light 20ft-radius' point='1' />
+<power test='Psychometabolism' name='See Sound' level='1' desc='Use visual senses to hear' point='1' />
+<power test='Telepathy' name='Sense Link' level='1' desc='You sense what a subject senses' point='1' />
+<power test='Psychoportation' name='Skate' level='1' desc='Target slides along ground as if ice' point='1' />
+<power test='Psychoportation' name='Spider Climb' level='1' desc='You can walk on walls or ceilings' point='1' />
+<power test='Clairsentience' name='Steadfast Gaze' level='1' desc='Immune to gaze attacks' point='1' />
+<power test='Psychokinesis' name='Stomp' level='1' desc='Create shockwave does 1d4 subdual' point='1' />
+<power test='Clairsentience' name='Steadfast Gaze' level='1' desc='Immune to gaze attacks' point='1' />
+<power test='Psychometabolism' name='Vigor' level='1' desc='Gain +3 temp hp / lvl (18 max)' point='1' />
+<power test='Psychometabolism' name='Animal Affinity' level='2' desc='Increase ability score by 1d4+1 by emulating an animal' point='3' />
+<power test='Metacreativity' name='Astral Construct II' level='2' desc='Create Astral Construct to fight for you' point='3' />
+<power test='Clairsentience' name='Augury' level='2' desc='Learn if action will be good or bad' point='3' />
+<power test='Telepathy' name='Aversion' level='2' desc='Subject has aversion you specify' point='3' />
+<power test='Psychometabolism' name='Body Adjustment' level='2' desc='Heal 3d6, or fort save bonus, or heal 2 abil pts.' point='3' />
+<power test='Psychometabolism' name='Body Equilibrium' level='2' desc='You can walk on non-solid surfaces' point='3' />
+<power test='Telepathy' name='Brain Lock' level='2' desc='Target cant move or take actions' point='3' />
+<power test='Metacreativity' name='Burning Ray' level='2' desc='Do 3d6 damage to target' point='3' />
+<power test='Psychometabolism' name='Chameleon' level='2' desc='+10 bonus to hide' point='3' />
+<power test='Clairsentience' name='Clairaudience/Clairvoyance' level='2' desc='Hear or See at a distance' point='3' />
+<power test='Psychometabolism' name='Claws of the Bear' level='2' desc='Hands do base 1d12 damage' point='3' />
+<power test='Clairsentience' name='Combat Prescience' level='2' desc='+2 Insight Bonus to attack rolls' point='3' />
+<power test='Psychokinesis' name='Concussion' level='2' desc='Pummel foe for 3d6' point='3' />
+<power test='Psychokinesis' name='Control Air' level='2' desc='Increase air speed 10 + 5/lvl mph' point='3' />
+<power test='Psychokinesis' name='Control Body' level='2' desc='Take control of targets limbs' point='3' />
+<power test='Psychokinesis' name='Control Fire' level='2' desc='Control heat and movement of fire' point='3' />
+<power test='Clairsentience' name='Darkvision' level='2' desc='You gain darkvision' point='3' />
+<power test='Telepathy' name='Detect Thoughts' level='2' desc='Detect subjects surface thoughts' point='3' />
+<power test='Metacreativity' name='Ectoplasmic Cocoon' level='2' desc='Encapsulate target, they cant move' point='3' />
+<power test='Metacreativity' name='Ecto Puppet' level='2' desc='Create an astral construct you control' point='3' />
+<power test='Psychometabolism' name='Expansion' level='2' desc='Grow 10%/lvl Max 100%' point='3' />
+<power test='Psychoportation' name='Glide' level='2' desc='Subject glides at 20ft/rd' point='3' />
+<power test='Telepathy' name='Inflict Pain' level='2' desc='Telepathic strike causing 3d6 damage' point='3' />
+<power test='Telepathy' name='Intrusive Sense Link' level='2' desc='Subject senses what you sense' point='3' />
+<power test='Psychokinesis' name='Invisibility' level='2' desc='Subject is invis for 10min/lvl or until attacks' point='3' />
+<power test='Psychoportation' name='Knock' level='2' desc='Opens locked or psionically locked doors' point='3' />
+<power test='Psychoportation' name='Levitate' level='2' desc='Subject moves up or down' point='3' />
+<power test='Psychometabolism' name='Painful Touch' level='2' desc='Touch causes 1d6 subdual damage' point='3' />
+<power test='Psychoportation' name='Psionic Lock' level='2' desc='Psionically lock portal or chest' point='3' />
+<power test='Clairsentience' name='Recall Pain' level='2' desc='Cause 3d6 damage to target' point='3' />
+<power test='Clairsentience' name='See Invisibility' level='2' desc='Reveals invisible objects' point='3' />
+<power test='Psychoportation' name='Sense Psychoportation' level='2' desc='Know when others use this discipline' point='3' />
+<power test='Clairsentience' name='Sensitivity to Psychic Impressions' level='2' desc='Find out about areas past' point='3' />
+<power test='Psychokinesis' name='Sever the Tie' level='2' desc='Cause 3d8 to undead within 10ft radius' point='3' />
+<power test='Metacreativity' name='Sudden Minor Creation' level='2' desc='Quickly create wood or cloth items' point='3' />
+<power test='Telepathy' name='Suggestion' level='2' desc='Compel target to follow suggestion' point='3' />
+<power test='Psychometabolism' name='Sustenance' level='2' desc='You can go with out food or water' point='3' />
+<power test='Clairsentience' name='Vigilance' level='2' desc='See through mists, murk and darkness' point='3' />
+<power test='Metacreativity' name='Astral Construct III' level='3' desc='Create Astral Construct to fight for you' point='5' />
+<power test='Psychoportation' name='Astral Steed' level='3' desc='Astral Steed appears for 1 hour/lvl' point='5' />
+<power test='Psychometabolism' name='Bite of the Tiger' level='3' desc='Your bite deals 2d8 damage' point='5' />
+<power test='Telepathy' name='Charm Monster' level='3' desc='Make monster your ally' point='5' />
+<power test='Psychometabolism' name='Claws of the Vampire' level='3' desc='Your hands deal 1d8 damage and you heal' point='5' />
+<power test='Psychokinesis' name='Cone of Sound' level='3' desc='Sonic Energy deals 5d4 damage' point='5' />
+<power test='Psychokinesis' name='Control Sound' level='3' desc='You can create very specific sounds' point='5' />
+<power test='Metacreativity' name='Create Food and Water' level='3' desc='Feed 3 humans/lvl' point='5' />
+<power test='Telepathy' name='Crisis of Breath' level='3' desc='Disrupt targets breathing' point='5' />
+<power test='Clairsentience' name='Danger Sense' level='3' desc='You gain +4 insight bonus vs traps' point='5' />
+<power test='Psychoportation' name='Dimension Slide' level='3' desc='Move to any spot you can see' point='5' />
+<power test='Psychometabolism' name='Displacement' level='3' desc='Attacks miss you 50% of the time' point='5' />
+<power test='Psychometabolism' name='Duodimensional Hand' level='3' desc='Hands deal slashing damage' point='5' />
+<power test='Psychometabolism' name='Ectoplasmic Form' level='3' desc='Your form becomes hard to damage' point='5' />
+<power test='Telepathy' name='False Sensory Input' level='3' desc='You falsify one of subjects senses' point='5' />
+<power test='Telepathy' name='Fate Link' level='3' desc='You link the fates of 2 targets' point='5' />
+<power test='Psychoportation' name='Fly' level='3' desc='Subject flies at a speed of 90ft' point='5' />
+<power test='Psychokinesis' name='Greater Concussion' level='3' desc='Pummel foe for 5d6' point='5' />
+<power test='Psychometabolism' name='Improved Biofeedback' level='3' desc='You control your damage' point='5' />
+<power test='Clairsentience' name='Invisibility Purge' level='3' desc='Dispell Invis in 5ft/lvl radius' point='5' />
+<power test='Telepathy' name='Lesser Domination' level='3' desc='Forces subject to obey your will' point='5' />
+<power test='Metacreativity' name='Metaphysical Weapon' level='3' desc='Weapon gains +3 Bonus' point='5' />
+<power test='Telepathy' name='Mindlink' level='3' desc='You have a mental bond with others' point='5' />
+<power test='Psychokinesis' name='Negate Psionics' level='3' desc='Cancel psionic powers and effects' point='5' />
+<power test='Clairsentience' name='Nondetection' level='3' desc='Hides subject from remote viewing' point='5' />
+<power test='Clairsentience' name='Poison Sense' level='3' desc='Sense posion in 30ft radius' point='5' />
+<power test='Clairsentience' name='Prowess' level='3' desc='Gain extra attack of opportunity' point='5' />
+<power test='Psychometabolism' name='Rejuventaion' level='3' desc='Heal 1 ability point / hour' point='5' />
+<power test='Clairsentience' name='Remote Viewing' level='3' desc='You see subject from a distance' point='5' />
+<power test='Telepathy' name='Schism' level='3' desc='Split your mind into 2 parts' point='5' />
+<power test='Psychoportation' name='Time Hop' level='3' desc='Subject hops forwardin time 3d6 rounds' point='5' />
+<power test='Clairsentience' name='Ubiquitous Vision' level='3' desc='You have all-around vision' point='5' />
+<power test='Clairsentience' name='Undead Sense' level='3' desc='Detect Undead 25ft + 5ft/2lvl radius' point='5' />
+<power test='Metacreativity' name='Whitefire' level='3' desc='Deals 5d4 damage in 20ft radius' point='5' />
+<power test='Psychokinesis' name='Amplified Invisibility' level='4' desc='Invisibility that lasts 1 attack' point='7' />
+<power test='Clairsentience' name='Anchored Navigation' level='4' desc='You navigate from a fixed reference point that you mentally sense' point='7' />
+<power test='Metacreativity' name='Astral Construct IV' level='4' desc='Create Astral Construct to fight for you' point='7' />
+<power test='Clairsentience' name='Aura Sight' level='4' desc='You can read auras' point='7' />
+<power test='Clairsentience' name='Detect Remote Viewing' level='4' desc='You know when others spy on you remotely' point='7' />
+<power test='Psychoportation' name='Dimensional Anchor' level='4' desc='Bars extradimensional travel' point='7' />
+<power test='Psychoportation' name='Dimension Door' level='4' desc='Teleport short distances (400ft + 40ft/lvl)' point='7' />
+<power test='Psychoportation' name='Dismissal' level='4' desc='Forces target to return to native plane' point='7' />
+<power test='Metacreativity' name='Dismiss Ectoplasm' level='4' desc='Dissipates ectoplasmic targets' point='7' />
+<power test='Psychometabolism' name='Dissolving Touch' level='4' desc='Touch deals 7d6 acid damage' point='7' />
+<power test='Clairsentience' name='Divination' level='4' desc='Provides advice for actions' point='7' />
+<power test='Telepathy' name='Domination' level='4' desc='Subject obeys your will' point='7' />
+<power test='Metacreativity' name='Fabricate' level='4' desc='Make raw goods into finished items' point='7' />
+<power test='Telepathy' name='Fatal Attraction' level='4' desc='Implant death urge into target' point='7' />
+<power test='Clairsentience' name='Fate of One' level='4' desc='You can reroll an bad roll' point='7' />
+<power test='Telepathy' name='Forced Mindlink' level='4' desc='Create mental bond with unwilling subject' point='7' />
+<power test='Psychoportation' name='Freedom of Movement' level='4' desc='Move normally despite impediments' point='7' />
+<power test='Psychometabolism' name='Immovability' level='4' desc='You are alomst impossible to move' point='7' />
+<power test='Psychokinesis' name='Inertial Barrier' level='4' desc='Damage reduction 10/+5 up to 10/lvl (max 150)' point='7' />
+<power test='Psychokinesis' name='Mass Concussion' level='4' desc='Foes take 7d4 in 20-ft radius' point='7' />
+<power test='Telepathy' name='Mindwipe' level='4' desc='Subject has recent experiences wiped away' point='7' />
+<power test='Psychometabolism' name='Natural Armor' level='4' desc='Gain +4 Natural Armor Bonus' point='7' />
+<power test='Psychometabolism' name='Polymorph Self' level='4' desc='Assume a new form' point='7' />
+<power test='Psychometabolism' name='Psychofeedback' level='4' desc='Use power points to boost Str, Con or Dex' point='7' />
+<power test='Metacreativity' name='Quintessence' level='4' desc='Collapse a bit of time into a dollop' point='7' />
+<power test='Clairsentience' name='Steadfast Perception' level='4' desc='+4 Bonus vs illusion +2 to Spot and Search' point='7' />
+<power test='Telepathy' name='Tailor Memory' level='4' desc='Implant false memory' point='7' />
+<power test='Psychokinesis' name='Telekinesis' level='4' desc='Move up to 25lbs/lvl' point='7' />
+<power test='Metacreativity' name='Wall of Ectoplasm' level='4' desc='Create a protective barrier' point='7' />
+<power test='Psychometabolism' name='Adamant Grasp' level='5' desc='+10 Bonus to Grapple' point='9' />
+<power test='Psychometabolism' name='Adapt Body' level='5' desc='Adapt your body to hostile enviornments ' point='9' />
+<power test='Metacreativity' name='Astral Construct V' level='5' desc='Create Astral Construct to fight for you' point='9' />
+<power test='Psychoportation' name='Baleful Teleport' level='5' desc='Destructive teleport causes 9d6' point='9' />
+<power test='Psychokinesis' name='Brilliant Blast' level='5' desc='Light blast deals 9d4 in 20ft-radius' point='9' />
+<power test='Telepathy' name='Catapsi' level='5' desc='Psychic static is a drag' point='9' />
+<power test='Psychokinesis' name='Clairtangency' level='5' desc='Use far hand at any distance' point='9' />
+<power test='Metacreativity' name='Ectoplasmic Armor' level='5' desc='Gain +10 Armor Bonus' point='9' />
+<power test='Metacreativity' name='Ectoplasmic Shambler' level='5' desc='Foglike predator deals 1pt/round to creatures it surrounds' point='9' />
+<power test='Psychometabolism' name='Energy Barrier' level='5' desc='Convert energy attacks into harmless light' point='9' />
+<power test='Psychometabolism' name='Graft Weapon' level='5' desc='Cause a weapon to become part of your body' point='9' />
+<power test='Telepathy' name='Greater Domination' level='5' desc='Subject obeys your will' point='9' />
+<power test='Metacreativity' name='Incarnate' level='5' desc='Make some psionic effects permanent' point='9' />
+<power test='Metacreativity' name='Major Creation' level='5' desc='As minor creation plus stone and metal' point='9' />
+<power test='Psychokinesis' name='Matter Rearrangement' level='5' desc='Transmute one metal into another' point='9' />
+<power test='Telepathy' name='Metaconcert' level='5' desc='Join minds with others who also use this power to create an ubermind ' point='9' />
+<power test='Psychometabolism' name='Metamorphosis' level='5' desc='Take the form of creatures or objects' point='9' />
+<power test='Telepathy' name='Mind Probe' level='5' desc='Discover subjects secret thoughts' point='9' />
+<power test='Clairsentience' name='Power Resistance' level='5' desc='Gain Power Resistance 12 + Level' point='9' />
+<power test='Psychokinesis' name='Psychic Vampire' level='5' desc='Touch attack drains 2 power pts/lvl which you gain' point='9' />
+<power test='Clairsentience' name='Recall Agony' level='5' desc='Target takes 9d6 damage' point='9' />
+<power test='Psychoportation' name='Sending' level='5' desc='Send short message anywhere instantly' point='9' />
+<power test='Telepathy' name='Sense Psionics' level='5' desc='Detect Psionics over a large area' point='9' />
+<power test='Psychoportation' name='Teleport' level='5' desc='Instantly transport anywhere' point='9' />
+<power test='Psychoportation' name='Teleport Trigger' level='5' desc='Event triggers teleport' point='9' />
+<power test='Clairsentience' name='True Seeing' level='5' desc='See all things as they really are' point='9' />
+<power test='Psychokinesis' name='Ablating' level='6' desc='Subject is shielded from one negate psionic effect' point='11' />
+<power test='Metacreativity' name='Astral Construct VI' level='6' desc='Create Astral Construct to fight for you' point='11' />
+<power test='Telepathy' name='Aura Alteration' level='6' desc='Subject sees something it is not' point='11' />
+<power test='Psychoportation' name='Banishment' level='6' desc='Banish extraplanar creatures' point='11' />
+<power test='Psychometabolism' name='Breath of the Dragon' level='6' desc='Breath fire for 11d4 damage' point='11' />
+<power test='Psychoportation' name='Call Cohort' level='6' desc='Teleport your cohort to you' point='11' />
+<power test='Psychokinesis' name='Disintegrate' level='6' desc='Disintegrate 1 creature or object' point='11' />
+<power test='Psychoportation' name='Ethereal Jaunt' level='6' desc='Become ethereal for 1rd/lvl' point='11' />
+<power test='Metacreativity' name='Flaming Shroud' level='6' desc='Target takes 11d6' point='11' />
+<power test='Psychokinesis' name='Greater Biocurrent' level='6' desc='Deal 4d6 damage/rd to up to 4 creatures' point='11' />
+<power test='Metacreativity' name='Improved Fabricate' level='6' desc='As fabricate but x10' point='11' />
+<power test='Psychoportation' name='Improved Fly' level='6' desc='Fly at speed of 180ft' point='11' />
+<power test='Psychometabolism' name='Improved Vigor' level='6' desc='Gain 13 temporary hit points' point='11' />
+<power test='Telepathy' name='Mass Suggestion' level='6' desc='Many targets follow suggested action ' point='11' />
+<power test='Telepathy' name='Mind Switch' level='6' desc='You switch minds with another' point='11' />
+<power test='Psychokinesis' name='Null Psionics Field' level='6' desc='Negates psionics within 10ft' point='11' />
+<power test='Clairsentience' name='Precognition' level='6' desc='More indepth then divination' point='11' />
+<power test='Clairsentience' name='Remote View Trap' level='6' desc='Enemy remote viewers take 4d6 damage' point='11' />
+<power test='Psychoportation' name='Retrieve' level='6' desc='Teleport any item you see to your hand' point='11' />
+<power test='Clairsentience' name='Shield of Prudence' level='6' desc='Gain +6 insight bonus to AC' point='11' />
+<power test='Psychometabolism' name='Suspend Life' level='6' desc='Slow your life functions' point='11' />
+<power test='Psychoportation' name='Trace Teleport' level='6' desc='Learn orgin or goal of subjects teleport' point='11' />
+<power test='Metacreativity' name='Astral Construct VII' level='7' desc='Create Astral Construct to fight for you' point='13' />
+<power test='Metacreativity' name='Contingency' level='7' desc='Sets trigger condition for another power' point='13' />
+<power test='Psychoportation' name='Divert Teleport' level='7' desc='Choose destination for anothers teleport' point='13' />
+<power test='Clairsentience' name='Emulate Power' level='7' desc='Manifest any psionic power of 6th level or lower' point='13' />
+<power test='Psychometabolism' name='Energy Conversion' level='7' desc='Convert energy attacks to one ray energy attack of your own' point='13' />
+<power test='Psychoportation' name='Etherlealness' level='7' desc='Travel to the ethereal plane with compainions' point='13' />
+<power test='Psychometabolism' name='Fission' level='7' desc='You briefly duplicate yourself' point='13' />
+<power test='Clairsentience' name='Improved Anchored Navigation' level='7' desc='You can navigate from a fixed point even across planes' point='13' />
+<power test='Telepathy' name='Insanity' level='7' desc='Subject is permanently confused' point='13' />
+<power test='Metacreativity' name='Mass Cocoon' level='7' desc='As ectoplasmic cocoon but bigger' point='13' />
+<power test='Telepathy' name='Mass Domination' level='7' desc='Many targets subject to your will' point='13' />
+<power test='Psychometabolism' name='Oak Body' level='7' desc='Your body becomes living wood' point='13' />
+<power test='Psychoportation' name='Phase Door' level='7' desc='Invisible passage through wood or stone' point='13' />
+<power test='Psychoportation' name='Plane Shift' level='7' desc='Up to 8 subjects can travel to another plane' point='13' />
+<power test='Psychokinesis' name='Power Turning' level='7' desc='Reflect 1d4+6 power level back at manifester' point='13' />
+<power test='Psychokinesis' name='Reddopsi' level='7' desc='Reflect psionic powers' point='13' />
+<power test='Clairsentience' name='Sequester' level='7' desc='Subject is invisible to sight and remote viewing' point='13' />
+<power test='Psychoportation' name='Teleport without Error' level='7' desc='As Teleport but no off target arrivals' point='13' />
+<power test='Psychokinesis' name='True Concussion' level='7' desc='Pummel foe for 13d6 damage' point='13' />
+<power test='Telepathy' name='Ultrablast' level='7' desc='Mental scream deals 13d4 to all within 15ft' point='13' />
+<power test='Metacreativity' name='Astral Construct VIII' level='8' desc='Create Astral Construct to fight for you' point='15' />
+<power test='Psychoportation' name='Dream Travel' level='8' desc='You travel to other places through your dreams' point='15' />
+<power test='Clairsentience' name='Foresight' level='8' desc='Psionic senses warn you of impending danger' point='15' />
+<power test='Clairsentience' name='Hypercognition' level='8' desc='You can deduce almost anything' point='15' />
+<power test='Psychokinesis' name='Improved Clairtangency' level='8' desc='You use telekinesis at any distance.' point='15' />
+<power test='Psychoportation' name='Improved Etherealness' level='8' desc='As etherealness but longer (10 mins/lvl).' point='15' />
+<power test='Psychometabolism' name='Iron Body' level='8' desc='Your body becomes living iron. Damage Reduction 50/+3' point='15' />
+<power test='Psychokinesis' name='Matter Manipulation' level='8' desc='Increase or decrease an objects base hardness by 5.' point='15' />
+<power test='Telepathy' name='Mind Blank' level='8' desc='Immune to mental/emotional effects, scrying and remotve viewing.' point='15' />
+<power test='Telepathy' name='Mind Seed' level='8' desc='Subject slowly becomes you.' point='15' />
+<power test='Metacreativity' name='Mind Stone' level='8' desc='Store your personality against future need.' point='15' />
+<power test='Clairsentience' name='Recall Death' level='8' desc='Save vs Will or die, else take 3d6+15 damage.' point='15' />
+<power test='Psychometabolism' name='Shadow Body' level='8' desc='You become a living shadow (damage reduction 50/+5)' point='15' />
+<power test='Psychokinesis' name='Telekinetic Sphere' level='8' desc='Mobile force globe protects one subject' point='15' />
+<power test='Psychoportation' name='Teleportation Circle' level='8' desc='Circle teleports any creatures inside it.' point='15' />
+<power test='Psychoportation' name='Temporal Acceleration' level='8' desc='Your time frame accelerates for 2 rounds' point='15' />
+<power test='Metacreativity' name='True Creation' level='8' desc='As major creation but items are permanent.' point='15' />
+<power test='Telepathy' name='True Domination' level='8' desc='Dominated subjects less likely to defy your will.' point='15' />
+<power test='Psychometabolism' name='Affinity Field' level='9' desc='Effects that affect you also affect others.' point='17' />
+<power test='Telepathy' name='Apopsi' level='9' desc='Delete the psionic power of another.' point='17' />
+<power test='Metacreativity' name='Astral Construct IX' level='9' desc='Create Astral Construct to fight for you' point='17' />
+<power test='Psychoportation' name='Astral Projection' level='9' desc='Project yourself and others into the Astral Plane.' point='17' />
+<power test='Telepathy' name='Confidante' level='9' desc='You and antoher share a permanent mental bond.' point='17' />
+<power test='Psychokinesis' name='Detonation' level='9' desc='Pummel foe for 17d6 damage.' point='17' />
+<power test='Psychokinesis' name='Dissolution' level='9' desc='Disintegrate very large obecjts or creatures' point='17' />
+<power test='Metacreativity' name='Genesis' level='9' desc='You instigate a new demiplane in the Astral Plane.' point='17' />
+<power test='Clairsentience' name='Greater Emulation' level='9' desc='Manifest any psionic power of 8th level or lower.' point='17' />
+<power test='Clairsentience' name='Metafaculty' level='9' desc='Subject can not hide name or location from you.' point='17' />
+<power test='Telepathy' name='Microcosm' level='9' desc='Subject explores imaginary world at expense of the real one.' point='17' />
+<power test='Telepathy' name='Monster Domination' level='9' desc='Controls any creature but for shorter time.' point='17' />
+<power test='Psychoportation' name='Probability Travel' level='9' desc='You and others physically enter Astral Plane.' point='17' />
+<power test='Telepathy' name='Psychic Chirurgery' level='9' desc='Repair psychic damage or impart new psionic power' point='17' />
+<power test='Psychometabolism' name='Shapechange' level='9' desc='You become any creature, change forms 1 per/rd.' point='17' />
+<power test='Psychoportation' name='Temporal Velocity' level='9' desc='Your time frame accelerates for 3d4 rounds.' point='17' />
+<power test='Psychoportation' name='Time Regression' level='9' desc='Relive the last 1d4+1 rounds.' point='17' />
+<power test='Telepathy' name='Thrall' level='9' desc='Subject is your slave forever.' point='17' />
+<power test='Psychometabolism' name='True Metabolism' level='9' desc='Regenerate 10pts / round for 1 min.' point='17' />
+<power test='Psychokinesis' name='True Telekinesis' level='9' desc='Lift or move 500lbs/level at long range.' point='17' />
+</powers>
--- a/data/dnd3e/dnd3espells.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3espells.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,326 +1,326 @@
-<spells>
-<spell name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws.' />
-<spell name='Ray of Frost' memrz='0' level='0' desc='Ray deals 1d3 cold damage.' />
-<spell name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object.' />
-<spell name='Daze' memrz='0' level='0' desc='Creature loses next action.' />
-<spell name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack).' />
-<spell name='Light' memrz='0' level='0' desc='Object shines like a torch.' />
-<spell name='Dancing Lights' memrz='0' level='0' desc='Figment torches or other lights.' />
-<spell name='Ghost Sound' memrz='0' level='0' desc='Figment sounds.' />
-<spell name='Disrupt Undead' memrz='0' level='0' desc='Deals 1d6 damage to one undead.' />
-<spell name='Mage Hand' memrz='0' level='0' desc='5-pound telekinesis.' />
-<spell name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object.' />
-<spell name='Open/Close' memrz='0' level='0' desc='Opens or closes small or light things.' />
-<spell name='Arcane Mark' memrz='0' level='0' desc='Inscribes a personal rune (visible or invisible).' />
-<spell name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft.' />
-<spell name='Prestidigitation' memrz='0' level='0' desc='Performs minor tricks.' />
-<spell name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks.' />
-<spell name='Alarm' memrz='0' level='1' desc='Wards an area for 2 hours/level.' />
-<spell name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type.' />
-<spell name='Hold Portal' memrz='0' level='1' desc='Holds door shut.' />
-<spell name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders.' />
-<spell name='Shield' memrz='0' level='1' desc='Invisible disc gives cover and blocks magic missiles.' />
-<spell name='Grease' memrz='0' level='1' desc='Makes 10-ft. square or one object slippery.' />
-<spell name='Mage Armor' memrz='0' level='1' desc='Gives subject +4 armor bonus.' />
-<spell name='Mount' memrz='0' level='1' desc='Summons riding horse for 2 hr./level.' />
-<spell name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you.' />
-<spell name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you.' />
-<spell name='Unseen Servant' memrz='0' level='1' desc='Creates invisible force that obeys your commands.' />
-<spell name='Comprehend Languages' memrz='0' level='1' desc='Understands all spoken and written languages.' />
-<spell name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft.' />
-<spell name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft.' />
-<spell name='Identify' memrz='0' level='1' desc='Determines single feature of magic item.' />
-<spell name='True Strike' memrz='0' level='1' desc='Adds +20 bonus to your next attack roll.' />
-<spell name='Charm Person' memrz='0' level='1' desc='Makes one person your friend.' />
-<spell name='Hypnotism' memrz='0' level='1' desc='Fascinates 2d4 HD of creatures.' />
-<spell name='Sleep' memrz='0' level='1' desc='Put 2d4 HD of creatures into comatose slumber.' />
-<spell name='Magic Missile' memrz='0' level='1' desc='1d4+1 damage; +1 missile/two levels above 1st (max +5).' />
-<spell name='Tensers Floating Disk' memrz='0' level='1' desc='3-ft.-diameter horizontal disk that holds 100 lb./level.' />
-<spell name='Change Self' memrz='0' level='1' desc='Changes your appearance.' />
-<spell name='Color Spray' memrz='0' level='1' desc='Knocks unconscious, blinds, or stuns 1d6 weak creatures.' />
-<spell name='Nystuls Magical Aura' memrz='0' level='1' desc='Grants object false magic aura.' />
-<spell name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura.' />
-<spell name='Silent Image' memrz='0' level='1' desc='Creates minor illusion of your design.' />
-<spell name='Ventriloquism' memrz='0' level='1' desc='Throws voice for 1 min./level.' />
-<spell name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds.' />
-<spell name='Chill Touch' memrz='0' level='1' desc='1 touch/level deals 1d6 damage and possibly 1 Str damage.' />
-<spell name='Ray of Enfeeblement' memrz='0' level='1' desc='Ray reduces Str by 1d6 points +1 point/two levels.' />
-<spell name='Animate Rope' memrz='0' level='1' desc='Makes a rope move at your command.' />
-<spell name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max: 5d4).' />
-<spell name='Enlarge' memrz='0' level='1' desc='Object or creature grows +10%/level (max +50%).' />
-<spell name='Erase' memrz='0' level='1' desc='Mundane or magical writing vanishes.' />
-<spell name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed.' />
-<spell name='Feather Fall' memrz='0' level='1' desc='Objects or creatures fall slowly.' />
-<spell name='Jump' memrz='0' level='1' desc='Subject gets +30 on Jump checks.' />
-<spell name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus.' />
-<spell name='Message' memrz='0' level='1' desc='Whispered conversation at distance.' />
-<spell name='Reduce' memrz='0' level='1' desc='Object or creature shrinks 10%/level (max 50%).' />
-<spell name='Shocking Grasp' memrz='0' level='1' desc='Touch delivers 1d8 +1/level electricity.' />
-<spell name='Spider Climb' memrz='0' level='1' desc='Grants ability to walk on walls and ceilings.' />
-<spell name='Arcane Lock' memrz='0' level='2' desc='Magically locks a portal or chest.' />
-<spell name='Obscure Object' memrz='0' level='2' desc='Masks object against divination.' />
-<spell name='Protection from Arrows' memrz='0' level='2' desc='Subject immune to most ranged attacks.' />
-<spell name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type.' />
-<spell name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision.' />
-<spell name='Glitterdust' memrz='0' level='2' desc='Blinds creatures, outlines invisible creatures.' />
-<spell name='Melfs Acid Arrow' memrz='0' level='2' desc='Ranged touch attack; 2d4 damage for 1 round + 1 round/three levels.' />
-<spell name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you.' />
-<spell name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures.' />
-<spell name='Web' memrz='0' level='2' desc='Fills 10-ft. cube/level with sticky spider webs.' />
-<spell name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts.' />
-<spell name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type).' />
-<spell name='See Invisibility' memrz='0' level='2' desc='Reveals invisible creatures or objects.' />
-<spell name='Tashas Hideous Laughter' memrz='0' level='2' desc='Subject loses actions for 1d3 rounds.' />
-<spell name='Darkness' memrz='0' level='2' desc='20-ft. radius of supernatural darkness.' />
-<spell name='Daylight' memrz='0' level='2' desc='60-ft. radius of bright light.' />
-<spell name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level.' />
-<spell name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures.' />
-<spell name='Blur' memrz='0' level='2' desc='Attacks miss subject 20% of the time.' />
-<spell name='Continual Flame' memrz='0' level='2' desc='Makes a permanent, heatless torch.' />
-<spell name='Hypnotic Pattern' memrz='0' level='2' desc='Fascinates 2d4+1 HD/level of creatures.' />
-<spell name='Invisibility' memrz='0' level='2' desc='Subject is invisible for 10 min./level or until it attacks.' />
-<spell name='Leomunds Trap' memrz='0' level='2' desc='Makes item seem trapped.' />
-<spell name='Magic Mouth' memrz='0' level='2' desc='Speaks once when triggered.' />
-<spell name='Minor Image' memrz='0' level='2' desc='As silent image, plus some sound.' />
-<spell name='Mirror Image' memrz='0' level='2' desc='Creates decoy duplicates of you (1d4 +1/three levels, max 8).' />
-<spell name='Misdirection' memrz='0' level='2' desc='Misleads divinations for one creature or object.' />
-<spell name='Ghoul Touch' memrz='0' level='2' desc='Paralyzes one subject, who exudes stench (-2 penalty) nearby.' />
-<spell name='Scare' memrz='0' level='2' desc='Panics creatures up to 5 HD (15-ft. radius).' />
-<spell name='Spectral Hand' memrz='0' level='2' desc='Creates disembodied glowing hand to deliver touch attacks.' />
-<spell name='Alter Self' memrz='0' level='2' desc='As change self, plus more drastic changes.' />
-<spell name='Blindness/Deafness' memrz='0' level='2' desc='Makes subject blind or deaf.' />
-<spell name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level.' />
-<spell name='Cats Grace' memrz='0' level='2' desc='Subject gains 1d4+1 Dex for 1 hr./level.' />
-<spell name='Darkvision' memrz='0' level='2' desc='See 60 ft. in total darkness.' />
-<spell name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level.' />
-<spell name='Knock' memrz='0' level='2' desc='Opens locked or magically sealed door.' />
-<spell name='Levitate' memrz='0' level='2' desc='Subject moves up and down at your direction.' />
-<spell name='Pyrotechnics' memrz='0' level='2' desc='Turns fire into blinding light or choking smoke.' />
-<spell name='Rope Trick' memrz='0' level='2' desc='Up to eight creatures hide in extradimensional space.' />
-<spell name='Whispering Wind' memrz='0' level='2' desc='Sends a short message one mile/level.' />
-<spell name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects.' />
-<spell name='Explosive Runes' memrz='0' level='3' desc='Deals 6d6 damage when read.' />
-<spell name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level.' />
-<spell name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying.' />
-<spell name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy.' />
-<spell name='Flame Arrow' memrz='0' level='3' desc='Shoots flaming projectiles (extra damage) or fiery bolts (4d6 damage).' />
-<spell name='Phantom Steed' memrz='0' level='3' desc='Magical horse appears for 1 hour/level.' />
-<spell name='Sepia Snake Sigil' memrz='0' level='3' desc='Creates text symbol that immobilizes reader.' />
-<spell name='Sleet Storm' memrz='0' level='3' desc='Hampers vision and movement.' />
-<spell name='Stinking Cloud' memrz='0' level='3' desc='Nauseating vapors, 1 round/level.' />
-<spell name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you.' />
-<spell name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level.' />
-<spell name='Tongues' memrz='0' level='3' desc='Speak any language.' />
-<spell name='Hold Person' memrz='0' level='3' desc='Holds one person helpless; 1 round/level.' />
-<spell name='Suggestion' memrz='0' level='3' desc='Compels subject to follow stated course of action.' />
-<spell name='Fireball' memrz='0' level='3' desc='1d6 damage per level, 20-ft. radius.' />
-<spell name='Gust of Wind' memrz='0' level='3' desc='Blows away or knocks down smaller creatures.' />
-<spell name='Leomunds Tiny Hut' memrz='0' level='3' desc='Creates shelter for 10 creatures.' />
-<spell name='Lightning Bolt' memrz='0' level='3' desc='Electricity deals 1d6 damage/level.' />
-<spell name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases.' />
-<spell name='Displacement' memrz='0' level='3' desc='Attacks miss subject 50%.' />
-<spell name='Illusory Script' memrz='0' level='3' desc='Only intended reader can decipher.' />
-<spell name='Invisibility Sphere' memrz='0' level='3' desc='Makes everyone within 10 ft. invisible.' />
-<spell name='Major Image' memrz='0' level='3' desc='As silent image, plus sound, smell and thermal effects.' />
-<spell name='Gentle Repose' memrz='0' level='3' desc='Preserves one corpse.' />
-<spell name='Halt Undead' memrz='0' level='3' desc='Immobilizes undead for 1 round/level.' />
-<spell name='Vampiric Touch' memrz='0' level='3' desc='Touch deals 1d6/two caster levels; caster gains damage as hp.' />
-<spell name='Blink' memrz='0' level='3' desc='You randomly vanish and reappear for 1 round/level.' />
-<spell name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90.' />
-<spell name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly.' />
-<spell name='Greater Magic Weapon' memrz='0' level='3' desc='+1/three levels (max +5).' />
-<spell name='Haste' memrz='0' level='3' desc='Extra partial action and +4 AC.' />
-<spell name='Keen Edge' memrz='0' level='3' desc='Doubles normal weapons threat range.' />
-<spell name='Secret Page' memrz='0' level='3' desc='Changes one page to hide its real content.' />
-<spell name='Shrink Item' memrz='0' level='3' desc='Object shrinks to one-twelfth size.' />
-<spell name='Slow' memrz='0' level='3' desc='One subject/level takes only partial actions, -2 AC, -2 melee rolls.' />
-<spell name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater.' />
-<spell name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement.' />
-<spell name='Fire Trap' memrz='0' level='4' desc='Opened object deals 1d4 +1/level damage.' />
-<spell name='Minor Globe of Invulnerability' memrz='0' level='4' desc='Stops 1st- through 3rd-level spell effects.' />
-<spell name='Remove Curse' memrz='0' level='4' desc='Frees object or person from curse.' />
-<spell name='Stoneskin' memrz='0' level='4' desc='Stops blows, cuts, stabs, and slashes.' />
-<spell name='Evards Black Tentacles' memrz='0' level='4' desc='1d4 +1/level tentacles grapple randomly within 15 ft.' />
-<spell name='Leomunds Secure Shelter' memrz='0' level='4' desc='Creates sturdy cottage.' />
-<spell name='Minor Creation' memrz='0' level='4' desc='Creates one cloth or wood object.' />
-<spell name='Solid Fog' memrz='0' level='4' desc='Blocks vision and slows movement.' />
-<spell name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you.' />
-<spell name='Arcane Eye' memrz='0' level='4' desc='Invisible floating eye moves 30 ft./round.' />
-<spell name='Detect Scrying' memrz='0' level='4' desc='Alerts you of magical eavesdropping.' />
-<spell name='Locate Creature' memrz='0' level='4' desc='Indicates direction to familiar creature.' />
-<spell name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance.' />
-<spell name='Charm Monster' memrz='0' level='4' desc='Makes monster believe it is your ally.' />
-<spell name='Confusion' memrz='0' level='4' desc='Makes subject behave oddly for 1 round/level.' />
-<spell name='Emotion' memrz='0' level='4' desc='Arouses strong emotion in subject.' />
-<spell name='Lesser Geas' memrz='0' level='4' desc='Commands subject of 7 HD or less.' />
-<spell name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold.' />
-<spell name='Ice Storm' memrz='0' level='4' desc='Hail deals 5d6 damage in cylinder 40 ft. across.' />
-<spell name='Otilukes Resilient Sphere' memrz='0' level='4' desc='Force globe protects but traps one subject.' />
-<spell name='Shout' memrz='0' level='4' desc='Deafens all within cone and deals 2d6 damage.' />
-<spell name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft.' />
-<spell name='Wall of Ice' memrz='0' level='4' desc='Ice plane creates wall with 15 hp +1/level, or hemisphere can trap creatures inside.' />
-<spell name='Hallucinatory Terrain' memrz='0' level='4' desc='Makes one type of terrain appear like another (field into forest, etc).' />
-<spell name='Illusory Wall' memrz='0' level='4' desc='Wall, floor, or ceiling looks real, but anything can pass through.' />
-<spell name='Improved Invisibility' memrz='0' level='4' desc='As invisibility, but subject can attack and stay invisible.' />
-<spell name='Phantasmal Killer' memrz='0' level='4' desc='Fearsome illusion kills subject or deals 3d6 damage.' />
-<spell name='Rainbow Pattern' memrz='0' level='4' desc='Lights prevent 24 HD of creatures from attacking or moving away.' />
-<spell name='Shadow Conjuration' memrz='0' level='4' desc='Mimics conjuring below 4th level.' />
-<spell name='Contagion' memrz='0' level='4' desc='Infects subject with chosen disease.' />
-<spell name='Enervation' memrz='0' level='4' desc='Subject gains 1d4 negative levels.' />
-<spell name='Fear' memrz='0' level='4' desc='Subjects within cone flee for 1 round/level.' />
-<spell name='Bestow Curse' memrz='0' level='4' desc='-6 to an ability; -4 on attacks, saves, and checks; or 50% chance of losing each action.' />
-<spell name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb.' />
-<spell name='Polymorph Other' memrz='0' level='4' desc='Gives one subject a new form.' />
-<spell name='Polymorph Self' memrz='0' level='4' desc='You assume a new form.' />
-<spell name='Rarys Mnemonic Enhancer' memrz='0' level='4' desc='Prepares extra spells or retains one just cast. Wizard only.' />
-<spell name='Dismissal' memrz='0' level='5' desc='Forces a creature to return to native plane.' />
-<spell name='Cloudkill' memrz='0' level='5' desc='Kills 3 HD or less; 4-6 HD save or die.' />
-<spell name='Leomunds Secret Chest' memrz='0' level='5' desc='Hides expensive chest on Ethereal Plane; you retrieve it at will.' />
-<spell name='Lesser Planar Binding' memrz='0' level='5' desc='Traps outsider until it performs a task.' />
-<spell name='Major Creation' memrz='0' level='5' desc='As minor creation, plus stone and metal.' />
-<spell name='Mordenkainens Faithful Hound' memrz='0' level='5' desc='Phantom dog can guard, attack.' />
-<spell name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you.' />
-<spell name='Wall of Iron' memrz='0' level='5' desc='30 hp/four levels; can topple onto foes.' />
-<spell name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped.' />
-<spell name='Contact Other Plane' memrz='0' level='5' desc='Ask question of extraplanar entity.' />
-<spell name='Prying Eyes' memrz='0' level='5' desc='1d4 floating eyes +1/level scout for you.' />
-<spell name='Rarys Telepathic Bond' memrz='0' level='5' desc='Link lets allies communicate.' />
-<spell name='Dominate Person' memrz='0' level='5' desc='Controls humanoid telepathically.' />
-<spell name='Feeblemind' memrz='0' level='5' desc='Subjects Int drops to 1.' />
-<spell name='Hold Monster' memrz='0' level='5' desc='As hold person, but any creature.' />
-<spell name='Mind Fog' memrz='0' level='5' desc='Subjects in fog get -10 Wis, Will checks.' />
-<spell name='Bigbys Interposing Hand' memrz='0' level='5' desc='Hand provides 90% cover against one opponent.' />
-<spell name='Cone of Cold' memrz='0' level='5' desc='1d6 cold damage/level.' />
-<spell name='Sending' memrz='0' level='5' desc='Delivers short message anywhere, instantly.' />
-<spell name='Wall of Force' memrz='0' level='5' desc='Wall is immune to damage.' />
-<spell name='Dream' memrz='0' level='5' desc='Sends message to anyone sleeping.' />
-<spell name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion.' />
-<spell name='Greater Shadow Conjuration' memrz='0' level='5' desc='As shadow conjuration, but up to 4th level and 40% real.' />
-<spell name='Mirage Arcana' memrz='0' level='5' desc='As hallucinatory terrain, plus structures.' />
-<spell name='Nightmare' memrz='0' level='5' desc='Sends vision dealing 1d10 damage, fatigue.' />
-<spell name='Persistent Image' memrz='0' level='5' desc='As major image, but no concentration required.' />
-<spell name='Seeming' memrz='0' level='5' desc='Changes appearance of one person/two levels.' />
-<spell name='Shadow Evocation' memrz='0' level='5' desc='Mimics evocation less than 5th level.' />
-<spell name='Animate Dead' memrz='0' level='5' desc='Creates undead skeletons and zombies.' />
-<spell name='Magic Jar' memrz='0' level='5' desc='Enables possession of another creature.' />
-<spell name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD.' />
-<spell name='Fabricate' memrz='0' level='5' desc='Transforms raw materials into finished items.' />
-<spell name='Passwall' memrz='0' level='5' desc='Breaches walls 1 ft. thick/level.' />
-<spell name='Stone Shape' memrz='0' level='5' desc='Sculpts stone into any form.' />
-<spell name='Telekinesis' memrz='0' level='5' desc='Lifts or moves 25 lb./level at long range.' />
-<spell name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere.' />
-<spell name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
-<spell name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
-<spell name='Permanency' memrz='0' level='5' desc='Makes certain spells permanent; costs XP.' />
-<spell name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft.' />
-<spell name='Globe of Invulnerability' memrz='0' level='6' desc='As minor globe, plus 4th level.' />
-<spell name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but +20 on check.' />
-<spell name='Guards and Wards' memrz='0' level='6' desc='Array of magic effects protect area.' />
-<spell name='Repulsion' memrz='0' level='6' desc='Creatures cant approach you.' />
-<spell name='Acid Fog' memrz='0' level='6' desc='Fog deals acid damage.' />
-<spell name='Planar Binding' memrz='0' level='6' desc='As lesser planar binding, but up to 16 HD.' />
-<spell name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you.' />
-<spell name='Analyze Dweomer' memrz='0' level='6' desc='Reveals magical aspects of subject.' />
-<spell name='Legend Lore' memrz='0' level='6' desc='Learn tales about a person, place, or thing.' />
-<spell name='True Seeing' memrz='0' level='6' desc='See all things as they really are.' />
-<spell name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature.' />
-<spell name='Mass Suggestion' memrz='0' level='6' desc='As suggestion, plus one/level subjects.' />
-<spell name='Bigbys Forceful Hand' memrz='0' level='6' desc='Hand pushes creatures away.' />
-<spell name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts.' />
-<spell name='Contingency' memrz='0' level='6' desc='Sets trigger condition for another spell.' />
-<spell name='Otilukes Freezing Sphere' memrz='0' level='6' desc='Freezes water or deals cold damage.' />
-<spell name='Greater Shadow Evocation' memrz='0' level='6' desc='As shadow evocation, but up to 5th level.' />
-<spell name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double.' />
-<spell name='Permanent Image' memrz='0' level='6' desc='Includes sight, sound, and smell.' />
-<spell name='Programmed Image' memrz='0' level='6' desc='As major image, plus triggered by event.' />
-<spell name='Project Image' memrz='0' level='6' desc='Illusory double can talk and cast spells.' />
-<spell name='Shades' memrz='0' level='6' desc='As shadow conjuration, but up to 5th level and 60% real.' />
-<spell name='Veil' memrz='0' level='6' desc='Changes appearance of group of creatures.' />
-<spell name='Circle of Death' memrz='0' level='6' desc='Kills 1d4 HD/level.' />
-<spell name='Control Water' memrz='0' level='6' desc='Raises, lowers, or parts bodies of water.' />
-<spell name='Control Weather' memrz='0' level='6' desc='Changes weather in local area.' />
-<spell name='Disintegrate' memrz='0' level='6' desc='Makes one creature or object vanish.' />
-<spell name='Eyebite' memrz='0' level='6' desc='Charm, fear, sicken or sleep one subject.' />
-<spell name='Flesh to Stone' memrz='0' level='6' desc='Turns subject creature into statue.' />
-<spell name='Mass Haste' memrz='0' level='6' desc='As haste, affects one/level subjects.' />
-<spell name='Mordenkainens Lucubration' memrz='0' level='6' desc='Recalls spell of 5th level or less. Wizard Only.' />
-<spell name='Move Earth' memrz='0' level='6' desc='Digs trenches and build hills.' />
-<spell name='Stone to Flesh' memrz='0' level='6' desc='Restores petrified creature.' />
-<spell name='Tensers Transformation' memrz='0' level='6' desc='You gain combat bonuses.' />
-<spell name='Banishment' memrz='0' level='7' desc='Banishes 2 HD/level extraplanar creatures.' />
-<spell name='Sequester' memrz='0' level='7' desc='Subject is invisible to sight and scrying.' />
-<spell name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster.' />
-<spell name='Drawmijs Instant Summons' memrz='0' level='7' desc='Prepared object appears in your hand.' />
-<spell name='Mordenkainens Magnificent Mansion' memrz='0' level='7' desc='Door leads to extradimensional mansion.' />
-<spell name='Phase Door' memrz='0' level='7' desc='Invisible passage through wood or stone.' />
-<spell name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp.' />
-<spell name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you.' />
-<spell name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer.' />
-<spell name='Vision' memrz='0' level='7' desc='As legend lore, but quicker and strenuous.' />
-<spell name='Insanity' memrz='0' level='7' desc='Subject suffers continuous confusion.' />
-<spell name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples.' />
-<spell name='Delayed Blast Fireball' memrz='0' level='7' desc='1d8 fire damage/level; you can delay blast for 5 rounds.' />
-<spell name='Forcecage' memrz='0' level='7' desc='Cube of force imprisons all inside.' />
-<spell name='Mordenkainens Sword' memrz='0' level='7' desc='Floating magic blade strikes opponents.' />
-<spell name='Prismatic Spray' memrz='0' level='7' desc='Rays hit subjects with variety of effects.' />
-<spell name='Mass Invisibility' memrz='0' level='7' desc='As invisibility, but affects all in range.' />
-<spell name='Shadow Walk' memrz='0' level='7' desc='Step into shadow to travel rapidly.' />
-<spell name='Simulacrum' memrz='0' level='7' desc='Creates partially real double of a creature.' />
-<spell name='Control Undead' memrz='0' level='7' desc='Undead dont attack you while under your command.' />
-<spell name='Finger of Death' memrz='0' level='7' desc='Kills one subject.' />
-<spell name='Ethereal Jaunt' memrz='0' level='7' desc='You become ethereal for 1 round/level.' />
-<spell name='Plane Shift' memrz='0' level='7' desc='Up to eight subjects travel to another plane.' />
-<spell name='Reverse Gravity' memrz='0' level='7' desc='Objects and creatures fall upward.' />
-<spell name='Statue' memrz='0' level='7' desc='Subject can become a statue at will.' />
-<spell name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival.' />
-<spell name='Vanish' memrz='0' level='7' desc='As teleport, but affects a touched object.' />
-<spell name='Limited Wish' memrz='0' level='7' desc='Alters reality-within spell limits.' />
-<spell name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying.' />
-<spell name='Prismatic Wall' memrz='0' level='8' desc='Walls colors have array of effects.' />
-<spell name='Protection from Spells' memrz='0' level='8' desc='Confers +8 resistance bonus.' />
-<spell name='Greater Planar Binding' memrz='0' level='8' desc='As lesser planar binding, but up to 24 HD.' />
-<spell name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round.' />
-<spell name='Maze' memrz='0' level='8' desc='Traps subject in extradimensional maze.' />
-<spell name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures.' />
-<spell name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you.' />
-<spell name='Trap the Soul' memrz='0' level='8' desc='Imprisons subject within gem.' />
-<spell name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object.' />
-<spell name='Antipathy' memrz='0' level='8' desc='Object or location affected by spell repels certain creatures.' />
-<spell name='Binding' memrz='0' level='8' desc='Array of techniques to imprison a creature.' />
-<spell name='Demand' memrz='0' level='8' desc='As sending, plus you can send suggestion.' />
-<spell name='Mass Charm' memrz='0' level='8' desc='As charm monster, but all within 30 ft.' />
-<spell name='Ottos Irresistible Dance' memrz='0' level='8' desc='Forces subject to dance.' />
-<spell name='Sympathy' memrz='0' level='8' desc='Object or location attracts certain creatures.' />
-<spell name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes.' />
-<spell name='Otilukes Telekinetic Sphere' memrz='0' level='8' desc='As Otilukes resilient sphere, but you move sphere telekinetically.' />
-<spell name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage.' />
-<spell name='Screen' memrz='0' level='8' desc='Illusion hides area from vision, scrying.' />
-<spell name='Clone' memrz='0' level='8' desc='Duplicate awakens when original dies.' />
-<spell name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft.' />
-<spell name='Etherealness' memrz='0' level='8' desc='Travel to Ethereal Plane with companions.' />
-<spell name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron.' />
-<spell name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else.' />
-<spell name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects.' />
-<spell name='Freedom' memrz='0' level='9' desc='Releases creature suffering imprisonment.' />
-<spell name='Imprisonment' memrz='0' level='9' desc='Entombs subject beneath the earth.' />
-<spell name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items.' />
-<spell name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides.' />
-<spell name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning.' />
-<spell name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones.' />
-<spell name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you.' />
-<spell name='Foresight' memrz='0' level='9' desc='Sixth sense warns of impending danger.' />
-<spell name='Dominate Monster' memrz='0' level='9' desc='As dominate person, but any creature.' />
-<spell name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys interposing hand, but stronger.' />
-<spell name='Meteor Swarm' memrz='0' level='9' desc='Deals 24d6 fire damage, plus bursts.' />
-<spell name='Weird' memrz='0' level='9' desc='As phantasmal killer, but affects all within 30 ft.' />
-<spell name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane.' />
-<spell name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels.' />
-<spell name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection.' />
-<spell name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level.' />
-<spell name='Refuge' memrz='0' level='9' desc='Alters item to transport its possessor to you.' />
-<spell name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round.' />
-<spell name='Teleportation Circle' memrz='0' level='9' desc='Circle teleports any creature inside to designated spot.' />
-<spell name='Temporal Stasis' memrz='0' level='9' desc='Puts subject into suspended animation.' />
-<spell name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds.' />
-<spell name='Wish' memrz='0' level='9' desc='As limited wish, but with fewer limits.' />
-</spells>
+<spells>
+<spell name='Resistance' memrz='0' level='0' desc='Subject gains +1 on saving throws.' />
+<spell name='Ray of Frost' memrz='0' level='0' desc='Ray deals 1d3 cold damage.' />
+<spell name='Detect Poison' memrz='0' level='0' desc='Detects poison in one creature or small object.' />
+<spell name='Daze' memrz='0' level='0' desc='Creature loses next action.' />
+<spell name='Flare' memrz='0' level='0' desc='Dazzles one creature (-1 attack).' />
+<spell name='Light' memrz='0' level='0' desc='Object shines like a torch.' />
+<spell name='Dancing Lights' memrz='0' level='0' desc='Figment torches or other lights.' />
+<spell name='Ghost Sound' memrz='0' level='0' desc='Figment sounds.' />
+<spell name='Disrupt Undead' memrz='0' level='0' desc='Deals 1d6 damage to one undead.' />
+<spell name='Mage Hand' memrz='0' level='0' desc='5-pound telekinesis.' />
+<spell name='Mending' memrz='0' level='0' desc='Makes minor repairs on an object.' />
+<spell name='Open/Close' memrz='0' level='0' desc='Opens or closes small or light things.' />
+<spell name='Arcane Mark' memrz='0' level='0' desc='Inscribes a personal rune (visible or invisible).' />
+<spell name='Detect Magic' memrz='0' level='0' desc='Detects spells and magic items within 60 ft.' />
+<spell name='Prestidigitation' memrz='0' level='0' desc='Performs minor tricks.' />
+<spell name='Read Magic' memrz='0' level='0' desc='Read scrolls and spellbooks.' />
+<spell name='Alarm' memrz='0' level='1' desc='Wards an area for 2 hours/level.' />
+<spell name='Endure Elements' memrz='0' level='1' desc='Ignores 5 damage/round from one energy type.' />
+<spell name='Hold Portal' memrz='0' level='1' desc='Holds door shut.' />
+<spell name='Protection from Chaos/Evil/Good/Law' memrz='0' level='1' desc='+2 AC and saves, counter mind control, hedge out elementals and outsiders.' />
+<spell name='Shield' memrz='0' level='1' desc='Invisible disc gives cover and blocks magic missiles.' />
+<spell name='Grease' memrz='0' level='1' desc='Makes 10-ft. square or one object slippery.' />
+<spell name='Mage Armor' memrz='0' level='1' desc='Gives subject +4 armor bonus.' />
+<spell name='Mount' memrz='0' level='1' desc='Summons riding horse for 2 hr./level.' />
+<spell name='Obscuring Mist' memrz='0' level='1' desc='Fog surrounds you.' />
+<spell name='Summon Monster I' memrz='0' level='1' desc='Calls outsider to fight for you.' />
+<spell name='Unseen Servant' memrz='0' level='1' desc='Creates invisible force that obeys your commands.' />
+<spell name='Comprehend Languages' memrz='0' level='1' desc='Understands all spoken and written languages.' />
+<spell name='Detect Secret Doors' memrz='0' level='1' desc='Reveals hidden doors within 60 ft.' />
+<spell name='Detect Undead' memrz='0' level='1' desc='Reveals undead within 60 ft.' />
+<spell name='Identify' memrz='0' level='1' desc='Determines single feature of magic item.' />
+<spell name='True Strike' memrz='0' level='1' desc='Adds +20 bonus to your next attack roll.' />
+<spell name='Charm Person' memrz='0' level='1' desc='Makes one person your friend.' />
+<spell name='Hypnotism' memrz='0' level='1' desc='Fascinates 2d4 HD of creatures.' />
+<spell name='Sleep' memrz='0' level='1' desc='Put 2d4 HD of creatures into comatose slumber.' />
+<spell name='Magic Missile' memrz='0' level='1' desc='1d4+1 damage; +1 missile/two levels above 1st (max +5).' />
+<spell name='Tensers Floating Disk' memrz='0' level='1' desc='3-ft.-diameter horizontal disk that holds 100 lb./level.' />
+<spell name='Change Self' memrz='0' level='1' desc='Changes your appearance.' />
+<spell name='Color Spray' memrz='0' level='1' desc='Knocks unconscious, blinds, or stuns 1d6 weak creatures.' />
+<spell name='Nystuls Magical Aura' memrz='0' level='1' desc='Grants object false magic aura.' />
+<spell name='Nystuls Undetectable Aura' memrz='0' level='1' desc='Masks magic items aura.' />
+<spell name='Silent Image' memrz='0' level='1' desc='Creates minor illusion of your design.' />
+<spell name='Ventriloquism' memrz='0' level='1' desc='Throws voice for 1 min./level.' />
+<spell name='Cause Fear' memrz='0' level='1' desc='One creature flees for 1d4 rounds.' />
+<spell name='Chill Touch' memrz='0' level='1' desc='1 touch/level deals 1d6 damage and possibly 1 Str damage.' />
+<spell name='Ray of Enfeeblement' memrz='0' level='1' desc='Ray reduces Str by 1d6 points +1 point/two levels.' />
+<spell name='Animate Rope' memrz='0' level='1' desc='Makes a rope move at your command.' />
+<spell name='Burning Hands' memrz='0' level='1' desc='1d4 fire damage/level (max: 5d4).' />
+<spell name='Enlarge' memrz='0' level='1' desc='Object or creature grows +10%/level (max +50%).' />
+<spell name='Erase' memrz='0' level='1' desc='Mundane or magical writing vanishes.' />
+<spell name='Expeditious Retreat' memrz='0' level='1' desc='Doubles your speed.' />
+<spell name='Feather Fall' memrz='0' level='1' desc='Objects or creatures fall slowly.' />
+<spell name='Jump' memrz='0' level='1' desc='Subject gets +30 on Jump checks.' />
+<spell name='Magic Weapon' memrz='0' level='1' desc='Weapon gains +1 bonus.' />
+<spell name='Message' memrz='0' level='1' desc='Whispered conversation at distance.' />
+<spell name='Reduce' memrz='0' level='1' desc='Object or creature shrinks 10%/level (max 50%).' />
+<spell name='Shocking Grasp' memrz='0' level='1' desc='Touch delivers 1d8 +1/level electricity.' />
+<spell name='Spider Climb' memrz='0' level='1' desc='Grants ability to walk on walls and ceilings.' />
+<spell name='Arcane Lock' memrz='0' level='2' desc='Magically locks a portal or chest.' />
+<spell name='Obscure Object' memrz='0' level='2' desc='Masks object against divination.' />
+<spell name='Protection from Arrows' memrz='0' level='2' desc='Subject immune to most ranged attacks.' />
+<spell name='Resist Elements' memrz='0' level='2' desc='Ignores 12 damage/round from one energy type.' />
+<spell name='Fog Cloud' memrz='0' level='2' desc='Fog obscures vision.' />
+<spell name='Glitterdust' memrz='0' level='2' desc='Blinds creatures, outlines invisible creatures.' />
+<spell name='Melfs Acid Arrow' memrz='0' level='2' desc='Ranged touch attack; 2d4 damage for 1 round + 1 round/three levels.' />
+<spell name='Summon Monster II' memrz='0' level='2' desc='Calls outsider to fight for you.' />
+<spell name='Summon Swarm' memrz='0' level='2' desc='Summons swarm of small crawling or flying creatures.' />
+<spell name='Web' memrz='0' level='2' desc='Fills 10-ft. cube/level with sticky spider webs.' />
+<spell name='Detect Thoughts' memrz='0' level='2' desc='Allows listening to surface thoughts.' />
+<spell name='Locate Object' memrz='0' level='2' desc='Senses direction toward object (specific or type).' />
+<spell name='See Invisibility' memrz='0' level='2' desc='Reveals invisible creatures or objects.' />
+<spell name='Tashas Hideous Laughter' memrz='0' level='2' desc='Subject loses actions for 1d3 rounds.' />
+<spell name='Darkness' memrz='0' level='2' desc='20-ft. radius of supernatural darkness.' />
+<spell name='Daylight' memrz='0' level='2' desc='60-ft. radius of bright light.' />
+<spell name='Flaming Sphere' memrz='0' level='2' desc='Rolling ball of fire, 2d6 damage, lasts 1 round/level.' />
+<spell name='Shatter' memrz='0' level='2' desc='Sonic vibration damages objects or crystalline creatures.' />
+<spell name='Blur' memrz='0' level='2' desc='Attacks miss subject 20% of the time.' />
+<spell name='Continual Flame' memrz='0' level='2' desc='Makes a permanent, heatless torch.' />
+<spell name='Hypnotic Pattern' memrz='0' level='2' desc='Fascinates 2d4+1 HD/level of creatures.' />
+<spell name='Invisibility' memrz='0' level='2' desc='Subject is invisible for 10 min./level or until it attacks.' />
+<spell name='Leomunds Trap' memrz='0' level='2' desc='Makes item seem trapped.' />
+<spell name='Magic Mouth' memrz='0' level='2' desc='Speaks once when triggered.' />
+<spell name='Minor Image' memrz='0' level='2' desc='As silent image, plus some sound.' />
+<spell name='Mirror Image' memrz='0' level='2' desc='Creates decoy duplicates of you (1d4 +1/three levels, max 8).' />
+<spell name='Misdirection' memrz='0' level='2' desc='Misleads divinations for one creature or object.' />
+<spell name='Ghoul Touch' memrz='0' level='2' desc='Paralyzes one subject, who exudes stench (-2 penalty) nearby.' />
+<spell name='Scare' memrz='0' level='2' desc='Panics creatures up to 5 HD (15-ft. radius).' />
+<spell name='Spectral Hand' memrz='0' level='2' desc='Creates disembodied glowing hand to deliver touch attacks.' />
+<spell name='Alter Self' memrz='0' level='2' desc='As change self, plus more drastic changes.' />
+<spell name='Blindness/Deafness' memrz='0' level='2' desc='Makes subject blind or deaf.' />
+<spell name='Bulls Strength' memrz='0' level='2' desc='Subject gains 1d4+1 Str for 1 hr./level.' />
+<spell name='Cats Grace' memrz='0' level='2' desc='Subject gains 1d4+1 Dex for 1 hr./level.' />
+<spell name='Darkvision' memrz='0' level='2' desc='See 60 ft. in total darkness.' />
+<spell name='Endurance' memrz='0' level='2' desc='Gain 1d4+1 Con for 1 hr./level.' />
+<spell name='Knock' memrz='0' level='2' desc='Opens locked or magically sealed door.' />
+<spell name='Levitate' memrz='0' level='2' desc='Subject moves up and down at your direction.' />
+<spell name='Pyrotechnics' memrz='0' level='2' desc='Turns fire into blinding light or choking smoke.' />
+<spell name='Rope Trick' memrz='0' level='2' desc='Up to eight creatures hide in extradimensional space.' />
+<spell name='Whispering Wind' memrz='0' level='2' desc='Sends a short message one mile/level.' />
+<spell name='Dispel Magic' memrz='0' level='3' desc='Cancels magical spells and effects.' />
+<spell name='Explosive Runes' memrz='0' level='3' desc='Deals 6d6 damage when read.' />
+<spell name='Magic Circle against Chaos/Evil/Good/Law' memrz='0' level='3' desc='As protection spells, but 10-ft. radius and 10 min./level.' />
+<spell name='Nondetection' memrz='0' level='3' desc='Hides subject from divination, scrying.' />
+<spell name='Protection from Elements' memrz='0' level='3' desc='Absorb 12 damage/level from one kind of energy.' />
+<spell name='Flame Arrow' memrz='0' level='3' desc='Shoots flaming projectiles (extra damage) or fiery bolts (4d6 damage).' />
+<spell name='Phantom Steed' memrz='0' level='3' desc='Magical horse appears for 1 hour/level.' />
+<spell name='Sepia Snake Sigil' memrz='0' level='3' desc='Creates text symbol that immobilizes reader.' />
+<spell name='Sleet Storm' memrz='0' level='3' desc='Hampers vision and movement.' />
+<spell name='Stinking Cloud' memrz='0' level='3' desc='Nauseating vapors, 1 round/level.' />
+<spell name='Summon Monster III' memrz='0' level='3' desc='Calls outsider to fight for you.' />
+<spell name='Clairaudience/Clairvoyance' memrz='0' level='3' desc='Hear or see at a distance for 1 min./level.' />
+<spell name='Tongues' memrz='0' level='3' desc='Speak any language.' />
+<spell name='Hold Person' memrz='0' level='3' desc='Holds one person helpless; 1 round/level.' />
+<spell name='Suggestion' memrz='0' level='3' desc='Compels subject to follow stated course of action.' />
+<spell name='Fireball' memrz='0' level='3' desc='1d6 damage per level, 20-ft. radius.' />
+<spell name='Gust of Wind' memrz='0' level='3' desc='Blows away or knocks down smaller creatures.' />
+<spell name='Leomunds Tiny Hut' memrz='0' level='3' desc='Creates shelter for 10 creatures.' />
+<spell name='Lightning Bolt' memrz='0' level='3' desc='Electricity deals 1d6 damage/level.' />
+<spell name='Wind Wall' memrz='0' level='3' desc='Deflects arrows, smaller creatures, and gases.' />
+<spell name='Displacement' memrz='0' level='3' desc='Attacks miss subject 50%.' />
+<spell name='Illusory Script' memrz='0' level='3' desc='Only intended reader can decipher.' />
+<spell name='Invisibility Sphere' memrz='0' level='3' desc='Makes everyone within 10 ft. invisible.' />
+<spell name='Major Image' memrz='0' level='3' desc='As silent image, plus sound, smell and thermal effects.' />
+<spell name='Gentle Repose' memrz='0' level='3' desc='Preserves one corpse.' />
+<spell name='Halt Undead' memrz='0' level='3' desc='Immobilizes undead for 1 round/level.' />
+<spell name='Vampiric Touch' memrz='0' level='3' desc='Touch deals 1d6/two caster levels; caster gains damage as hp.' />
+<spell name='Blink' memrz='0' level='3' desc='You randomly vanish and reappear for 1 round/level.' />
+<spell name='Fly' memrz='0' level='3' desc='Subject flies at speed of 90.' />
+<spell name='Gaseous Form' memrz='0' level='3' desc='Subject becomes insubstantial and can fly slowly.' />
+<spell name='Greater Magic Weapon' memrz='0' level='3' desc='+1/three levels (max +5).' />
+<spell name='Haste' memrz='0' level='3' desc='Extra partial action and +4 AC.' />
+<spell name='Keen Edge' memrz='0' level='3' desc='Doubles normal weapons threat range.' />
+<spell name='Secret Page' memrz='0' level='3' desc='Changes one page to hide its real content.' />
+<spell name='Shrink Item' memrz='0' level='3' desc='Object shrinks to one-twelfth size.' />
+<spell name='Slow' memrz='0' level='3' desc='One subject/level takes only partial actions, -2 AC, -2 melee rolls.' />
+<spell name='Water Breathing' memrz='0' level='3' desc='Subjects can breathe underwater.' />
+<spell name='Dimensional Anchor' memrz='0' level='4' desc='Bars extradimensional movement.' />
+<spell name='Fire Trap' memrz='0' level='4' desc='Opened object deals 1d4 +1/level damage.' />
+<spell name='Minor Globe of Invulnerability' memrz='0' level='4' desc='Stops 1st- through 3rd-level spell effects.' />
+<spell name='Remove Curse' memrz='0' level='4' desc='Frees object or person from curse.' />
+<spell name='Stoneskin' memrz='0' level='4' desc='Stops blows, cuts, stabs, and slashes.' />
+<spell name='Evards Black Tentacles' memrz='0' level='4' desc='1d4 +1/level tentacles grapple randomly within 15 ft.' />
+<spell name='Leomunds Secure Shelter' memrz='0' level='4' desc='Creates sturdy cottage.' />
+<spell name='Minor Creation' memrz='0' level='4' desc='Creates one cloth or wood object.' />
+<spell name='Solid Fog' memrz='0' level='4' desc='Blocks vision and slows movement.' />
+<spell name='Summon Monster IV' memrz='0' level='4' desc='Calls outsider to fight for you.' />
+<spell name='Arcane Eye' memrz='0' level='4' desc='Invisible floating eye moves 30 ft./round.' />
+<spell name='Detect Scrying' memrz='0' level='4' desc='Alerts you of magical eavesdropping.' />
+<spell name='Locate Creature' memrz='0' level='4' desc='Indicates direction to familiar creature.' />
+<spell name='Scrying' memrz='0' level='4' desc='Spies on subject from a distance.' />
+<spell name='Charm Monster' memrz='0' level='4' desc='Makes monster believe it is your ally.' />
+<spell name='Confusion' memrz='0' level='4' desc='Makes subject behave oddly for 1 round/level.' />
+<spell name='Emotion' memrz='0' level='4' desc='Arouses strong emotion in subject.' />
+<spell name='Lesser Geas' memrz='0' level='4' desc='Commands subject of 7 HD or less.' />
+<spell name='Fire Shield' memrz='0' level='4' desc='Creatures attacking you take fire damage; you are protected from heat or cold.' />
+<spell name='Ice Storm' memrz='0' level='4' desc='Hail deals 5d6 damage in cylinder 40 ft. across.' />
+<spell name='Otilukes Resilient Sphere' memrz='0' level='4' desc='Force globe protects but traps one subject.' />
+<spell name='Shout' memrz='0' level='4' desc='Deafens all within cone and deals 2d6 damage.' />
+<spell name='Wall of Fire' memrz='0' level='4' desc='Deals 2d4 fire damage out to 10 ft. and 1d4 out to 20 ft.' />
+<spell name='Wall of Ice' memrz='0' level='4' desc='Ice plane creates wall with 15 hp +1/level, or hemisphere can trap creatures inside.' />
+<spell name='Hallucinatory Terrain' memrz='0' level='4' desc='Makes one type of terrain appear like another (field into forest, etc).' />
+<spell name='Illusory Wall' memrz='0' level='4' desc='Wall, floor, or ceiling looks real, but anything can pass through.' />
+<spell name='Improved Invisibility' memrz='0' level='4' desc='As invisibility, but subject can attack and stay invisible.' />
+<spell name='Phantasmal Killer' memrz='0' level='4' desc='Fearsome illusion kills subject or deals 3d6 damage.' />
+<spell name='Rainbow Pattern' memrz='0' level='4' desc='Lights prevent 24 HD of creatures from attacking or moving away.' />
+<spell name='Shadow Conjuration' memrz='0' level='4' desc='Mimics conjuring below 4th level.' />
+<spell name='Contagion' memrz='0' level='4' desc='Infects subject with chosen disease.' />
+<spell name='Enervation' memrz='0' level='4' desc='Subject gains 1d4 negative levels.' />
+<spell name='Fear' memrz='0' level='4' desc='Subjects within cone flee for 1 round/level.' />
+<spell name='Bestow Curse' memrz='0' level='4' desc='-6 to an ability; -4 on attacks, saves, and checks; or 50% chance of losing each action.' />
+<spell name='Dimension Door' memrz='0' level='4' desc='Teleports you and up to 500 lb.' />
+<spell name='Polymorph Other' memrz='0' level='4' desc='Gives one subject a new form.' />
+<spell name='Polymorph Self' memrz='0' level='4' desc='You assume a new form.' />
+<spell name='Rarys Mnemonic Enhancer' memrz='0' level='4' desc='Prepares extra spells or retains one just cast. Wizard only.' />
+<spell name='Dismissal' memrz='0' level='5' desc='Forces a creature to return to native plane.' />
+<spell name='Cloudkill' memrz='0' level='5' desc='Kills 3 HD or less; 4-6 HD save or die.' />
+<spell name='Leomunds Secret Chest' memrz='0' level='5' desc='Hides expensive chest on Ethereal Plane; you retrieve it at will.' />
+<spell name='Lesser Planar Binding' memrz='0' level='5' desc='Traps outsider until it performs a task.' />
+<spell name='Major Creation' memrz='0' level='5' desc='As minor creation, plus stone and metal.' />
+<spell name='Mordenkainens Faithful Hound' memrz='0' level='5' desc='Phantom dog can guard, attack.' />
+<spell name='Summon Monster V' memrz='0' level='5' desc='Calls outsider to fight for you.' />
+<spell name='Wall of Iron' memrz='0' level='5' desc='30 hp/four levels; can topple onto foes.' />
+<spell name='Wall of Stone' memrz='0' level='5' desc='20 hp/four levels; can be shaped.' />
+<spell name='Contact Other Plane' memrz='0' level='5' desc='Ask question of extraplanar entity.' />
+<spell name='Prying Eyes' memrz='0' level='5' desc='1d4 floating eyes +1/level scout for you.' />
+<spell name='Rarys Telepathic Bond' memrz='0' level='5' desc='Link lets allies communicate.' />
+<spell name='Dominate Person' memrz='0' level='5' desc='Controls humanoid telepathically.' />
+<spell name='Feeblemind' memrz='0' level='5' desc='Subjects Int drops to 1.' />
+<spell name='Hold Monster' memrz='0' level='5' desc='As hold person, but any creature.' />
+<spell name='Mind Fog' memrz='0' level='5' desc='Subjects in fog get -10 Wis, Will checks.' />
+<spell name='Bigbys Interposing Hand' memrz='0' level='5' desc='Hand provides 90% cover against one opponent.' />
+<spell name='Cone of Cold' memrz='0' level='5' desc='1d6 cold damage/level.' />
+<spell name='Sending' memrz='0' level='5' desc='Delivers short message anywhere, instantly.' />
+<spell name='Wall of Force' memrz='0' level='5' desc='Wall is immune to damage.' />
+<spell name='Dream' memrz='0' level='5' desc='Sends message to anyone sleeping.' />
+<spell name='False Vision' memrz='0' level='5' desc='Fools scrying with an illusion.' />
+<spell name='Greater Shadow Conjuration' memrz='0' level='5' desc='As shadow conjuration, but up to 4th level and 40% real.' />
+<spell name='Mirage Arcana' memrz='0' level='5' desc='As hallucinatory terrain, plus structures.' />
+<spell name='Nightmare' memrz='0' level='5' desc='Sends vision dealing 1d10 damage, fatigue.' />
+<spell name='Persistent Image' memrz='0' level='5' desc='As major image, but no concentration required.' />
+<spell name='Seeming' memrz='0' level='5' desc='Changes appearance of one person/two levels.' />
+<spell name='Shadow Evocation' memrz='0' level='5' desc='Mimics evocation less than 5th level.' />
+<spell name='Animate Dead' memrz='0' level='5' desc='Creates undead skeletons and zombies.' />
+<spell name='Magic Jar' memrz='0' level='5' desc='Enables possession of another creature.' />
+<spell name='Animal Growth' memrz='0' level='5' desc='One animal/two levels doubles in size, HD.' />
+<spell name='Fabricate' memrz='0' level='5' desc='Transforms raw materials into finished items.' />
+<spell name='Passwall' memrz='0' level='5' desc='Breaches walls 1 ft. thick/level.' />
+<spell name='Stone Shape' memrz='0' level='5' desc='Sculpts stone into any form.' />
+<spell name='Telekinesis' memrz='0' level='5' desc='Lifts or moves 25 lb./level at long range.' />
+<spell name='Teleport' memrz='0' level='5' desc='Instantly transports you anywhere.' />
+<spell name='Transmute Mud to Rock' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
+<spell name='Transmute Rock to Mud' memrz='0' level='5' desc='Transforms two 10-ft. cubes/level.' />
+<spell name='Permanency' memrz='0' level='5' desc='Makes certain spells permanent; costs XP.' />
+<spell name='Antimagic Field' memrz='0' level='6' desc='Negates magic within 10 ft.' />
+<spell name='Globe of Invulnerability' memrz='0' level='6' desc='As minor globe, plus 4th level.' />
+<spell name='Greater Dispelling' memrz='0' level='6' desc='As dispel magic, but +20 on check.' />
+<spell name='Guards and Wards' memrz='0' level='6' desc='Array of magic effects protect area.' />
+<spell name='Repulsion' memrz='0' level='6' desc='Creatures cant approach you.' />
+<spell name='Acid Fog' memrz='0' level='6' desc='Fog deals acid damage.' />
+<spell name='Planar Binding' memrz='0' level='6' desc='As lesser planar binding, but up to 16 HD.' />
+<spell name='Summon Monster VI' memrz='0' level='6' desc='Calls outsider to fight for you.' />
+<spell name='Analyze Dweomer' memrz='0' level='6' desc='Reveals magical aspects of subject.' />
+<spell name='Legend Lore' memrz='0' level='6' desc='Learn tales about a person, place, or thing.' />
+<spell name='True Seeing' memrz='0' level='6' desc='See all things as they really are.' />
+<spell name='Geas/Quest' memrz='0' level='6' desc='As lesser geas, plus it affects any creature.' />
+<spell name='Mass Suggestion' memrz='0' level='6' desc='As suggestion, plus one/level subjects.' />
+<spell name='Bigbys Forceful Hand' memrz='0' level='6' desc='Hand pushes creatures away.' />
+<spell name='Chain Lightning' memrz='0' level='6' desc='1d6 damage/level; secondary bolts.' />
+<spell name='Contingency' memrz='0' level='6' desc='Sets trigger condition for another spell.' />
+<spell name='Otilukes Freezing Sphere' memrz='0' level='6' desc='Freezes water or deals cold damage.' />
+<spell name='Greater Shadow Evocation' memrz='0' level='6' desc='As shadow evocation, but up to 5th level.' />
+<spell name='Mislead' memrz='0' level='6' desc='Turns you invisible and creates illusory double.' />
+<spell name='Permanent Image' memrz='0' level='6' desc='Includes sight, sound, and smell.' />
+<spell name='Programmed Image' memrz='0' level='6' desc='As major image, plus triggered by event.' />
+<spell name='Project Image' memrz='0' level='6' desc='Illusory double can talk and cast spells.' />
+<spell name='Shades' memrz='0' level='6' desc='As shadow conjuration, but up to 5th level and 60% real.' />
+<spell name='Veil' memrz='0' level='6' desc='Changes appearance of group of creatures.' />
+<spell name='Circle of Death' memrz='0' level='6' desc='Kills 1d4 HD/level.' />
+<spell name='Control Water' memrz='0' level='6' desc='Raises, lowers, or parts bodies of water.' />
+<spell name='Control Weather' memrz='0' level='6' desc='Changes weather in local area.' />
+<spell name='Disintegrate' memrz='0' level='6' desc='Makes one creature or object vanish.' />
+<spell name='Eyebite' memrz='0' level='6' desc='Charm, fear, sicken or sleep one subject.' />
+<spell name='Flesh to Stone' memrz='0' level='6' desc='Turns subject creature into statue.' />
+<spell name='Mass Haste' memrz='0' level='6' desc='As haste, affects one/level subjects.' />
+<spell name='Mordenkainens Lucubration' memrz='0' level='6' desc='Recalls spell of 5th level or less. Wizard Only.' />
+<spell name='Move Earth' memrz='0' level='6' desc='Digs trenches and build hills.' />
+<spell name='Stone to Flesh' memrz='0' level='6' desc='Restores petrified creature.' />
+<spell name='Tensers Transformation' memrz='0' level='6' desc='You gain combat bonuses.' />
+<spell name='Banishment' memrz='0' level='7' desc='Banishes 2 HD/level extraplanar creatures.' />
+<spell name='Sequester' memrz='0' level='7' desc='Subject is invisible to sight and scrying.' />
+<spell name='Spell Turning' memrz='0' level='7' desc='Reflect 1d4+6 spell levels back at caster.' />
+<spell name='Drawmijs Instant Summons' memrz='0' level='7' desc='Prepared object appears in your hand.' />
+<spell name='Mordenkainens Magnificent Mansion' memrz='0' level='7' desc='Door leads to extradimensional mansion.' />
+<spell name='Phase Door' memrz='0' level='7' desc='Invisible passage through wood or stone.' />
+<spell name='Power Word, Stun' memrz='0' level='7' desc='Stuns creature with up to 150 hp.' />
+<spell name='Summon Monster VII' memrz='0' level='7' desc='Calls outsider to fight for you.' />
+<spell name='Greater Scrying' memrz='0' level='7' desc='As scrying, but faster and longer.' />
+<spell name='Vision' memrz='0' level='7' desc='As legend lore, but quicker and strenuous.' />
+<spell name='Insanity' memrz='0' level='7' desc='Subject suffers continuous confusion.' />
+<spell name='Bigbys Grasping Hand' memrz='0' level='7' desc='Hand provides cover, pushes, or grapples.' />
+<spell name='Delayed Blast Fireball' memrz='0' level='7' desc='1d8 fire damage/level; you can delay blast for 5 rounds.' />
+<spell name='Forcecage' memrz='0' level='7' desc='Cube of force imprisons all inside.' />
+<spell name='Mordenkainens Sword' memrz='0' level='7' desc='Floating magic blade strikes opponents.' />
+<spell name='Prismatic Spray' memrz='0' level='7' desc='Rays hit subjects with variety of effects.' />
+<spell name='Mass Invisibility' memrz='0' level='7' desc='As invisibility, but affects all in range.' />
+<spell name='Shadow Walk' memrz='0' level='7' desc='Step into shadow to travel rapidly.' />
+<spell name='Simulacrum' memrz='0' level='7' desc='Creates partially real double of a creature.' />
+<spell name='Control Undead' memrz='0' level='7' desc='Undead dont attack you while under your command.' />
+<spell name='Finger of Death' memrz='0' level='7' desc='Kills one subject.' />
+<spell name='Ethereal Jaunt' memrz='0' level='7' desc='You become ethereal for 1 round/level.' />
+<spell name='Plane Shift' memrz='0' level='7' desc='Up to eight subjects travel to another plane.' />
+<spell name='Reverse Gravity' memrz='0' level='7' desc='Objects and creatures fall upward.' />
+<spell name='Statue' memrz='0' level='7' desc='Subject can become a statue at will.' />
+<spell name='Teleport without Error' memrz='0' level='7' desc='As teleport, but no off-target arrival.' />
+<spell name='Vanish' memrz='0' level='7' desc='As teleport, but affects a touched object.' />
+<spell name='Limited Wish' memrz='0' level='7' desc='Alters reality-within spell limits.' />
+<spell name='Mind Blank' memrz='0' level='8' desc='Subject is immune to mental/emotional magic and scrying.' />
+<spell name='Prismatic Wall' memrz='0' level='8' desc='Walls colors have array of effects.' />
+<spell name='Protection from Spells' memrz='0' level='8' desc='Confers +8 resistance bonus.' />
+<spell name='Greater Planar Binding' memrz='0' level='8' desc='As lesser planar binding, but up to 24 HD.' />
+<spell name='Incendiary Cloud' memrz='0' level='8' desc='Cloud deals 4d6 fire damage/round.' />
+<spell name='Maze' memrz='0' level='8' desc='Traps subject in extradimensional maze.' />
+<spell name='Power Word, Blind' memrz='0' level='8' desc='Blinds 200 hp worth of creatures.' />
+<spell name='Summon Monster VIII' memrz='0' level='8' desc='Calls outsider to fight for you.' />
+<spell name='Trap the Soul' memrz='0' level='8' desc='Imprisons subject within gem.' />
+<spell name='Discern Location' memrz='0' level='8' desc='Exact location of creature or object.' />
+<spell name='Antipathy' memrz='0' level='8' desc='Object or location affected by spell repels certain creatures.' />
+<spell name='Binding' memrz='0' level='8' desc='Array of techniques to imprison a creature.' />
+<spell name='Demand' memrz='0' level='8' desc='As sending, plus you can send suggestion.' />
+<spell name='Mass Charm' memrz='0' level='8' desc='As charm monster, but all within 30 ft.' />
+<spell name='Ottos Irresistible Dance' memrz='0' level='8' desc='Forces subject to dance.' />
+<spell name='Sympathy' memrz='0' level='8' desc='Object or location attracts certain creatures.' />
+<spell name='Bigbys Clenched Fist' memrz='0' level='8' desc='Large hand attacks your foes.' />
+<spell name='Otilukes Telekinetic Sphere' memrz='0' level='8' desc='As Otilukes resilient sphere, but you move sphere telekinetically.' />
+<spell name='Sunburst' memrz='0' level='8' desc='Blinds all within 10 ft., deals 3d6 damage.' />
+<spell name='Screen' memrz='0' level='8' desc='Illusion hides area from vision, scrying.' />
+<spell name='Clone' memrz='0' level='8' desc='Duplicate awakens when original dies.' />
+<spell name='Horrid Wilting' memrz='0' level='8' desc='Deals 1d8 damage/level within 30 ft.' />
+<spell name='Etherealness' memrz='0' level='8' desc='Travel to Ethereal Plane with companions.' />
+<spell name='Iron Body' memrz='0' level='8' desc='Your body becomes living iron.' />
+<spell name='Polymorph Any Object' memrz='0' level='8' desc='Changes any subject into anything else.' />
+<spell name='Symbol' memrz='0' level='8' desc='Triggered runes have array of effects.' />
+<spell name='Freedom' memrz='0' level='9' desc='Releases creature suffering imprisonment.' />
+<spell name='Imprisonment' memrz='0' level='9' desc='Entombs subject beneath the earth.' />
+<spell name='Mordenkainens Disjunction' memrz='0' level='9' desc='Dispels magic, disenchants magic items.' />
+<spell name='Prismatic Sphere' memrz='0' level='9' desc='As prismatic wall, but surrounds on all sides.' />
+<spell name='Gate' memrz='0' level='9' desc='Connects two planes for travel or summoning.' />
+<spell name='Power Word, Kill' memrz='0' level='9' desc='Kills one tough subject or many weak ones.' />
+<spell name='Summon Monster IX' memrz='0' level='9' desc='Calls outsider to fight for you.' />
+<spell name='Foresight' memrz='0' level='9' desc='Sixth sense warns of impending danger.' />
+<spell name='Dominate Monster' memrz='0' level='9' desc='As dominate person, but any creature.' />
+<spell name='Bigbys Crushing Hand' memrz='0' level='9' desc='As Bigbys interposing hand, but stronger.' />
+<spell name='Meteor Swarm' memrz='0' level='9' desc='Deals 24d6 fire damage, plus bursts.' />
+<spell name='Weird' memrz='0' level='9' desc='As phantasmal killer, but affects all within 30 ft.' />
+<spell name='Astral Projection' memrz='0' level='9' desc='Projects you and companions into Astral Plane.' />
+<spell name='Energy Drain' memrz='0' level='9' desc='Subject gains 2d4 negative levels.' />
+<spell name='Soul Bind' memrz='0' level='9' desc='Traps newly dead soul to prevent resurrection.' />
+<spell name='Wail of the Banshee' memrz='0' level='9' desc='Kills one creature/level.' />
+<spell name='Refuge' memrz='0' level='9' desc='Alters item to transport its possessor to you.' />
+<spell name='Shapechange' memrz='0' level='9' desc='Transforms you into any creature, and change forms once per round.' />
+<spell name='Teleportation Circle' memrz='0' level='9' desc='Circle teleports any creature inside to designated spot.' />
+<spell name='Temporal Stasis' memrz='0' level='9' desc='Puts subject into suspended animation.' />
+<spell name='Time Stop' memrz='0' level='9' desc='You act freely for 1d4+1 rounds.' />
+<spell name='Wish' memrz='0' level='9' desc='As limited wish, but with fewer limits.' />
+</spells>
--- a/data/dnd3e/dnd3eweapons.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/dnd3eweapons.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,299 +1,299 @@
-<weapons version="01.02">
-<footnotes>
-<c txt="Shuriken don't get str bonus, 3/attack; don't mark t" ></c>
-<c txt="monkWeap unarmed base, monk att/round, and other monk attack mods" ></c>
-<c txt="fn field for a weapon stands for 'footnotes'" ></c>
-<f mark="b" txt="classified as a bow or sling, str penalty applies " ></f>
-<f mark="c" txt="set for charge weapon, 2x dam when set Vs charging opponent." ></f>
-<f mark="C" txt="2x damaged when used on charge (may need to be mounted) " ></f>
-<f mark="d" txt="Classified as a double weapon." ></f>
-<f mark="m" txt="Monks get special 'Monk Weapon'advantages. " ></f>
-<f mark="o" txt="+2 opposed attack rolls wrt disarming/being disarmed on fail." ></f>
-<f mark="r" txt="Classified as a reach weapon, can strike at 6-10, but cannot strike 0-5" ></f>
-<f mark="R" txt="Classified as a special reach weapon, can strike at 0-10" ></f>
-<f mark="s" txt="Weapon can only do subdual damage." ></f>
-<f mark="t" txt="Classified as a thrown (or throwable) weapon by PH,standard thrown characteristics will be applied" ></f>
-<f mark="T" txt="Weapon can be used for making trip attacks." ></f>
-<f mark="X" txt="Custom weapon, should have appropriate footnotes added." ></f>
-</footnotes>
-<weapon mod="0" fn="" name="Antimatter rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="6d10" critical="x2" range="10" weight="10" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Axe, orc double" cost="60" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x3" range="0" weight="25" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="t" name="Axe, throwing" cost="8" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x2" range="10" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Battleaxe" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="7" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Blowgun" cost="1" category="Asian Weapons-Ranged" size="Small" damage="1" critical="x2" range="10" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Chain, spiked" cost="25" category="Exotic Weapons-Melee" size="Large" damage="2d4" critical="x2" range="0" weight="15" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="t" name="Club" cost="0" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="10" weight="3" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, hand" cost="100" category="Exotic Weapons-Ranged" size="Tiny" damage="1d4" critical="19-20/x2" range="30" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, heavy" cost="50" category="Simple Weapons-Ranged" size="Medium" damage="1d10" critical="19-20/x2" range="120" weight="9" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, light" cost="35" category="Simple Weapons-Ranged" size="Small" damage="1d8" critical="19-20/x2" range="80" weight="6" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Crossbow, repeating" cost="250" category="Exotic Weapons-Ranged" size="Medium" damage="1d8" critical="19-20/x2" range="80" weight="16" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="t" name="Dagger" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="19-20/x2" range="10" weight="1" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Dagger, punching" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x3" range="0" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Dart" cost="0" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="20" weight="0" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Falchion" cost="75" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="18-29/x2" range="0" weight="16" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="doT" name="Flail, dire" cost="90" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x2" range="0" weight="20" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Flail, heavy" cost="15" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="20" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Flail, light" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="5" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Flamer" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d6*" critical="-" range="20" weight="8" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Flurry of Blows(Monk Med)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="0" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Flurry of Blows(Monk Small)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="0" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Gauntlet" cost="2 gp" category="Simple Weapons-Melee" size="Unarmed" damage="*" critical="*" range="0" weight="2" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Gauntlet, spiked" cost="5" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="r" name="Glaive" cost="8" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Greataxe" cost="20" category="Martial Weapons-Melee" size="Large" damage="1d12" critical="x3" range="0" weight="20" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Greatclub" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x2" range="0" weight="10" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Greatsword" cost="50" category="Martial Weapons-Melee" size="Large" damage="2d6" critical="19-20/x2" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Grenade launcher" cost="-1" category="Modern Weapons-Ranged" size="Large" damage="*" critical="*" range="200" weight="12" type="*" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="rT" name="Guisarme" cost="9" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="Ts" name="Halberd" cost="10" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="P&amp;S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="tc" name="Halfspear" cost="1" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x3" range="20" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Hammer, gnome hooked" cost="20" category="Exotic Weapons-Melee" size="Medium" damage="1d6/1d4" critical="x3/x4" range="0" weight="6" type="B&amp;P" >
-<description >for proper treatment, read PH pg 101</description >
-</weapon>
-<weapon mod="0" fn="t" name="Hammer, light" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x2" range="20" weight="2" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Handaxe" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Javelin" cost="1" category="Simple Weapons-Ranged" size="Medium" damage="1d6" critical="x2" range="30" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Kama" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Kama, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Katana" cost="400" category="Exotic Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
-    <description >Always masterwork</description >
-</weapon>
-<weapon mod="0" fn="" name="Katana, used 2 handed" cost="400" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
-    <description >Always masterwork</description >
-</weapon>
-<weapon mod="0" fn="" name="Kukri" cost="8" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="18-29/x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oTR" name="Kusari-gama" cost="10" category="Asian Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="0" weight="3" type="S" >
-    <description >like a spiked chain</description >
-</weapon>
-<weapon mod="0" fn="Cr" name="Lance, heavy" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="C" name="Lance, light" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Laser pistol" cost="-1" category="Futuristic Weapons-Ranged" size="Small" damage="2d10" critical="x2" range="100" weight="2" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Laser rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d20" critical="x2" range="200" weight="7" type="Special" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Longbow" cost="75" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="100" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Longbow, composite" cost="100" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="110" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="rc" name="Longspear" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d8" critical="x3" range="0" weight="9" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Longsword" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="19-20/x2" range="0" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Mace, heavy" cost="12" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="12" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Mace, light" cost="5" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="6" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Morningstar" cost="8" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="8" type="B&amp;P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Musket" cost="500" category="Renaissance Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="150" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Net" cost="20" category="Exotic Weapons-Ranged" size="Medium" damage="0" critical="0" range="10" weight="10" type="-" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Nunchaku" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
-<description >
-</description >
-</weapon>
-<weapon mod="0" fn="m" name="Nunchaku, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pick, heavy" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="x4" range="0" weight="6" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pick, light" cost="4" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x4" range="0" weight="4" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pistol" cost="250" category="Renaissance Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="50" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pistol, automatic" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="150" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Pistol, revolver" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="100" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Quarterstaff" cost="0" category="Simple Weapons-Melee" size="Large" damage="1d6" critical="x2" range="0" weight="4" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="ro" name="Ranseur" cost="10" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Rapier" cost="20" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Rifle, automatic" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="250" weight="12" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Rifle, repeater" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="200" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="s" name="Sap" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d6s" critical="x2" range="0" weight="3" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Scattergun" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="*" critical="*" range="10" weight="10" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Scimitar" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="4" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Scythe" cost="18" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x4" range="0" weight="12" type="P&amp;S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Shortbow" cost="30" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="60" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Shortbow, composite" cost="75" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="70" weight="2" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="tc" name="Shortspear" cost="2" category="Simple Weapons-Melee" size="Large" damage="1d8" critical="x3" range="20" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Shuriken" cost="1" category="Exotic Weapons-Ranged" size="Tiny" damage="1" critical="x2" range="100" weight="0" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Siangham" cost="3" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="m" name="Siangham, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sickle" cost="6" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="b" name="Sling" cost="1d4" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="50" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="s" name="Strike, unarmed (med)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d3" critical="x2" range="0" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="s" name="Strike, unarmed (small)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d2" critical="x2" range="0" weight="0" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sword, bastard" cost="35" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sword, bastard used 2 handed" cost="35" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Sword, short" cost="10" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="d" name="Sword, two-bladed" cost="100" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="19-20/X2" range="0" weight="30" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="ct" name="Trident" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="10" weight="5" type="P" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="dc" name="Urgrosh, dwarven" cost="50" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d6" critical="x3" range="0" weight="15" type="S&amp;P" >
-<description >see PH pg 103 for proper treatment </description >
-</weapon>
-<weapon mod="0" fn="m" name="UnArmed(Monk Med)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="00" type="S&amp;P" >
-<description >An unArmed strike does more dmg as a monk</description >
-</weapon>
-<weapon mod="0" fn="m" name="UnArmed(Monk Small)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="00" type="S&amp;P" >
-<description >An unArmed strike does more dmg as a monk</description >
-</weapon>
-<weapon mod="0" fn="" name="Wakizashi" cost="300" category="Asian Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="S" >
-<description >Always masterwork</description >
-</weapon>
-<weapon mod="0" fn="" name="Waraxe, dwarven" cost="30" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Waraxe, dwarven used 2handed" cost="30" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="" name="Warhammer" cost="12" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="8" type="B" >
-<description ></description >
-</weapon>
-<weapon mod="0" fn="oT" name="Whip" cost="1" category="Exotic Weapons-Ranged" size="Small" damage="1d2s" critical="x2" range="15" weight="2" type="S" >
-<description >range15, maxrange15, no penalties to max range; ineffective Vs armor or +3 natural adjustment PH pg 104 </description >
-</weapon>
-</weapons>
+<weapons version="01.02">
+<footnotes>
+<c txt="Shuriken don't get str bonus, 3/attack; don't mark t" ></c>
+<c txt="monkWeap unarmed base, monk att/round, and other monk attack mods" ></c>
+<c txt="fn field for a weapon stands for 'footnotes'" ></c>
+<f mark="b" txt="classified as a bow or sling, str penalty applies " ></f>
+<f mark="c" txt="set for charge weapon, 2x dam when set Vs charging opponent." ></f>
+<f mark="C" txt="2x damaged when used on charge (may need to be mounted) " ></f>
+<f mark="d" txt="Classified as a double weapon." ></f>
+<f mark="m" txt="Monks get special 'Monk Weapon'advantages. " ></f>
+<f mark="o" txt="+2 opposed attack rolls wrt disarming/being disarmed on fail." ></f>
+<f mark="r" txt="Classified as a reach weapon, can strike at 6-10, but cannot strike 0-5" ></f>
+<f mark="R" txt="Classified as a special reach weapon, can strike at 0-10" ></f>
+<f mark="s" txt="Weapon can only do subdual damage." ></f>
+<f mark="t" txt="Classified as a thrown (or throwable) weapon by PH,standard thrown characteristics will be applied" ></f>
+<f mark="T" txt="Weapon can be used for making trip attacks." ></f>
+<f mark="X" txt="Custom weapon, should have appropriate footnotes added." ></f>
+</footnotes>
+<weapon mod="0" fn="" name="Antimatter rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="6d10" critical="x2" range="10" weight="10" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Axe, orc double" cost="60" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x3" range="0" weight="25" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="t" name="Axe, throwing" cost="8" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x2" range="10" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Battleaxe" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="7" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Blowgun" cost="1" category="Asian Weapons-Ranged" size="Small" damage="1" critical="x2" range="10" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Chain, spiked" cost="25" category="Exotic Weapons-Melee" size="Large" damage="2d4" critical="x2" range="0" weight="15" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="t" name="Club" cost="0" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="10" weight="3" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, hand" cost="100" category="Exotic Weapons-Ranged" size="Tiny" damage="1d4" critical="19-20/x2" range="30" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, heavy" cost="50" category="Simple Weapons-Ranged" size="Medium" damage="1d10" critical="19-20/x2" range="120" weight="9" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, light" cost="35" category="Simple Weapons-Ranged" size="Small" damage="1d8" critical="19-20/x2" range="80" weight="6" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Crossbow, repeating" cost="250" category="Exotic Weapons-Ranged" size="Medium" damage="1d8" critical="19-20/x2" range="80" weight="16" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="t" name="Dagger" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="19-20/x2" range="10" weight="1" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Dagger, punching" cost="2" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x3" range="0" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Dart" cost="0" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="20" weight="0" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Falchion" cost="75" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="18-29/x2" range="0" weight="16" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="doT" name="Flail, dire" cost="90" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="x2" range="0" weight="20" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Flail, heavy" cost="15" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="20" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Flail, light" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="5" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Flamer" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d6*" critical="-" range="20" weight="8" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Flurry of Blows(Monk Med)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="0" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Flurry of Blows(Monk Small)" cost="-1" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="0" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Gauntlet" cost="2 gp" category="Simple Weapons-Melee" size="Unarmed" damage="*" critical="*" range="0" weight="2" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Gauntlet, spiked" cost="5" category="Simple Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="r" name="Glaive" cost="8" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Greataxe" cost="20" category="Martial Weapons-Melee" size="Large" damage="1d12" critical="x3" range="0" weight="20" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Greatclub" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x2" range="0" weight="10" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Greatsword" cost="50" category="Martial Weapons-Melee" size="Large" damage="2d6" critical="19-20/x2" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Grenade launcher" cost="-1" category="Modern Weapons-Ranged" size="Large" damage="*" critical="*" range="200" weight="12" type="*" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="rT" name="Guisarme" cost="9" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="Ts" name="Halberd" cost="10" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="x3" range="0" weight="15" type="P&amp;S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="tc" name="Halfspear" cost="1" category="Simple Weapons-Melee" size="Medium" damage="1d6" critical="x3" range="20" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Hammer, gnome hooked" cost="20" category="Exotic Weapons-Melee" size="Medium" damage="1d6/1d4" critical="x3/x4" range="0" weight="6" type="B&amp;P" >
+<description >for proper treatment, read PH pg 101</description >
+</weapon>
+<weapon mod="0" fn="t" name="Hammer, light" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x2" range="20" weight="2" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Handaxe" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Javelin" cost="1" category="Simple Weapons-Ranged" size="Medium" damage="1d6" critical="x2" range="30" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Kama" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Kama, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Katana" cost="400" category="Exotic Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
+    <description >Always masterwork</description >
+</weapon>
+<weapon mod="0" fn="" name="Katana, used 2 handed" cost="400" category="Martial Weapons-Melee" size="Large" damage="1d10" critical="19-20/x2" range="0" weight="6" type="S" >
+    <description >Always masterwork</description >
+</weapon>
+<weapon mod="0" fn="" name="Kukri" cost="8" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="18-29/x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oTR" name="Kusari-gama" cost="10" category="Asian Weapons-Melee" size="Medium" damage="1d6" critical="x2" range="0" weight="3" type="S" >
+    <description >like a spiked chain</description >
+</weapon>
+<weapon mod="0" fn="Cr" name="Lance, heavy" cost="10" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="C" name="Lance, light" cost="6" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="x3" range="0" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Laser pistol" cost="-1" category="Futuristic Weapons-Ranged" size="Small" damage="2d10" critical="x2" range="100" weight="2" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Laser rifle" cost="-1" category="Futuristic Weapons-Ranged" size="Medium" damage="3d20" critical="x2" range="200" weight="7" type="Special" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Longbow" cost="75" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="100" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Longbow, composite" cost="100" category="Martial Weapons-Ranged" size="Large" damage="1d8" critical="x3" range="110" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="rc" name="Longspear" cost="5" category="Martial Weapons-Melee" size="Large" damage="1d8" critical="x3" range="0" weight="9" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Longsword" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="19-20/x2" range="0" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Mace, heavy" cost="12" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="12" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Mace, light" cost="5" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="6" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Morningstar" cost="8" category="Simple Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="0" weight="8" type="B&amp;P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Musket" cost="500" category="Renaissance Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="150" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Net" cost="20" category="Exotic Weapons-Ranged" size="Medium" damage="0" critical="0" range="10" weight="10" type="-" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Nunchaku" cost="2" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="2" type="S" >
+<description >
+</description >
+</weapon>
+<weapon mod="0" fn="m" name="Nunchaku, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pick, heavy" cost="8" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="x4" range="0" weight="6" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pick, light" cost="4" category="Martial Weapons-Melee" size="Small" damage="1d4" critical="x4" range="0" weight="4" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pistol" cost="250" category="Renaissance Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="50" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pistol, automatic" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="150" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Pistol, revolver" cost="-1" category="Modern Weapons-Ranged" size="Small" damage="1d10" critical="x3" range="100" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Quarterstaff" cost="0" category="Simple Weapons-Melee" size="Large" damage="1d6" critical="x2" range="0" weight="4" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="ro" name="Ranseur" cost="10" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x3" range="0" weight="15" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Rapier" cost="20" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Rifle, automatic" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="250" weight="12" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Rifle, repeater" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="1d12" critical="x3" range="200" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="s" name="Sap" cost="1" category="Martial Weapons-Melee" size="Small" damage="1d6s" critical="x2" range="0" weight="3" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Scattergun" cost="-1" category="Modern Weapons-Ranged" size="Medium" damage="*" critical="*" range="10" weight="10" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Scimitar" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d6" critical="18-20/x2" range="0" weight="4" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Scythe" cost="18" category="Martial Weapons-Melee" size="Large" damage="2d4" critical="x4" range="0" weight="12" type="P&amp;S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Shortbow" cost="30" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="60" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Shortbow, composite" cost="75" category="Martial Weapons-Ranged" size="Medium" damage="1d6" critical="x3" range="70" weight="2" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="tc" name="Shortspear" cost="2" category="Simple Weapons-Melee" size="Large" damage="1d8" critical="x3" range="20" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Shuriken" cost="1" category="Exotic Weapons-Ranged" size="Tiny" damage="1" critical="x2" range="100" weight="0" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Siangham" cost="3" category="Exotic Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="m" name="Siangham, halfling" cost="2" category="Exotic Weapons-Melee" size="Tiny" damage="1d4" critical="x2" range="0" weight="1" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sickle" cost="6" category="Simple Weapons-Melee" size="Small" damage="1d6" critical="x2" range="0" weight="3" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="b" name="Sling" cost="1d4" category="Simple Weapons-Ranged" size="Small" damage="1d4" critical="x2" range="50" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="s" name="Strike, unarmed (med)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d3" critical="x2" range="0" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="s" name="Strike, unarmed (small)" cost="0" category="Simple Weapons-Melee" size="Unarmed" damage="1d2" critical="x2" range="0" weight="0" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sword, bastard" cost="35" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sword, bastard used 2 handed" cost="35" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="19-20/x2" range="0" weight="10" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Sword, short" cost="10" category="Martial Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="d" name="Sword, two-bladed" cost="100" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d8" critical="19-20/X2" range="0" weight="30" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="ct" name="Trident" cost="15" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x2" range="10" weight="5" type="P" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="dc" name="Urgrosh, dwarven" cost="50" category="Exotic Weapons-Melee" size="Large" damage="1d8/1d6" critical="x3" range="0" weight="15" type="S&amp;P" >
+<description >see PH pg 103 for proper treatment </description >
+</weapon>
+<weapon mod="0" fn="m" name="UnArmed(Monk Med)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Med" critical="x2" range="0" weight="00" type="S&amp;P" >
+<description >An unArmed strike does more dmg as a monk</description >
+</weapon>
+<weapon mod="0" fn="m" name="UnArmed(Monk Small)" cost="0" category="Exotic Weapons-Melee" size="Unarmed" damage="Monk Small" critical="x2" range="0" weight="00" type="S&amp;P" >
+<description >An unArmed strike does more dmg as a monk</description >
+</weapon>
+<weapon mod="0" fn="" name="Wakizashi" cost="300" category="Asian Weapons-Melee" size="Small" damage="1d6" critical="19-20/x2" range="0" weight="3" type="S" >
+<description >Always masterwork</description >
+</weapon>
+<weapon mod="0" fn="" name="Waraxe, dwarven" cost="30" category="Exotic Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Waraxe, dwarven used 2handed" cost="30" category="Martial Weapons-Melee" size="Medium" damage="1d10" critical="x3" range="0" weight="15" type="S" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="" name="Warhammer" cost="12" category="Martial Weapons-Melee" size="Medium" damage="1d8" critical="x3" range="0" weight="8" type="B" >
+<description ></description >
+</weapon>
+<weapon mod="0" fn="oT" name="Whip" cost="1" category="Exotic Weapons-Ranged" size="Small" damage="1d2s" critical="x2" range="15" weight="2" type="S" >
+<description >range15, maxrange15, no penalties to max range; ineffective Vs armor or +3 natural adjustment PH pg 104 </description >
+</weapon>
+</weapons>
--- a/data/dnd3e/feats.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/data/dnd3e/feats.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,556 +1,556 @@
-A Thousand Furs [Special] - Touched by the Gods, p. 71
-Acrobatic [General] - Song and Silence, p. 38
-Acrobatic (Legends & Lairs version) [General] - Traps & Treachery, p. 34
-Airy Gallop [Special] - Dragon Magazine d20 Special/Annual #6, p. 65
-Alertness [General] - Player's Handbook, p. 80
-Alluring [General] - Song and Silence, p. 38
-Ambidexterity [General] - Player's Handbook, p. 80
-Ancient Lineage [General] - The Taan, p. 81
-Arcane Defense [General] - Tome and Blood, p. 38
-Arcane Preparation [General] - Tome and Blood, p. 38
-Arcane Schooling [General] - Forgotten Realms Campaign Setting, p. 33
-Armor Proficiency (Heavy) [General] - Player's Handbook, p.80
-Armor Proficiency (Light) [General] - Player's Handbook, p. 80
-Armor Proficiency (Medium) [General] - Player's Handbook, p. 80
-Art of Fascination [Ancestor] - Oriental Adventures, p. 60
-Arterial Strike [General] - Song and Silence, p. 38
-Artist [General] - Forgotten Realms Campaign Setting, p. 33
-Artist [Ancestor] - Oriental Adventures, p. 61
-Athletic [General] - Song and Silence, p. 38
-Attention to Detail [Ancestor] - Oriental Adventures, p. 61
-Attune Gem [Item Creation] - Magic of Faerun, p. 21
-Augment Construct [Psionic] - Dragon Magazine #287, p. 54
-Augment Summoning [General] - Tome and Blood, p. 39
-Aura of Serenity [Mystic Warrior] - Mystic Warriors, p. 112
-Battle Howl [General] - Touched by the Gods, p. 109
-Battle Roar [Kaiju] - Dragon Magazine #289, p. 70
-Blind Casting [General] - Dungeons, p. 81
-Blind-Fight [General] - Player's Handbook, p. 80
-Blindsight, 5-foot Radius [General] - Sword and Fist, p. 5
-Blood Frenzy [General] - The Taan, p. 81
-Blood Sorcerer [Ancestor] - Oriental Adventures, p. 61
-Blooded [General] - Forgotten Realms Campaign Setting, p. 33
-Bloodline of Fire [General] - Forgotten Realms Campaign Setting, p. 34
-Body Fuel [Psionic] - Psionics Handbook, p. 24
-Bootlicker [General] - Evil, p. 58
-Born Duelist [Ancestor] - Oriental Adventures, p. 61
-Breeze Dance [Fighting Stance] - Mystic Warriors, p. 112
-Brew Poison [Item Creation] - Traps & Treachery, p. 45
-Brew Potion [Item Creation] - Player's Handbook, p. 80
-Bribery [General] - Evil, p. 58
-Bullheaded [General] - Forgotten Realms Campaign Setting, p. 34
-Cabalistic Spellcasting [Metamagic] - Sovereign Stone Campaign Sourcebook, p. 60
-Casing Sense [General] - Traps & Treachery, p. 34
-Chain Power [Metapsionic] - Dragon Magazine #287, p. 54
-Chain Spell [Metamagic] - Tome and Blood, p. 39
-Chain Spell (Scarred Lands version) [Metamagic] - Relics and Rituals, p. 25
-Change Instruction [Special] - Demonology, p. 41
-Chariot Archery [General] - Sword and Fist, p. 78
-Chariot Charge [General] - Sword and Fist, p. 79
-Chariot Combat [General] - Sword and Fist, p. 78
-Chariot Sideswipe [General] - Sword and Fist, p. 79
-Chariot Trample [General] - Sword and Fist, p. 78
-Charlatan [General] - Song and Silence, p. 38
-Chink in the Armor [General] - Song and Silence, p. 38
-Choke Hold [General] - Oriental Adventures, p. 61
-Circle Kick [General] - Sword and Fist, p. 5
-Claws/Fangs [Infernal] - Evil, p. 24
-Cleave [General] - Player's Handbook, p. 80
-Close-Order Fighting [Special] - Dragon Lords of Melnibone, p. 63
-Close-Quarters Fighting [General] - Sword and Fist, p. 5
-Cloud Running [Special] - Creature Collection, p. 72
-Combat Agility [General] - Dragon Magazine #284, p. 123
-Combat Casting [General] - Player's Handbook, p. 80
-Combat Manifestation [Psionic] - Psionics Handbook, p. 24
-Combat Reflexes [General] - Player's Handbook, p. 80
-Combat Sense [General] - The Taan, p. 81
-Conjure Mastery [Eldritch] - The Book of Eldritch Might, p. 4
-Construct Familiar [General] - Dragon Magazine #280, p. 62
-Controlled Breathing [General] - Dungeons, p. 81
-Cool Head [General] - Oriental Adventures, p. 61
-Cooperative Spell [Metamagic] - Tome and Blood, p. 39
-Cooperative Spellcasting [Metamagic] - Sovereign Stone Campaign Sourcebook, p. 60
-Cosmopolitan [General] - Forgotten Realms Campaign Setting, p. 34
-Courteous Magocracy [General] - Forgotten Realms Campaign Setting, p. 34
-Crab Walk [Fighting Stance] - Mystic Warriors, p. 112
-Craft Anaema Tool [Item Creation] - Mythic Races, p. 15
-Craft Crystal Capacitor [Item Creation] - Psionics Handbook, p. 24
-Craft Crystal Weapon [Item Creation] - Oriental Adventures, p. 61
-Craft Dorje [Item Creation] - Psionics Handbook, p. 24
-Craft Kirpan [Item Creation] - Mystic Warriors, p. 112
-Craft Magic Arms and Armor [Item Creation] - Player's Handbook, p. 81
-Craft Magic Trap [Item Creation] - Traps & Treachery, p. 34
-Craft Mystic Talisman [Item Creation] - Mystic Warriors, p. 112
-Craft Named Weapon [Item Creation] - Mystic Warriors, p. 112
-Craft Psionic Arms and Armor [Item Creation] - Psionics Handbook, p. 24
-Craft Rod [Item Creation] - Player's Handbook, p. 81
-Craft Staff [Item Creation] - Player's Handbook, p. 81
-Craft Talisman [Item Creation] - Oriental Adventures, p. 61
-Craft Universal Item [Item Creation] - Psionics Handbook, p. 24
-Craft Vitus Amulet [Item Creation] - Mystic Warriors, p. 113
-Craft Wand [Item Creation] - Player's Handbook, p. 81
-Craft Wondrous Item [Item Creation] - Player's Handbook, p. 81
-Create Graft [Item Creation] - Touched by the Gods, p. 26
-Create Portal [Item Creation] - Forgotten Realms Campaign Setting, p. 34
-Dance of the Dirk [Fighting Stance] - Mystic Warriors, p. 113
-Darkvision [Infernal] - Evil, p. 24
-Dash [General] - Song and Silence, p. 38
-Daylight Adaptation [General] - Forgotten Realms Campaign Setting, p. 34
-Dead Shot [General] - Sovereign Stone Campaign Sourcebook, p. 60
-Death Blow [General] - Sword and Fist, p. 6
-Deep Impact [Psionic] - Psionics Handbook, p. 25
-Defensive Strike [General] - Oriental Adventures, p. 62
-Defensive Throw [General] - Oriental Adventures, p. 62
-Deflect Arrows [General] - Player's Handbook, p. 81
-Deflect Ranged Attack [General] - Dragon Magazine #274, p. 60
-Delay Power [Metapsionic] - Psionics Handbook, p. 25
-Delay Spell [Metamagic] - Tome and Blood, p. 39
-Dirty Fighting [General] - Sword and Fist, p. 6
-Disarm Mind [Psionic] - Psionics Handbook, p. 25
-Discipline [General] - Forgotten Realms Campaign Setting, p. 34
-Discipline [Ancestor] - Oriental Adventures, p. 62
-Disguise Spell [Metamagic] - Song and Silence, p. 38
-Dismiss Demon [Special] - Demonlogy, p. 41
-Divine Cleansing [Divine] - Defenders of the Faith, p. 19
-Divine Might [Divine] - Defenders of the Faith, p. 19
-Divine Perception [General] - Touched by the Gods, p. 34
-Divine Resistance [Divine] - Defenders of the Faith, p. 19
-Divine Shield [Divine] - Defenders of the Faith, p. 19
-Divine Vengeance [Divine] - Defenders of the Faith, p. 20
-Divine Vigor [Divine] - Defenders of the Faith, p. 20
-Dodge [General] - Player's Handbook, p. 81
-Dreamspeaking [General] - The Book of Eldritch Might, p. 4
-Drug Tolerance [General] - Caravan of Hope, p. 27
-Dual Strike [General] - Sword and Fist, p. 6
-Eagle Claw Attack [General] - Sword and Fist, p. 6
-Earth's Embrace [General] - Oriental Adventures, p. 62
-Education [General] - Forgotten Realms Campaign Setting, p. 34
-Eidetic Memory [General] - Dungeons, p. 81
-Element Resistance [Infernal] - Evil, p. 24
-Empathy [General] - Traps & Treachery, p. 35
-Empower Spell [Metamagic] - Player's Handbook, p. 82
-Empower Turning [Special] - Defenders of the Faith, p. 20
-Enchant Stone [Item Creation] - The Taan, p. 81
-Encode Stone [Item Creation] - Psionics Handbook, p. 25
-Endurance [General] - Player's Handbook, p. 82
-Energy Admixture [Metamagic] - Tome and Blood, p. 39
-Energy of Life [Special] - Creature Collection, p. 72
-Energy Substitution [Metamagic] - Tome and Blood, p. 40
-Enlarge Power [Metapsionic] - Psionics Handbook, p. 25
-Enlarge Spell [Metamagic] - Player's Handbook, p. 82
-Enspell Familiar [General] - Dragon Magazine #280, p. 62
-Eschew Materials [Metamagic] - Tome and Blood, p. 40
-Etch Object Rune [Item Creation] - The Book of Eldritch Might, p. 4
-Ethran [General] - Forgotten Realms Campaign Setting, p. 34
-Exotic Weapon Proficiency [General] - Player's Handbook, p. 82
-Expert Tactician [General] - Song and Silence, p. 38
-Expertise [General] - Player's Handbook, p. 82
-Extend Power [Metapsionic] - Psionics Handbook, p. 25
-Extend Spell [Metamagic] - Player's Handbook, p. 82
-Extra Familiar [General] - Dragon Magazine #280, p. 62
-Extra Music [General] - Song and Silence, p. 39
-Extra Power [Psionic] - Dragon Magazine #287, p. 55
-Extra Slot [General] - Tome and Blood, p. 40
-Extra Smiting [Special] - Defenders of the Faith, p. 20
-Extra Spell [General] - Tome and Blood, p. 40
-Extra Stunning Attacks [General] - Sword and Fist, p. 6
-Extra Turning [Special] - Player's Handbook, p. 82 (rules: pp. 32, 42)
-Eye for Detail [General] - Traps & Treachery, p. 35
-Eyes in the Back of Your Head [General] - Sword and Fist, p. 6
-Eyes of Calaam [Special] - Touched by the Gods, p. 59
-Falling Star Strike [General] - Oriental Adventures, p. 62
-Far Shot [General] - Player's Handbook, p. 82
-Fast Armor [General] - Dragon Magazine #284, p. 123
-Fast Rider [General] - Dragon Magazine #285, p. 98
-Fast Talker [General] - Traps & Treachery, p. 35
-Fearsome and Fearless [Ancestor] - Oriental Adventures, p. 62
-Feign Weakness [General] - Sword and Fist, p. 6
-Fell Shot [Psionic] - Psionics Handbook, p. 25
-Firearms Drill [General] - Dragon Magazine d20 Special/Annual #6, p. 70
-Fists of Calaam [Special] - Touched by the Gods, p. 59
-Fists of Iron [General] - Sword and Fist, p. 6
-Fleet of Foot [General] - Song and Silence, p. 39
-Flick of the Wrist [General] - Song and Silence, p. 39
-Flight [Infernal] - Evil, p. 25
-Flying Kick [General] -Oriental Adventures, p. 62
-Foe Hunter [Fighter, General] - Forgotten Realms Campaign Setting, p. 34
-Forester [General] - Forgotten Realms Campaign Setting, p. 35
-Forge Ring [Item Creation] - Player's Handbook, p. 82
-Fortify Power [Metapsionic] - Dragon Magazine #287, p. 55
-Freezing the Lifeblood [General] - Oriental Adventures, p. 62
-Gifted General [Ancestor] - Oriental Adventures, p. 62
-Golden Tongue [General] - Dungeons, p. 81
-Grace Under Pressure [General] - Dungeons, p. 81
-Grappling Block [General] - Oriental Adventures, p. 63
-Grasshopper Strike [General] - Dragon Magazine #279, p. 63
-Great Cleave [General] - Player's Handbook, p. 82
-Great Crafter [Ancestor] - Oriental Adventures, p. 63
-Great Diplomat [Ancestor] - Oriental Adventures, p. 63
-Great Fortitude [General] - Player's Handbook, p. 82
-Great Ki Shout [General] - Oriental Adventures, p. 63
-Great Stamina [Ancestor] - Oriental Adventures, p. 63
-Great Sunder [Psionic] - Psionics Handbook, p. 26
-Great Teamwork [Ancestor] - Oriental Adventures, p. 63
-Greater Power Penetration [Psionic] - Psionics Handbook, p. 26
-Greater Psionic Focus [Psionic] - Psionics Handbook, p. 26
-Greater Spell Focus [General] - Tome and Blood, p. 40
-Greater Spell Penetration [General] - Tome and Blood, p. 40
-Green Ear [General] - Song and Silence, p. 39
-Green Viper Style [Fighting Stance] - Mystic Warriors, p. 113
-Hammer Fist [General] - Dragon Magazine #279, p. 63
-Hamstring [General] - Song and Silence, p. 39
-Heavy Scarring [General] - The Taan, p. 82
-Heighten Power [Metapsionic] - Psionics Handbook, p. 26
-Heighten Spell [Metamagic] - Player's Handbook, p. 82
-Heighten Turning [Special] - Defenders of the Faith, p. 20
-Heroic Destiny [Special] - Touched by the Gods, p. 109
-Hide Power [Metapsionic] - Psionics Handbook, p. 26
-Hide Spell [Metamagic] - Relics and Rituals, p. 25
-Hill Fighter [General] - Dragon Magazine #285, p. 98
-Hold the Line [General] - Sword and Fist, p. 7
-Honest Merchant [Ancestor] - Oriental Adventures, p. 63
-Horse Nomad [Fighter, General] - Forgotten Realms Campaign Setting, p. 35
-Iaijutsu Master [Ancestor] - Oriental Adventures, p. 63
-Immortality [Infernal] - Evil, p. 25
-Immunity [Infernal] - Evil, p. 25
-Imp [Infernal] - Evil, p. 25
-Improved Aid [Ancestor] - Oriental Adventures, p. 63
-Improved Alertness [General] - Dungeons, p. 82
-Improved Bull Rush [General] - Player's Handbook, p. 82
-Improved Counterspell [General] - Forgotten Realms Campaign Setting, p. 35
-Improved Critical [General] - Player's Handbook, p. 82
-Improved Disarm [General] - Player's Handbook, p. 83
-Improved Endurance [General] - Dungeons, p. 82
-Improved Familiar [General] - Tome and Blood, p. 40
-Improved Feint [General] - Evil, p. 59
-Improved Flight [Infernal] - Evil, p. 25
-Improved Grab [General] - Mythic Races, p. 77
-Improved Grapple [General] - Oriental Adventures, p. 63
-Improved Initiative [General] - Player's Handbook, p. 83
-Improved Knockout Attack [General] - Traps & Treachery, p. 35
-Improved Low Blow [General] - Dragon Magazine #285, p. 33
-Improved Mounted Archery [General] - Dragon Magazine #285, p. 99
-Improved Mounted Combat [General] - Sovereign Stone Campaign Sourcebook, p. 62
-Improved Multiweapon Fighting [General] - Mythic Races, p. 137
-Improved Overrun [General] - Sword and Fist, p. 7
-Improved Psicrystal [Psionic] - Psionics Handbook, p. 26
-Improved Ranged Sneak Attack [General] - Traps & Treachery, p. 36
-Improved Rapid Shot [General] - Dragon Magazine #275, p. 41
-Improved Regeneration [Infernal] - Evil, p. 25
-Improved Shield Bash [General] - Defenders of the Faith, p. 20
-Improved Sneak Attack [General] - Traps & Treachery, p. 36
-Improved Sunder [General] - Sword and Fist, p. 7
-Improved Trample [Kaiju] - Dragon Magazine #289, p. 70
-Improved Trip [General] - Player's Handbook, p. 83
-Improved Two-Weapon Fighting [General] - Player's Handbook, p. 83
-Improved Unarmed Strike [General] - Player's Handbook, p. 83
-Improvise Thieves' Tools [General] - Traps & Treachery, p. 37
-Improvised Weapon [General] - Sovereign Stone Campaign Sourcebook, p. 62
-Increased Carrying Capacity [General] - Dungeons, p. 82
-Increased Movement [Infernal] - Evil, p. 26
-Inertial Armor [Psionic] - Psionics Handbook, p. 26
-Infernal Pact [Infernal] - Evil, p. 26
-Infernal Soul [Infernal] - Evil, p. 26
-Information Exchange [Special] - Touched by the Gods, p. 7
-Innate Spell [General] - Tome and Blood, p. 41
-Inner Peace [Mystic Warrior] - Mystic Warriors, p. 113
-Inner Strength [Psionic] - Psionics Handbook, p. 26
-Inscribe Magical Tattoo [Item Creation] - Relics and Rituals, p. 198
-Inscribe Rune [Item Creation] - Forgotten Realms Campaign Setting, p. 36
-Insidious Magic [Metamagic] - Forgotten Realms Campaign Setting, p. 36
-Invisibility [Infernal] - Evil, p. 27
-Ironbone [Special] - Creature Collection, p. 71
-Ironskin [Special] - Creature Collection, p. 72
-Iron Will [General] - Player's Handbook, p. 83
-Item Image [Eldritch] - The Book of Eldritch Might, p. 4
-Jack of All Trades [General] - Song and Silence, p. 40
-Kami's Intuition [Ancestor] - Oriental Adventures, p. 63
-Karmic Strike [General] - Oriental Adventures, p. 63
-Karmic Twin [Ancestor] - Oriental Adventures, p. 64
-Keen Intellect [Ancestor] - Oriental Adventures, p. 64
-Keen Vision [General] - Traps & Treachery, p. 37
-Ki Projection [Special] - Creature Collection, p. 72
-Ki Shout [General] - Oriental Adventures, p. 64
-Knock-Down [General] - Sword and Fist, p. 7
-Knockout Attack [General] - Traps & Treachery, p. 37
-Knowledgeable [General] - Dungeons, p. 82
-Lace Spell: Elemental Energies [Eldritch] - The Book of Eldritch Might, p. 5
-Lace Spell: Enemy Bane [Eldritch] - The Book of Eldritch Might, p. 5
-Lace Spell: Holy/Unholy [Eldritch] - The Book of Eldritch Might, p. 5
-Lace Spell: Lawful/Chaotic [Eldritch] - The Book of Eldritch Might, p. 5
-Lead Missile Fire [General] - Evil, p. 59
-Leadership [General] - Player's Handbook, p. 83 (rules: Dungeon Master's Guide, p. 45)
-Lightning Fists [General] - Sword and Fist, p. 7
-Lightning Reflexes [General] - Player's Handbook, p. 83
-Light Sleeper [General] - Dungeons, p. 82
-Lingering Song [General] - Song and Silence, p. 40
-Lion Spy [Ancestor] - Oriental Adventures, p. 64
-Lion's Rage [Mystic Warrior Stance] - Mystic Warriors, p. 113
-Living Shield [General] - Evil, p. 58
-Low Blow [General] - Dragon Magazine #285, p. 33
-Luck of Heroes [General] - Forgotten Realms Campaign Setting, p. 36
-Luck of Heroes [Ancestor] - Oriental Adventures, p. 64
-Magekiss [Metamagic] - Traps & Treachery, p. 22
-Magic in the Blood [Ancestor] - Oriental Adventures, p. 64
-Magic Item [Infernal] - Evil, p. 27
-Magical Artisan [General] - Forgotten Realms Campaign Setting, p. 36
-Magical Artisan [Ancestor] - Oriental Adventures, p. 64
-Magical Talent [General] - The Book of Eldritch Might, p. 6
-Magical Training [General] - Forgotten Realms Campaign Setting, p. 36
-Magistrate's Mind [Ancestor] - Oriental Adventures, p. 64
-Mantis Leap [General] - Sword and Fist, p. 7
-Manufacture Magic Poison [Item Creation] - The Book of Eldritch Might, p. 6
-Many Masks [Ancestor] - Oriental Adventures, p. 64
-Martial Weapon Proficiency [General] - Player's Handbook, p. 83
-Master Dorje [Metapsionic] - Psionics Handbook, p. 26
-Maximize Power [Metapsionic] - Psionics Handbook, p. 26
-Maximize Spell [Metamagic] - Player's Handbook, p. 83
-Mechanical Aptitude [General] - Traps & Treachery, p. 37
-Mental Adversary [Psionic] - Psionics Handbook, p. 27
-Mental Leap [Psionic] - Psionics Handbook, p. 27
-Mercantile Background [General] - Forgotten Realms Campaign Setting, p. 36
-Metacreative [Psionic] - Psionics Handbook, p. 27
-Militia [General] - Forgotten Realms Campaign Setting, p. 36
-Mind Blind [Psionic] - Dragon Magazine #287, p. 55
-Mind Over Body [General] - Forgotten Realms Campaign Setting, p. 37
-Mind Trap [Psionic] - Psionics Handbook, p. 27
-Mirror Sight [Eldritch] - The Book of Eldritch Might, p. 6
-Mobility [General] - Player's Handbook, p. 83
-Monkey Grip [General] - Sword and Fist, p. 7
-Mounted Archery [General] - Player's Handbook, p. 83
-Mounted Combat [General] - Player's Handbook, p. 83
-Moving Meditation [Special] - Creature Collection, p. 72
-Multiattack (Taan version) [General] - The Taan, p. 83
-Multicultural [General] - Song and Silence, p. 40
-Multiple Limbs [Infernal] - Evil, p. 27
-Multiweapon Fighting (Legends & Lairs version) [General] - Mythic Races, p. 137
-Natural Weaponry [General] - The Taan, p. 83
-Nature Sense [Special] - Touched by the Gods, p. 71
-Nerve Strikes [Special] - Creature Collection, p. 72
-Nobody's Fool [General] - Dragon Magazine #285, p. 33
-Obscure Lore [General] - Song and Silence, p. 40
-Off-Hand Parry [General] - Sword and Fist, p. 7
-Off-Handed [General] - Evil, p. 59
-Oni's Bane [Ancestor] - Oriental Adventures, p. 64
-Pain Touch [General] - Sword and Fist, p. 8
-Pebble Underfoot [General] - Dragon Magazine #279, p. 63
-Penetrate Hardness [Kaiju] - Dragon Magazine #289, p. 70
-Perfect Memory [General] - Traps & Treachery, p. 37
-Permanent Control [Special] - Demonology, p. 41
-Pernicious Magic [Metamagic] - Forgotten Realms Campaign Setting, p. 37
-Persistent Power [Metapsionic] - Psionics Handbook, p. 27
-Persistent Spell [Metamagic] - Tome and Blood, p. 42
-Persuasive [General] - Song and Silence, p. 40
-Pin Shield [General] - Sword and Fist, p. 8
-Pinpoint Accuracy [General] - Sovereign Stone Campaign Sourcebook, p. 62
-Point Blank Shot [General] - Player's Handbook, p. 84
-Poison Blood [Infernal] - Evil, p. 28
-Poison Immunity [General] - Traps & Treachery, p. 37
-Pounce [General] - Mythic Races, p. 77
-Pounce & Strike [General] - Dragon Lords of Melnibone, p. 50
-Power Attack [General] - Player's Handbook, p. 84
-Power Attack--Iaijutsu [Ancestor] - Oriental Adventures, p. 64
-Power Attack--Shadowlands [Ancestor] - Oriental Adventures, p. 65
-Power Lunge [General] - Sword and Fist, p. 8
-Power Penetration [Psionic] - Psionics Handbook, p. 27
-Power Specialization [Psionic] - Dragon Magazine #287, p. 56
-Power Touch [Psionic] - Psionics Handbook, p. 27
-Powerful Voice [Ancestor] - Oriental Adventures, p. 65
-Precise Shot [General] - Player's Handbook, p. 84
-Primal Shout [General] - The Taan, p. 83
-Prone Attack [General] - Sword and Fist, p. 8
-Psionic Body [Psionic] - Psionics Handbook, p. 27
-Psionic Charge [Psionic] - Psionics Handbook, p. 28
-Psionic Defense [Psionic] - Dragon Magazine #287, p. 54
-Psionic Dodge [Psionic] - Psionics Handbook, p. 28
-Psionic Energy Admixture [Metapsionic] - Dragon Magazine #287, p. 55
-Psionic Energy Substitution [Metapsionic] - Dragon Magazine #287, p. 54
-Psionic Fist [Psionic] - Psionics Handbook, p. 28
-Psionic Focus [Psionic] - Psionics Handbook, p. 28
-Psionic Metabolism [Psionic] - Psionics Handbook, p. 28
-Psionic Shot [Psionic] - Psionics Handbook, p. 28
-Psionic Weapon [Psionic] - Psionics Handbook, p. 28
-Psychic Bastion [Psionic] - Psionics Handbook, p. 28
-Psychic Inquisitor [Psionic] - Psionics Handbook, p. 29
-Psychoanalyst [Psionic] - Psionics Handbook, p. 29
-Purifying Light [General] - Mythic Races, p. 69
-Pyro [General] - Song and Silence, p. 40
-Quick Draw [General] - Player's Handbook, p. 84
-Quicken Power [Metapsionic] - Psionics Handbook, p. 29
-Quicken Spell [Metamagic] - Player's Handbook, p. 84
-Quicken Summoning [Special] - Demonology, p. 41
-Quicken Turning [Special] - Defenders of the Faith, p. 20
-Quicker Than the Eye [General] - Song and Silence, p. 40
-Quickstrike [General] - Traps & Treachery, p. 37
-Rake [General] - Mythic Races, p. 77
-Raking Nails [General] - Mystic Warriors, p. 113
-Ranged Disarm [General] - Dragon Magazine #274, p. 60
-Ranged Pin [General] - Dragon Magazine #274, p. 60
-Ranged Sunder [General] - Dragon Magazine #274, p. 60
-Rapid Metabolism [Psionic] - Psionics Handbook, p. 29
-Rapid Reload [General] - Sword and Fist, p. 9
-Rapid Shot [General] - Player's Handbook, p. 84
-Ray Burst [Metamagic] - Dragon Magazine Annual #5, p. 26
-Ray Coning [Metamagic] - Dragon Magazine Annual #5, p. 26
-Ray Extension [Metamagic] - Dragon Magazine Annual #5, p. 26
-Ray Focus [General] - Dragon Magazine Annual #5, p. 26
-Ray Splitting [Metamagic] - Dragon Magazine Annual #5, p. 26
-Reactive Counterspell [General] - Magic of Faerun, p. 22
-Reach Power [Metapsionic] - Dragon Magazine #287, p. 55
-Reach Spell [Metamagic] - Defenders of the Faith, p. 20
-Reckless Offensive [General] - Enemies and Allies, p. 41
-Recognize Omen [General] - Sovereign Stone Campaign Sourcebook, p. 62
-Redirect Attacks [General] - Evil, p. 59
-Regeneration [Infernal] - Evil, p. 28
-Remain Conscious [General] - Sword and Fist, p. 9
-Repeat Power [Metapsionic] - Dragon Magazine #287, p. 56
-Repeat Spell [Metamagic] - Tome and Blood, p. 41
-Requiem [General] - Song and Silence, p. 40
-Resculpt Mind [Psionic] - Dragon Magazine #287, p. 56
-Resist Poison [General] - Forgotten Realms Campaign Setting, p. 37
-Resist Poison [Ancestor] - Oriental Adventures, p. 65
-Resist Taint [Ancestor] - Oriental Adventures, p. 65
-Return Shot [Psionic] - Psionics Handbook, p. 29
-Ride-By-Attack [General] - Player's Handbook, p. 84
-Rot [Infernal] - Evil, p. 28
-Roundabout Kick [General] - Oriental Adventures, p. 65
-Run [General] - Player's Handbook, p. 84
-Sacred Spell [Metamagic] - Defenders of the Faith, p. 20
-Saddleback [Fighter, General] - Forgotten Realms Campaign Setting, p. 37
-Saddleback [Ancestor] - Oriental Adventures, p. 65
-Sanctum Spell [Metamagic] - Tome and Blood, p. 41
-Scent [General] - Dungeon Master's Guide, p. 81 (variant rule)
-Scholar of Nature [Ancestor] - Oriental Adventures, p. 65
-Scribe Scroll [Item Creation] - Player's Handbook, p. 84
-Scribe Tattoo [Item Creation] - Psionics Handbook, p. 29
-Sculpt Power [Metapsionic] - Dragon Magazine #287, p. 56
-Sculpt Spell [Metamagic] - Tome and Blood, p. 42
-Sea Legs [Ancestor] - Oriental Adventures, p. 65
-Second Wind [General] - Sovereign Stone Campaign Sourcebook, p. 63
-Set Spear [General] - Dragon Lords of Melnibone, p. 63
-Shadow [General] - Song and Silence, p. 40
-Shadow (Legends & Lairs version) [General] - Traps & Treachery, p. 37
-Shadow Weave Magic [General] - Forgotten Realms Campaign Setting, p. 37
-Shapechange [Infernal] - Evil, p. 27
-Shared Spellcasting [Metamagic] - Sovereign Stone Campaign Sourcebook, p. 63
-Sharp-Shooting [General] - Sword and Fist, p. 9
-Shield Charge [General] - Defenders of the Faith, p. 20
-Shield Expert [General] - Sword and Fist, p. 9
-Shield Proficiency [General] - Player's Handbook, p. 85
-Shot on the Run [General] - Player's Handbook, p. 85
-Side Step [General] - Mystic Warriors, p. 113
-Signature Skill [General] - Traps & Treachery, p. 38
-Signature Spell [General] - Forgotten Realms Campaign Setting, p. 37
-Silent Spell [Metamagic] - Player's Handbook, p. 85
-Silver Palm [General] - Forgotten Realms Campaign Setting, p. 37
-Silver Tongue [Ancestor] - Oriental Adventures, p. 65
-Simple Weapon Proficiency [General] - Player's Handbook, p. 85
-Skill Focus [General] - Player's Handbook, p. 85
-Smooth Talk [General] - Forgotten Realms Campaign Setting, p. 37
-Smooth Talk [Ancestor] - Oriental Adventures, p. 66
-Snake Blood [General] - Forgotten Realms Campaign Setting, p. 38
-Snatch Arrows [General] - Sword and Fist, p. 9
-Snatch Weapon [General] - Song and Silence, p. 40
-Soul of Honor [Ancestor] - Oriental Adventures, p. 66
-Soul of Loyalty [Ancestor] - Oriental Adventures, p. 66
-Soul of Sincerity [Ancestor] - Oriental Adventures, p. 66
-Speed of Thought [Psionic] - Psionics Handbook, p. 29
-Spell Focus [General] - Player's Handbook, p. 85
-Spell Girding [General] - Magic of Faerun, p. 22
-Spell Mastery [Special] - Player's Handbook, p. 85 (rules: p. 54)
-Spell Penetration [General] - Player's Handbook, p. 85
-Spell Power [Ancestor] - Oriental Adventures, p. 66
-Spell Specialization [General] - Tome and Blood, p. 42
-Spell Thematics [General] - Magic of Faerun, p. 22
-Spellcaster Support [Ancestor] - Oriental Adventures, p. 66
-Spellcasting Prodigy [General] - Forgotten Realms Campaign Setting, p. 38
-Spellfire Wielder [General] - Magic of Faerun, p. 23
-Spirited Charge [General] - Player's Handbook, p. 85
-Split Psionic Ray [Metapsionic] - Dragon Magazine #287, p. 56
-Split Ray [Metamagic] - Tome and Blood, p. 42
-Spook Animals [Special] - Dragon Magazine d20 Special/Annual #6, p. 65
-Spring Attack [General] - Player's Handbook, p. 85
-Staggering Blow [General] - Dragon Magazine #279, p. 63
-Stand Still [Psionic] - Psionics Handbook, p. 29
-Stare-Down [General] - Scrollworks #11, p. 5
-Stealth [General] - Traps & Treachery, p. 39
-Stealthy [General] - Forgotten Realms Campaign Setting, p. 38
-Still Spell [Metamagic] - Player's Handbook, p. 85
-Stoic Composure [General] - Dragon Magazine #284, p. 123
-Street Smart [General] - Forgotten Realms Campaign Setting, p. 38
-Strength of the Charger [Ancestor] - Oriental Adventures, p. 66
-Strength of the Crab [Ancestor] - Oriental Adventures, p. 66
-Strength of Personality [Special] - Demonology, p. 41
-Strong Soul [General] - Forgotten Realms Campaign Setting, p. 38
-Strong Soul [Ancestor] - Oriental Adventures, p. 66
-Stunning Fist [General] - Player's Handbook, p. 85
-Stunning Roar [Kaiju] - Dragon Magazine #289, p. 70
-Subdual Substitution [Metamagic] - Tome and Blood, p. 42
-Subduing Strike [General] - Sovereign Stone Campaign Sourcebook, p. 63
-Subsonics [General] - Song and Silence, p. 40
-Subtle Charm [Special] - Touched by the Gods, p. 71
-Sunder [General] - Player's Handbook, p. 85
-Superior Expertise [General] - Oriental Adventures, p. 66
-Survival Instincts [General] - The Taan, p. 83
-Survivor [General] - Forgotten Realms Campaign Setting, p. 38
-Swarmfighting [General] - Dragon Magazine #285, p. 33
-Swift Twist Glance [General] - Mystic Warriors, p. 113
-Tail Attack [Special] - Dragon Magazine d20 Special/Annual #6, p. 61
-Talented [Psionic] - Psionics Handbook, p. 30
-Tattoo Focus [Special] - Forgotten Realms Campaign Setting, p. 38
-Taut Tug [General] - Mystic Warriors, p. 113
-Ten Animal Style [Special] - Creature Collection, p. 72
-Tenacious Magic [Metamagic] - Forgotten Realms Campaign Setting, p. 38
-Thick Hide [General] - The Taan, p. 83
-Thick Skin [General] - Dungeons, p. 82
-Thrall Master [Special] - Touched by the Gods, p. 71
-Throw Anything [General] - Sword and Fist, p. 9
-Thug [General] - Forgotten Realms Campaign Setting, p. 38
-Thunder Twin [General] - Forgotten Realms Campaign Setting, p. 38
-Thunderous Roar [Kaiju] - Dragon Magazine #289, p. 70
-Tinker [General] - Dungeons, p. 82
-Token Familiar [General] - Dragon Magazine #280, p. 62
-Toughness [General] - Player's Handbook, p. 85
-Track [General] - Player's Handbook, p. 85
-Trample [General] - Player's Handbook, p. 86
-Treetopper [General] - Forgotten Realms Campaign Setting, p. 38
-Trigger Power [Psionic] - Psionics Handbook, p. 30
-Trustworthy [General] - Song and Silence, p. 40
-Turn Outsider [Special] - Evil, p. 60
-Turn Resistance [General] - Mythic Races, p. 50
-Twin Power [Psionic] - Psionics Handbook, p. 30
-Twin Spell [Metamagic] - Tome and Blood, p. 42
-Twin Sword Style [Fighter, General] - Forgotten Realms Campaign Setting, p. 39
-Two-Weapon Fighting [General] - Player's Handbook, p. 86
-Tyrant [General] - Evil, p. 60
-Ultimate Feint [General] - Evil, p. 62
-Unavoidable Strike [Psionic] - Psionics Handbook, p. 30
-Unbalancing Strike [General] - Oriental Adventures, p. 66
-Undead Familiar [General] - Dragon Magazine #280, p. 62
-Undetectable Lie [Infernal] - Evil, p. 28
-Unholy Blessing [Infernal] - Evil, p. 28
-Unholy Strength [Infernal] - Evil, p. 28
-Unorthodox Flurry [Special] - Dragon Magazine #279, p. 63
-Unusual Background [General] - Diomin, p. 43
-Unyielding Aura [General] - Mythic Races, p. 69
-Up the Walls [Psionic] - Psionics Handbook, p. 30
-Upgrade Power [Psionic] - Dragon Magazine #287, p. 56
-Vengeful Strike [General] - Touched by the Gods, p. 109
-Vitus Kata [Mystic Warrior] - Mystic Warriors, p. 113
-Wall Breaker [General] - Dragon Magazine #285, p. 98
-Warrior Instinct [Ancestor] - Oriental Adventures, p. 66
-Warrior Shugenja [Ancestor] - Oriental Adventures, p. 66
-Warsinger [Special] - Touched by the Gods, p. 109
-Water-ken [General] - The Taan, p. 83
-Wealth [Infernal] - Evil, p. 29
-Weapon Expertise: Throwing Spear [General] - Ragnarok!, p. 10
-Weapon Finesse [General] - Player's Handbook, p. 86
-Weapon Focus [General] - Player's Handbook, p. 86
-Weapon Specialization [Special] - Player's Handbook, p. 86 (rules: p. 37)
-Weapon-Catching [General] - Ragnarok!, p. 9
-Whirlwind Attack [General] - Player's Handbook, p. 86
-Widen Power [Metapsionic] - Dragon Magazine #287, p. 56
-Widen Spell [Metamagic] - Tome and Blood, p. 42
-Wish [Infernal] - Evil, p. 29
-Wrath of Calaam [Special] - Touched by the Gods, p. 59
-Zen Archery [General] - Sword and Fist, p. 9
+A Thousand Furs [Special] - Touched by the Gods, p. 71
+Acrobatic [General] - Song and Silence, p. 38
+Acrobatic (Legends & Lairs version) [General] - Traps & Treachery, p. 34
+Airy Gallop [Special] - Dragon Magazine d20 Special/Annual #6, p. 65
+Alertness [General] - Player's Handbook, p. 80
+Alluring [General] - Song and Silence, p. 38
+Ambidexterity [General] - Player's Handbook, p. 80
+Ancient Lineage [General] - The Taan, p. 81
+Arcane Defense [General] - Tome and Blood, p. 38
+Arcane Preparation [General] - Tome and Blood, p. 38
+Arcane Schooling [General] - Forgotten Realms Campaign Setting, p. 33
+Armor Proficiency (Heavy) [General] - Player's Handbook, p.80
+Armor Proficiency (Light) [General] - Player's Handbook, p. 80
+Armor Proficiency (Medium) [General] - Player's Handbook, p. 80
+Art of Fascination [Ancestor] - Oriental Adventures, p. 60
+Arterial Strike [General] - Song and Silence, p. 38
+Artist [General] - Forgotten Realms Campaign Setting, p. 33
+Artist [Ancestor] - Oriental Adventures, p. 61
+Athletic [General] - Song and Silence, p. 38
+Attention to Detail [Ancestor] - Oriental Adventures, p. 61
+Attune Gem [Item Creation] - Magic of Faerun, p. 21
+Augment Construct [Psionic] - Dragon Magazine #287, p. 54
+Augment Summoning [General] - Tome and Blood, p. 39
+Aura of Serenity [Mystic Warrior] - Mystic Warriors, p. 112
+Battle Howl [General] - Touched by the Gods, p. 109
+Battle Roar [Kaiju] - Dragon Magazine #289, p. 70
+Blind Casting [General] - Dungeons, p. 81
+Blind-Fight [General] - Player's Handbook, p. 80
+Blindsight, 5-foot Radius [General] - Sword and Fist, p. 5
+Blood Frenzy [General] - The Taan, p. 81
+Blood Sorcerer [Ancestor] - Oriental Adventures, p. 61
+Blooded [General] - Forgotten Realms Campaign Setting, p. 33
+Bloodline of Fire [General] - Forgotten Realms Campaign Setting, p. 34
+Body Fuel [Psionic] - Psionics Handbook, p. 24
+Bootlicker [General] - Evil, p. 58
+Born Duelist [Ancestor] - Oriental Adventures, p. 61
+Breeze Dance [Fighting Stance] - Mystic Warriors, p. 112
+Brew Poison [Item Creation] - Traps & Treachery, p. 45
+Brew Potion [Item Creation] - Player's Handbook, p. 80
+Bribery [General] - Evil, p. 58
+Bullheaded [General] - Forgotten Realms Campaign Setting, p. 34
+Cabalistic Spellcasting [Metamagic] - Sovereign Stone Campaign Sourcebook, p. 60
+Casing Sense [General] - Traps & Treachery, p. 34
+Chain Power [Metapsionic] - Dragon Magazine #287, p. 54
+Chain Spell [Metamagic] - Tome and Blood, p. 39
+Chain Spell (Scarred Lands version) [Metamagic] - Relics and Rituals, p. 25
+Change Instruction [Special] - Demonology, p. 41
+Chariot Archery [General] - Sword and Fist, p. 78
+Chariot Charge [General] - Sword and Fist, p. 79
+Chariot Combat [General] - Sword and Fist, p. 78
+Chariot Sideswipe [General] - Sword and Fist, p. 79
+Chariot Trample [General] - Sword and Fist, p. 78
+Charlatan [General] - Song and Silence, p. 38
+Chink in the Armor [General] - Song and Silence, p. 38
+Choke Hold [General] - Oriental Adventures, p. 61
+Circle Kick [General] - Sword and Fist, p. 5
+Claws/Fangs [Infernal] - Evil, p. 24
+Cleave [General] - Player's Handbook, p. 80
+Close-Order Fighting [Special] - Dragon Lords of Melnibone, p. 63
+Close-Quarters Fighting [General] - Sword and Fist, p. 5
+Cloud Running [Special] - Creature Collection, p. 72
+Combat Agility [General] - Dragon Magazine #284, p. 123
+Combat Casting [General] - Player's Handbook, p. 80
+Combat Manifestation [Psionic] - Psionics Handbook, p. 24
+Combat Reflexes [General] - Player's Handbook, p. 80
+Combat Sense [General] - The Taan, p. 81
+Conjure Mastery [Eldritch] - The Book of Eldritch Might, p. 4
+Construct Familiar [General] - Dragon Magazine #280, p. 62
+Controlled Breathing [General] - Dungeons, p. 81
+Cool Head [General] - Oriental Adventures, p. 61
+Cooperative Spell [Metamagic] - Tome and Blood, p. 39
+Cooperative Spellcasting [Metamagic] - Sovereign Stone Campaign Sourcebook, p. 60
+Cosmopolitan [General] - Forgotten Realms Campaign Setting, p. 34
+Courteous Magocracy [General] - Forgotten Realms Campaign Setting, p. 34
+Crab Walk [Fighting Stance] - Mystic Warriors, p. 112
+Craft Anaema Tool [Item Creation] - Mythic Races, p. 15
+Craft Crystal Capacitor [Item Creation] - Psionics Handbook, p. 24
+Craft Crystal Weapon [Item Creation] - Oriental Adventures, p. 61
+Craft Dorje [Item Creation] - Psionics Handbook, p. 24
+Craft Kirpan [Item Creation] - Mystic Warriors, p. 112
+Craft Magic Arms and Armor [Item Creation] - Player's Handbook, p. 81
+Craft Magic Trap [Item Creation] - Traps & Treachery, p. 34
+Craft Mystic Talisman [Item Creation] - Mystic Warriors, p. 112
+Craft Named Weapon [Item Creation] - Mystic Warriors, p. 112
+Craft Psionic Arms and Armor [Item Creation] - Psionics Handbook, p. 24
+Craft Rod [Item Creation] - Player's Handbook, p. 81
+Craft Staff [Item Creation] - Player's Handbook, p. 81
+Craft Talisman [Item Creation] - Oriental Adventures, p. 61
+Craft Universal Item [Item Creation] - Psionics Handbook, p. 24
+Craft Vitus Amulet [Item Creation] - Mystic Warriors, p. 113
+Craft Wand [Item Creation] - Player's Handbook, p. 81
+Craft Wondrous Item [Item Creation] - Player's Handbook, p. 81
+Create Graft [Item Creation] - Touched by the Gods, p. 26
+Create Portal [Item Creation] - Forgotten Realms Campaign Setting, p. 34
+Dance of the Dirk [Fighting Stance] - Mystic Warriors, p. 113
+Darkvision [Infernal] - Evil, p. 24
+Dash [General] - Song and Silence, p. 38
+Daylight Adaptation [General] - Forgotten Realms Campaign Setting, p. 34
+Dead Shot [General] - Sovereign Stone Campaign Sourcebook, p. 60
+Death Blow [General] - Sword and Fist, p. 6
+Deep Impact [Psionic] - Psionics Handbook, p. 25
+Defensive Strike [General] - Oriental Adventures, p. 62
+Defensive Throw [General] - Oriental Adventures, p. 62
+Deflect Arrows [General] - Player's Handbook, p. 81
+Deflect Ranged Attack [General] - Dragon Magazine #274, p. 60
+Delay Power [Metapsionic] - Psionics Handbook, p. 25
+Delay Spell [Metamagic] - Tome and Blood, p. 39
+Dirty Fighting [General] - Sword and Fist, p. 6
+Disarm Mind [Psionic] - Psionics Handbook, p. 25
+Discipline [General] - Forgotten Realms Campaign Setting, p. 34
+Discipline [Ancestor] - Oriental Adventures, p. 62
+Disguise Spell [Metamagic] - Song and Silence, p. 38
+Dismiss Demon [Special] - Demonlogy, p. 41
+Divine Cleansing [Divine] - Defenders of the Faith, p. 19
+Divine Might [Divine] - Defenders of the Faith, p. 19
+Divine Perception [General] - Touched by the Gods, p. 34
+Divine Resistance [Divine] - Defenders of the Faith, p. 19
+Divine Shield [Divine] - Defenders of the Faith, p. 19
+Divine Vengeance [Divine] - Defenders of the Faith, p. 20
+Divine Vigor [Divine] - Defenders of the Faith, p. 20
+Dodge [General] - Player's Handbook, p. 81
+Dreamspeaking [General] - The Book of Eldritch Might, p. 4
+Drug Tolerance [General] - Caravan of Hope, p. 27
+Dual Strike [General] - Sword and Fist, p. 6
+Eagle Claw Attack [General] - Sword and Fist, p. 6
+Earth's Embrace [General] - Oriental Adventures, p. 62
+Education [General] - Forgotten Realms Campaign Setting, p. 34
+Eidetic Memory [General] - Dungeons, p. 81
+Element Resistance [Infernal] - Evil, p. 24
+Empathy [General] - Traps & Treachery, p. 35
+Empower Spell [Metamagic] - Player's Handbook, p. 82
+Empower Turning [Special] - Defenders of the Faith, p. 20
+Enchant Stone [Item Creation] - The Taan, p. 81
+Encode Stone [Item Creation] - Psionics Handbook, p. 25
+Endurance [General] - Player's Handbook, p. 82
+Energy Admixture [Metamagic] - Tome and Blood, p. 39
+Energy of Life [Special] - Creature Collection, p. 72
+Energy Substitution [Metamagic] - Tome and Blood, p. 40
+Enlarge Power [Metapsionic] - Psionics Handbook, p. 25
+Enlarge Spell [Metamagic] - Player's Handbook, p. 82
+Enspell Familiar [General] - Dragon Magazine #280, p. 62
+Eschew Materials [Metamagic] - Tome and Blood, p. 40
+Etch Object Rune [Item Creation] - The Book of Eldritch Might, p. 4
+Ethran [General] - Forgotten Realms Campaign Setting, p. 34
+Exotic Weapon Proficiency [General] - Player's Handbook, p. 82
+Expert Tactician [General] - Song and Silence, p. 38
+Expertise [General] - Player's Handbook, p. 82
+Extend Power [Metapsionic] - Psionics Handbook, p. 25
+Extend Spell [Metamagic] - Player's Handbook, p. 82
+Extra Familiar [General] - Dragon Magazine #280, p. 62
+Extra Music [General] - Song and Silence, p. 39
+Extra Power [Psionic] - Dragon Magazine #287, p. 55
+Extra Slot [General] - Tome and Blood, p. 40
+Extra Smiting [Special] - Defenders of the Faith, p. 20
+Extra Spell [General] - Tome and Blood, p. 40
+Extra Stunning Attacks [General] - Sword and Fist, p. 6
+Extra Turning [Special] - Player's Handbook, p. 82 (rules: pp. 32, 42)
+Eye for Detail [General] - Traps & Treachery, p. 35
+Eyes in the Back of Your Head [General] - Sword and Fist, p. 6
+Eyes of Calaam [Special] - Touched by the Gods, p. 59
+Falling Star Strike [General] - Oriental Adventures, p. 62
+Far Shot [General] - Player's Handbook, p. 82
+Fast Armor [General] - Dragon Magazine #284, p. 123
+Fast Rider [General] - Dragon Magazine #285, p. 98
+Fast Talker [General] - Traps & Treachery, p. 35
+Fearsome and Fearless [Ancestor] - Oriental Adventures, p. 62
+Feign Weakness [General] - Sword and Fist, p. 6
+Fell Shot [Psionic] - Psionics Handbook, p. 25
+Firearms Drill [General] - Dragon Magazine d20 Special/Annual #6, p. 70
+Fists of Calaam [Special] - Touched by the Gods, p. 59
+Fists of Iron [General] - Sword and Fist, p. 6
+Fleet of Foot [General] - Song and Silence, p. 39
+Flick of the Wrist [General] - Song and Silence, p. 39
+Flight [Infernal] - Evil, p. 25
+Flying Kick [General] -Oriental Adventures, p. 62
+Foe Hunter [Fighter, General] - Forgotten Realms Campaign Setting, p. 34
+Forester [General] - Forgotten Realms Campaign Setting, p. 35
+Forge Ring [Item Creation] - Player's Handbook, p. 82
+Fortify Power [Metapsionic] - Dragon Magazine #287, p. 55
+Freezing the Lifeblood [General] - Oriental Adventures, p. 62
+Gifted General [Ancestor] - Oriental Adventures, p. 62
+Golden Tongue [General] - Dungeons, p. 81
+Grace Under Pressure [General] - Dungeons, p. 81
+Grappling Block [General] - Oriental Adventures, p. 63
+Grasshopper Strike [General] - Dragon Magazine #279, p. 63
+Great Cleave [General] - Player's Handbook, p. 82
+Great Crafter [Ancestor] - Oriental Adventures, p. 63
+Great Diplomat [Ancestor] - Oriental Adventures, p. 63
+Great Fortitude [General] - Player's Handbook, p. 82
+Great Ki Shout [General] - Oriental Adventures, p. 63
+Great Stamina [Ancestor] - Oriental Adventures, p. 63
+Great Sunder [Psionic] - Psionics Handbook, p. 26
+Great Teamwork [Ancestor] - Oriental Adventures, p. 63
+Greater Power Penetration [Psionic] - Psionics Handbook, p. 26
+Greater Psionic Focus [Psionic] - Psionics Handbook, p. 26
+Greater Spell Focus [General] - Tome and Blood, p. 40
+Greater Spell Penetration [General] - Tome and Blood, p. 40
+Green Ear [General] - Song and Silence, p. 39
+Green Viper Style [Fighting Stance] - Mystic Warriors, p. 113
+Hammer Fist [General] - Dragon Magazine #279, p. 63
+Hamstring [General] - Song and Silence, p. 39
+Heavy Scarring [General] - The Taan, p. 82
+Heighten Power [Metapsionic] - Psionics Handbook, p. 26
+Heighten Spell [Metamagic] - Player's Handbook, p. 82
+Heighten Turning [Special] - Defenders of the Faith, p. 20
+Heroic Destiny [Special] - Touched by the Gods, p. 109
+Hide Power [Metapsionic] - Psionics Handbook, p. 26
+Hide Spell [Metamagic] - Relics and Rituals, p. 25
+Hill Fighter [General] - Dragon Magazine #285, p. 98
+Hold the Line [General] - Sword and Fist, p. 7
+Honest Merchant [Ancestor] - Oriental Adventures, p. 63
+Horse Nomad [Fighter, General] - Forgotten Realms Campaign Setting, p. 35
+Iaijutsu Master [Ancestor] - Oriental Adventures, p. 63
+Immortality [Infernal] - Evil, p. 25
+Immunity [Infernal] - Evil, p. 25
+Imp [Infernal] - Evil, p. 25
+Improved Aid [Ancestor] - Oriental Adventures, p. 63
+Improved Alertness [General] - Dungeons, p. 82
+Improved Bull Rush [General] - Player's Handbook, p. 82
+Improved Counterspell [General] - Forgotten Realms Campaign Setting, p. 35
+Improved Critical [General] - Player's Handbook, p. 82
+Improved Disarm [General] - Player's Handbook, p. 83
+Improved Endurance [General] - Dungeons, p. 82
+Improved Familiar [General] - Tome and Blood, p. 40
+Improved Feint [General] - Evil, p. 59
+Improved Flight [Infernal] - Evil, p. 25
+Improved Grab [General] - Mythic Races, p. 77
+Improved Grapple [General] - Oriental Adventures, p. 63
+Improved Initiative [General] - Player's Handbook, p. 83
+Improved Knockout Attack [General] - Traps & Treachery, p. 35
+Improved Low Blow [General] - Dragon Magazine #285, p. 33
+Improved Mounted Archery [General] - Dragon Magazine #285, p. 99
+Improved Mounted Combat [General] - Sovereign Stone Campaign Sourcebook, p. 62
+Improved Multiweapon Fighting [General] - Mythic Races, p. 137
+Improved Overrun [General] - Sword and Fist, p. 7
+Improved Psicrystal [Psionic] - Psionics Handbook, p. 26
+Improved Ranged Sneak Attack [General] - Traps & Treachery, p. 36
+Improved Rapid Shot [General] - Dragon Magazine #275, p. 41
+Improved Regeneration [Infernal] - Evil, p. 25
+Improved Shield Bash [General] - Defenders of the Faith, p. 20
+Improved Sneak Attack [General] - Traps & Treachery, p. 36
+Improved Sunder [General] - Sword and Fist, p. 7
+Improved Trample [Kaiju] - Dragon Magazine #289, p. 70
+Improved Trip [General] - Player's Handbook, p. 83
+Improved Two-Weapon Fighting [General] - Player's Handbook, p. 83
+Improved Unarmed Strike [General] - Player's Handbook, p. 83
+Improvise Thieves' Tools [General] - Traps & Treachery, p. 37
+Improvised Weapon [General] - Sovereign Stone Campaign Sourcebook, p. 62
+Increased Carrying Capacity [General] - Dungeons, p. 82
+Increased Movement [Infernal] - Evil, p. 26
+Inertial Armor [Psionic] - Psionics Handbook, p. 26
+Infernal Pact [Infernal] - Evil, p. 26
+Infernal Soul [Infernal] - Evil, p. 26
+Information Exchange [Special] - Touched by the Gods, p. 7
+Innate Spell [General] - Tome and Blood, p. 41
+Inner Peace [Mystic Warrior] - Mystic Warriors, p. 113
+Inner Strength [Psionic] - Psionics Handbook, p. 26
+Inscribe Magical Tattoo [Item Creation] - Relics and Rituals, p. 198
+Inscribe Rune [Item Creation] - Forgotten Realms Campaign Setting, p. 36
+Insidious Magic [Metamagic] - Forgotten Realms Campaign Setting, p. 36
+Invisibility [Infernal] - Evil, p. 27
+Ironbone [Special] - Creature Collection, p. 71
+Ironskin [Special] - Creature Collection, p. 72
+Iron Will [General] - Player's Handbook, p. 83
+Item Image [Eldritch] - The Book of Eldritch Might, p. 4
+Jack of All Trades [General] - Song and Silence, p. 40
+Kami's Intuition [Ancestor] - Oriental Adventures, p. 63
+Karmic Strike [General] - Oriental Adventures, p. 63
+Karmic Twin [Ancestor] - Oriental Adventures, p. 64
+Keen Intellect [Ancestor] - Oriental Adventures, p. 64
+Keen Vision [General] - Traps & Treachery, p. 37
+Ki Projection [Special] - Creature Collection, p. 72
+Ki Shout [General] - Oriental Adventures, p. 64
+Knock-Down [General] - Sword and Fist, p. 7
+Knockout Attack [General] - Traps & Treachery, p. 37
+Knowledgeable [General] - Dungeons, p. 82
+Lace Spell: Elemental Energies [Eldritch] - The Book of Eldritch Might, p. 5
+Lace Spell: Enemy Bane [Eldritch] - The Book of Eldritch Might, p. 5
+Lace Spell: Holy/Unholy [Eldritch] - The Book of Eldritch Might, p. 5
+Lace Spell: Lawful/Chaotic [Eldritch] - The Book of Eldritch Might, p. 5
+Lead Missile Fire [General] - Evil, p. 59
+Leadership [General] - Player's Handbook, p. 83 (rules: Dungeon Master's Guide, p. 45)
+Lightning Fists [General] - Sword and Fist, p. 7
+Lightning Reflexes [General] - Player's Handbook, p. 83
+Light Sleeper [General] - Dungeons, p. 82
+Lingering Song [General] - Song and Silence, p. 40
+Lion Spy [Ancestor] - Oriental Adventures, p. 64
+Lion's Rage [Mystic Warrior Stance] - Mystic Warriors, p. 113
+Living Shield [General] - Evil, p. 58
+Low Blow [General] - Dragon Magazine #285, p. 33
+Luck of Heroes [General] - Forgotten Realms Campaign Setting, p. 36
+Luck of Heroes [Ancestor] - Oriental Adventures, p. 64
+Magekiss [Metamagic] - Traps & Treachery, p. 22
+Magic in the Blood [Ancestor] - Oriental Adventures, p. 64
+Magic Item [Infernal] - Evil, p. 27
+Magical Artisan [General] - Forgotten Realms Campaign Setting, p. 36
+Magical Artisan [Ancestor] - Oriental Adventures, p. 64
+Magical Talent [General] - The Book of Eldritch Might, p. 6
+Magical Training [General] - Forgotten Realms Campaign Setting, p. 36
+Magistrate's Mind [Ancestor] - Oriental Adventures, p. 64
+Mantis Leap [General] - Sword and Fist, p. 7
+Manufacture Magic Poison [Item Creation] - The Book of Eldritch Might, p. 6
+Many Masks [Ancestor] - Oriental Adventures, p. 64
+Martial Weapon Proficiency [General] - Player's Handbook, p. 83
+Master Dorje [Metapsionic] - Psionics Handbook, p. 26
+Maximize Power [Metapsionic] - Psionics Handbook, p. 26
+Maximize Spell [Metamagic] - Player's Handbook, p. 83
+Mechanical Aptitude [General] - Traps & Treachery, p. 37
+Mental Adversary [Psionic] - Psionics Handbook, p. 27
+Mental Leap [Psionic] - Psionics Handbook, p. 27
+Mercantile Background [General] - Forgotten Realms Campaign Setting, p. 36
+Metacreative [Psionic] - Psionics Handbook, p. 27
+Militia [General] - Forgotten Realms Campaign Setting, p. 36
+Mind Blind [Psionic] - Dragon Magazine #287, p. 55
+Mind Over Body [General] - Forgotten Realms Campaign Setting, p. 37
+Mind Trap [Psionic] - Psionics Handbook, p. 27
+Mirror Sight [Eldritch] - The Book of Eldritch Might, p. 6
+Mobility [General] - Player's Handbook, p. 83
+Monkey Grip [General] - Sword and Fist, p. 7
+Mounted Archery [General] - Player's Handbook, p. 83
+Mounted Combat [General] - Player's Handbook, p. 83
+Moving Meditation [Special] - Creature Collection, p. 72
+Multiattack (Taan version) [General] - The Taan, p. 83
+Multicultural [General] - Song and Silence, p. 40
+Multiple Limbs [Infernal] - Evil, p. 27
+Multiweapon Fighting (Legends & Lairs version) [General] - Mythic Races, p. 137
+Natural Weaponry [General] - The Taan, p. 83
+Nature Sense [Special] - Touched by the Gods, p. 71
+Nerve Strikes [Special] - Creature Collection, p. 72
+Nobody's Fool [General] - Dragon Magazine #285, p. 33
+Obscure Lore [General] - Song and Silence, p. 40
+Off-Hand Parry [General] - Sword and Fist, p. 7
+Off-Handed [General] - Evil, p. 59
+Oni's Bane [Ancestor] - Oriental Adventures, p. 64
+Pain Touch [General] - Sword and Fist, p. 8
+Pebble Underfoot [General] - Dragon Magazine #279, p. 63
+Penetrate Hardness [Kaiju] - Dragon Magazine #289, p. 70
+Perfect Memory [General] - Traps & Treachery, p. 37
+Permanent Control [Special] - Demonology, p. 41
+Pernicious Magic [Metamagic] - Forgotten Realms Campaign Setting, p. 37
+Persistent Power [Metapsionic] - Psionics Handbook, p. 27
+Persistent Spell [Metamagic] - Tome and Blood, p. 42
+Persuasive [General] - Song and Silence, p. 40
+Pin Shield [General] - Sword and Fist, p. 8
+Pinpoint Accuracy [General] - Sovereign Stone Campaign Sourcebook, p. 62
+Point Blank Shot [General] - Player's Handbook, p. 84
+Poison Blood [Infernal] - Evil, p. 28
+Poison Immunity [General] - Traps & Treachery, p. 37
+Pounce [General] - Mythic Races, p. 77
+Pounce & Strike [General] - Dragon Lords of Melnibone, p. 50
+Power Attack [General] - Player's Handbook, p. 84
+Power Attack--Iaijutsu [Ancestor] - Oriental Adventures, p. 64
+Power Attack--Shadowlands [Ancestor] - Oriental Adventures, p. 65
+Power Lunge [General] - Sword and Fist, p. 8
+Power Penetration [Psionic] - Psionics Handbook, p. 27
+Power Specialization [Psionic] - Dragon Magazine #287, p. 56
+Power Touch [Psionic] - Psionics Handbook, p. 27
+Powerful Voice [Ancestor] - Oriental Adventures, p. 65
+Precise Shot [General] - Player's Handbook, p. 84
+Primal Shout [General] - The Taan, p. 83
+Prone Attack [General] - Sword and Fist, p. 8
+Psionic Body [Psionic] - Psionics Handbook, p. 27
+Psionic Charge [Psionic] - Psionics Handbook, p. 28
+Psionic Defense [Psionic] - Dragon Magazine #287, p. 54
+Psionic Dodge [Psionic] - Psionics Handbook, p. 28
+Psionic Energy Admixture [Metapsionic] - Dragon Magazine #287, p. 55
+Psionic Energy Substitution [Metapsionic] - Dragon Magazine #287, p. 54
+Psionic Fist [Psionic] - Psionics Handbook, p. 28
+Psionic Focus [Psionic] - Psionics Handbook, p. 28
+Psionic Metabolism [Psionic] - Psionics Handbook, p. 28
+Psionic Shot [Psionic] - Psionics Handbook, p. 28
+Psionic Weapon [Psionic] - Psionics Handbook, p. 28
+Psychic Bastion [Psionic] - Psionics Handbook, p. 28
+Psychic Inquisitor [Psionic] - Psionics Handbook, p. 29
+Psychoanalyst [Psionic] - Psionics Handbook, p. 29
+Purifying Light [General] - Mythic Races, p. 69
+Pyro [General] - Song and Silence, p. 40
+Quick Draw [General] - Player's Handbook, p. 84
+Quicken Power [Metapsionic] - Psionics Handbook, p. 29
+Quicken Spell [Metamagic] - Player's Handbook, p. 84
+Quicken Summoning [Special] - Demonology, p. 41
+Quicken Turning [Special] - Defenders of the Faith, p. 20
+Quicker Than the Eye [General] - Song and Silence, p. 40
+Quickstrike [General] - Traps & Treachery, p. 37
+Rake [General] - Mythic Races, p. 77
+Raking Nails [General] - Mystic Warriors, p. 113
+Ranged Disarm [General] - Dragon Magazine #274, p. 60
+Ranged Pin [General] - Dragon Magazine #274, p. 60
+Ranged Sunder [General] - Dragon Magazine #274, p. 60
+Rapid Metabolism [Psionic] - Psionics Handbook, p. 29
+Rapid Reload [General] - Sword and Fist, p. 9
+Rapid Shot [General] - Player's Handbook, p. 84
+Ray Burst [Metamagic] - Dragon Magazine Annual #5, p. 26
+Ray Coning [Metamagic] - Dragon Magazine Annual #5, p. 26
+Ray Extension [Metamagic] - Dragon Magazine Annual #5, p. 26
+Ray Focus [General] - Dragon Magazine Annual #5, p. 26
+Ray Splitting [Metamagic] - Dragon Magazine Annual #5, p. 26
+Reactive Counterspell [General] - Magic of Faerun, p. 22
+Reach Power [Metapsionic] - Dragon Magazine #287, p. 55
+Reach Spell [Metamagic] - Defenders of the Faith, p. 20
+Reckless Offensive [General] - Enemies and Allies, p. 41
+Recognize Omen [General] - Sovereign Stone Campaign Sourcebook, p. 62
+Redirect Attacks [General] - Evil, p. 59
+Regeneration [Infernal] - Evil, p. 28
+Remain Conscious [General] - Sword and Fist, p. 9
+Repeat Power [Metapsionic] - Dragon Magazine #287, p. 56
+Repeat Spell [Metamagic] - Tome and Blood, p. 41
+Requiem [General] - Song and Silence, p. 40
+Resculpt Mind [Psionic] - Dragon Magazine #287, p. 56
+Resist Poison [General] - Forgotten Realms Campaign Setting, p. 37
+Resist Poison [Ancestor] - Oriental Adventures, p. 65
+Resist Taint [Ancestor] - Oriental Adventures, p. 65
+Return Shot [Psionic] - Psionics Handbook, p. 29
+Ride-By-Attack [General] - Player's Handbook, p. 84
+Rot [Infernal] - Evil, p. 28
+Roundabout Kick [General] - Oriental Adventures, p. 65
+Run [General] - Player's Handbook, p. 84
+Sacred Spell [Metamagic] - Defenders of the Faith, p. 20
+Saddleback [Fighter, General] - Forgotten Realms Campaign Setting, p. 37
+Saddleback [Ancestor] - Oriental Adventures, p. 65
+Sanctum Spell [Metamagic] - Tome and Blood, p. 41
+Scent [General] - Dungeon Master's Guide, p. 81 (variant rule)
+Scholar of Nature [Ancestor] - Oriental Adventures, p. 65
+Scribe Scroll [Item Creation] - Player's Handbook, p. 84
+Scribe Tattoo [Item Creation] - Psionics Handbook, p. 29
+Sculpt Power [Metapsionic] - Dragon Magazine #287, p. 56
+Sculpt Spell [Metamagic] - Tome and Blood, p. 42
+Sea Legs [Ancestor] - Oriental Adventures, p. 65
+Second Wind [General] - Sovereign Stone Campaign Sourcebook, p. 63
+Set Spear [General] - Dragon Lords of Melnibone, p. 63
+Shadow [General] - Song and Silence, p. 40
+Shadow (Legends & Lairs version) [General] - Traps & Treachery, p. 37
+Shadow Weave Magic [General] - Forgotten Realms Campaign Setting, p. 37
+Shapechange [Infernal] - Evil, p. 27
+Shared Spellcasting [Metamagic] - Sovereign Stone Campaign Sourcebook, p. 63
+Sharp-Shooting [General] - Sword and Fist, p. 9
+Shield Charge [General] - Defenders of the Faith, p. 20
+Shield Expert [General] - Sword and Fist, p. 9
+Shield Proficiency [General] - Player's Handbook, p. 85
+Shot on the Run [General] - Player's Handbook, p. 85
+Side Step [General] - Mystic Warriors, p. 113
+Signature Skill [General] - Traps & Treachery, p. 38
+Signature Spell [General] - Forgotten Realms Campaign Setting, p. 37
+Silent Spell [Metamagic] - Player's Handbook, p. 85
+Silver Palm [General] - Forgotten Realms Campaign Setting, p. 37
+Silver Tongue [Ancestor] - Oriental Adventures, p. 65
+Simple Weapon Proficiency [General] - Player's Handbook, p. 85
+Skill Focus [General] - Player's Handbook, p. 85
+Smooth Talk [General] - Forgotten Realms Campaign Setting, p. 37
+Smooth Talk [Ancestor] - Oriental Adventures, p. 66
+Snake Blood [General] - Forgotten Realms Campaign Setting, p. 38
+Snatch Arrows [General] - Sword and Fist, p. 9
+Snatch Weapon [General] - Song and Silence, p. 40
+Soul of Honor [Ancestor] - Oriental Adventures, p. 66
+Soul of Loyalty [Ancestor] - Oriental Adventures, p. 66
+Soul of Sincerity [Ancestor] - Oriental Adventures, p. 66
+Speed of Thought [Psionic] - Psionics Handbook, p. 29
+Spell Focus [General] - Player's Handbook, p. 85
+Spell Girding [General] - Magic of Faerun, p. 22
+Spell Mastery [Special] - Player's Handbook, p. 85 (rules: p. 54)
+Spell Penetration [General] - Player's Handbook, p. 85
+Spell Power [Ancestor] - Oriental Adventures, p. 66
+Spell Specialization [General] - Tome and Blood, p. 42
+Spell Thematics [General] - Magic of Faerun, p. 22
+Spellcaster Support [Ancestor] - Oriental Adventures, p. 66
+Spellcasting Prodigy [General] - Forgotten Realms Campaign Setting, p. 38
+Spellfire Wielder [General] - Magic of Faerun, p. 23
+Spirited Charge [General] - Player's Handbook, p. 85
+Split Psionic Ray [Metapsionic] - Dragon Magazine #287, p. 56
+Split Ray [Metamagic] - Tome and Blood, p. 42
+Spook Animals [Special] - Dragon Magazine d20 Special/Annual #6, p. 65
+Spring Attack [General] - Player's Handbook, p. 85
+Staggering Blow [General] - Dragon Magazine #279, p. 63
+Stand Still [Psionic] - Psionics Handbook, p. 29
+Stare-Down [General] - Scrollworks #11, p. 5
+Stealth [General] - Traps & Treachery, p. 39
+Stealthy [General] - Forgotten Realms Campaign Setting, p. 38
+Still Spell [Metamagic] - Player's Handbook, p. 85
+Stoic Composure [General] - Dragon Magazine #284, p. 123
+Street Smart [General] - Forgotten Realms Campaign Setting, p. 38
+Strength of the Charger [Ancestor] - Oriental Adventures, p. 66
+Strength of the Crab [Ancestor] - Oriental Adventures, p. 66
+Strength of Personality [Special] - Demonology, p. 41
+Strong Soul [General] - Forgotten Realms Campaign Setting, p. 38
+Strong Soul [Ancestor] - Oriental Adventures, p. 66
+Stunning Fist [General] - Player's Handbook, p. 85
+Stunning Roar [Kaiju] - Dragon Magazine #289, p. 70
+Subdual Substitution [Metamagic] - Tome and Blood, p. 42
+Subduing Strike [General] - Sovereign Stone Campaign Sourcebook, p. 63
+Subsonics [General] - Song and Silence, p. 40
+Subtle Charm [Special] - Touched by the Gods, p. 71
+Sunder [General] - Player's Handbook, p. 85
+Superior Expertise [General] - Oriental Adventures, p. 66
+Survival Instincts [General] - The Taan, p. 83
+Survivor [General] - Forgotten Realms Campaign Setting, p. 38
+Swarmfighting [General] - Dragon Magazine #285, p. 33
+Swift Twist Glance [General] - Mystic Warriors, p. 113
+Tail Attack [Special] - Dragon Magazine d20 Special/Annual #6, p. 61
+Talented [Psionic] - Psionics Handbook, p. 30
+Tattoo Focus [Special] - Forgotten Realms Campaign Setting, p. 38
+Taut Tug [General] - Mystic Warriors, p. 113
+Ten Animal Style [Special] - Creature Collection, p. 72
+Tenacious Magic [Metamagic] - Forgotten Realms Campaign Setting, p. 38
+Thick Hide [General] - The Taan, p. 83
+Thick Skin [General] - Dungeons, p. 82
+Thrall Master [Special] - Touched by the Gods, p. 71
+Throw Anything [General] - Sword and Fist, p. 9
+Thug [General] - Forgotten Realms Campaign Setting, p. 38
+Thunder Twin [General] - Forgotten Realms Campaign Setting, p. 38
+Thunderous Roar [Kaiju] - Dragon Magazine #289, p. 70
+Tinker [General] - Dungeons, p. 82
+Token Familiar [General] - Dragon Magazine #280, p. 62
+Toughness [General] - Player's Handbook, p. 85
+Track [General] - Player's Handbook, p. 85
+Trample [General] - Player's Handbook, p. 86
+Treetopper [General] - Forgotten Realms Campaign Setting, p. 38
+Trigger Power [Psionic] - Psionics Handbook, p. 30
+Trustworthy [General] - Song and Silence, p. 40
+Turn Outsider [Special] - Evil, p. 60
+Turn Resistance [General] - Mythic Races, p. 50
+Twin Power [Psionic] - Psionics Handbook, p. 30
+Twin Spell [Metamagic] - Tome and Blood, p. 42
+Twin Sword Style [Fighter, General] - Forgotten Realms Campaign Setting, p. 39
+Two-Weapon Fighting [General] - Player's Handbook, p. 86
+Tyrant [General] - Evil, p. 60
+Ultimate Feint [General] - Evil, p. 62
+Unavoidable Strike [Psionic] - Psionics Handbook, p. 30
+Unbalancing Strike [General] - Oriental Adventures, p. 66
+Undead Familiar [General] - Dragon Magazine #280, p. 62
+Undetectable Lie [Infernal] - Evil, p. 28
+Unholy Blessing [Infernal] - Evil, p. 28
+Unholy Strength [Infernal] - Evil, p. 28
+Unorthodox Flurry [Special] - Dragon Magazine #279, p. 63
+Unusual Background [General] - Diomin, p. 43
+Unyielding Aura [General] - Mythic Races, p. 69
+Up the Walls [Psionic] - Psionics Handbook, p. 30
+Upgrade Power [Psionic] - Dragon Magazine #287, p. 56
+Vengeful Strike [General] - Touched by the Gods, p. 109
+Vitus Kata [Mystic Warrior] - Mystic Warriors, p. 113
+Wall Breaker [General] - Dragon Magazine #285, p. 98
+Warrior Instinct [Ancestor] - Oriental Adventures, p. 66
+Warrior Shugenja [Ancestor] - Oriental Adventures, p. 66
+Warsinger [Special] - Touched by the Gods, p. 109
+Water-ken [General] - The Taan, p. 83
+Wealth [Infernal] - Evil, p. 29
+Weapon Expertise: Throwing Spear [General] - Ragnarok!, p. 10
+Weapon Finesse [General] - Player's Handbook, p. 86
+Weapon Focus [General] - Player's Handbook, p. 86
+Weapon Specialization [Special] - Player's Handbook, p. 86 (rules: p. 37)
+Weapon-Catching [General] - Ragnarok!, p. 9
+Whirlwind Attack [General] - Player's Handbook, p. 86
+Widen Power [Metapsionic] - Dragon Magazine #287, p. 56
+Widen Spell [Metamagic] - Tome and Blood, p. 42
+Wish [Infernal] - Evil, p. 29
+Wrath of Calaam [Special] - Touched by the Gods, p. 59
+Zen Archery [General] - Sword and Fist, p. 9
Binary file images/8ball.gif has changed
Binary file images/add.png has changed
Binary file images/add_button.png has changed
Binary file images/arc.png has changed
Binary file images/bricktile.gif has changed
Binary file images/check_button.png has changed
Binary file images/chess.gif has changed
Binary file images/circle.png has changed
--- a/images/d20.xpm	Wed Nov 25 06:51:50 2009 -0600
+++ b/images/d20.xpm	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2448 +1,2448 @@
-/* XPM */
-static char * d20_xpm[] = {
-"64 64 2381 2",
-"  	c None",
-". 	c #8E8481",
-"+ 	c #6B615A",
-"@ 	c #6D635B",
-"# 	c #6B615D",
-"$ 	c #4E4443",
-"% 	c #514641",
-"& 	c #564B46",
-"* 	c #615954",
-"= 	c #6A6763",
-"- 	c #474344",
-"; 	c #5D5857",
-"> 	c #676163",
-", 	c #7E777B",
-"' 	c #746B67",
-") 	c #665C5A",
-"! 	c #605858",
-"~ 	c #655E61",
-"{ 	c #585155",
-"] 	c #4A4143",
-"^ 	c #373232",
-"/ 	c #6A6564",
-"( 	c #787272",
-"_ 	c #7F7979",
-": 	c #796E6D",
-"< 	c #807373",
-"[ 	c #7F7A78",
-"} 	c #7E7978",
-"| 	c #6F6668",
-"1 	c #645C61",
-"2 	c #6B6466",
-"3 	c #494446",
-"4 	c #27262D",
-"5 	c #626169",
-"6 	c #625E63",
-"7 	c #6E696D",
-"8 	c #7A7679",
-"9 	c #5B595A",
-"0 	c #2B2A2A",
-"a 	c #151212",
-"b 	c #615C5A",
-"c 	c #726968",
-"d 	c #6C6565",
-"e 	c #5C5555",
-"f 	c #675E5D",
-"g 	c #7C7474",
-"h 	c #716D6E",
-"i 	c #6D6B70",
-"j 	c #817877",
-"k 	c #817D80",
-"l 	c #807D7D",
-"m 	c #78726B",
-"n 	c #7A7871",
-"o 	c #6C6B65",
-"p 	c #777773",
-"q 	c #605E5D",
-"r 	c #453D37",
-"s 	c #7E746A",
-"t 	c #766C67",
-"u 	c #766D6E",
-"v 	c #7A7779",
-"w 	c #706767",
-"x 	c #919296",
-"y 	c #87838B",
-"z 	c #7D7A82",
-"A 	c #746C68",
-"B 	c #7B736D",
-"C 	c #665D58",
-"D 	c #4B413F",
-"E 	c #5B5350",
-"F 	c #4E4643",
-"G 	c #352F2C",
-"H 	c #393534",
-"I 	c #3B3836",
-"J 	c #3F3B37",
-"K 	c #4A4541",
-"L 	c #5F5954",
-"M 	c #6A615D",
-"N 	c #645C53",
-"O 	c #6F675B",
-"P 	c #655C55",
-"Q 	c #534948",
-"R 	c #695E59",
-"S 	c #6A6160",
-"T 	c #4C4644",
-"U 	c #5A5551",
-"V 	c #5B5652",
-"W 	c #544845",
-"X 	c #4E413E",
-"Y 	c #3B3633",
-"Z 	c #483F3F",
-"` 	c #554A46",
-" .	c #605657",
-"..	c #635959",
-"+.	c #6D6564",
-"@.	c #766F72",
-"#.	c #5D585C",
-"$.	c #4E494D",
-"%.	c #494547",
-"&.	c #494342",
-"*.	c #595453",
-"=.	c #7B7674",
-"-.	c #6B6566",
-";.	c #645A61",
-">.	c #584E4F",
-",.	c #695F61",
-"'.	c #685E5D",
-").	c #756D6C",
-"!.	c #706C6D",
-"~.	c #585758",
-"{.	c #6F6763",
-"].	c #716E6C",
-"^.	c #6F6D69",
-"/.	c #746E65",
-"(.	c #534E49",
-"_.	c #2F2B28",
-":.	c #6D6863",
-"<.	c #6D665D",
-"[.	c #6B6258",
-"}.	c #716A5E",
-"|.	c #665E57",
-"1.	c #6A6363",
-"2.	c #7E787F",
-"3.	c #7E7875",
-"4.	c #838786",
-"5.	c #8C898E",
-"6.	c #88858A",
-"7.	c #7C7373",
-"8.	c #867C7A",
-"9.	c #86807F",
-"0.	c #7E7973",
-"a.	c #777070",
-"b.	c #686161",
-"c.	c #5C5657",
-"d.	c #666263",
-"e.	c #565250",
-"f.	c #6C6762",
-"g.	c #747067",
-"h.	c #736F65",
-"i.	c #6D6660",
-"j.	c #7C766B",
-"k.	c #676055",
-"l.	c #6E675D",
-"m.	c #787066",
-"n.	c #837872",
-"o.	c #7E7573",
-"p.	c #5A5250",
-"q.	c #7C7571",
-"r.	c #837C79",
-"s.	c #7F746F",
-"t.	c #625751",
-"u.	c #726966",
-"v.	c #776B68",
-"w.	c #8E8276",
-"x.	c #817770",
-"y.	c #726865",
-"z.	c #7B716F",
-"A.	c #6C625E",
-"B.	c #7A706C",
-"C.	c #88817C",
-"D.	c #8D8882",
-"E.	c #76706B",
-"F.	c #88807C",
-"G.	c #675F5A",
-"H.	c #6D6762",
-"I.	c #6C6564",
-"J.	c #7C7276",
-"K.	c #675C5F",
-"L.	c #726769",
-"M.	c #7D7374",
-"N.	c #807779",
-"O.	c #7E787A",
-"P.	c #5B5959",
-"Q.	c #625C59",
-"R.	c #5C5855",
-"S.	c #5A5751",
-"T.	c #615D53",
-"U.	c #7F7B73",
-"V.	c #625F57",
-"W.	c #68635C",
-"X.	c #6E6462",
-"Y.	c #756C6B",
-"Z.	c #7A7573",
-"`.	c #7C7778",
-" +	c #7C767B",
-".+	c #736C70",
-"++	c #757273",
-"@+	c #636766",
-"#+	c #696A6C",
-"$+	c #646165",
-"%+	c #726860",
-"&+	c #6E605A",
-"*+	c #847D7B",
-"=+	c #1E1E1B",
-"-+	c #0B0A0B",
-";+	c #0E0D0D",
-">+	c #0C0B0B",
-",+	c #0D0C0C",
-"'+	c #0C0B0C",
-")+	c #0F0D0D",
-"!+	c #110E0E",
-"~+	c #100D0D",
-"{+	c #080606",
-"]+	c #090606",
-"^+	c #0A0808",
-"/+	c #0E0C0C",
-"(+	c #0F0C0C",
-"_+	c #100F0D",
-":+	c #0B0A09",
-"<+	c #0B0B09",
-"[+	c #100F0E",
-"}+	c #0F0E0D",
-"|+	c #131010",
-"1+	c #141011",
-"2+	c #130E0E",
-"3+	c #100C09",
-"4+	c #0E0D09",
-"5+	c #0F0E0E",
-"6+	c #110F11",
-"7+	c #0C0908",
-"8+	c #0F0C0B",
-"9+	c #11100F",
-"0+	c #100E0E",
-"a+	c #0B0A0A",
-"b+	c #111010",
-"c+	c #090808",
-"d+	c #0E0B0B",
-"e+	c #0A0707",
-"f+	c #0A0B09",
-"g+	c #030302",
-"h+	c #100D0E",
-"i+	c #100F0F",
-"j+	c #0E0D0E",
-"k+	c #110F13",
-"l+	c #333132",
-"m+	c #78777A",
-"n+	c #73777F",
-"o+	c #747476",
-"p+	c #766E68",
-"q+	c #796E68",
-"r+	c #7C7268",
-"s+	c #121010",
-"t+	c #000000",
-"u+	c #000001",
-"v+	c #000002",
-"w+	c #24201F",
-"x+	c #706B68",
-"y+	c #7F8384",
-"z+	c #636865",
-"A+	c #796D72",
-"B+	c #655753",
-"C+	c #6E6158",
-"D+	c #211F1F",
-"E+	c #6D6663",
-"F+	c #75736F",
-"G+	c #626466",
-"H+	c #817A74",
-"I+	c #7F7471",
-"J+	c #6C605D",
-"K+	c #1B1A1B",
-"L+	c #665C5B",
-"M+	c #554F4C",
-"N+	c #414144",
-"O+	c #797270",
-"P+	c #6C6360",
-"Q+	c #605651",
-"R+	c #0D0B0B",
-"S+	c #201F20",
-"T+	c #524B4C",
-"U+	c #666060",
-"V+	c #585458",
-"W+	c #615759",
-"X+	c #605856",
-"Y+	c #625957",
-"Z+	c #0C0B0A",
-"`+	c #232324",
-" @	c #5E5D60",
-".@	c #666163",
-"+@	c #716968",
-"@@	c #827D7C",
-"#@	c #645F61",
-"$@	c #7B7476",
-"%@	c #67676D",
-"&@	c #7C7B80",
-"*@	c #7F7B7D",
-"=@	c #84817F",
-"-@	c #787174",
-";@	c #6C6364",
-">@	c #242425",
-",@	c #767780",
-"'@	c #9B9EA7",
-")@	c #858890",
-"!@	c #7D7776",
-"~@	c #877C81",
-"{@	c #877C7D",
-"]@	c #242325",
-"^@	c #82828A",
-"/@	c #8E8F95",
-"(@	c #7A7B81",
-"_@	c #706867",
-":@	c #6D6065",
-"<@	c #7B6E6F",
-"[@	c #232325",
-"}@	c #706F75",
-"|@	c #717074",
-"1@	c #858386",
-"2@	c #5F5E5A",
-"3@	c #433B39",
-"4@	c #4C403F",
-"5@	c #252528",
-"6@	c #6E6D76",
-"7@	c #7F7D84",
-"8@	c #746F71",
-"9@	c #7D7E81",
-"0@	c #4C4747",
-"a@	c #5F5552",
-"b@	c #0C0A09",
-"c@	c #797A82",
-"d@	c #8E8F98",
-"e@	c #86838E",
-"f@	c #6E6D71",
-"g@	c #494445",
-"h@	c #595150",
-"i@	c #000102",
-"j@	c #020102",
-"k@	c #242321",
-"l@	c #43423D",
-"m@	c #3E3E3B",
-"n@	c #1C1D1D",
-"o@	c #020204",
-"p@	c #010102",
-"q@	c #272729",
-"r@	c #89878C",
-"s@	c #8B8A8C",
-"t@	c #8E8B90",
-"u@	c #636164",
-"v@	c #393334",
-"w@	c #423B3B",
-"x@	c #060304",
-"y@	c #0B0B0A",
-"z@	c #3F3D38",
-"A@	c #918C80",
-"B@	c #929086",
-"C@	c #767576",
-"D@	c #707070",
-"E@	c #626260",
-"F@	c #3B3B3A",
-"G@	c #0B0B0B",
-"H@	c #262628",
-"I@	c #817D86",
-"J@	c #928D91",
-"K@	c #8F8B86",
-"L@	c #5A575A",
-"M@	c #696464",
-"N@	c #827C7C",
-"O@	c #010101",
-"P@	c #22221F",
-"Q@	c #565753",
-"R@	c #80817C",
-"S@	c #7C7D7D",
-"T@	c #777776",
-"U@	c #787471",
-"V@	c #777471",
-"W@	c #727071",
-"X@	c #737277",
-"Y@	c #717177",
-"Z@	c #6F6F74",
-"`@	c #636363",
-" #	c #4E4E4E",
-".#	c #252525",
-"+#	c #030303",
-"@#	c #29282A",
-"##	c #7F7C82",
-"$#	c #8B8788",
-"%#	c #928E8F",
-"&#	c #302B2B",
-"*#	c #84817D",
-"=#	c #817C78",
-"-#	c #090908",
-";#	c #3E3D3A",
-">#	c #7A7973",
-",#	c #868680",
-"'#	c #808080",
-")#	c #7A7A7E",
-"!#	c #797781",
-"~#	c #737279",
-"{#	c #79777B",
-"]#	c #7B7779",
-"^#	c #807B7D",
-"/#	c #77777A",
-"(#	c #77787C",
-"_#	c #75767B",
-":#	c #78787A",
-"<#	c #787877",
-"[#	c #747372",
-"}#	c #5D5B5C",
-"|#	c #312F30",
-"1#	c #0A0A0A",
-"2#	c #242323",
-"3#	c #777175",
-"4#	c #8E8787",
-"5#	c #868285",
-"6#	c #3A383A",
-"7#	c #7B716E",
-"8#	c #776B67",
-"9#	c #0A0908",
-"0#	c #1E1E1C",
-"a#	c #50504D",
-"b#	c #838480",
-"c#	c #93928E",
-"d#	c #888683",
-"e#	c #767577",
-"f#	c #706F76",
-"g#	c #787681",
-"h#	c #7E7D82",
-"i#	c #7F7F80",
-"j#	c #636361",
-"k#	c #535350",
-"l#	c #6B6A68",
-"m#	c #6C6B6B",
-"n#	c #777678",
-"o#	c #7E7D7F",
-"p#	c #807F82",
-"q#	c #828281",
-"r#	c #797877",
-"s#	c #716F70",
-"t#	c #767475",
-"u#	c #6C6C6C",
-"v#	c #4A4A4A",
-"w#	c #181818",
-"x#	c #020202",
-"y#	c #161515",
-"z#	c #625A5A",
-"A#	c #797676",
-"B#	c #797472",
-"C#	c #756A66",
-"D#	c #807571",
-"E#	c #010000",
-"F#	c #070606",
-"G#	c #31302F",
-"H#	c #656564",
-"I#	c #8A8A87",
-"J#	c #8A8B86",
-"K#	c #878884",
-"L#	c #777775",
-"M#	c #7D7C7D",
-"N#	c #7D7C7F",
-"O#	c #78787B",
-"P#	c #807F83",
-"Q#	c #7E7D84",
-"R#	c #4E4D52",
-"S#	c #38383A",
-"T#	c #474649",
-"U#	c #535354",
-"V#	c #575455",
-"W#	c #6D696A",
-"X#	c #8B8889",
-"Y#	c #858485",
-"Z#	c #767575",
-"`#	c #7A7979",
-" $	c #737273",
-".$	c #7E7E7E",
-"+$	c #787878",
-"@$	c #6E6E6F",
-"#$	c #636365",
-"$$	c #28282A",
-"%$	c #070707",
-"&$	c #1E1D1D",
-"*$	c #686164",
-"=$	c #46464B",
-"-$	c #787377",
-";$	c #79706F",
-">$	c #756A63",
-",$	c #766B64",
-"'$	c #090806",
-")$	c #010001",
-"!$	c #2B292A",
-"~$	c #6C6A6B",
-"{$	c #72716F",
-"]$	c #7E7D7B",
-"^$	c #7D7D7C",
-"/$	c #737372",
-"($	c #6F6F71",
-"_$	c #808082",
-":$	c #868688",
-"<$	c #767678",
-"[$	c #7C7C7F",
-"}$	c #1E1E21",
-"|$	c #2C2C2D",
-"1$	c #434342",
-"2$	c #3E3B3A",
-"3$	c #625E5E",
-"4$	c #7A7777",
-"5$	c #7F7D7E",
-"6$	c #737172",
-"7$	c #7A797A",
-"8$	c #7F7F7F",
-"9$	c #7C7C7C",
-"0$	c #797979",
-"a$	c #717171",
-"b$	c #646465",
-"c$	c #616161",
-"d$	c #2C2C2C",
-"e$	c #212021",
-"f$	c #555053",
-"g$	c #737073",
-"h$	c #757074",
-"i$	c #6E6564",
-"j$	c #6A5F58",
-"k$	c #756B64",
-"l$	c #080706",
-"m$	c #050404",
-"n$	c #666465",
-"o$	c #656364",
-"p$	c #747371",
-"q$	c #6A6967",
-"r$	c #6B6B6B",
-"s$	c #646467",
-"t$	c #69686B",
-"u$	c #727274",
-"v$	c #777779",
-"w$	c #838483",
-"x$	c #7A7A7A",
-"y$	c #74737A",
-"z$	c #73727A",
-"A$	c #78777C",
-"B$	c #555558",
-"C$	c #444446",
-"D$	c #474746",
-"E$	c #666360",
-"F$	c #86837F",
-"G$	c #7F7C79",
-"H$	c #706E6F",
-"I$	c #6B696A",
-"J$	c #797879",
-"K$	c #676767",
-"L$	c #60615F",
-"M$	c #5F5F5D",
-"N$	c #5E5F5C",
-"O$	c #5B5B5B",
-"P$	c #666666",
-"Q$	c #111111",
-"R$	c #222222",
-"S$	c #5E5B5D",
-"T$	c #73696E",
-"U$	c #726B70",
-"V$	c #776C6C",
-"W$	c #746761",
-"X$	c #695E5E",
-"Y$	c #040404",
-"Z$	c #060606",
-"`$	c #6F6F6F",
-" %	c #5F5F5F",
-".%	c #666664",
-"+%	c #626261",
-"@%	c #626264",
-"#%	c #69696B",
-"$%	c #717173",
-"%%	c #7B7B7D",
-"&%	c #777778",
-"*%	c #747378",
-"=%	c #6C6B72",
-"-%	c #807F86",
-";%	c #6D6C71",
-">%	c #737373",
-",%	c #848381",
-"'%	c #7C7B79",
-")%	c #7F7E7C",
-"!%	c #6A696B",
-"~%	c #6E6E70",
-"{%	c #575757",
-"]%	c #595958",
-"^%	c #565656",
-"/%	c #626262",
-"(%	c #202020",
-"_%	c #050505",
-":%	c #252223",
-"<%	c #423F41",
-"[%	c #797478",
-"}%	c #80777C",
-"|%	c #7D7477",
-"1%	c #5C524E",
-"2%	c #6B6262",
-"3%	c #030202",
-"4%	c #000100",
-"5%	c #090909",
-"6%	c #0D0D0D",
-"7%	c #0F0F0F",
-"8%	c #121212",
-"9%	c #151515",
-"0%	c #1B1B1B",
-"a%	c #585858",
-"b%	c #525051",
-"c%	c #61615F",
-"d%	c #5D5D5C",
-"e%	c #5A5A5D",
-"f%	c #5C5C5E",
-"g%	c #5E5E60",
-"h%	c #69696A",
-"i%	c #6B6B6C",
-"j%	c #6C6C70",
-"k%	c #747477",
-"l%	c #7D7D7D",
-"m%	c #757573",
-"n%	c #81807E",
-"o%	c #757472",
-"p%	c #747273",
-"q%	c #757374",
-"r%	c #646365",
-"s%	c #595959",
-"t%	c #545454",
-"u%	c #535353",
-"v%	c #282828",
-"w%	c #1A1A1A",
-"x%	c #161616",
-"y%	c #272425",
-"z%	c #5C5659",
-"A%	c #736D72",
-"B%	c #8E898D",
-"C%	c #6A6468",
-"D%	c #544B4B",
-"E%	c #080908",
-"F%	c #0C0D0D",
-"G%	c #141414",
-"H%	c #1D1D1D",
-"I%	c #212121",
-"J%	c #1F1F20",
-"K%	c #202021",
-"L%	c #212122",
-"M%	c #5D5D5E",
-"N%	c #505051",
-"O%	c #4E4D4D",
-"P%	c #414041",
-"Q%	c #353534",
-"R%	c #4B4B4D",
-"S%	c #515154",
-"T%	c #555557",
-"U%	c #5B5B5D",
-"V%	c #575758",
-"W%	c #68686B",
-"X%	c #67676B",
-"Y%	c #6C6C6E",
-"Z%	c #767677",
-"`%	c #7C7C7D",
-" &	c #6A6A69",
-".&	c #6F6E6D",
-"+&	c #626160",
-"@&	c #646263",
-"#&	c #646363",
-"$&	c #5B5B5C",
-"%&	c #575759",
-"&&	c #545456",
-"*&	c #4F4F50",
-"=&	c #494949",
-"-&	c #4C4C4D",
-";&	c #4D4D4E",
-">&	c #4D4D4D",
-",&	c #262626",
-"'&	c #232323",
-")&	c #1F1F1F",
-"!&	c #191919",
-"~&	c #080808",
-"{&	c #1A1819",
-"]&	c #716967",
-"^&	c #827D79",
-"/&	c #82817F",
-"(&	c #787477",
-"_&	c #494341",
-":&	c #4B4542",
-"<&	c #1D1A19",
-"[&	c #1B1B19",
-"}&	c #242424",
-"|&	c #2E2E2E",
-"1&	c #303030",
-"2&	c #2F2F2F",
-"3&	c #2D2D2D",
-"4&	c #2F2F31",
-"5&	c #303032",
-"6&	c #2C2C2E",
-"7&	c #5D5D5F",
-"8&	c #4F4F51",
-"9&	c #383838",
-"0&	c #0C0C0D",
-"a&	c #323234",
-"b&	c #4A4A4C",
-"c&	c #49494B",
-"d&	c #515153",
-"e&	c #565658",
-"f&	c #59595B",
-"g&	c #5C5B60",
-"h&	c #5A595E",
-"i&	c #616065",
-"j&	c #5E5E5E",
-"k&	c #5A5A5A",
-"l&	c #525253",
-"m&	c #4C4C4E",
-"n&	c #4E4E50",
-"o&	c #474749",
-"p&	c #434345",
-"q&	c #424244",
-"r&	c #4D4D4F",
-"s&	c #363638",
-"t&	c #353535",
-"u&	c #373737",
-"v&	c #333333",
-"w&	c #272727",
-"x&	c #1B1A1A",
-"y&	c #171717",
-"z&	c #665E5D",
-"A&	c #7B7675",
-"B&	c #767478",
-"C&	c #65615F",
-"D&	c #343331",
-"E&	c #454341",
-"F&	c #272423",
-"G&	c #2A2A28",
-"H&	c #313130",
-"I&	c #343434",
-"J&	c #3B3B3B",
-"K&	c #3D3D3D",
-"L&	c #363636",
-"M&	c #373738",
-"N&	c #3E3E40",
-"O&	c #3F3F41",
-"P&	c #343436",
-"Q&	c #1C1C1C",
-"R&	c #1B1B1C",
-"S&	c #525254",
-"T&	c #505052",
-"U&	c #535257",
-"V&	c #545358",
-"W&	c #525155",
-"X&	c #515151",
-"Y&	c #4F4F4F",
-"Z&	c #525252",
-"`&	c #464648",
-" *	c #3A3A3B",
-".*	c #434343",
-"+*	c #444444",
-"@*	c #424242",
-"#*	c #414141",
-"$*	c #3F3F3F",
-"%*	c #393939",
-"&*	c #2A2929",
-"**	c #373637",
-"=*	c #6F656A",
-"-*	c #8A8489",
-";*	c #726F72",
-">*	c #5B564E",
-",*	c #1D1A15",
-"'*	c #272624",
-")*	c #302F2D",
-"!*	c #444442",
-"~*	c #3D3C3F",
-"{*	c #444245",
-"]*	c #454443",
-"^*	c #484646",
-"/*	c #484647",
-"(*	c #4C4B4C",
-"_*	c #535355",
-":*	c #484849",
-"<*	c #555555",
-"[*	c #313131",
-"}*	c #484848",
-"|*	c #474748",
-"1*	c #4A4A4B",
-"2*	c #4B4B4C",
-"3*	c #4B4B4B",
-"4*	c #454547",
-"5*	c #414143",
-"6*	c #464647",
-"7*	c #3A3A3A",
-"8*	c #48484A",
-"9*	c #515152",
-"0*	c #49494A",
-"a*	c #444445",
-"b*	c #3C3B3D",
-"c*	c #444242",
-"d*	c #756F71",
-"e*	c #888489",
-"f*	c #7D7D80",
-"g*	c #4B443C",
-"h*	c #39312B",
-"i*	c #171617",
-"j*	c #32312F",
-"k*	c #454442",
-"l*	c #494946",
-"m*	c #4D4C4E",
-"n*	c #595758",
-"o*	c #515051",
-"p*	c #535152",
-"q*	c #5A5859",
-"r*	c #5E5D5E",
-"s*	c #464646",
-"t*	c #3C3C3C",
-"u*	c #505050",
-"v*	c #474747",
-"w*	c #4C4C4C",
-"x*	c #404042",
-"y*	c #3C3C3E",
-"z*	c #444447",
-"A*	c #656565",
-"B*	c #676768",
-"C*	c #58585A",
-"D*	c #4A494C",
-"E*	c #514E4E",
-"F*	c #8C8585",
-"G*	c #837D7F",
-"H*	c #797777",
-"I*	c #554E48",
-"J*	c #251D19",
-"K*	c #282525",
-"L*	c #3C3A39",
-"M*	c #61615E",
-"N*	c #5D5C5D",
-"O*	c #656465",
-"P*	c #5E5D5C",
-"Q*	c #545357",
-"R*	c #656365",
-"S*	c #686767",
-"T*	c #747376",
-"U*	c #69696C",
-"V*	c #515053",
-"W*	c #616062",
-"X*	c #4E4D4F",
-"Y*	c #494948",
-"Z*	c #1C1C1B",
-"`*	c #20201F",
-" =	c #1E1E1E",
-".=	c #424243",
-"+=	c #414142",
-"@=	c #424145",
-"#=	c #424246",
-"$=	c #6F6F70",
-"%=	c #666667",
-"&=	c #666668",
-"*=	c #6A6A6B",
-"==	c #595756",
-"-=	c #7F7676",
-";=	c #7C7677",
-">=	c #76706F",
-",=	c #555354",
-"'=	c #464542",
-")=	c #343130",
-"!=	c #474444",
-"~=	c #5F5F5B",
-"{=	c #636260",
-"]=	c #79787A",
-"^=	c #777774",
-"/=	c #777777",
-"(=	c #757473",
-"_=	c #807F7E",
-":=	c #747275",
-"<=	c #69676A",
-"[=	c #565458",
-"}=	c #565459",
-"|=	c #4F4D51",
-"1=	c #4A4A49",
-"2=	c #4C4C4A",
-"3=	c #4F4F4D",
-"4=	c #464644",
-"5=	c #333331",
-"6=	c #31312F",
-"7=	c #292929",
-"8=	c #3F403F",
-"9=	c #444548",
-"0=	c #3F4044",
-"a=	c #706F74",
-"b=	c #747475",
-"c=	c #6A6A6C",
-"d=	c #848482",
-"e=	c #6B6B6D",
-"f=	c #61605F",
-"g=	c #736A6B",
-"h=	c #756F73",
-"i=	c #7B7372",
-"j=	c #8E8C91",
-"k=	c #413E3F",
-"l=	c #494746",
-"m=	c #646560",
-"n=	c #636163",
-"o=	c #71706F",
-"p=	c #80807F",
-"q=	c #7B7C79",
-"r=	c #7B7B78",
-"s=	c #7D7C7A",
-"t=	c #767573",
-"u=	c #7D7B7A",
-"v=	c #4D4B4B",
-"w=	c #444244",
-"x=	c #5C5A5C",
-"y=	c #585856",
-"z=	c #3C3C3A",
-"A=	c #3B3B39",
-"B=	c #454545",
-"C=	c #3D3F3E",
-"D=	c #4B4C4E",
-"E=	c #454549",
-"F=	c #5F5E63",
-"G=	c #6F6E73",
-"H=	c #767676",
-"I=	c #7A7A7B",
-"J=	c #737375",
-"K=	c #818181",
-"L=	c #7C7C7A",
-"M=	c #838281",
-"N=	c #6E6D6F",
-"O=	c #736C6E",
-"P=	c #736A67",
-"Q=	c #77716D",
-"R=	c #8E8C90",
-"S=	c #8C898F",
-"T=	c #4F4D50",
-"U=	c #484745",
-"V=	c #6B6C68",
-"W=	c #6C6C6D",
-"X=	c #747474",
-"Y=	c #7E7E7C",
-"Z=	c #757574",
-"`=	c #4E4D4E",
-" -	c #4A494B",
-".-	c #4F4E50",
-"+-	c #51514F",
-"@-	c #535352",
-"#-	c #555553",
-"$-	c #535351",
-"%-	c #515150",
-"&-	c #1D1E1F",
-"*-	c #2C2D2E",
-"=-	c #434144",
-"--	c #39383C",
-";-	c #3E3E42",
-">-	c #49484D",
-",-	c #676769",
-"'-	c #787979",
-")-	c #787A79",
-"!-	c #7B7D7C",
-"~-	c #797A78",
-"{-	c #797978",
-"]-	c #7C7B7C",
-"^-	c #6C6C6B",
-"/-	c #5E5754",
-"(-	c #413A36",
-"_-	c #6B6661",
-":-	c #918F92",
-"<-	c #86848A",
-"[-	c #38363B",
-"}-	c #757576",
-"|-	c #878787",
-"1-	c #838383",
-"2-	c #4F4F52",
-"3-	c #545452",
-"4-	c #565655",
-"5-	c #595957",
-"6-	c #2D2D2F",
-"7-	c #303133",
-"8-	c #2D2E30",
-"9-	c #434245",
-"0-	c #413F43",
-"a-	c #39393A",
-"b-	c #4A4B48",
-"c-	c #4B4B48",
-"d-	c #454546",
-"e-	c #535356",
-"f-	c #7A7B7B",
-"g-	c #717372",
-"h-	c #7A7C7B",
-"i-	c #6D6E6F",
-"j-	c #707173",
-"k-	c #6D6D6E",
-"l-	c #666565",
-"m-	c #686766",
-"n-	c #665E58",
-"o-	c #706862",
-"p-	c #716A63",
-"q-	c #9A989B",
-"r-	c #7F7C83",
-"s-	c #5D5B62",
-"t-	c #404144",
-"u-	c #616165",
-"v-	c #757578",
-"w-	c #757577",
-"x-	c #8D8D8D",
-"y-	c #8B8B8B",
-"z-	c #848484",
-"A-	c #3D3D40",
-"B-	c #565657",
-"C-	c #525350",
-"D-	c #525250",
-"E-	c #5B5B5A",
-"F-	c #535451",
-"G-	c #3A3B3C",
-"H-	c #3E3D40",
-"I-	c #3F3E40",
-"J-	c #3F3F3E",
-"K-	c #4E4E4A",
-"L-	c #51514D",
-"M-	c #474745",
-"N-	c #7D7D7E",
-"O-	c #7B7C7D",
-"P-	c #6F7071",
-"Q-	c #737475",
-"R-	c #6A6A6E",
-"S-	c #6F6E6F",
-"T-	c #5A514A",
-"U-	c #776D64",
-"V-	c #736A62",
-"W-	c #928E91",
-"X-	c #87878C",
-"Y-	c #939296",
-"Z-	c #3E4046",
-"`-	c #5F5E65",
-" ;	c #6B686E",
-".;	c #69686D",
-"+;	c #6D6E70",
-"@;	c #868583",
-"#;	c #92918F",
-"$;	c #939391",
-"%;	c #888886",
-"&;	c #92928F",
-"*;	c #858583",
-"=;	c #838384",
-"-;	c #49484B",
-";;	c #424148",
-">;	c #4C4C4F",
-",;	c #575755",
-"';	c #4D4E4D",
-");	c #4D4E4B",
-"!;	c #52524E",
-"~;	c #4D4D4C",
-"{;	c #4B4849",
-"];	c #504D4D",
-"^;	c #545553",
-"/;	c #50504F",
-"(;	c #4B4C4B",
-"_;	c #424443",
-":;	c #404241",
-"<;	c #3D3D3E",
-"[;	c #363639",
-"};	c #3A393C",
-"|;	c #6A6A6D",
-"1;	c #78777B",
-"2;	c #868686",
-"3;	c #7D7D7B",
-"4;	c #7C7B7A",
-"5;	c #4C4C4B",
-"6;	c #4C433F",
-"7;	c #766D64",
-"8;	c #7A7571",
-"9;	c #95989E",
-"0;	c #89878A",
-"a;	c #4E4B50",
-"b;	c #5D5D60",
-"c;	c #6F7172",
-"d;	c #757474",
-"e;	c #858482",
-"f;	c #898886",
-"g;	c #8C8C8A",
-"h;	c #828280",
-"i;	c #898986",
-"j;	c #8D8D8B",
-"k;	c #464549",
-"l;	c #43414B",
-"m;	c #4C4B50",
-"n;	c #555554",
-"o;	c #525251",
-"p;	c #4B4B49",
-"q;	c #575853",
-"r;	c #575850",
-"s;	c #52534C",
-"t;	c #4A4A46",
-"u;	c #474A49",
-"v;	c #474445",
-"w;	c #4F494C",
-"x;	c #504F4D",
-"y;	c #4A4A47",
-"z;	c #3C3C39",
-"A;	c #2E2D31",
-"B;	c #2A292C",
-"C;	c #686869",
-"D;	c #7B7B7B",
-"E;	c #81817F",
-"F;	c #7A7A78",
-"G;	c #6B6A6D",
-"H;	c #565554",
-"I;	c #62595A",
-"J;	c #67625C",
-"K;	c #74716C",
-"L;	c #8D8B93",
-"M;	c #7B7683",
-"N;	c #71686E",
-"O;	c #524F50",
-"P;	c #737272",
-"Q;	c #878684",
-"R;	c #868684",
-"S;	c #7C7C79",
-"T;	c #6A6968",
-"U;	c #706F72",
-"V;	c #6B6A6E",
-"W;	c #5E5E63",
-"X;	c #48474C",
-"Y;	c #403F44",
-"Z;	c #404041",
-"`;	c #49484A",
-" >	c #454445",
-".>	c #4C4B4B",
-"+>	c #454446",
-"@>	c #575655",
-"#>	c #5B5B58",
-"$>	c #454543",
-"%>	c #282827",
-"&>	c #3C3B3B",
-"*>	c #484748",
-"=>	c #444345",
-"->	c #3F3D41",
-";>	c #464547",
-">>	c #4E4D4B",
-",>	c #454542",
-"'>	c #4B4A48",
-")>	c #434240",
-"!>	c #4E4D4A",
-"~>	c #504F4A",
-"{>	c #484441",
-"]>	c #424141",
-"^>	c #2F2E30",
-"/>	c #2D2C2D",
-"(>	c #2A2928",
-"_>	c #424140",
-":>	c #7A7A75",
-"<>	c #84847E",
-"[>	c #807F80",
-"}>	c #807E7F",
-"|>	c #727172",
-"1>	c #7B7B7A",
-"2>	c #727271",
-"3>	c #727272",
-"4>	c #6A6C6B",
-"5>	c #60605E",
-"6>	c #767271",
-"7>	c #696560",
-"8>	c #6E6960",
-"9>	c #8C848B",
-"0>	c #7D747F",
-"a>	c #776E71",
-"b>	c #4A4949",
-"c>	c #5F5E60",
-"d>	c #656266",
-"e>	c #797878",
-"f>	c #81807D",
-"g>	c #6E6D6C",
-"h>	c #686769",
-"i>	c #656469",
-"j>	c #535258",
-"k>	c #3A3940",
-"l>	c #454449",
-"m>	c #3B3B3D",
-"n>	c #343236",
-"o>	c #3B3A3A",
-"p>	c #3F3D3E",
-"q>	c #4C4B48",
-"r>	c #1F1F1D",
-"s>	c #161614",
-"t>	c #3E3D3E",
-"u>	c #484744",
-"v>	c #4B4A46",
-"w>	c #4D4C48",
-"x>	c #4B4B47",
-"y>	c #41413D",
-"z>	c #43443F",
-"A>	c #3B3734",
-"B>	c #3E3B3C",
-"C>	c #2E2C2D",
-"D>	c #323132",
-"E>	c #3A3937",
-"F>	c #4D4C4A",
-"G>	c #474644",
-"H>	c #797875",
-"I>	c #70706F",
-"J>	c #7F7E7D",
-"K>	c #7A7978",
-"L>	c #7B7C7B",
-"M>	c #747571",
-"N>	c #676461",
-"O>	c #5D5955",
-"P>	c #77726D",
-"Q>	c #7C756F",
-"R>	c #878087",
-"S>	c #777171",
-"T>	c #4E4D4C",
-"U>	c #656466",
-"V>	c #666367",
-"W>	c #6A6868",
-"X>	c #696765",
-"Y>	c #746F6F",
-"Z>	c #787473",
-"`>	c #767477",
-" ,	c #747374",
-".,	c #656567",
-"+,	c #37373C",
-"@,	c #2D2C31",
-"#,	c #29292B",
-"$,	c #333232",
-"%,	c #4D4C49",
-"&,	c #3D3D3A",
-"*,	c #494748",
-"=,	c #51504D",
-"-,	c #41403D",
-";,	c #262624",
-">,	c #242422",
-",,	c #323231",
-"',	c #373636",
-"),	c #4B4A47",
-"!,	c #54534D",
-"~,	c #464541",
-"{,	c #4F4E4A",
-"],	c #454843",
-"^,	c #3A3C37",
-"/,	c #3D3E39",
-"(,	c #4D4D49",
-"_,	c #44403E",
-":,	c #393738",
-"<,	c #3A3839",
-"[,	c #383737",
-"},	c #383735",
-"|,	c #5E5C5D",
-"1,	c #6C6B6C",
-"2,	c #71716F",
-"3,	c #8A8984",
-"4,	c #8B8A86",
-"5,	c #767674",
-"6,	c #747373",
-"7,	c #77766F",
-"8,	c #75706B",
-"9,	c #726A65",
-"0,	c #6E6663",
-"a,	c #7B7878",
-"b,	c #7F747A",
-"c,	c #857A80",
-"d,	c #898187",
-"e,	c #4C4A4C",
-"f,	c #696768",
-"g,	c #6A6365",
-"h,	c #797273",
-"i,	c #716F6E",
-"j,	c #757373",
-"k,	c #787677",
-"l,	c #676566",
-"m,	c #3A393B",
-"n,	c #30302E",
-"o,	c #393936",
-"p,	c #3D3D3B",
-"q,	c #41413F",
-"r,	c #333332",
-"s,	c #3F3F3D",
-"t,	c #4B4B45",
-"u,	c #48483F",
-"v,	c #494942",
-"w,	c #4E4F4A",
-"x,	c #4D4E49",
-"y,	c #474844",
-"z,	c #363533",
-"A,	c #373634",
-"B,	c #3F3E3C",
-"C,	c #2C2C2A",
-"D,	c #363634",
-"E,	c #5A5955",
-"F,	c #686667",
-"G,	c #626164",
-"H,	c #6D6D6D",
-"I,	c #797976",
-"J,	c #8E8D88",
-"K,	c #8F8E89",
-"L,	c #8C8C86",
-"M,	c #7B7B74",
-"N,	c #82817A",
-"O,	c #6B6B66",
-"P,	c #646360",
-"Q,	c #6C675F",
-"R,	c #696862",
-"S,	c #6B6A6C",
-"T,	c #857A7D",
-"U,	c #61575A",
-"V,	c #6C6569",
-"W,	c #494749",
-"X,	c #6E6D6B",
-"Y,	c #6E6E6E",
-"Z,	c #7C7A7B",
-"`,	c #767071",
-" '	c #847D7D",
-".'	c #7C7A78",
-"+'	c #706F6F",
-"@'	c #6E6C6D",
-"#'	c #706E70",
-"$'	c #5D5B5F",
-"%'	c #242426",
-"&'	c #282829",
-"*'	c #2A2A2B",
-"='	c #3D3D3C",
-"-'	c #434341",
-";'	c #40403E",
-">'	c #424240",
-",'	c #363635",
-"''	c #363637",
-")'	c #2D2D2E",
-"!'	c #42423C",
-"~'	c #404039",
-"{'	c #3A3935",
-"]'	c #383636",
-"^'	c #373736",
-"/'	c #40403F",
-"('	c #2D2D30",
-"_'	c #3B3A38",
-":'	c #31302E",
-"<'	c #2E2D2B",
-"['	c #262523",
-"}'	c #454441",
-"|'	c #555451",
-"1'	c #5D5C5C",
-"2'	c #605F5F",
-"3'	c #70716D",
-"4'	c #74746E",
-"5'	c #807F7A",
-"6'	c #868580",
-"7'	c #83827E",
-"8'	c #71706D",
-"9'	c #6B6A66",
-"0'	c #484749",
-"a'	c #5B5453",
-"b'	c #5D5B5A",
-"c'	c #7E7476",
-"d'	c #6C6163",
-"e'	c #676061",
-"f'	c #5F5C5A",
-"g'	c #72706F",
-"h'	c #746F70",
-"i'	c #68676A",
-"j'	c #656467",
-"k'	c #6A686C",
-"l'	c #5D5C62",
-"m'	c #4E4C52",
-"n'	c #222123",
-"o'	c #212123",
-"p'	c #272728",
-"q'	c #393938",
-"r'	c #3C3C3B",
-"s'	c #3A3B3D",
-"t'	c #3A3A3D",
-"u'	c #323235",
-"v'	c #393839",
-"w'	c #3D3C39",
-"x'	c #3A3835",
-"y'	c #3D3A39",
-"z'	c #3D3A3A",
-"A'	c #424241",
-"B'	c #2C2C2B",
-"C'	c #343335",
-"D'	c #282726",
-"E'	c #222020",
-"F'	c #242320",
-"G'	c #3B3B38",
-"H'	c #444340",
-"I'	c #535250",
-"J'	c #6B6A69",
-"K'	c #7C7B75",
-"L'	c #7C7B73",
-"M'	c #7E7E79",
-"N'	c #767671",
-"O'	c #6D6D6B",
-"P'	c #5C5B5A",
-"Q'	c #575756",
-"R'	c #534E50",
-"S'	c #534F50",
-"T'	c #4F4D4C",
-"U'	c #655C5F",
-"V'	c #625A5D",
-"W'	c #797374",
-"X'	c #4D4A4B",
-"Y'	c #656262",
-"Z'	c #676764",
-"`'	c #716F6D",
-" )	c #7D7978",
-".)	c #7C7A7A",
-"+)	c #777579",
-"@)	c #737276",
-"#)	c #6C6B6E",
-"$)	c #5D5C60",
-"%)	c #38383B",
-"&)	c #404040",
-"*)	c #3B3C3D",
-"=)	c #37383A",
-"-)	c #2C2D30",
-";)	c #383837",
-">)	c #3C3938",
-",)	c #383634",
-"')	c #383836",
-"))	c #373735",
-"!)	c #2F2E2C",
-"~)	c #2D2C2B",
-"{)	c #302F2E",
-"])	c #363534",
-"^)	c #363531",
-"/)	c #383733",
-"()	c #40403B",
-"_)	c #51524B",
-":)	c #63645D",
-"<)	c #6B6A63",
-"[)	c #6B6A61",
-"})	c #6E6E65",
-"|)	c #60615D",
-"1)	c #5E5F5B",
-"2)	c #5F5F5E",
-"3)	c #5D5D5D",
-"4)	c #565353",
-"5)	c #4A4645",
-"6)	c #474342",
-"7)	c #393435",
-"8)	c #5B5658",
-"9)	c #757275",
-"0)	c #666568",
-"a)	c #6F6F6E",
-"b)	c #706E6C",
-"c)	c #7D7A78",
-"d)	c #7A7976",
-"e)	c #727171",
-"f)	c #818081",
-"g)	c #646464",
-"h)	c #3D3D3F",
-"i)	c #313133",
-"j)	c #323232",
-"k)	c #3F4041",
-"l)	c #404143",
-"m)	c #323335",
-"n)	c #474843",
-"o)	c #3F3F3C",
-"p)	c #393937",
-"q)	c #343432",
-"r)	c #2E2E2C",
-"s)	c #454440",
-"t)	c #44433F",
-"u)	c #403F3B",
-"v)	c #3F3E3A",
-"w)	c #3E3D39",
-"x)	c #41423E",
-"y)	c #4F4F4C",
-"z)	c #575754",
-"A)	c #545455",
-"B)	c #60605F",
-"C)	c #636362",
-"D)	c #696969",
-"E)	c #686868",
-"F)	c #4E4B4B",
-"G)	c #3B3736",
-"H)	c #3A3635",
-"I)	c #696067",
-"J)	c #4B474A",
-"K)	c #76757D",
-"L)	c #504F55",
-"M)	c #787775",
-"N)	c #797474",
-"O)	c #847F7C",
-"P)	c #808078",
-"Q)	c #898883",
-"R)	c #838381",
-"S)	c #797977",
-"T)	c #737271",
-"U)	c #5A5957",
-"V)	c #464543",
-"W)	c #464545",
-"X)	c #3E3E3E",
-"Y)	c #30312F",
-"Z)	c #393A35",
-"`)	c #3F403B",
-" !	c #3B3B3C",
-".!	c #2F3032",
-"+!	c #38393A",
-"@!	c #3F3E3D",
-"#!	c #3A3A38",
-"$!	c #323230",
-"%!	c #2B2B2A",
-"&!	c #3E3F3B",
-"*!	c #3C3D38",
-"=!	c #42433E",
-"-!	c #525256",
-";!	c #555459",
-">!	c #6F6C6B",
-",!	c #605F63",
-"'!	c #787875",
-")!	c #636262",
-"!!	c #3C3A3D",
-"~!	c #1B191A",
-"{!	c #4F4D4B",
-"]!	c #7C7984",
-"^!	c #545159",
-"/!	c #6A686B",
-"(!	c #6C6C6F",
-"_!	c #7B7A76",
-":!	c #7A7672",
-"<!	c #918C87",
-"[!	c #9A9A91",
-"}!	c #7C7B77",
-"|!	c #7F7F7C",
-"1!	c #514F50",
-"2!	c #454344",
-"3!	c #4D4C4D",
-"4!	c #323331",
-"5!	c #2F2F2D",
-"6!	c #2A2A2C",
-"7!	c #252629",
-"8!	c #333231",
-"9!	c #5F5F60",
-"0!	c #706D6C",
-"a!	c #717071",
-"b!	c #5E5D61",
-"c!	c #6E6E6B",
-"d!	c #3D3B3B",
-"e!	c #646264",
-"f!	c #7F7E88",
-"g!	c #77737C",
-"h!	c #3E3C3C",
-"i!	c #82807B",
-"j!	c #88847E",
-"k!	c #9A978F",
-"l!	c #878780",
-"m!	c #787672",
-"n!	c #6D6E6C",
-"o!	c #666365",
-"p!	c #5F5956",
-"q!	c #4E4E51",
-"r!	c #464548",
-"s!	c #434244",
-"t!	c #353536",
-"u!	c #323233",
-"v!	c #353537",
-"w!	c #434243",
-"x!	c #424344",
-"y!	c #3C3D3D",
-"z!	c #3E3E3F",
-"A!	c #3F3F40",
-"B!	c #2A2B2C",
-"C!	c #282929",
-"D!	c #2B2A29",
-"E!	c #2E2E2D",
-"F!	c #373635",
-"G!	c #3A3939",
-"H!	c #383631",
-"I!	c #2F2E2A",
-"J!	c #373839",
-"K!	c #393A3A",
-"L!	c #373433",
-"M!	c #3D3F3F",
-"N!	c #39393B",
-"O!	c #333434",
-"P!	c #3A3836",
-"Q!	c #696869",
-"R!	c #707272",
-"S!	c #636562",
-"T!	c #656060",
-"U!	c #5D5554",
-"V!	c #757672",
-"W!	c #3F3E3F",
-"X!	c #636161",
-"Y!	c #69686A",
-"Z!	c #67666D",
-"`!	c #726A68",
-" ~	c #6A6260",
-".~	c #6F6A6C",
-"+~	c #403F42",
-"@~	c #75716E",
-"#~	c #8D8986",
-"$~	c #8F8C86",
-"%~	c #94948C",
-"&~	c #898B8D",
-"*~	c #595B5C",
-"=~	c #725B40",
-"-~	c #B88F59",
-";~	c #A58852",
-">~	c #5D5544",
-",~	c #323239",
-"'~	c #3B3535",
-")~	c #353032",
-"!~	c #373835",
-"~~	c #36373C",
-"{~	c #3B3B40",
-"]~	c #4D4B4E",
-"^~	c #424247",
-"/~	c #39393E",
-"(~	c #3D3D41",
-"_~	c #3E3E3D",
-":~	c #3F4343",
-"<~	c #3E4140",
-"[~	c #37312A",
-"}~	c #453830",
-"|~	c #463D30",
-"1~	c #50423B",
-"2~	c #6C5C43",
-"3~	c #483B2B",
-"4~	c #353334",
-"5~	c #362D2F",
-"6~	c #473E2E",
-"7~	c #534835",
-"8~	c #6F5F48",
-"9~	c #796E4B",
-"0~	c #746C42",
-"a~	c #4B4744",
-"b~	c #5A5B5B",
-"c~	c #565654",
-"d~	c #524334",
-"e~	c #7F6A59",
-"f~	c #94785D",
-"g~	c #CCB685",
-"h~	c #827867",
-"i~	c #716D70",
-"j~	c #575657",
-"k~	c #6A666A",
-"l~	c #636066",
-"m~	c #6E6E76",
-"n~	c #706662",
-"o~	c #6F6561",
-"p~	c #6E6664",
-"q~	c #423F40",
-"r~	c #888482",
-"s~	c #95928C",
-"t~	c #706B5E",
-"u~	c #817158",
-"v~	c #B09A72",
-"w~	c #9F8C79",
-"x~	c #535454",
-"y~	c #7A6A4B",
-"z~	c #A3834D",
-"A~	c #3C3A33",
-"B~	c #745F48",
-"C~	c #836C42",
-"D~	c #4D433B",
-"E~	c #3C3D3F",
-"F~	c #464546",
-"G~	c #444243",
-"H~	c #424143",
-"I~	c #484845",
-"J~	c #4D5153",
-"K~	c #3F3627",
-"L~	c #6D5B4B",
-"M~	c #544932",
-"N~	c #3A3C38",
-"O~	c #2E3035",
-"P~	c #34312A",
-"Q~	c #897549",
-"R~	c #37332E",
-"S~	c #343133",
-"T~	c #696143",
-"U~	c #5E5141",
-"V~	c #5E5747",
-"W~	c #343231",
-"X~	c #3E3834",
-"Y~	c #86744E",
-"Z~	c #635947",
-"`~	c #3D3B3A",
-" {	c #695545",
-".{	c #7C7168",
-"+{	c #4A484A",
-"@{	c #63615A",
-"#{	c #6E726D",
-"${	c #707271",
-"%{	c #5A595A",
-"&{	c #5B5557",
-"*{	c #6D686C",
-"={	c #656369",
-"-{	c #857972",
-";{	c #887A7A",
-">{	c #847A78",
-",{	c #6A6B6D",
-"'{	c #6C6A64",
-"){	c #B59B6E",
-"!{	c #A59D89",
-"~{	c #B19773",
-"{{	c #4E4D47",
-"]{	c #615C5E",
-"^{	c #464844",
-"/{	c #936940",
-"({	c #443E3A",
-"_{	c #352F30",
-":{	c #725938",
-"<{	c #4A3E2A",
-"[{	c #584731",
-"}{	c #6C593B",
-"|{	c #383434",
-"1{	c #444343",
-"2{	c #36312D",
-"3{	c #3F352E",
-"4{	c #4A3D30",
-"5{	c #69543C",
-"6{	c #484949",
-"7{	c #49402E",
-"8{	c #504542",
-"9{	c #3C3C38",
-"0{	c #554938",
-"a{	c #8A7B56",
-"b{	c #4B4A41",
-"c{	c #454646",
-"d{	c #534E45",
-"e{	c #363539",
-"f{	c #8B7648",
-"g{	c #4F4A43",
-"h{	c #332A24",
-"i{	c #8B7A58",
-"j{	c #333533",
-"k{	c #3F3B3A",
-"l{	c #675E39",
-"m{	c #716E51",
-"n{	c #373B3A",
-"o{	c #3E413F",
-"p{	c #7D693D",
-"q{	c #635B4C",
-"r{	c #514531",
-"s{	c #75695B",
-"t{	c #444441",
-"u{	c #645D60",
-"v{	c #797B79",
-"w{	c #7A7B79",
-"x{	c #7C7A76",
-"y{	c #7A7A79",
-"z{	c #423C3D",
-"A{	c #474340",
-"B{	c #4F4B4D",
-"C{	c #8E8178",
-"D{	c #81736E",
-"E{	c #877D7B",
-"F{	c #535553",
-"G{	c #757779",
-"H{	c #868683",
-"I{	c #746449",
-"J{	c #B69368",
-"K{	c #585456",
-"L{	c #8A7B67",
-"M{	c #545150",
-"N{	c #494847",
-"O{	c #98774A",
-"P{	c #504C40",
-"Q{	c #323030",
-"R{	c #967B4D",
-"S{	c #494441",
-"T{	c #2F2F36",
-"U{	c #64502F",
-"V{	c #6F5C46",
-"W{	c #232624",
-"X{	c #5E4730",
-"Y{	c #53504E",
-"Z{	c #221E1A",
-"`{	c #7A5D41",
-" ]	c #393531",
-".]	c #2B2B2F",
-"+]	c #72532D",
-"@]	c #55503D",
-"#]	c #483A2E",
-"$]	c #6C6156",
-"%]	c #827349",
-"&]	c #5F5742",
-"*]	c #4A4B45",
-"=]	c #332719",
-"-]	c #958755",
-";]	c #4E4436",
-">]	c #534830",
-",]	c #6A5E4F",
-"']	c #47443D",
-")]	c #3B3C3B",
-"!]	c #464141",
-"~]	c #2B2622",
-"{]	c #857953",
-"]]	c #666356",
-"^]	c #544937",
-"/]	c #8F8261",
-"(]	c #423937",
-"_]	c #998257",
-":]	c #4C4844",
-"<]	c #57575C",
-"[]	c #584D43",
-"}]	c #605647",
-"|]	c #705742",
-"1]	c #6B6667",
-"2]	c #676062",
-"3]	c #625E5A",
-"4]	c #797575",
-"5]	c #776B63",
-"6]	c #776C62",
-"7]	c #897F7D",
-"8]	c #747577",
-"9]	c #959794",
-"0]	c #AB9E6A",
-"a]	c #B6A977",
-"b]	c #61645E",
-"c]	c #747573",
-"d]	c #484238",
-"e]	c #AD9766",
-"f]	c #4A4547",
-"g]	c #3F3E2E",
-"h]	c #8E734E",
-"i]	c #2A2B29",
-"j]	c #444046",
-"k]	c #5D4C34",
-"l]	c #725D45",
-"m]	c #3F301D",
-"n]	c #856747",
-"o]	c #373025",
-"p]	c #524433",
-"q]	c #5D544F",
-"r]	c #2A2B2E",
-"s]	c #2C261D",
-"t]	c #957E4C",
-"u]	c #67563E",
-"v]	c #5C584B",
-"w]	c #34363C",
-"x]	c #7C6E41",
-"y]	c #766C53",
-"z]	c #353430",
-"A]	c #7F6A49",
-"B]	c #9C9663",
-"C]	c #766953",
-"D]	c #9F955E",
-"E]	c #3D3E3F",
-"F]	c #424545",
-"G]	c #63655F",
-"H]	c #4F4F4B",
-"I]	c #665E4F",
-"J]	c #AFA578",
-"K]	c #73644F",
-"L]	c #706A58",
-"M]	c #767266",
-"N]	c #45443E",
-"O]	c #4A4034",
-"P]	c #A68D5D",
-"Q]	c #524F4F",
-"R]	c #4A4945",
-"S]	c #92806F",
-"T]	c #8B705F",
-"U]	c #D0A46A",
-"V]	c #615D56",
-"W]	c #80837E",
-"X]	c #787876",
-"Y]	c #6E6D6A",
-"Z]	c #6E6969",
-"`]	c #615D5A",
-" ^	c #7A7676",
-".^	c #908682",
-"+^	c #716763",
-"@^	c #6A5F5D",
-"#^	c #545151",
-"$^	c #7C7C7E",
-"%^	c #909196",
-"&^	c #96926F",
-"*^	c #DAD4A6",
-"=^	c #5E5A57",
-"-^	c #767973",
-";^	c #5E5B62",
-">^	c #736041",
-",^	c #75695C",
-"'^	c #474846",
-")^	c #5B4F39",
-"!^	c #907D5C",
-"~^	c #373A38",
-"{^	c #525459",
-"]^	c #6E563B",
-"^^	c #665C56",
-"/^	c #554331",
-"(^	c #876E4F",
-"_^	c #625B5B",
-":^	c #4E4B4C",
-"<^	c #211E1F",
-"[^	c #2E2720",
-"}^	c #44423D",
-"|^	c #745D32",
-"1^	c #87714B",
-"2^	c #454340",
-"3^	c #565357",
-"4^	c #78683D",
-"5^	c #84765B",
-"6^	c #3C3535",
-"7^	c #6C5C4C",
-"8^	c #888164",
-"9^	c #908E6D",
-"0^	c #3E3E3C",
-"a^	c #918A63",
-"b^	c #6E6045",
-"c^	c #60605D",
-"d^	c #666461",
-"e^	c #50524D",
-"f^	c #494137",
-"g^	c #B2A785",
-"h^	c #474840",
-"i^	c #3D3B40",
-"j^	c #52544F",
-"k^	c #52483E",
-"l^	c #B6A975",
-"m^	c #564D4E",
-"n^	c #5C5C5B",
-"o^	c #655740",
-"p^	c #D7BB7F",
-"q^	c #4E4E4C",
-"r^	c #878785",
-"s^	c #727270",
-"t^	c #75736E",
-"u^	c #76726D",
-"v^	c #6D6967",
-"w^	c #7C7879",
-"x^	c #8E8483",
-"y^	c #867C7B",
-"z^	c #7C7171",
-"A^	c #595656",
-"B^	c #828385",
-"C^	c #8E9092",
-"D^	c #787977",
-"E^	c #E5E5C7",
-"F^	c #9E9877",
-"G^	c #5A5449",
-"H^	c #504945",
-"I^	c #574E38",
-"J^	c #776860",
-"K^	c #3A3A3E",
-"L^	c #5D5E5A",
-"M^	c #695033",
-"N^	c #7F6147",
-"O^	c #403838",
-"P^	c #3B352A",
-"Q^	c #756254",
-"R^	c #45433E",
-"S^	c #514134",
-"T^	c #896C48",
-"U^	c #44392B",
-"V^	c #463928",
-"W^	c #645745",
-"X^	c #56504A",
-"Y^	c #282529",
-"Z^	c #AD996B",
-"`^	c #7A6C5C",
-" /	c #3A383D",
-"./	c #595D5A",
-"+/	c #594A35",
-"@/	c #A09066",
-"#/	c #6E5D47",
-"$/	c #7C7469",
-"%/	c #888764",
-"&/	c #7D7C6C",
-"*/	c #51534E",
-"=/	c #575346",
-"-/	c #B8AA81",
-";/	c #817A60",
-">/	c #706960",
-",/	c #5A4D3A",
-"'/	c #A1936E",
-")/	c #656563",
-"!/	c #5E5D5B",
-"~/	c #585451",
-"{/	c #938A5C",
-"]/	c #A59C5E",
-"^/	c #5E5042",
-"//	c #77624C",
-"(/	c #D0BF80",
-"_/	c #AEA27C",
-":/	c #4F5352",
-"</	c #888887",
-"[/	c #70706D",
-"}/	c #74706B",
-"|/	c #7F7B7A",
-"1/	c #6F6B6C",
-"2/	c #7E7475",
-"3/	c #857A7C",
-"4/	c #5F5C5D",
-"5/	c #828484",
-"6/	c #8C8E92",
-"7/	c #818386",
-"8/	c #737167",
-"9/	c #B2AA85",
-"0/	c #A59171",
-"a/	c #7F7265",
-"b/	c #635D5A",
-"c/	c #3D3E3B",
-"d/	c #575354",
-"e/	c #5A575C",
-"f/	c #8A6C3E",
-"g/	c #7E6C55",
-"h/	c #615B49",
-"i/	c #5D5850",
-"j/	c #3C3A3A",
-"k/	c #505150",
-"l/	c #414346",
-"m/	c #534A42",
-"n/	c #655849",
-"o/	c #564B45",
-"p/	c #3F3838",
-"q/	c #3A3A3C",
-"r/	c #434142",
-"s/	c #5E5545",
-"t/	c #3D3838",
-"u/	c #626462",
-"v/	c #52504C",
-"w/	c #84806B",
-"x/	c #5F5A4C",
-"y/	c #3D3C3B",
-"z/	c #AEA87C",
-"A/	c #615E57",
-"B/	c #5D5D58",
-"C/	c #6B6C62",
-"D/	c #86836D",
-"E/	c #4E4A46",
-"F/	c #5E5D62",
-"G/	c #715E41",
-"H/	c #8D816B",
-"I/	c #464643",
-"J/	c #646460",
-"K/	c #686864",
-"L/	c #696866",
-"M/	c #676665",
-"N/	c #545350",
-"O/	c #817A68",
-"P/	c #96886A",
-"Q/	c #6C6454",
-"R/	c #D5CD8A",
-"S/	c #6F675C",
-"T/	c #686A6A",
-"U/	c #696764",
-"V/	c #676362",
-"W/	c #7E7976",
-"X/	c #756F70",
-"Y/	c #827877",
-"Z/	c #867C7D",
-"`/	c #5F5D5D",
-" (	c #828282",
-".(	c #727372",
-"+(	c #5B5B5E",
-"@(	c #57585A",
-"#(	c #706C6F",
-"$(	c #514D4E",
-"%(	c #C3AE78",
-"&(	c #484645",
-"*(	c #6A6A6A",
-"=(	c #525156",
-"-(	c #4C4A4D",
-";(	c #4C4B4A",
-">(	c #4F4E4C",
-",(	c #504D4E",
-"'(	c #545253",
-")(	c #717070",
-"!(	c #676765",
-"~(	c #61605B",
-"{(	c #6D685B",
-"](	c #454240",
-"^(	c #6A6965",
-"/(	c #777672",
-"((	c #73726E",
-"_(	c #61615A",
-":(	c #5D5C5A",
-"<(	c #656765",
-"[(	c #5F5751",
-"}(	c #504B43",
-"|(	c #555452",
-"1(	c #6D6C6A",
-"2(	c #6F6E6C",
-"3(	c #6C6B69",
-"4(	c #706F6D",
-"5(	c #5F5D5B",
-"6(	c #544F48",
-"7(	c #B5A27F",
-"8(	c #71706E",
-"9(	c #676664",
-"0(	c #5D5958",
-"a(	c #66605F",
-"b(	c #605A5A",
-"c(	c #766C6B",
-"d(	c #6D6362",
-"e(	c #766F6F",
-"f(	c #7E7B7A",
-"g(	c #8B8883",
-"h(	c #807D7A",
-"i(	c #737174",
-"j(	c #656667",
-"k(	c #717172",
-"l(	c #7B7B79",
-"m(	c #6D6A6C",
-"n(	c #5C564D",
-"o(	c #C2A969",
-"p(	c #5C5C5D",
-"q(	c #616061",
-"r(	c #6B6B6A",
-"s(	c #656566",
-"t(	c #5F5D61",
-"u(	c #6B696C",
-"v(	c #615F60",
-"w(	c #555254",
-"x(	c #595658",
-"y(	c #6B6B6E",
-"z(	c #6B6768",
-"A(	c #716D6B",
-"B(	c #656562",
-"C(	c #747270",
-"D(	c #81807A",
-"E(	c #777771",
-"F(	c #7A7A73",
-"G(	c #6D6D6C",
-"H(	c #636062",
-"I(	c #797776",
-"J(	c #787674",
-"K(	c #706E6D",
-"L(	c #696361",
-"M(	c #575C5C",
-"N(	c #525354",
-"O(	c #67696A",
-"P(	c #7B7978",
-"Q(	c #63615F",
-"R(	c #65615E",
-"S(	c #736C6F",
-"T(	c #645F5E",
-"U(	c #847772",
-"V(	c #5F5855",
-"W(	c #72716A",
-"X(	c #847F7A",
-"Y(	c #79746C",
-"Z(	c #767774",
-"`(	c #676669",
-" _	c #646662",
-"._	c #6B696B",
-"+_	c #6A665F",
-"@_	c #5F5955",
-"#_	c #97845A",
-"$_	c #3D3A3F",
-"%_	c #5B585C",
-"&_	c #676565",
-"*_	c #71716D",
-"=_	c #4E4B4E",
-"-_	c #5D5A5D",
-";_	c #626162",
-">_	c #5F5E5E",
-",_	c #656464",
-"'_	c #585657",
-")_	c #616163",
-"!_	c #4C4D4F",
-"~_	c #525355",
-"{_	c #676160",
-"]_	c #706B6A",
-"^_	c #626061",
-"/_	c #716F6F",
-"(_	c #676666",
-"__	c #74716F",
-":_	c #6B6966",
-"<_	c #7E7D7C",
-"[_	c #4D4A47",
-"}_	c #463F3A",
-"|_	c #57514F",
-"1_	c #867D75",
-"2_	c #90837B",
-"3_	c #211D1D",
-"4_	c #464442",
-"5_	c #595955",
-"6_	c #6F6E6B",
-"7_	c #6D6460",
-"8_	c #5A5958",
-"9_	c #605F5E",
-"0_	c #615F5E",
-"a_	c #605B59",
-"b_	c #67625F",
-"c_	c #6A6362",
-"d_	c #525353",
-"e_	c #4B484A",
-"f_	c #4C4C50",
-"g_	c #64605E",
-"h_	c #5E5859",
-"i_	c #635D60",
-"j_	c #625D61",
-"k_	c #605D5E",
-"l_	c #5B5858",
-"m_	c #5E5D5D",
-"n_	c #615F5F",
-"o_	c #5C5859",
-"p_	c #5D595A",
-"q_	c #6E6F6E",
-"r_	c #5D5B59",
-"s_	c #5B5957",
-"t_	c #585655",
-"u_	c #474548",
-"v_	c #645F60",
-"w_	c #554D4D",
-"x_	c #646160",
-"y_	c #5B5958",
-"z_	c #3B393A",
-"A_	c #403E3F",
-"B_	c #474744",
-"C_	c #5D5C5B",
-"D_	c #6B6A6A",
-"E_	c #696663",
-"F_	c #65625F",
-"G_	c #656360",
-"H_	c #64625F",
-"I_	c #65635F",
-"J_	c #64635D",
-"K_	c #57534F",
-"L_	c #6F6967",
-"M_	c #6C6866",
-"N_	c #6E6A6A",
-"O_	c #867A70",
-"P_	c #83756D",
-"Q_	c #2F2A27",
-"R_	c #655A4E",
-"S_	c #7D7671",
-"T_	c #7E7A74",
-"U_	c #74685E",
-"V_	c #786A69",
-"W_	c #716868",
-"X_	c #827A78",
-"Y_	c #7E7370",
-"Z_	c #756966",
-"`_	c #7A6E6A",
-" :	c #96888B",
-".:	c #7A7675",
-"+:	c #6C6463",
-"@:	c #7A7275",
-"#:	c #69656C",
-"$:	c #5D595B",
-"%:	c #666061",
-"&:	c #595154",
-"*:	c #797274",
-"=:	c #655B5A",
-"-:	c #5E5555",
-";:	c #574C4C",
-">:	c #6C5F60",
-",:	c #7B6F6F",
-"':	c #6E6262",
-"):	c #6F6565",
-"!:	c #645A5A",
-"~:	c #888383",
-"{:	c #6F6A68",
-"]:	c #57514A",
-"^:	c #4B443E",
-"/:	c #5F5854",
-"(:	c #545051",
-"_:	c #6B6668",
-"::	c #504A4B",
-"<:	c #72696B",
-"[:	c #757171",
-"}:	c #7A7776",
-"|:	c #63605F",
-"1:	c #302C2B",
-"2:	c #312B2A",
-"3:	c #504949",
-"4:	c #69605D",
-"5:	c #635B57",
-"6:	c #635B55",
-"7:	c #554E43",
-"8:	c #585049",
-"9:	c #605750",
-"0:	c #5E564E",
-"a:	c #676059",
-"b:	c #615950",
-"c:	c #655952",
-"d:	c #6D6560",
-"e:	c #5F5753",
-"f:	c #817874",
-"g:	c #756D69",
-"h:	c #584E48",
-"i:	c #68625B",
-"j:	c #837C78",
-"k:	c #86807D",
-"l:	c #696158",
-"m:	c #706152",
-"n:	c #60574D",
-"o:	c #8A7F72",
-"p:	c #7D7366",
-"q:	c #847E76",
-"r:	c #6E645C",
-"s:	c #70615D",
-"t:	c #756662",
-"u:	c #796A63",
-"v:	c #80736B",
-"w:	c #776C66",
-"x:	c #746A67",
-"y:	c #827575",
-"z:	c #847C7A",
-"A:	c #7B7273",
-"B:	c #7D757C",
-"C:	c #90888A",
-"D:	c #9B999E",
-"E:	c #868689",
-"F:	c #645E60",
-"G:	c #675F60",
-"H:	c #6E6568",
-"I:	c #565050",
-"J:	c #5C5254",
-"K:	c #63595B",
-"L:	c #706769",
-"M:	c #776E70",
-"N:	c #736C6D",
-"O:	c #585150",
-"P:	c #4A4140",
-"Q:	c #5D5756",
-"R:	c #5D5853",
-"S:	c #56524A",
-"T:	c #3F3A35",
-"U:	c #5E5956",
-"V:	c #6A6665",
-"W:	c #595558",
-"X:	c #615D60",
-"Y:	c #625C5E",
-"Z:	c #555051",
-"`:	c #524F4E",
-" <	c #726B69",
-".<	c #635957",
-"+<	c #726866",
-"@<	c #6C635E",
-"#<	c #776E69",
-"$<	c #6E645F",
-"%<	c #706659",
-"&<	c #685F4E",
-"*<	c #665A49",
-"=<	c #51473C",
-"-<	c #776F69",
-";<	c #686057",
-"><	c #5F5551",
-",<	c #5D5652",
-"'<	c #6D6260",
-")<	c #857B7A",
-"!<	c #5D544E",
-"~<	c #645C54",
-"{<	c #746863",
-"]<	c #78706B",
-"^<	c #6E6256",
-"/<	c #6D5F56",
-"(<	c #433C3A",
-"_<	c #635C58",
-":<	c #645550",
-"<<	c #736662",
-"[<	c #635858",
-"}<	c #5E534E",
-"|<	c #7C6E6A",
-"1<	c #786B63",
-"2<	c #7D706B",
-"3<	c #6E6361",
-"4<	c #736969",
-"5<	c #7F7272",
-"6<	c #716A68",
-"7<	c #827874",
-"8<	c #8B8486",
-"9<	c #817D7E",
-"0<	c #897E7B",
-"a<	c #7B7877",
-"b<	c #857D7E",
-"c<	c #7D7779",
-"d<	c #7A777F",
-"e<	c #7E7D83",
-"f<	c #656167",
-"g<	c #6A656B",
-"h<	c #726F73",
-"i<	c #87878D",
-"j<	c #817C7D",
-"k<	c #584F4D",
-"l<	c #6F6968",
-"m<	c #716C67",
-"n<	c #7D7971",
-"o<	c #544F4C",
-"p<	c #6B6766",
-"q<	c #5E595C",
-"r<	c #544F52",
-"s<	c #545555",
-"t<	c #201C1D",
-"u<	c #706869",
-"v<	c #7F7778",
-"w<	c #736A68",
-"x<	c #6D645E",
-"y<	c #726963",
-"z<	c #6F6862",
-"A<	c #847E78",
-"B<	c #7B756F",
-"C<	c #7E7B6F",
-"D<	c #737067",
-"E<	c #655E5B",
-"F<	c #5D5953",
-"G<	c #636057",
-"H<	c #5D5650",
-"I<	c #54514D",
-"J<	c #3C3837",
-"K<	c #756F6F",
-"L<	c #7A7171",
-"M<	c #6E6463",
-"N<	c #6B6161",
-"O<	c #6F5F5D",
-"P<	c #5A4F47",
-". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z ",
-"c A B C D E F G H I J K L M N O P Q R S T U V W X Y Z `  ...+.@.~ #.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.",
-"7.8.9.0.&.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+",
-"%+&+*+=+-+;+>+,+'+;+)+!+~+{+]+^+/+(+_+:+<+[+}+|+~+1+2+3+4+5+6+7+8+9+5+5+0+;+,+>+,+a+;+5+,+b+c+>+;+d+e+<+f+g+h+h+i+b+j+k+l+m+n+o+",
-"p+q+r+s+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+u+v+v+t+t+t+t+t+t+t+u+u+u+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+w+x+y+z+",
-"A+B+C+)+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+D+E+F+G+",
-"H+I+J+d+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+K+L+M+N+",
-"O+P+Q+R+u+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+S+T+U+V+",
-"W+X+Y+Z+v+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+`+ @.@+@",
-"@@#@$@)+v+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+`+%@&@*@",
-"=@-@;@,+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+>@,@'@)@",
-"!@~@{@;+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+u+]@^@/@(@",
-"_@:@<@/+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+[@}@|@1@",
-"2@3@4@7+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+5@6@7@8@",
-"9@0@a@b@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+5@c@d@e@",
-"f@g@h@/+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+i@j@k@l@m@n@o@p@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+q@r@s@t@",
-"u@v@w@x@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+y@z@g.A@B@C@D@E@F@G@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+u+H@I@J@K@",
-"L@M@N@0+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+@###$#%#",
-"&#*#=#9+u+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#}#|#1#t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+2#3#4#5#",
-"6#7#8#9#v+t+t+t+t+t+t+t+t+t+t+t+t+t+t+O@0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+y#z#A#B#",
-"p.C#D#9#t+t+t+t+t+t+t+t+t+t+t+t+E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $'#.$+$@$#$$$%$t+t+t+t+t+t+t+t+t+t+t+t+t+&$*$=$-$",
-";$>$,$'$t+t+t+t+t+t+t+t+t+t+t+)$!$~${$]$<#^$/$($_$:$<$[$~#R#}$|$1$2$3$4$5$6$7$8$9$0$.$a$b$b$c$d$O@t+t+t+t+t+t+t+t+t+t+t+e$f$g$h$",
-"i$j$k$l$t+t+t+t+t+t+t+t+t+t+t+m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$a$D@r$K$L$M$N$O$P$Q$t+t+t+t+t+t+t+t+t+t+t+R$S$T$U$",
-"V$W$X$j@t+t+t+t+t+t+t+O@x#Y$Z$Q$`$ %o$n$.%+%@%#%$%%%&%*%=%-%;%>%+$,%'%)%5$W@!%~%b$O$`@{%]%^%O$/%(%%$_%x#O@t+t+t+t+t+t+t+:%<%[%}%",
-"|%1%2%3%4%t+O@+#Z$5%6%7%8%8%9%0%c$a%b%}#c%d%e%f%g%h%i%|@j%X@k%l%x$m%n%o%p%q%r%@%f%a%s%{%t%u%u% %v%w%w#x%Q$6%1#%$Y$x#t+t+y%z%A%B%",
-"C%Y+D%R+E%F%Q$G%x%H%I%I%(%J%K%L%M%N%O%P%Q%v#R%S%T%U%V%W%X%s$Y%Z%`% &.&+&@&#&$&%&&& #*&=&-&N%;&>&|$v%,&,&'&)&H%!&x%Q$j+~&{&]&^&/&",
-"(&_&:&<&[&)&}&,&v%|&1&2&3&4&5&6&7&8&9&!&0&a&b&c&d&&&e&f&g&h&i&g%7&u#P$j&k&{%l&m&m&n&m&o&p&q&p&r&s&t&u&u&v&v&1&|&w&'&I%x&y&z&A&B&",
-"C&D&E&F&G&H&I&1&J&K&L&L&M&N&O&P&%&l&L&Q&R&q@d&S&8&T&n&e&U&V&W&&&r&X&Y&u%Z& #N%b&o&`&c&`&C$p&c&m& *.*+*@*+*#*$*$*%*I&1&&***=*-*;*",
-">*,*.#'*)*!*@*~*{*]*^*/*(*_*r&:*/%<*%*[*[*[*}*|*-&Y&X&1*1*X&2*l&3*}* #+* #Y&3*|*}*4*C$5*p&q&6*l&7*^%O$T%8&8*9*d&0*a*N&b*c*d*e*f*",
-"g*h*i*j*k*l*$*m*n*o*p*q*r*f%U%2* %u%s*t*t*$*>&u*>&Z&3*u%X&s%^%>&v*s*(%G%w&3*>&w*=&4*`&C$x*y*y*z*c&A*`$B*U%e&U%_*C*n&c&D*E*F*G*H*",
-"I*J*K*L*k#M*N*O*P*Q*R*S*#&T*U*V*W*X*>&3*=&^%Y& #>&Y&>&u% #X&v#3*Y*K&Z*`* =$*=&v#3*a*o&a*.=+=@=#=#=$%$=@$u$%=#$#$&=B**=S&==-=;=>=",
-",='=)=!=~={=I$]=^=/=(=n%_=:=<=[=}=|=>&Z&w*w*3*=&}*3*v#>&Y&X&1=2=3=4=5=6=7=$*v#3*}*v*>&.*=&$*8=9=0=h&a=b=l%/=$%c=^$d=^$e=f=g=h=i=",
-"j=6$k=l=m=n=~$o=p=q=r=s=t=u=[#v=w=x=a%t%Y&X& #}*w*w*v# #w*w*>&3=y=3=z=A=u&s*>&@*|&#*B=s*=&$*C=D=E=F=G=b=H=I=J=$%K=L=M=N=H#O=P=Q=",
-"R=S=T=U=V=W=b$b=v$+$^$T@X=Y=Z=`= -9*Y&.-+-]%@-^%v#B=v* #>&3*<*#-$-]%%-Y*B=>&-&>@&-*-b&=---9&7*;->-,-[$'-)-!-L=Y=~-)-{-]-^-/-(-_-",
-":-<-[-}*`@}-J=}-|-1-'#x$H=K=/=:*r&4*u*2-a#y=3-w*s* #{%Y&>& #4-y=5-^%Z&Y&=&Y&6*6-7-8-9-0-a-b-c-d-e-,-($f-g-h-/=<#i-j-k-l-m-n-o-p-",
-"q-r-s-t-u-v-u$w-|-x-y-8$z-|-+$6*A-B-1=D*C-D-+-:*@*}*1*a*w*a%E-#-F-Y&w*>&u*<*1*G-N&7-H-I-J-K-L-M--&c=N-O-P-Q-f*/#k%R-j-S-4-T-U-V-",
-"W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;3-%-u*w*';);!;~;C$-&{;];#-^;/;t%t%X&u%(;_;:;<;[;};H%0%u&w*:*|;N#1;;%U*l%2;{-3;4;c=5;6;7;8;",
-"k%9;0;a;b;c;%=d;e;f;g;h;i;j;$=k;l;m;n;,;o;}*.*p;q;r;s;t;u;v;w;-&U#-&v*w*>&3*x;y;z;u&A;B;x%0%}&.*B=k-C@0$C;`$D;9$E;F;<#G;H;I;J;K;",
-"L;M;N;O;&=o+P;Q;Y=R;S;T;U;V;W;X;Y;Z;`; >.>>&3*+>@>#>$>%>&>*>=>->;>>>y;,>'>)>!>~>{>]>^>/>v%,&(>_>'>:><>{-A*[>}>|>1>2>3>4>5>6>7>8>",
-"9>0>a>b>c>d>e>f>s=E;g>o$h>i>j>k>l>m>n>o>1$v##*p>!>q>r>s>w%t*t>/*u>v>w>x>x>y>z>w>A>B>C>D>L&[*E>F>G>H>)%I>A*P;J>K><#X=L>M>N>O>P>Q>",
-"~@R>S>T>U>V>W>X>Y>Z>`> ,q$.,c>+,@,#,$,%,&,@*@**,=,-,;,>,)&,,',),!,~>~,{,],^,/,(,_,:,<,t>[,9&},E>)>|,p%1, %2,3,4,5,6,F;7,8,9,0,a,",
-"b,c,d,e,{=`@f,g,h,i,j,k,p%l,9 m,$$$$n,o,&,p,4=q,$>r,[*v&G&s,&,=,t,u,v,v>w,x,z>y,t*z,A,B,D&)*C,D,m@E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,",
-"T,U,V,W,X,Y,Z,`, '.'+'@'#'$'T=O&q@%'&'*'='-';'-'>','%*7*'')'t&U=!'~'{']'^'/'A=%*('_'A,:'<'['r>5=}'|'1'2'3'4'5'6'7'8'9'T>0'a'b'v*",
-"c'd'e'v;f'j#g'`.h'#'i'j'k'l'm'z*P&#,n'o'p','q'F@^'r'+*L&s't'u'v'w'x'y'z'='A'B'1&C'G#j*)*D'E'F'G'H'I'J'i,K'L'M'N'O'P'Q't%;&R'S'T'",
-"U'V'W'X'Y'Z'`' ).)+)@)#)#)$)>;%)5&4&d$7=)&,&2&L&u&$*.*&)*)=)-)};;)L*>),)')4=n,5=))},!)~){)])^)/)()_):)<)[)})|)1)2)3)K$j&k&4)5)6)",
-"7)8)9)u%0)a)b)c)d)e)f)/=H=g)X&h)s&i)u&2&j)2&7=3&t&t*/'&)k)l)m)9&n)o)')p)p)q)r)G&5=!)},'=s)t)u)v)w)x)y)z)A)T%3)B)C)D)u#E)c$F)G)H)",
-"I)J)K)L),-M)N)O)P)Q)R)S)T)U)V)W)J&L&%*1&%*X)%*9&j)Y)Z)`) !a&.!+!E>@!v&Q%#!$!%!d$^'q,q,&!*!=!r'v&$,I&+*-!;!$'>!U>,!k-'!)!9 !!~!{!",
-"]!^!/!n&(!_!:!<![!}!|!S).&1!2!3!J&9&7*9&7*u&$*v*&)&)4!5!6!6!7!i)!)8!j)[*$!$!F@j)#*M-4=z=;)r,t&9&7*9&}*l&9!l-0!a!b!0$c!l,9 d!2'e!",
-"f!g!h!5;W@i!j!k!l!m!n!o!p!q!r!s!s,y*t!u!v!x*w!x!y!z!|*A!t!|$B!C!D!E!G&F!)>-'G!H!I!J!K!L!M!N!O!P!E>J&1*/;Q!R!S!T!U!#+V!H,W!X!Y!Z!",
-"`! ~.~+~@~#~$~%~&~*~=~-~;~>~,~'~)~!~<;<;~~{~]~^~/~(~h)N&<;B=s*X)K&_~:~<~[~}~|~1~2~3~4~a*5~6~7~8~9~0~a~b~c~d~e~f~g~h~i~g-j~k~l~m~",
-"n~o~p~q~a$r~s~t~u~v~w~x~y~z~A~B~C~D~H&;'E~+,]~F~G~H~4*h)u*u*Y&3*s*I~J~K~L~M~N~O~P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{$-@{Q'#{${%{&{*{={",
-"-{;{>{3=,{4$'{){!{~{{{]{^{/{({_{:{<{[{}{|{1{2{3{4{5{H 6{7{8{9{0{a{b{c{d{e{f{g{>;h{i{j{k{b>l{m{n{o{p{q{r{s{t{u{v{w{p%x{y{{=z{A{B{",
-"C{D{E{F{G{H{I{J{K{L{M{D@N{O{P{Q{R{S{T{U{V{W{X{Y{Z{`{ ].]+]@]#]$]%]&] !*]=]-];]>],]'])]!]~]{]]]-,^]/](]_]:]<][]}]|]1]y{5,.%2]3]4]",
-"5]6]7]@-8]9]0]a]X*b]V#c]d]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]6*z]A]B]C]D]E]F]G]H]I]J]K]L]M]N]O]P]Q]R]S]T]U]V]W]X]Y]Z]`] ^",
-".^+^@^#^$^%^&^*^=^c]-^;^>^,^'^)^!^~^{^]^^^/^(^_^:^<^[^}^|^1^2^3^4^5^6^7^8^9^0^a^b^c^d^e^f^g^h^r'i^j^k^l^m^2*n^o^p^q^r^s^t^u^v^w^",
-"x^y^z^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^`^ /./+/@/#/$/%/&/*/=/-/;/>/N%,/'/0^E-)/!/~/{/]/^///(/_/:/</[/t^}/|/1/",
-"2/2/3/4/5/6/7/8/9/0/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/f&u/v/w/x/y/z/A/B/|)C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/1-t=U/V/W/X/",
-"Y/Y/Z/`/x$|- (.(+(@(q^y=s^#($(%(K-&(=&s%*(B-=(-(;(>(}#,=,('()(O'!(3)c~~({(](^(/(((_(:(<([(}(|(1(2(3(4(g%n$5(6(7(`;0$.$8(9(0(a(b(",
-"c(d(e(s*f(g(h(i(j(k(Z=l(r=m(n(o(q,p(q(P$r(s(i&t(u(v(w(x(y(z(A(.%K>c!B(+%j&+&C(D(E(X,F(G(<(H(I(J(K(X>2(1,g'L(M(N(O(8$9$P(Q(R(S(T(",
-"7]U(V(]*W(X(Y(Z(C*`( _B(._+_@_#_$_j~%_&_*_C)U%<*K$j~=_-_;_>_,_|,'_)_e&!_~_P.{_]_{$X,.%l-}#^_/_@'l-l-(_S*)(J'__:_<_2>X=Y,[_}_|_+(",
-"1_2_3_4_5_6_7_V/8_9_0_a_b_c_d_e_f_g_h_i_j_k_l_.>m_n_o_p_m_2',_q_O$r_s_t_u_v_w_U+9(x_Q(y_z_A_B_y)z)P'C_+&D_9_E_F_G_H_I_J_K_L_M_N_",
-"O_P_Q_R_S_T_U_V_W_X_Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:>:,:':):!:e(~:{:]:^:/:(:_:::<:[:}:|:1:2:3:4:5:6:7:8:9:0:a:b:c:d:e:f:g:h:i:j:k:",
-"l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:`:|: <.<+<@<#<$<%<&<*<=<-<;<><,<Y+'<)<!<~<{<]<",
-"^</<(<_<:<<<[<}<|<1<2<3<4<5<6<7<8<9<0<a<b<c<d<e<f<g<3^h<i<j<k<l<m<n<R:o<p<q<r<s<t<u<v<w<x<y<z<A<B<C<D<E<F<G<H<I<J<K<L<M<N<M<O<P<"};
+/* XPM */
+static char * d20_xpm[] = {
+"64 64 2381 2",
+"  	c None",
+". 	c #8E8481",
+"+ 	c #6B615A",
+"@ 	c #6D635B",
+"# 	c #6B615D",
+"$ 	c #4E4443",
+"% 	c #514641",
+"& 	c #564B46",
+"* 	c #615954",
+"= 	c #6A6763",
+"- 	c #474344",
+"; 	c #5D5857",
+"> 	c #676163",
+", 	c #7E777B",
+"' 	c #746B67",
+") 	c #665C5A",
+"! 	c #605858",
+"~ 	c #655E61",
+"{ 	c #585155",
+"] 	c #4A4143",
+"^ 	c #373232",
+"/ 	c #6A6564",
+"( 	c #787272",
+"_ 	c #7F7979",
+": 	c #796E6D",
+"< 	c #807373",
+"[ 	c #7F7A78",
+"} 	c #7E7978",
+"| 	c #6F6668",
+"1 	c #645C61",
+"2 	c #6B6466",
+"3 	c #494446",
+"4 	c #27262D",
+"5 	c #626169",
+"6 	c #625E63",
+"7 	c #6E696D",
+"8 	c #7A7679",
+"9 	c #5B595A",
+"0 	c #2B2A2A",
+"a 	c #151212",
+"b 	c #615C5A",
+"c 	c #726968",
+"d 	c #6C6565",
+"e 	c #5C5555",
+"f 	c #675E5D",
+"g 	c #7C7474",
+"h 	c #716D6E",
+"i 	c #6D6B70",
+"j 	c #817877",
+"k 	c #817D80",
+"l 	c #807D7D",
+"m 	c #78726B",
+"n 	c #7A7871",
+"o 	c #6C6B65",
+"p 	c #777773",
+"q 	c #605E5D",
+"r 	c #453D37",
+"s 	c #7E746A",
+"t 	c #766C67",
+"u 	c #766D6E",
+"v 	c #7A7779",
+"w 	c #706767",
+"x 	c #919296",
+"y 	c #87838B",
+"z 	c #7D7A82",
+"A 	c #746C68",
+"B 	c #7B736D",
+"C 	c #665D58",
+"D 	c #4B413F",
+"E 	c #5B5350",
+"F 	c #4E4643",
+"G 	c #352F2C",
+"H 	c #393534",
+"I 	c #3B3836",
+"J 	c #3F3B37",
+"K 	c #4A4541",
+"L 	c #5F5954",
+"M 	c #6A615D",
+"N 	c #645C53",
+"O 	c #6F675B",
+"P 	c #655C55",
+"Q 	c #534948",
+"R 	c #695E59",
+"S 	c #6A6160",
+"T 	c #4C4644",
+"U 	c #5A5551",
+"V 	c #5B5652",
+"W 	c #544845",
+"X 	c #4E413E",
+"Y 	c #3B3633",
+"Z 	c #483F3F",
+"` 	c #554A46",
+" .	c #605657",
+"..	c #635959",
+"+.	c #6D6564",
+"@.	c #766F72",
+"#.	c #5D585C",
+"$.	c #4E494D",
+"%.	c #494547",
+"&.	c #494342",
+"*.	c #595453",
+"=.	c #7B7674",
+"-.	c #6B6566",
+";.	c #645A61",
+">.	c #584E4F",
+",.	c #695F61",
+"'.	c #685E5D",
+").	c #756D6C",
+"!.	c #706C6D",
+"~.	c #585758",
+"{.	c #6F6763",
+"].	c #716E6C",
+"^.	c #6F6D69",
+"/.	c #746E65",
+"(.	c #534E49",
+"_.	c #2F2B28",
+":.	c #6D6863",
+"<.	c #6D665D",
+"[.	c #6B6258",
+"}.	c #716A5E",
+"|.	c #665E57",
+"1.	c #6A6363",
+"2.	c #7E787F",
+"3.	c #7E7875",
+"4.	c #838786",
+"5.	c #8C898E",
+"6.	c #88858A",
+"7.	c #7C7373",
+"8.	c #867C7A",
+"9.	c #86807F",
+"0.	c #7E7973",
+"a.	c #777070",
+"b.	c #686161",
+"c.	c #5C5657",
+"d.	c #666263",
+"e.	c #565250",
+"f.	c #6C6762",
+"g.	c #747067",
+"h.	c #736F65",
+"i.	c #6D6660",
+"j.	c #7C766B",
+"k.	c #676055",
+"l.	c #6E675D",
+"m.	c #787066",
+"n.	c #837872",
+"o.	c #7E7573",
+"p.	c #5A5250",
+"q.	c #7C7571",
+"r.	c #837C79",
+"s.	c #7F746F",
+"t.	c #625751",
+"u.	c #726966",
+"v.	c #776B68",
+"w.	c #8E8276",
+"x.	c #817770",
+"y.	c #726865",
+"z.	c #7B716F",
+"A.	c #6C625E",
+"B.	c #7A706C",
+"C.	c #88817C",
+"D.	c #8D8882",
+"E.	c #76706B",
+"F.	c #88807C",
+"G.	c #675F5A",
+"H.	c #6D6762",
+"I.	c #6C6564",
+"J.	c #7C7276",
+"K.	c #675C5F",
+"L.	c #726769",
+"M.	c #7D7374",
+"N.	c #807779",
+"O.	c #7E787A",
+"P.	c #5B5959",
+"Q.	c #625C59",
+"R.	c #5C5855",
+"S.	c #5A5751",
+"T.	c #615D53",
+"U.	c #7F7B73",
+"V.	c #625F57",
+"W.	c #68635C",
+"X.	c #6E6462",
+"Y.	c #756C6B",
+"Z.	c #7A7573",
+"`.	c #7C7778",
+" +	c #7C767B",
+".+	c #736C70",
+"++	c #757273",
+"@+	c #636766",
+"#+	c #696A6C",
+"$+	c #646165",
+"%+	c #726860",
+"&+	c #6E605A",
+"*+	c #847D7B",
+"=+	c #1E1E1B",
+"-+	c #0B0A0B",
+";+	c #0E0D0D",
+">+	c #0C0B0B",
+",+	c #0D0C0C",
+"'+	c #0C0B0C",
+")+	c #0F0D0D",
+"!+	c #110E0E",
+"~+	c #100D0D",
+"{+	c #080606",
+"]+	c #090606",
+"^+	c #0A0808",
+"/+	c #0E0C0C",
+"(+	c #0F0C0C",
+"_+	c #100F0D",
+":+	c #0B0A09",
+"<+	c #0B0B09",
+"[+	c #100F0E",
+"}+	c #0F0E0D",
+"|+	c #131010",
+"1+	c #141011",
+"2+	c #130E0E",
+"3+	c #100C09",
+"4+	c #0E0D09",
+"5+	c #0F0E0E",
+"6+	c #110F11",
+"7+	c #0C0908",
+"8+	c #0F0C0B",
+"9+	c #11100F",
+"0+	c #100E0E",
+"a+	c #0B0A0A",
+"b+	c #111010",
+"c+	c #090808",
+"d+	c #0E0B0B",
+"e+	c #0A0707",
+"f+	c #0A0B09",
+"g+	c #030302",
+"h+	c #100D0E",
+"i+	c #100F0F",
+"j+	c #0E0D0E",
+"k+	c #110F13",
+"l+	c #333132",
+"m+	c #78777A",
+"n+	c #73777F",
+"o+	c #747476",
+"p+	c #766E68",
+"q+	c #796E68",
+"r+	c #7C7268",
+"s+	c #121010",
+"t+	c #000000",
+"u+	c #000001",
+"v+	c #000002",
+"w+	c #24201F",
+"x+	c #706B68",
+"y+	c #7F8384",
+"z+	c #636865",
+"A+	c #796D72",
+"B+	c #655753",
+"C+	c #6E6158",
+"D+	c #211F1F",
+"E+	c #6D6663",
+"F+	c #75736F",
+"G+	c #626466",
+"H+	c #817A74",
+"I+	c #7F7471",
+"J+	c #6C605D",
+"K+	c #1B1A1B",
+"L+	c #665C5B",
+"M+	c #554F4C",
+"N+	c #414144",
+"O+	c #797270",
+"P+	c #6C6360",
+"Q+	c #605651",
+"R+	c #0D0B0B",
+"S+	c #201F20",
+"T+	c #524B4C",
+"U+	c #666060",
+"V+	c #585458",
+"W+	c #615759",
+"X+	c #605856",
+"Y+	c #625957",
+"Z+	c #0C0B0A",
+"`+	c #232324",
+" @	c #5E5D60",
+".@	c #666163",
+"+@	c #716968",
+"@@	c #827D7C",
+"#@	c #645F61",
+"$@	c #7B7476",
+"%@	c #67676D",
+"&@	c #7C7B80",
+"*@	c #7F7B7D",
+"=@	c #84817F",
+"-@	c #787174",
+";@	c #6C6364",
+">@	c #242425",
+",@	c #767780",
+"'@	c #9B9EA7",
+")@	c #858890",
+"!@	c #7D7776",
+"~@	c #877C81",
+"{@	c #877C7D",
+"]@	c #242325",
+"^@	c #82828A",
+"/@	c #8E8F95",
+"(@	c #7A7B81",
+"_@	c #706867",
+":@	c #6D6065",
+"<@	c #7B6E6F",
+"[@	c #232325",
+"}@	c #706F75",
+"|@	c #717074",
+"1@	c #858386",
+"2@	c #5F5E5A",
+"3@	c #433B39",
+"4@	c #4C403F",
+"5@	c #252528",
+"6@	c #6E6D76",
+"7@	c #7F7D84",
+"8@	c #746F71",
+"9@	c #7D7E81",
+"0@	c #4C4747",
+"a@	c #5F5552",
+"b@	c #0C0A09",
+"c@	c #797A82",
+"d@	c #8E8F98",
+"e@	c #86838E",
+"f@	c #6E6D71",
+"g@	c #494445",
+"h@	c #595150",
+"i@	c #000102",
+"j@	c #020102",
+"k@	c #242321",
+"l@	c #43423D",
+"m@	c #3E3E3B",
+"n@	c #1C1D1D",
+"o@	c #020204",
+"p@	c #010102",
+"q@	c #272729",
+"r@	c #89878C",
+"s@	c #8B8A8C",
+"t@	c #8E8B90",
+"u@	c #636164",
+"v@	c #393334",
+"w@	c #423B3B",
+"x@	c #060304",
+"y@	c #0B0B0A",
+"z@	c #3F3D38",
+"A@	c #918C80",
+"B@	c #929086",
+"C@	c #767576",
+"D@	c #707070",
+"E@	c #626260",
+"F@	c #3B3B3A",
+"G@	c #0B0B0B",
+"H@	c #262628",
+"I@	c #817D86",
+"J@	c #928D91",
+"K@	c #8F8B86",
+"L@	c #5A575A",
+"M@	c #696464",
+"N@	c #827C7C",
+"O@	c #010101",
+"P@	c #22221F",
+"Q@	c #565753",
+"R@	c #80817C",
+"S@	c #7C7D7D",
+"T@	c #777776",
+"U@	c #787471",
+"V@	c #777471",
+"W@	c #727071",
+"X@	c #737277",
+"Y@	c #717177",
+"Z@	c #6F6F74",
+"`@	c #636363",
+" #	c #4E4E4E",
+".#	c #252525",
+"+#	c #030303",
+"@#	c #29282A",
+"##	c #7F7C82",
+"$#	c #8B8788",
+"%#	c #928E8F",
+"&#	c #302B2B",
+"*#	c #84817D",
+"=#	c #817C78",
+"-#	c #090908",
+";#	c #3E3D3A",
+">#	c #7A7973",
+",#	c #868680",
+"'#	c #808080",
+")#	c #7A7A7E",
+"!#	c #797781",
+"~#	c #737279",
+"{#	c #79777B",
+"]#	c #7B7779",
+"^#	c #807B7D",
+"/#	c #77777A",
+"(#	c #77787C",
+"_#	c #75767B",
+":#	c #78787A",
+"<#	c #787877",
+"[#	c #747372",
+"}#	c #5D5B5C",
+"|#	c #312F30",
+"1#	c #0A0A0A",
+"2#	c #242323",
+"3#	c #777175",
+"4#	c #8E8787",
+"5#	c #868285",
+"6#	c #3A383A",
+"7#	c #7B716E",
+"8#	c #776B67",
+"9#	c #0A0908",
+"0#	c #1E1E1C",
+"a#	c #50504D",
+"b#	c #838480",
+"c#	c #93928E",
+"d#	c #888683",
+"e#	c #767577",
+"f#	c #706F76",
+"g#	c #787681",
+"h#	c #7E7D82",
+"i#	c #7F7F80",
+"j#	c #636361",
+"k#	c #535350",
+"l#	c #6B6A68",
+"m#	c #6C6B6B",
+"n#	c #777678",
+"o#	c #7E7D7F",
+"p#	c #807F82",
+"q#	c #828281",
+"r#	c #797877",
+"s#	c #716F70",
+"t#	c #767475",
+"u#	c #6C6C6C",
+"v#	c #4A4A4A",
+"w#	c #181818",
+"x#	c #020202",
+"y#	c #161515",
+"z#	c #625A5A",
+"A#	c #797676",
+"B#	c #797472",
+"C#	c #756A66",
+"D#	c #807571",
+"E#	c #010000",
+"F#	c #070606",
+"G#	c #31302F",
+"H#	c #656564",
+"I#	c #8A8A87",
+"J#	c #8A8B86",
+"K#	c #878884",
+"L#	c #777775",
+"M#	c #7D7C7D",
+"N#	c #7D7C7F",
+"O#	c #78787B",
+"P#	c #807F83",
+"Q#	c #7E7D84",
+"R#	c #4E4D52",
+"S#	c #38383A",
+"T#	c #474649",
+"U#	c #535354",
+"V#	c #575455",
+"W#	c #6D696A",
+"X#	c #8B8889",
+"Y#	c #858485",
+"Z#	c #767575",
+"`#	c #7A7979",
+" $	c #737273",
+".$	c #7E7E7E",
+"+$	c #787878",
+"@$	c #6E6E6F",
+"#$	c #636365",
+"$$	c #28282A",
+"%$	c #070707",
+"&$	c #1E1D1D",
+"*$	c #686164",
+"=$	c #46464B",
+"-$	c #787377",
+";$	c #79706F",
+">$	c #756A63",
+",$	c #766B64",
+"'$	c #090806",
+")$	c #010001",
+"!$	c #2B292A",
+"~$	c #6C6A6B",
+"{$	c #72716F",
+"]$	c #7E7D7B",
+"^$	c #7D7D7C",
+"/$	c #737372",
+"($	c #6F6F71",
+"_$	c #808082",
+":$	c #868688",
+"<$	c #767678",
+"[$	c #7C7C7F",
+"}$	c #1E1E21",
+"|$	c #2C2C2D",
+"1$	c #434342",
+"2$	c #3E3B3A",
+"3$	c #625E5E",
+"4$	c #7A7777",
+"5$	c #7F7D7E",
+"6$	c #737172",
+"7$	c #7A797A",
+"8$	c #7F7F7F",
+"9$	c #7C7C7C",
+"0$	c #797979",
+"a$	c #717171",
+"b$	c #646465",
+"c$	c #616161",
+"d$	c #2C2C2C",
+"e$	c #212021",
+"f$	c #555053",
+"g$	c #737073",
+"h$	c #757074",
+"i$	c #6E6564",
+"j$	c #6A5F58",
+"k$	c #756B64",
+"l$	c #080706",
+"m$	c #050404",
+"n$	c #666465",
+"o$	c #656364",
+"p$	c #747371",
+"q$	c #6A6967",
+"r$	c #6B6B6B",
+"s$	c #646467",
+"t$	c #69686B",
+"u$	c #727274",
+"v$	c #777779",
+"w$	c #838483",
+"x$	c #7A7A7A",
+"y$	c #74737A",
+"z$	c #73727A",
+"A$	c #78777C",
+"B$	c #555558",
+"C$	c #444446",
+"D$	c #474746",
+"E$	c #666360",
+"F$	c #86837F",
+"G$	c #7F7C79",
+"H$	c #706E6F",
+"I$	c #6B696A",
+"J$	c #797879",
+"K$	c #676767",
+"L$	c #60615F",
+"M$	c #5F5F5D",
+"N$	c #5E5F5C",
+"O$	c #5B5B5B",
+"P$	c #666666",
+"Q$	c #111111",
+"R$	c #222222",
+"S$	c #5E5B5D",
+"T$	c #73696E",
+"U$	c #726B70",
+"V$	c #776C6C",
+"W$	c #746761",
+"X$	c #695E5E",
+"Y$	c #040404",
+"Z$	c #060606",
+"`$	c #6F6F6F",
+" %	c #5F5F5F",
+".%	c #666664",
+"+%	c #626261",
+"@%	c #626264",
+"#%	c #69696B",
+"$%	c #717173",
+"%%	c #7B7B7D",
+"&%	c #777778",
+"*%	c #747378",
+"=%	c #6C6B72",
+"-%	c #807F86",
+";%	c #6D6C71",
+">%	c #737373",
+",%	c #848381",
+"'%	c #7C7B79",
+")%	c #7F7E7C",
+"!%	c #6A696B",
+"~%	c #6E6E70",
+"{%	c #575757",
+"]%	c #595958",
+"^%	c #565656",
+"/%	c #626262",
+"(%	c #202020",
+"_%	c #050505",
+":%	c #252223",
+"<%	c #423F41",
+"[%	c #797478",
+"}%	c #80777C",
+"|%	c #7D7477",
+"1%	c #5C524E",
+"2%	c #6B6262",
+"3%	c #030202",
+"4%	c #000100",
+"5%	c #090909",
+"6%	c #0D0D0D",
+"7%	c #0F0F0F",
+"8%	c #121212",
+"9%	c #151515",
+"0%	c #1B1B1B",
+"a%	c #585858",
+"b%	c #525051",
+"c%	c #61615F",
+"d%	c #5D5D5C",
+"e%	c #5A5A5D",
+"f%	c #5C5C5E",
+"g%	c #5E5E60",
+"h%	c #69696A",
+"i%	c #6B6B6C",
+"j%	c #6C6C70",
+"k%	c #747477",
+"l%	c #7D7D7D",
+"m%	c #757573",
+"n%	c #81807E",
+"o%	c #757472",
+"p%	c #747273",
+"q%	c #757374",
+"r%	c #646365",
+"s%	c #595959",
+"t%	c #545454",
+"u%	c #535353",
+"v%	c #282828",
+"w%	c #1A1A1A",
+"x%	c #161616",
+"y%	c #272425",
+"z%	c #5C5659",
+"A%	c #736D72",
+"B%	c #8E898D",
+"C%	c #6A6468",
+"D%	c #544B4B",
+"E%	c #080908",
+"F%	c #0C0D0D",
+"G%	c #141414",
+"H%	c #1D1D1D",
+"I%	c #212121",
+"J%	c #1F1F20",
+"K%	c #202021",
+"L%	c #212122",
+"M%	c #5D5D5E",
+"N%	c #505051",
+"O%	c #4E4D4D",
+"P%	c #414041",
+"Q%	c #353534",
+"R%	c #4B4B4D",
+"S%	c #515154",
+"T%	c #555557",
+"U%	c #5B5B5D",
+"V%	c #575758",
+"W%	c #68686B",
+"X%	c #67676B",
+"Y%	c #6C6C6E",
+"Z%	c #767677",
+"`%	c #7C7C7D",
+" &	c #6A6A69",
+".&	c #6F6E6D",
+"+&	c #626160",
+"@&	c #646263",
+"#&	c #646363",
+"$&	c #5B5B5C",
+"%&	c #575759",
+"&&	c #545456",
+"*&	c #4F4F50",
+"=&	c #494949",
+"-&	c #4C4C4D",
+";&	c #4D4D4E",
+">&	c #4D4D4D",
+",&	c #262626",
+"'&	c #232323",
+")&	c #1F1F1F",
+"!&	c #191919",
+"~&	c #080808",
+"{&	c #1A1819",
+"]&	c #716967",
+"^&	c #827D79",
+"/&	c #82817F",
+"(&	c #787477",
+"_&	c #494341",
+":&	c #4B4542",
+"<&	c #1D1A19",
+"[&	c #1B1B19",
+"}&	c #242424",
+"|&	c #2E2E2E",
+"1&	c #303030",
+"2&	c #2F2F2F",
+"3&	c #2D2D2D",
+"4&	c #2F2F31",
+"5&	c #303032",
+"6&	c #2C2C2E",
+"7&	c #5D5D5F",
+"8&	c #4F4F51",
+"9&	c #383838",
+"0&	c #0C0C0D",
+"a&	c #323234",
+"b&	c #4A4A4C",
+"c&	c #49494B",
+"d&	c #515153",
+"e&	c #565658",
+"f&	c #59595B",
+"g&	c #5C5B60",
+"h&	c #5A595E",
+"i&	c #616065",
+"j&	c #5E5E5E",
+"k&	c #5A5A5A",
+"l&	c #525253",
+"m&	c #4C4C4E",
+"n&	c #4E4E50",
+"o&	c #474749",
+"p&	c #434345",
+"q&	c #424244",
+"r&	c #4D4D4F",
+"s&	c #363638",
+"t&	c #353535",
+"u&	c #373737",
+"v&	c #333333",
+"w&	c #272727",
+"x&	c #1B1A1A",
+"y&	c #171717",
+"z&	c #665E5D",
+"A&	c #7B7675",
+"B&	c #767478",
+"C&	c #65615F",
+"D&	c #343331",
+"E&	c #454341",
+"F&	c #272423",
+"G&	c #2A2A28",
+"H&	c #313130",
+"I&	c #343434",
+"J&	c #3B3B3B",
+"K&	c #3D3D3D",
+"L&	c #363636",
+"M&	c #373738",
+"N&	c #3E3E40",
+"O&	c #3F3F41",
+"P&	c #343436",
+"Q&	c #1C1C1C",
+"R&	c #1B1B1C",
+"S&	c #525254",
+"T&	c #505052",
+"U&	c #535257",
+"V&	c #545358",
+"W&	c #525155",
+"X&	c #515151",
+"Y&	c #4F4F4F",
+"Z&	c #525252",
+"`&	c #464648",
+" *	c #3A3A3B",
+".*	c #434343",
+"+*	c #444444",
+"@*	c #424242",
+"#*	c #414141",
+"$*	c #3F3F3F",
+"%*	c #393939",
+"&*	c #2A2929",
+"**	c #373637",
+"=*	c #6F656A",
+"-*	c #8A8489",
+";*	c #726F72",
+">*	c #5B564E",
+",*	c #1D1A15",
+"'*	c #272624",
+")*	c #302F2D",
+"!*	c #444442",
+"~*	c #3D3C3F",
+"{*	c #444245",
+"]*	c #454443",
+"^*	c #484646",
+"/*	c #484647",
+"(*	c #4C4B4C",
+"_*	c #535355",
+":*	c #484849",
+"<*	c #555555",
+"[*	c #313131",
+"}*	c #484848",
+"|*	c #474748",
+"1*	c #4A4A4B",
+"2*	c #4B4B4C",
+"3*	c #4B4B4B",
+"4*	c #454547",
+"5*	c #414143",
+"6*	c #464647",
+"7*	c #3A3A3A",
+"8*	c #48484A",
+"9*	c #515152",
+"0*	c #49494A",
+"a*	c #444445",
+"b*	c #3C3B3D",
+"c*	c #444242",
+"d*	c #756F71",
+"e*	c #888489",
+"f*	c #7D7D80",
+"g*	c #4B443C",
+"h*	c #39312B",
+"i*	c #171617",
+"j*	c #32312F",
+"k*	c #454442",
+"l*	c #494946",
+"m*	c #4D4C4E",
+"n*	c #595758",
+"o*	c #515051",
+"p*	c #535152",
+"q*	c #5A5859",
+"r*	c #5E5D5E",
+"s*	c #464646",
+"t*	c #3C3C3C",
+"u*	c #505050",
+"v*	c #474747",
+"w*	c #4C4C4C",
+"x*	c #404042",
+"y*	c #3C3C3E",
+"z*	c #444447",
+"A*	c #656565",
+"B*	c #676768",
+"C*	c #58585A",
+"D*	c #4A494C",
+"E*	c #514E4E",
+"F*	c #8C8585",
+"G*	c #837D7F",
+"H*	c #797777",
+"I*	c #554E48",
+"J*	c #251D19",
+"K*	c #282525",
+"L*	c #3C3A39",
+"M*	c #61615E",
+"N*	c #5D5C5D",
+"O*	c #656465",
+"P*	c #5E5D5C",
+"Q*	c #545357",
+"R*	c #656365",
+"S*	c #686767",
+"T*	c #747376",
+"U*	c #69696C",
+"V*	c #515053",
+"W*	c #616062",
+"X*	c #4E4D4F",
+"Y*	c #494948",
+"Z*	c #1C1C1B",
+"`*	c #20201F",
+" =	c #1E1E1E",
+".=	c #424243",
+"+=	c #414142",
+"@=	c #424145",
+"#=	c #424246",
+"$=	c #6F6F70",
+"%=	c #666667",
+"&=	c #666668",
+"*=	c #6A6A6B",
+"==	c #595756",
+"-=	c #7F7676",
+";=	c #7C7677",
+">=	c #76706F",
+",=	c #555354",
+"'=	c #464542",
+")=	c #343130",
+"!=	c #474444",
+"~=	c #5F5F5B",
+"{=	c #636260",
+"]=	c #79787A",
+"^=	c #777774",
+"/=	c #777777",
+"(=	c #757473",
+"_=	c #807F7E",
+":=	c #747275",
+"<=	c #69676A",
+"[=	c #565458",
+"}=	c #565459",
+"|=	c #4F4D51",
+"1=	c #4A4A49",
+"2=	c #4C4C4A",
+"3=	c #4F4F4D",
+"4=	c #464644",
+"5=	c #333331",
+"6=	c #31312F",
+"7=	c #292929",
+"8=	c #3F403F",
+"9=	c #444548",
+"0=	c #3F4044",
+"a=	c #706F74",
+"b=	c #747475",
+"c=	c #6A6A6C",
+"d=	c #848482",
+"e=	c #6B6B6D",
+"f=	c #61605F",
+"g=	c #736A6B",
+"h=	c #756F73",
+"i=	c #7B7372",
+"j=	c #8E8C91",
+"k=	c #413E3F",
+"l=	c #494746",
+"m=	c #646560",
+"n=	c #636163",
+"o=	c #71706F",
+"p=	c #80807F",
+"q=	c #7B7C79",
+"r=	c #7B7B78",
+"s=	c #7D7C7A",
+"t=	c #767573",
+"u=	c #7D7B7A",
+"v=	c #4D4B4B",
+"w=	c #444244",
+"x=	c #5C5A5C",
+"y=	c #585856",
+"z=	c #3C3C3A",
+"A=	c #3B3B39",
+"B=	c #454545",
+"C=	c #3D3F3E",
+"D=	c #4B4C4E",
+"E=	c #454549",
+"F=	c #5F5E63",
+"G=	c #6F6E73",
+"H=	c #767676",
+"I=	c #7A7A7B",
+"J=	c #737375",
+"K=	c #818181",
+"L=	c #7C7C7A",
+"M=	c #838281",
+"N=	c #6E6D6F",
+"O=	c #736C6E",
+"P=	c #736A67",
+"Q=	c #77716D",
+"R=	c #8E8C90",
+"S=	c #8C898F",
+"T=	c #4F4D50",
+"U=	c #484745",
+"V=	c #6B6C68",
+"W=	c #6C6C6D",
+"X=	c #747474",
+"Y=	c #7E7E7C",
+"Z=	c #757574",
+"`=	c #4E4D4E",
+" -	c #4A494B",
+".-	c #4F4E50",
+"+-	c #51514F",
+"@-	c #535352",
+"#-	c #555553",
+"$-	c #535351",
+"%-	c #515150",
+"&-	c #1D1E1F",
+"*-	c #2C2D2E",
+"=-	c #434144",
+"--	c #39383C",
+";-	c #3E3E42",
+">-	c #49484D",
+",-	c #676769",
+"'-	c #787979",
+")-	c #787A79",
+"!-	c #7B7D7C",
+"~-	c #797A78",
+"{-	c #797978",
+"]-	c #7C7B7C",
+"^-	c #6C6C6B",
+"/-	c #5E5754",
+"(-	c #413A36",
+"_-	c #6B6661",
+":-	c #918F92",
+"<-	c #86848A",
+"[-	c #38363B",
+"}-	c #757576",
+"|-	c #878787",
+"1-	c #838383",
+"2-	c #4F4F52",
+"3-	c #545452",
+"4-	c #565655",
+"5-	c #595957",
+"6-	c #2D2D2F",
+"7-	c #303133",
+"8-	c #2D2E30",
+"9-	c #434245",
+"0-	c #413F43",
+"a-	c #39393A",
+"b-	c #4A4B48",
+"c-	c #4B4B48",
+"d-	c #454546",
+"e-	c #535356",
+"f-	c #7A7B7B",
+"g-	c #717372",
+"h-	c #7A7C7B",
+"i-	c #6D6E6F",
+"j-	c #707173",
+"k-	c #6D6D6E",
+"l-	c #666565",
+"m-	c #686766",
+"n-	c #665E58",
+"o-	c #706862",
+"p-	c #716A63",
+"q-	c #9A989B",
+"r-	c #7F7C83",
+"s-	c #5D5B62",
+"t-	c #404144",
+"u-	c #616165",
+"v-	c #757578",
+"w-	c #757577",
+"x-	c #8D8D8D",
+"y-	c #8B8B8B",
+"z-	c #848484",
+"A-	c #3D3D40",
+"B-	c #565657",
+"C-	c #525350",
+"D-	c #525250",
+"E-	c #5B5B5A",
+"F-	c #535451",
+"G-	c #3A3B3C",
+"H-	c #3E3D40",
+"I-	c #3F3E40",
+"J-	c #3F3F3E",
+"K-	c #4E4E4A",
+"L-	c #51514D",
+"M-	c #474745",
+"N-	c #7D7D7E",
+"O-	c #7B7C7D",
+"P-	c #6F7071",
+"Q-	c #737475",
+"R-	c #6A6A6E",
+"S-	c #6F6E6F",
+"T-	c #5A514A",
+"U-	c #776D64",
+"V-	c #736A62",
+"W-	c #928E91",
+"X-	c #87878C",
+"Y-	c #939296",
+"Z-	c #3E4046",
+"`-	c #5F5E65",
+" ;	c #6B686E",
+".;	c #69686D",
+"+;	c #6D6E70",
+"@;	c #868583",
+"#;	c #92918F",
+"$;	c #939391",
+"%;	c #888886",
+"&;	c #92928F",
+"*;	c #858583",
+"=;	c #838384",
+"-;	c #49484B",
+";;	c #424148",
+">;	c #4C4C4F",
+",;	c #575755",
+"';	c #4D4E4D",
+");	c #4D4E4B",
+"!;	c #52524E",
+"~;	c #4D4D4C",
+"{;	c #4B4849",
+"];	c #504D4D",
+"^;	c #545553",
+"/;	c #50504F",
+"(;	c #4B4C4B",
+"_;	c #424443",
+":;	c #404241",
+"<;	c #3D3D3E",
+"[;	c #363639",
+"};	c #3A393C",
+"|;	c #6A6A6D",
+"1;	c #78777B",
+"2;	c #868686",
+"3;	c #7D7D7B",
+"4;	c #7C7B7A",
+"5;	c #4C4C4B",
+"6;	c #4C433F",
+"7;	c #766D64",
+"8;	c #7A7571",
+"9;	c #95989E",
+"0;	c #89878A",
+"a;	c #4E4B50",
+"b;	c #5D5D60",
+"c;	c #6F7172",
+"d;	c #757474",
+"e;	c #858482",
+"f;	c #898886",
+"g;	c #8C8C8A",
+"h;	c #828280",
+"i;	c #898986",
+"j;	c #8D8D8B",
+"k;	c #464549",
+"l;	c #43414B",
+"m;	c #4C4B50",
+"n;	c #555554",
+"o;	c #525251",
+"p;	c #4B4B49",
+"q;	c #575853",
+"r;	c #575850",
+"s;	c #52534C",
+"t;	c #4A4A46",
+"u;	c #474A49",
+"v;	c #474445",
+"w;	c #4F494C",
+"x;	c #504F4D",
+"y;	c #4A4A47",
+"z;	c #3C3C39",
+"A;	c #2E2D31",
+"B;	c #2A292C",
+"C;	c #686869",
+"D;	c #7B7B7B",
+"E;	c #81817F",
+"F;	c #7A7A78",
+"G;	c #6B6A6D",
+"H;	c #565554",
+"I;	c #62595A",
+"J;	c #67625C",
+"K;	c #74716C",
+"L;	c #8D8B93",
+"M;	c #7B7683",
+"N;	c #71686E",
+"O;	c #524F50",
+"P;	c #737272",
+"Q;	c #878684",
+"R;	c #868684",
+"S;	c #7C7C79",
+"T;	c #6A6968",
+"U;	c #706F72",
+"V;	c #6B6A6E",
+"W;	c #5E5E63",
+"X;	c #48474C",
+"Y;	c #403F44",
+"Z;	c #404041",
+"`;	c #49484A",
+" >	c #454445",
+".>	c #4C4B4B",
+"+>	c #454446",
+"@>	c #575655",
+"#>	c #5B5B58",
+"$>	c #454543",
+"%>	c #282827",
+"&>	c #3C3B3B",
+"*>	c #484748",
+"=>	c #444345",
+"->	c #3F3D41",
+";>	c #464547",
+">>	c #4E4D4B",
+",>	c #454542",
+"'>	c #4B4A48",
+")>	c #434240",
+"!>	c #4E4D4A",
+"~>	c #504F4A",
+"{>	c #484441",
+"]>	c #424141",
+"^>	c #2F2E30",
+"/>	c #2D2C2D",
+"(>	c #2A2928",
+"_>	c #424140",
+":>	c #7A7A75",
+"<>	c #84847E",
+"[>	c #807F80",
+"}>	c #807E7F",
+"|>	c #727172",
+"1>	c #7B7B7A",
+"2>	c #727271",
+"3>	c #727272",
+"4>	c #6A6C6B",
+"5>	c #60605E",
+"6>	c #767271",
+"7>	c #696560",
+"8>	c #6E6960",
+"9>	c #8C848B",
+"0>	c #7D747F",
+"a>	c #776E71",
+"b>	c #4A4949",
+"c>	c #5F5E60",
+"d>	c #656266",
+"e>	c #797878",
+"f>	c #81807D",
+"g>	c #6E6D6C",
+"h>	c #686769",
+"i>	c #656469",
+"j>	c #535258",
+"k>	c #3A3940",
+"l>	c #454449",
+"m>	c #3B3B3D",
+"n>	c #343236",
+"o>	c #3B3A3A",
+"p>	c #3F3D3E",
+"q>	c #4C4B48",
+"r>	c #1F1F1D",
+"s>	c #161614",
+"t>	c #3E3D3E",
+"u>	c #484744",
+"v>	c #4B4A46",
+"w>	c #4D4C48",
+"x>	c #4B4B47",
+"y>	c #41413D",
+"z>	c #43443F",
+"A>	c #3B3734",
+"B>	c #3E3B3C",
+"C>	c #2E2C2D",
+"D>	c #323132",
+"E>	c #3A3937",
+"F>	c #4D4C4A",
+"G>	c #474644",
+"H>	c #797875",
+"I>	c #70706F",
+"J>	c #7F7E7D",
+"K>	c #7A7978",
+"L>	c #7B7C7B",
+"M>	c #747571",
+"N>	c #676461",
+"O>	c #5D5955",
+"P>	c #77726D",
+"Q>	c #7C756F",
+"R>	c #878087",
+"S>	c #777171",
+"T>	c #4E4D4C",
+"U>	c #656466",
+"V>	c #666367",
+"W>	c #6A6868",
+"X>	c #696765",
+"Y>	c #746F6F",
+"Z>	c #787473",
+"`>	c #767477",
+" ,	c #747374",
+".,	c #656567",
+"+,	c #37373C",
+"@,	c #2D2C31",
+"#,	c #29292B",
+"$,	c #333232",
+"%,	c #4D4C49",
+"&,	c #3D3D3A",
+"*,	c #494748",
+"=,	c #51504D",
+"-,	c #41403D",
+";,	c #262624",
+">,	c #242422",
+",,	c #323231",
+"',	c #373636",
+"),	c #4B4A47",
+"!,	c #54534D",
+"~,	c #464541",
+"{,	c #4F4E4A",
+"],	c #454843",
+"^,	c #3A3C37",
+"/,	c #3D3E39",
+"(,	c #4D4D49",
+"_,	c #44403E",
+":,	c #393738",
+"<,	c #3A3839",
+"[,	c #383737",
+"},	c #383735",
+"|,	c #5E5C5D",
+"1,	c #6C6B6C",
+"2,	c #71716F",
+"3,	c #8A8984",
+"4,	c #8B8A86",
+"5,	c #767674",
+"6,	c #747373",
+"7,	c #77766F",
+"8,	c #75706B",
+"9,	c #726A65",
+"0,	c #6E6663",
+"a,	c #7B7878",
+"b,	c #7F747A",
+"c,	c #857A80",
+"d,	c #898187",
+"e,	c #4C4A4C",
+"f,	c #696768",
+"g,	c #6A6365",
+"h,	c #797273",
+"i,	c #716F6E",
+"j,	c #757373",
+"k,	c #787677",
+"l,	c #676566",
+"m,	c #3A393B",
+"n,	c #30302E",
+"o,	c #393936",
+"p,	c #3D3D3B",
+"q,	c #41413F",
+"r,	c #333332",
+"s,	c #3F3F3D",
+"t,	c #4B4B45",
+"u,	c #48483F",
+"v,	c #494942",
+"w,	c #4E4F4A",
+"x,	c #4D4E49",
+"y,	c #474844",
+"z,	c #363533",
+"A,	c #373634",
+"B,	c #3F3E3C",
+"C,	c #2C2C2A",
+"D,	c #363634",
+"E,	c #5A5955",
+"F,	c #686667",
+"G,	c #626164",
+"H,	c #6D6D6D",
+"I,	c #797976",
+"J,	c #8E8D88",
+"K,	c #8F8E89",
+"L,	c #8C8C86",
+"M,	c #7B7B74",
+"N,	c #82817A",
+"O,	c #6B6B66",
+"P,	c #646360",
+"Q,	c #6C675F",
+"R,	c #696862",
+"S,	c #6B6A6C",
+"T,	c #857A7D",
+"U,	c #61575A",
+"V,	c #6C6569",
+"W,	c #494749",
+"X,	c #6E6D6B",
+"Y,	c #6E6E6E",
+"Z,	c #7C7A7B",
+"`,	c #767071",
+" '	c #847D7D",
+".'	c #7C7A78",
+"+'	c #706F6F",
+"@'	c #6E6C6D",
+"#'	c #706E70",
+"$'	c #5D5B5F",
+"%'	c #242426",
+"&'	c #282829",
+"*'	c #2A2A2B",
+"='	c #3D3D3C",
+"-'	c #434341",
+";'	c #40403E",
+">'	c #424240",
+",'	c #363635",
+"''	c #363637",
+")'	c #2D2D2E",
+"!'	c #42423C",
+"~'	c #404039",
+"{'	c #3A3935",
+"]'	c #383636",
+"^'	c #373736",
+"/'	c #40403F",
+"('	c #2D2D30",
+"_'	c #3B3A38",
+":'	c #31302E",
+"<'	c #2E2D2B",
+"['	c #262523",
+"}'	c #454441",
+"|'	c #555451",
+"1'	c #5D5C5C",
+"2'	c #605F5F",
+"3'	c #70716D",
+"4'	c #74746E",
+"5'	c #807F7A",
+"6'	c #868580",
+"7'	c #83827E",
+"8'	c #71706D",
+"9'	c #6B6A66",
+"0'	c #484749",
+"a'	c #5B5453",
+"b'	c #5D5B5A",
+"c'	c #7E7476",
+"d'	c #6C6163",
+"e'	c #676061",
+"f'	c #5F5C5A",
+"g'	c #72706F",
+"h'	c #746F70",
+"i'	c #68676A",
+"j'	c #656467",
+"k'	c #6A686C",
+"l'	c #5D5C62",
+"m'	c #4E4C52",
+"n'	c #222123",
+"o'	c #212123",
+"p'	c #272728",
+"q'	c #393938",
+"r'	c #3C3C3B",
+"s'	c #3A3B3D",
+"t'	c #3A3A3D",
+"u'	c #323235",
+"v'	c #393839",
+"w'	c #3D3C39",
+"x'	c #3A3835",
+"y'	c #3D3A39",
+"z'	c #3D3A3A",
+"A'	c #424241",
+"B'	c #2C2C2B",
+"C'	c #343335",
+"D'	c #282726",
+"E'	c #222020",
+"F'	c #242320",
+"G'	c #3B3B38",
+"H'	c #444340",
+"I'	c #535250",
+"J'	c #6B6A69",
+"K'	c #7C7B75",
+"L'	c #7C7B73",
+"M'	c #7E7E79",
+"N'	c #767671",
+"O'	c #6D6D6B",
+"P'	c #5C5B5A",
+"Q'	c #575756",
+"R'	c #534E50",
+"S'	c #534F50",
+"T'	c #4F4D4C",
+"U'	c #655C5F",
+"V'	c #625A5D",
+"W'	c #797374",
+"X'	c #4D4A4B",
+"Y'	c #656262",
+"Z'	c #676764",
+"`'	c #716F6D",
+" )	c #7D7978",
+".)	c #7C7A7A",
+"+)	c #777579",
+"@)	c #737276",
+"#)	c #6C6B6E",
+"$)	c #5D5C60",
+"%)	c #38383B",
+"&)	c #404040",
+"*)	c #3B3C3D",
+"=)	c #37383A",
+"-)	c #2C2D30",
+";)	c #383837",
+">)	c #3C3938",
+",)	c #383634",
+"')	c #383836",
+"))	c #373735",
+"!)	c #2F2E2C",
+"~)	c #2D2C2B",
+"{)	c #302F2E",
+"])	c #363534",
+"^)	c #363531",
+"/)	c #383733",
+"()	c #40403B",
+"_)	c #51524B",
+":)	c #63645D",
+"<)	c #6B6A63",
+"[)	c #6B6A61",
+"})	c #6E6E65",
+"|)	c #60615D",
+"1)	c #5E5F5B",
+"2)	c #5F5F5E",
+"3)	c #5D5D5D",
+"4)	c #565353",
+"5)	c #4A4645",
+"6)	c #474342",
+"7)	c #393435",
+"8)	c #5B5658",
+"9)	c #757275",
+"0)	c #666568",
+"a)	c #6F6F6E",
+"b)	c #706E6C",
+"c)	c #7D7A78",
+"d)	c #7A7976",
+"e)	c #727171",
+"f)	c #818081",
+"g)	c #646464",
+"h)	c #3D3D3F",
+"i)	c #313133",
+"j)	c #323232",
+"k)	c #3F4041",
+"l)	c #404143",
+"m)	c #323335",
+"n)	c #474843",
+"o)	c #3F3F3C",
+"p)	c #393937",
+"q)	c #343432",
+"r)	c #2E2E2C",
+"s)	c #454440",
+"t)	c #44433F",
+"u)	c #403F3B",
+"v)	c #3F3E3A",
+"w)	c #3E3D39",
+"x)	c #41423E",
+"y)	c #4F4F4C",
+"z)	c #575754",
+"A)	c #545455",
+"B)	c #60605F",
+"C)	c #636362",
+"D)	c #696969",
+"E)	c #686868",
+"F)	c #4E4B4B",
+"G)	c #3B3736",
+"H)	c #3A3635",
+"I)	c #696067",
+"J)	c #4B474A",
+"K)	c #76757D",
+"L)	c #504F55",
+"M)	c #787775",
+"N)	c #797474",
+"O)	c #847F7C",
+"P)	c #808078",
+"Q)	c #898883",
+"R)	c #838381",
+"S)	c #797977",
+"T)	c #737271",
+"U)	c #5A5957",
+"V)	c #464543",
+"W)	c #464545",
+"X)	c #3E3E3E",
+"Y)	c #30312F",
+"Z)	c #393A35",
+"`)	c #3F403B",
+" !	c #3B3B3C",
+".!	c #2F3032",
+"+!	c #38393A",
+"@!	c #3F3E3D",
+"#!	c #3A3A38",
+"$!	c #323230",
+"%!	c #2B2B2A",
+"&!	c #3E3F3B",
+"*!	c #3C3D38",
+"=!	c #42433E",
+"-!	c #525256",
+";!	c #555459",
+">!	c #6F6C6B",
+",!	c #605F63",
+"'!	c #787875",
+")!	c #636262",
+"!!	c #3C3A3D",
+"~!	c #1B191A",
+"{!	c #4F4D4B",
+"]!	c #7C7984",
+"^!	c #545159",
+"/!	c #6A686B",
+"(!	c #6C6C6F",
+"_!	c #7B7A76",
+":!	c #7A7672",
+"<!	c #918C87",
+"[!	c #9A9A91",
+"}!	c #7C7B77",
+"|!	c #7F7F7C",
+"1!	c #514F50",
+"2!	c #454344",
+"3!	c #4D4C4D",
+"4!	c #323331",
+"5!	c #2F2F2D",
+"6!	c #2A2A2C",
+"7!	c #252629",
+"8!	c #333231",
+"9!	c #5F5F60",
+"0!	c #706D6C",
+"a!	c #717071",
+"b!	c #5E5D61",
+"c!	c #6E6E6B",
+"d!	c #3D3B3B",
+"e!	c #646264",
+"f!	c #7F7E88",
+"g!	c #77737C",
+"h!	c #3E3C3C",
+"i!	c #82807B",
+"j!	c #88847E",
+"k!	c #9A978F",
+"l!	c #878780",
+"m!	c #787672",
+"n!	c #6D6E6C",
+"o!	c #666365",
+"p!	c #5F5956",
+"q!	c #4E4E51",
+"r!	c #464548",
+"s!	c #434244",
+"t!	c #353536",
+"u!	c #323233",
+"v!	c #353537",
+"w!	c #434243",
+"x!	c #424344",
+"y!	c #3C3D3D",
+"z!	c #3E3E3F",
+"A!	c #3F3F40",
+"B!	c #2A2B2C",
+"C!	c #282929",
+"D!	c #2B2A29",
+"E!	c #2E2E2D",
+"F!	c #373635",
+"G!	c #3A3939",
+"H!	c #383631",
+"I!	c #2F2E2A",
+"J!	c #373839",
+"K!	c #393A3A",
+"L!	c #373433",
+"M!	c #3D3F3F",
+"N!	c #39393B",
+"O!	c #333434",
+"P!	c #3A3836",
+"Q!	c #696869",
+"R!	c #707272",
+"S!	c #636562",
+"T!	c #656060",
+"U!	c #5D5554",
+"V!	c #757672",
+"W!	c #3F3E3F",
+"X!	c #636161",
+"Y!	c #69686A",
+"Z!	c #67666D",
+"`!	c #726A68",
+" ~	c #6A6260",
+".~	c #6F6A6C",
+"+~	c #403F42",
+"@~	c #75716E",
+"#~	c #8D8986",
+"$~	c #8F8C86",
+"%~	c #94948C",
+"&~	c #898B8D",
+"*~	c #595B5C",
+"=~	c #725B40",
+"-~	c #B88F59",
+";~	c #A58852",
+">~	c #5D5544",
+",~	c #323239",
+"'~	c #3B3535",
+")~	c #353032",
+"!~	c #373835",
+"~~	c #36373C",
+"{~	c #3B3B40",
+"]~	c #4D4B4E",
+"^~	c #424247",
+"/~	c #39393E",
+"(~	c #3D3D41",
+"_~	c #3E3E3D",
+":~	c #3F4343",
+"<~	c #3E4140",
+"[~	c #37312A",
+"}~	c #453830",
+"|~	c #463D30",
+"1~	c #50423B",
+"2~	c #6C5C43",
+"3~	c #483B2B",
+"4~	c #353334",
+"5~	c #362D2F",
+"6~	c #473E2E",
+"7~	c #534835",
+"8~	c #6F5F48",
+"9~	c #796E4B",
+"0~	c #746C42",
+"a~	c #4B4744",
+"b~	c #5A5B5B",
+"c~	c #565654",
+"d~	c #524334",
+"e~	c #7F6A59",
+"f~	c #94785D",
+"g~	c #CCB685",
+"h~	c #827867",
+"i~	c #716D70",
+"j~	c #575657",
+"k~	c #6A666A",
+"l~	c #636066",
+"m~	c #6E6E76",
+"n~	c #706662",
+"o~	c #6F6561",
+"p~	c #6E6664",
+"q~	c #423F40",
+"r~	c #888482",
+"s~	c #95928C",
+"t~	c #706B5E",
+"u~	c #817158",
+"v~	c #B09A72",
+"w~	c #9F8C79",
+"x~	c #535454",
+"y~	c #7A6A4B",
+"z~	c #A3834D",
+"A~	c #3C3A33",
+"B~	c #745F48",
+"C~	c #836C42",
+"D~	c #4D433B",
+"E~	c #3C3D3F",
+"F~	c #464546",
+"G~	c #444243",
+"H~	c #424143",
+"I~	c #484845",
+"J~	c #4D5153",
+"K~	c #3F3627",
+"L~	c #6D5B4B",
+"M~	c #544932",
+"N~	c #3A3C38",
+"O~	c #2E3035",
+"P~	c #34312A",
+"Q~	c #897549",
+"R~	c #37332E",
+"S~	c #343133",
+"T~	c #696143",
+"U~	c #5E5141",
+"V~	c #5E5747",
+"W~	c #343231",
+"X~	c #3E3834",
+"Y~	c #86744E",
+"Z~	c #635947",
+"`~	c #3D3B3A",
+" {	c #695545",
+".{	c #7C7168",
+"+{	c #4A484A",
+"@{	c #63615A",
+"#{	c #6E726D",
+"${	c #707271",
+"%{	c #5A595A",
+"&{	c #5B5557",
+"*{	c #6D686C",
+"={	c #656369",
+"-{	c #857972",
+";{	c #887A7A",
+">{	c #847A78",
+",{	c #6A6B6D",
+"'{	c #6C6A64",
+"){	c #B59B6E",
+"!{	c #A59D89",
+"~{	c #B19773",
+"{{	c #4E4D47",
+"]{	c #615C5E",
+"^{	c #464844",
+"/{	c #936940",
+"({	c #443E3A",
+"_{	c #352F30",
+":{	c #725938",
+"<{	c #4A3E2A",
+"[{	c #584731",
+"}{	c #6C593B",
+"|{	c #383434",
+"1{	c #444343",
+"2{	c #36312D",
+"3{	c #3F352E",
+"4{	c #4A3D30",
+"5{	c #69543C",
+"6{	c #484949",
+"7{	c #49402E",
+"8{	c #504542",
+"9{	c #3C3C38",
+"0{	c #554938",
+"a{	c #8A7B56",
+"b{	c #4B4A41",
+"c{	c #454646",
+"d{	c #534E45",
+"e{	c #363539",
+"f{	c #8B7648",
+"g{	c #4F4A43",
+"h{	c #332A24",
+"i{	c #8B7A58",
+"j{	c #333533",
+"k{	c #3F3B3A",
+"l{	c #675E39",
+"m{	c #716E51",
+"n{	c #373B3A",
+"o{	c #3E413F",
+"p{	c #7D693D",
+"q{	c #635B4C",
+"r{	c #514531",
+"s{	c #75695B",
+"t{	c #444441",
+"u{	c #645D60",
+"v{	c #797B79",
+"w{	c #7A7B79",
+"x{	c #7C7A76",
+"y{	c #7A7A79",
+"z{	c #423C3D",
+"A{	c #474340",
+"B{	c #4F4B4D",
+"C{	c #8E8178",
+"D{	c #81736E",
+"E{	c #877D7B",
+"F{	c #535553",
+"G{	c #757779",
+"H{	c #868683",
+"I{	c #746449",
+"J{	c #B69368",
+"K{	c #585456",
+"L{	c #8A7B67",
+"M{	c #545150",
+"N{	c #494847",
+"O{	c #98774A",
+"P{	c #504C40",
+"Q{	c #323030",
+"R{	c #967B4D",
+"S{	c #494441",
+"T{	c #2F2F36",
+"U{	c #64502F",
+"V{	c #6F5C46",
+"W{	c #232624",
+"X{	c #5E4730",
+"Y{	c #53504E",
+"Z{	c #221E1A",
+"`{	c #7A5D41",
+" ]	c #393531",
+".]	c #2B2B2F",
+"+]	c #72532D",
+"@]	c #55503D",
+"#]	c #483A2E",
+"$]	c #6C6156",
+"%]	c #827349",
+"&]	c #5F5742",
+"*]	c #4A4B45",
+"=]	c #332719",
+"-]	c #958755",
+";]	c #4E4436",
+">]	c #534830",
+",]	c #6A5E4F",
+"']	c #47443D",
+")]	c #3B3C3B",
+"!]	c #464141",
+"~]	c #2B2622",
+"{]	c #857953",
+"]]	c #666356",
+"^]	c #544937",
+"/]	c #8F8261",
+"(]	c #423937",
+"_]	c #998257",
+":]	c #4C4844",
+"<]	c #57575C",
+"[]	c #584D43",
+"}]	c #605647",
+"|]	c #705742",
+"1]	c #6B6667",
+"2]	c #676062",
+"3]	c #625E5A",
+"4]	c #797575",
+"5]	c #776B63",
+"6]	c #776C62",
+"7]	c #897F7D",
+"8]	c #747577",
+"9]	c #959794",
+"0]	c #AB9E6A",
+"a]	c #B6A977",
+"b]	c #61645E",
+"c]	c #747573",
+"d]	c #484238",
+"e]	c #AD9766",
+"f]	c #4A4547",
+"g]	c #3F3E2E",
+"h]	c #8E734E",
+"i]	c #2A2B29",
+"j]	c #444046",
+"k]	c #5D4C34",
+"l]	c #725D45",
+"m]	c #3F301D",
+"n]	c #856747",
+"o]	c #373025",
+"p]	c #524433",
+"q]	c #5D544F",
+"r]	c #2A2B2E",
+"s]	c #2C261D",
+"t]	c #957E4C",
+"u]	c #67563E",
+"v]	c #5C584B",
+"w]	c #34363C",
+"x]	c #7C6E41",
+"y]	c #766C53",
+"z]	c #353430",
+"A]	c #7F6A49",
+"B]	c #9C9663",
+"C]	c #766953",
+"D]	c #9F955E",
+"E]	c #3D3E3F",
+"F]	c #424545",
+"G]	c #63655F",
+"H]	c #4F4F4B",
+"I]	c #665E4F",
+"J]	c #AFA578",
+"K]	c #73644F",
+"L]	c #706A58",
+"M]	c #767266",
+"N]	c #45443E",
+"O]	c #4A4034",
+"P]	c #A68D5D",
+"Q]	c #524F4F",
+"R]	c #4A4945",
+"S]	c #92806F",
+"T]	c #8B705F",
+"U]	c #D0A46A",
+"V]	c #615D56",
+"W]	c #80837E",
+"X]	c #787876",
+"Y]	c #6E6D6A",
+"Z]	c #6E6969",
+"`]	c #615D5A",
+" ^	c #7A7676",
+".^	c #908682",
+"+^	c #716763",
+"@^	c #6A5F5D",
+"#^	c #545151",
+"$^	c #7C7C7E",
+"%^	c #909196",
+"&^	c #96926F",
+"*^	c #DAD4A6",
+"=^	c #5E5A57",
+"-^	c #767973",
+";^	c #5E5B62",
+">^	c #736041",
+",^	c #75695C",
+"'^	c #474846",
+")^	c #5B4F39",
+"!^	c #907D5C",
+"~^	c #373A38",
+"{^	c #525459",
+"]^	c #6E563B",
+"^^	c #665C56",
+"/^	c #554331",
+"(^	c #876E4F",
+"_^	c #625B5B",
+":^	c #4E4B4C",
+"<^	c #211E1F",
+"[^	c #2E2720",
+"}^	c #44423D",
+"|^	c #745D32",
+"1^	c #87714B",
+"2^	c #454340",
+"3^	c #565357",
+"4^	c #78683D",
+"5^	c #84765B",
+"6^	c #3C3535",
+"7^	c #6C5C4C",
+"8^	c #888164",
+"9^	c #908E6D",
+"0^	c #3E3E3C",
+"a^	c #918A63",
+"b^	c #6E6045",
+"c^	c #60605D",
+"d^	c #666461",
+"e^	c #50524D",
+"f^	c #494137",
+"g^	c #B2A785",
+"h^	c #474840",
+"i^	c #3D3B40",
+"j^	c #52544F",
+"k^	c #52483E",
+"l^	c #B6A975",
+"m^	c #564D4E",
+"n^	c #5C5C5B",
+"o^	c #655740",
+"p^	c #D7BB7F",
+"q^	c #4E4E4C",
+"r^	c #878785",
+"s^	c #727270",
+"t^	c #75736E",
+"u^	c #76726D",
+"v^	c #6D6967",
+"w^	c #7C7879",
+"x^	c #8E8483",
+"y^	c #867C7B",
+"z^	c #7C7171",
+"A^	c #595656",
+"B^	c #828385",
+"C^	c #8E9092",
+"D^	c #787977",
+"E^	c #E5E5C7",
+"F^	c #9E9877",
+"G^	c #5A5449",
+"H^	c #504945",
+"I^	c #574E38",
+"J^	c #776860",
+"K^	c #3A3A3E",
+"L^	c #5D5E5A",
+"M^	c #695033",
+"N^	c #7F6147",
+"O^	c #403838",
+"P^	c #3B352A",
+"Q^	c #756254",
+"R^	c #45433E",
+"S^	c #514134",
+"T^	c #896C48",
+"U^	c #44392B",
+"V^	c #463928",
+"W^	c #645745",
+"X^	c #56504A",
+"Y^	c #282529",
+"Z^	c #AD996B",
+"`^	c #7A6C5C",
+" /	c #3A383D",
+"./	c #595D5A",
+"+/	c #594A35",
+"@/	c #A09066",
+"#/	c #6E5D47",
+"$/	c #7C7469",
+"%/	c #888764",
+"&/	c #7D7C6C",
+"*/	c #51534E",
+"=/	c #575346",
+"-/	c #B8AA81",
+";/	c #817A60",
+">/	c #706960",
+",/	c #5A4D3A",
+"'/	c #A1936E",
+")/	c #656563",
+"!/	c #5E5D5B",
+"~/	c #585451",
+"{/	c #938A5C",
+"]/	c #A59C5E",
+"^/	c #5E5042",
+"//	c #77624C",
+"(/	c #D0BF80",
+"_/	c #AEA27C",
+":/	c #4F5352",
+"</	c #888887",
+"[/	c #70706D",
+"}/	c #74706B",
+"|/	c #7F7B7A",
+"1/	c #6F6B6C",
+"2/	c #7E7475",
+"3/	c #857A7C",
+"4/	c #5F5C5D",
+"5/	c #828484",
+"6/	c #8C8E92",
+"7/	c #818386",
+"8/	c #737167",
+"9/	c #B2AA85",
+"0/	c #A59171",
+"a/	c #7F7265",
+"b/	c #635D5A",
+"c/	c #3D3E3B",
+"d/	c #575354",
+"e/	c #5A575C",
+"f/	c #8A6C3E",
+"g/	c #7E6C55",
+"h/	c #615B49",
+"i/	c #5D5850",
+"j/	c #3C3A3A",
+"k/	c #505150",
+"l/	c #414346",
+"m/	c #534A42",
+"n/	c #655849",
+"o/	c #564B45",
+"p/	c #3F3838",
+"q/	c #3A3A3C",
+"r/	c #434142",
+"s/	c #5E5545",
+"t/	c #3D3838",
+"u/	c #626462",
+"v/	c #52504C",
+"w/	c #84806B",
+"x/	c #5F5A4C",
+"y/	c #3D3C3B",
+"z/	c #AEA87C",
+"A/	c #615E57",
+"B/	c #5D5D58",
+"C/	c #6B6C62",
+"D/	c #86836D",
+"E/	c #4E4A46",
+"F/	c #5E5D62",
+"G/	c #715E41",
+"H/	c #8D816B",
+"I/	c #464643",
+"J/	c #646460",
+"K/	c #686864",
+"L/	c #696866",
+"M/	c #676665",
+"N/	c #545350",
+"O/	c #817A68",
+"P/	c #96886A",
+"Q/	c #6C6454",
+"R/	c #D5CD8A",
+"S/	c #6F675C",
+"T/	c #686A6A",
+"U/	c #696764",
+"V/	c #676362",
+"W/	c #7E7976",
+"X/	c #756F70",
+"Y/	c #827877",
+"Z/	c #867C7D",
+"`/	c #5F5D5D",
+" (	c #828282",
+".(	c #727372",
+"+(	c #5B5B5E",
+"@(	c #57585A",
+"#(	c #706C6F",
+"$(	c #514D4E",
+"%(	c #C3AE78",
+"&(	c #484645",
+"*(	c #6A6A6A",
+"=(	c #525156",
+"-(	c #4C4A4D",
+";(	c #4C4B4A",
+">(	c #4F4E4C",
+",(	c #504D4E",
+"'(	c #545253",
+")(	c #717070",
+"!(	c #676765",
+"~(	c #61605B",
+"{(	c #6D685B",
+"](	c #454240",
+"^(	c #6A6965",
+"/(	c #777672",
+"((	c #73726E",
+"_(	c #61615A",
+":(	c #5D5C5A",
+"<(	c #656765",
+"[(	c #5F5751",
+"}(	c #504B43",
+"|(	c #555452",
+"1(	c #6D6C6A",
+"2(	c #6F6E6C",
+"3(	c #6C6B69",
+"4(	c #706F6D",
+"5(	c #5F5D5B",
+"6(	c #544F48",
+"7(	c #B5A27F",
+"8(	c #71706E",
+"9(	c #676664",
+"0(	c #5D5958",
+"a(	c #66605F",
+"b(	c #605A5A",
+"c(	c #766C6B",
+"d(	c #6D6362",
+"e(	c #766F6F",
+"f(	c #7E7B7A",
+"g(	c #8B8883",
+"h(	c #807D7A",
+"i(	c #737174",
+"j(	c #656667",
+"k(	c #717172",
+"l(	c #7B7B79",
+"m(	c #6D6A6C",
+"n(	c #5C564D",
+"o(	c #C2A969",
+"p(	c #5C5C5D",
+"q(	c #616061",
+"r(	c #6B6B6A",
+"s(	c #656566",
+"t(	c #5F5D61",
+"u(	c #6B696C",
+"v(	c #615F60",
+"w(	c #555254",
+"x(	c #595658",
+"y(	c #6B6B6E",
+"z(	c #6B6768",
+"A(	c #716D6B",
+"B(	c #656562",
+"C(	c #747270",
+"D(	c #81807A",
+"E(	c #777771",
+"F(	c #7A7A73",
+"G(	c #6D6D6C",
+"H(	c #636062",
+"I(	c #797776",
+"J(	c #787674",
+"K(	c #706E6D",
+"L(	c #696361",
+"M(	c #575C5C",
+"N(	c #525354",
+"O(	c #67696A",
+"P(	c #7B7978",
+"Q(	c #63615F",
+"R(	c #65615E",
+"S(	c #736C6F",
+"T(	c #645F5E",
+"U(	c #847772",
+"V(	c #5F5855",
+"W(	c #72716A",
+"X(	c #847F7A",
+"Y(	c #79746C",
+"Z(	c #767774",
+"`(	c #676669",
+" _	c #646662",
+"._	c #6B696B",
+"+_	c #6A665F",
+"@_	c #5F5955",
+"#_	c #97845A",
+"$_	c #3D3A3F",
+"%_	c #5B585C",
+"&_	c #676565",
+"*_	c #71716D",
+"=_	c #4E4B4E",
+"-_	c #5D5A5D",
+";_	c #626162",
+">_	c #5F5E5E",
+",_	c #656464",
+"'_	c #585657",
+")_	c #616163",
+"!_	c #4C4D4F",
+"~_	c #525355",
+"{_	c #676160",
+"]_	c #706B6A",
+"^_	c #626061",
+"/_	c #716F6F",
+"(_	c #676666",
+"__	c #74716F",
+":_	c #6B6966",
+"<_	c #7E7D7C",
+"[_	c #4D4A47",
+"}_	c #463F3A",
+"|_	c #57514F",
+"1_	c #867D75",
+"2_	c #90837B",
+"3_	c #211D1D",
+"4_	c #464442",
+"5_	c #595955",
+"6_	c #6F6E6B",
+"7_	c #6D6460",
+"8_	c #5A5958",
+"9_	c #605F5E",
+"0_	c #615F5E",
+"a_	c #605B59",
+"b_	c #67625F",
+"c_	c #6A6362",
+"d_	c #525353",
+"e_	c #4B484A",
+"f_	c #4C4C50",
+"g_	c #64605E",
+"h_	c #5E5859",
+"i_	c #635D60",
+"j_	c #625D61",
+"k_	c #605D5E",
+"l_	c #5B5858",
+"m_	c #5E5D5D",
+"n_	c #615F5F",
+"o_	c #5C5859",
+"p_	c #5D595A",
+"q_	c #6E6F6E",
+"r_	c #5D5B59",
+"s_	c #5B5957",
+"t_	c #585655",
+"u_	c #474548",
+"v_	c #645F60",
+"w_	c #554D4D",
+"x_	c #646160",
+"y_	c #5B5958",
+"z_	c #3B393A",
+"A_	c #403E3F",
+"B_	c #474744",
+"C_	c #5D5C5B",
+"D_	c #6B6A6A",
+"E_	c #696663",
+"F_	c #65625F",
+"G_	c #656360",
+"H_	c #64625F",
+"I_	c #65635F",
+"J_	c #64635D",
+"K_	c #57534F",
+"L_	c #6F6967",
+"M_	c #6C6866",
+"N_	c #6E6A6A",
+"O_	c #867A70",
+"P_	c #83756D",
+"Q_	c #2F2A27",
+"R_	c #655A4E",
+"S_	c #7D7671",
+"T_	c #7E7A74",
+"U_	c #74685E",
+"V_	c #786A69",
+"W_	c #716868",
+"X_	c #827A78",
+"Y_	c #7E7370",
+"Z_	c #756966",
+"`_	c #7A6E6A",
+" :	c #96888B",
+".:	c #7A7675",
+"+:	c #6C6463",
+"@:	c #7A7275",
+"#:	c #69656C",
+"$:	c #5D595B",
+"%:	c #666061",
+"&:	c #595154",
+"*:	c #797274",
+"=:	c #655B5A",
+"-:	c #5E5555",
+";:	c #574C4C",
+">:	c #6C5F60",
+",:	c #7B6F6F",
+"':	c #6E6262",
+"):	c #6F6565",
+"!:	c #645A5A",
+"~:	c #888383",
+"{:	c #6F6A68",
+"]:	c #57514A",
+"^:	c #4B443E",
+"/:	c #5F5854",
+"(:	c #545051",
+"_:	c #6B6668",
+"::	c #504A4B",
+"<:	c #72696B",
+"[:	c #757171",
+"}:	c #7A7776",
+"|:	c #63605F",
+"1:	c #302C2B",
+"2:	c #312B2A",
+"3:	c #504949",
+"4:	c #69605D",
+"5:	c #635B57",
+"6:	c #635B55",
+"7:	c #554E43",
+"8:	c #585049",
+"9:	c #605750",
+"0:	c #5E564E",
+"a:	c #676059",
+"b:	c #615950",
+"c:	c #655952",
+"d:	c #6D6560",
+"e:	c #5F5753",
+"f:	c #817874",
+"g:	c #756D69",
+"h:	c #584E48",
+"i:	c #68625B",
+"j:	c #837C78",
+"k:	c #86807D",
+"l:	c #696158",
+"m:	c #706152",
+"n:	c #60574D",
+"o:	c #8A7F72",
+"p:	c #7D7366",
+"q:	c #847E76",
+"r:	c #6E645C",
+"s:	c #70615D",
+"t:	c #756662",
+"u:	c #796A63",
+"v:	c #80736B",
+"w:	c #776C66",
+"x:	c #746A67",
+"y:	c #827575",
+"z:	c #847C7A",
+"A:	c #7B7273",
+"B:	c #7D757C",
+"C:	c #90888A",
+"D:	c #9B999E",
+"E:	c #868689",
+"F:	c #645E60",
+"G:	c #675F60",
+"H:	c #6E6568",
+"I:	c #565050",
+"J:	c #5C5254",
+"K:	c #63595B",
+"L:	c #706769",
+"M:	c #776E70",
+"N:	c #736C6D",
+"O:	c #585150",
+"P:	c #4A4140",
+"Q:	c #5D5756",
+"R:	c #5D5853",
+"S:	c #56524A",
+"T:	c #3F3A35",
+"U:	c #5E5956",
+"V:	c #6A6665",
+"W:	c #595558",
+"X:	c #615D60",
+"Y:	c #625C5E",
+"Z:	c #555051",
+"`:	c #524F4E",
+" <	c #726B69",
+".<	c #635957",
+"+<	c #726866",
+"@<	c #6C635E",
+"#<	c #776E69",
+"$<	c #6E645F",
+"%<	c #706659",
+"&<	c #685F4E",
+"*<	c #665A49",
+"=<	c #51473C",
+"-<	c #776F69",
+";<	c #686057",
+"><	c #5F5551",
+",<	c #5D5652",
+"'<	c #6D6260",
+")<	c #857B7A",
+"!<	c #5D544E",
+"~<	c #645C54",
+"{<	c #746863",
+"]<	c #78706B",
+"^<	c #6E6256",
+"/<	c #6D5F56",
+"(<	c #433C3A",
+"_<	c #635C58",
+":<	c #645550",
+"<<	c #736662",
+"[<	c #635858",
+"}<	c #5E534E",
+"|<	c #7C6E6A",
+"1<	c #786B63",
+"2<	c #7D706B",
+"3<	c #6E6361",
+"4<	c #736969",
+"5<	c #7F7272",
+"6<	c #716A68",
+"7<	c #827874",
+"8<	c #8B8486",
+"9<	c #817D7E",
+"0<	c #897E7B",
+"a<	c #7B7877",
+"b<	c #857D7E",
+"c<	c #7D7779",
+"d<	c #7A777F",
+"e<	c #7E7D83",
+"f<	c #656167",
+"g<	c #6A656B",
+"h<	c #726F73",
+"i<	c #87878D",
+"j<	c #817C7D",
+"k<	c #584F4D",
+"l<	c #6F6968",
+"m<	c #716C67",
+"n<	c #7D7971",
+"o<	c #544F4C",
+"p<	c #6B6766",
+"q<	c #5E595C",
+"r<	c #544F52",
+"s<	c #545555",
+"t<	c #201C1D",
+"u<	c #706869",
+"v<	c #7F7778",
+"w<	c #736A68",
+"x<	c #6D645E",
+"y<	c #726963",
+"z<	c #6F6862",
+"A<	c #847E78",
+"B<	c #7B756F",
+"C<	c #7E7B6F",
+"D<	c #737067",
+"E<	c #655E5B",
+"F<	c #5D5953",
+"G<	c #636057",
+"H<	c #5D5650",
+"I<	c #54514D",
+"J<	c #3C3837",
+"K<	c #756F6F",
+"L<	c #7A7171",
+"M<	c #6E6463",
+"N<	c #6B6161",
+"O<	c #6F5F5D",
+"P<	c #5A4F47",
+". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z ",
+"c A B C D E F G H I J K L M N O P Q R S T U V W X Y Z `  ...+.@.~ #.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.",
+"7.8.9.0.&.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+",
+"%+&+*+=+-+;+>+,+'+;+)+!+~+{+]+^+/+(+_+:+<+[+}+|+~+1+2+3+4+5+6+7+8+9+5+5+0+;+,+>+,+a+;+5+,+b+c+>+;+d+e+<+f+g+h+h+i+b+j+k+l+m+n+o+",
+"p+q+r+s+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+u+v+v+t+t+t+t+t+t+t+u+u+u+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+w+x+y+z+",
+"A+B+C+)+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+D+E+F+G+",
+"H+I+J+d+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+K+L+M+N+",
+"O+P+Q+R+u+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+S+T+U+V+",
+"W+X+Y+Z+v+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+`+ @.@+@",
+"@@#@$@)+v+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+`+%@&@*@",
+"=@-@;@,+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+>@,@'@)@",
+"!@~@{@;+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+u+]@^@/@(@",
+"_@:@<@/+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+[@}@|@1@",
+"2@3@4@7+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+5@6@7@8@",
+"9@0@a@b@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+5@c@d@e@",
+"f@g@h@/+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+i@j@k@l@m@n@o@p@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+q@r@s@t@",
+"u@v@w@x@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+y@z@g.A@B@C@D@E@F@G@t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+u+H@I@J@K@",
+"L@M@N@0+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+@###$#%#",
+"&#*#=#9+u+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#}#|#1#t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+2#3#4#5#",
+"6#7#8#9#v+t+t+t+t+t+t+t+t+t+t+t+t+t+t+O@0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+y#z#A#B#",
+"p.C#D#9#t+t+t+t+t+t+t+t+t+t+t+t+E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $'#.$+$@$#$$$%$t+t+t+t+t+t+t+t+t+t+t+t+t+&$*$=$-$",
+";$>$,$'$t+t+t+t+t+t+t+t+t+t+t+)$!$~${$]$<#^$/$($_$:$<$[$~#R#}$|$1$2$3$4$5$6$7$8$9$0$.$a$b$b$c$d$O@t+t+t+t+t+t+t+t+t+t+t+e$f$g$h$",
+"i$j$k$l$t+t+t+t+t+t+t+t+t+t+t+m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$a$D@r$K$L$M$N$O$P$Q$t+t+t+t+t+t+t+t+t+t+t+R$S$T$U$",
+"V$W$X$j@t+t+t+t+t+t+t+O@x#Y$Z$Q$`$ %o$n$.%+%@%#%$%%%&%*%=%-%;%>%+$,%'%)%5$W@!%~%b$O$`@{%]%^%O$/%(%%$_%x#O@t+t+t+t+t+t+t+:%<%[%}%",
+"|%1%2%3%4%t+O@+#Z$5%6%7%8%8%9%0%c$a%b%}#c%d%e%f%g%h%i%|@j%X@k%l%x$m%n%o%p%q%r%@%f%a%s%{%t%u%u% %v%w%w#x%Q$6%1#%$Y$x#t+t+y%z%A%B%",
+"C%Y+D%R+E%F%Q$G%x%H%I%I%(%J%K%L%M%N%O%P%Q%v#R%S%T%U%V%W%X%s$Y%Z%`% &.&+&@&#&$&%&&& #*&=&-&N%;&>&|$v%,&,&'&)&H%!&x%Q$j+~&{&]&^&/&",
+"(&_&:&<&[&)&}&,&v%|&1&2&3&4&5&6&7&8&9&!&0&a&b&c&d&&&e&f&g&h&i&g%7&u#P$j&k&{%l&m&m&n&m&o&p&q&p&r&s&t&u&u&v&v&1&|&w&'&I%x&y&z&A&B&",
+"C&D&E&F&G&H&I&1&J&K&L&L&M&N&O&P&%&l&L&Q&R&q@d&S&8&T&n&e&U&V&W&&&r&X&Y&u%Z& #N%b&o&`&c&`&C$p&c&m& *.*+*@*+*#*$*$*%*I&1&&***=*-*;*",
+">*,*.#'*)*!*@*~*{*]*^*/*(*_*r&:*/%<*%*[*[*[*}*|*-&Y&X&1*1*X&2*l&3*}* #+* #Y&3*|*}*4*C$5*p&q&6*l&7*^%O$T%8&8*9*d&0*a*N&b*c*d*e*f*",
+"g*h*i*j*k*l*$*m*n*o*p*q*r*f%U%2* %u%s*t*t*$*>&u*>&Z&3*u%X&s%^%>&v*s*(%G%w&3*>&w*=&4*`&C$x*y*y*z*c&A*`$B*U%e&U%_*C*n&c&D*E*F*G*H*",
+"I*J*K*L*k#M*N*O*P*Q*R*S*#&T*U*V*W*X*>&3*=&^%Y& #>&Y&>&u% #X&v#3*Y*K&Z*`* =$*=&v#3*a*o&a*.=+=@=#=#=$%$=@$u$%=#$#$&=B**=S&==-=;=>=",
+",='=)=!=~={=I$]=^=/=(=n%_=:=<=[=}=|=>&Z&w*w*3*=&}*3*v#>&Y&X&1=2=3=4=5=6=7=$*v#3*}*v*>&.*=&$*8=9=0=h&a=b=l%/=$%c=^$d=^$e=f=g=h=i=",
+"j=6$k=l=m=n=~$o=p=q=r=s=t=u=[#v=w=x=a%t%Y&X& #}*w*w*v# #w*w*>&3=y=3=z=A=u&s*>&@*|&#*B=s*=&$*C=D=E=F=G=b=H=I=J=$%K=L=M=N=H#O=P=Q=",
+"R=S=T=U=V=W=b$b=v$+$^$T@X=Y=Z=`= -9*Y&.-+-]%@-^%v#B=v* #>&3*<*#-$-]%%-Y*B=>&-&>@&-*-b&=---9&7*;->-,-[$'-)-!-L=Y=~-)-{-]-^-/-(-_-",
+":-<-[-}*`@}-J=}-|-1-'#x$H=K=/=:*r&4*u*2-a#y=3-w*s* #{%Y&>& #4-y=5-^%Z&Y&=&Y&6*6-7-8-9-0-a-b-c-d-e-,-($f-g-h-/=<#i-j-k-l-m-n-o-p-",
+"q-r-s-t-u-v-u$w-|-x-y-8$z-|-+$6*A-B-1=D*C-D-+-:*@*}*1*a*w*a%E-#-F-Y&w*>&u*<*1*G-N&7-H-I-J-K-L-M--&c=N-O-P-Q-f*/#k%R-j-S-4-T-U-V-",
+"W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;3-%-u*w*';);!;~;C$-&{;];#-^;/;t%t%X&u%(;_;:;<;[;};H%0%u&w*:*|;N#1;;%U*l%2;{-3;4;c=5;6;7;8;",
+"k%9;0;a;b;c;%=d;e;f;g;h;i;j;$=k;l;m;n;,;o;}*.*p;q;r;s;t;u;v;w;-&U#-&v*w*>&3*x;y;z;u&A;B;x%0%}&.*B=k-C@0$C;`$D;9$E;F;<#G;H;I;J;K;",
+"L;M;N;O;&=o+P;Q;Y=R;S;T;U;V;W;X;Y;Z;`; >.>>&3*+>@>#>$>%>&>*>=>->;>>>y;,>'>)>!>~>{>]>^>/>v%,&(>_>'>:><>{-A*[>}>|>1>2>3>4>5>6>7>8>",
+"9>0>a>b>c>d>e>f>s=E;g>o$h>i>j>k>l>m>n>o>1$v##*p>!>q>r>s>w%t*t>/*u>v>w>x>x>y>z>w>A>B>C>D>L&[*E>F>G>H>)%I>A*P;J>K><#X=L>M>N>O>P>Q>",
+"~@R>S>T>U>V>W>X>Y>Z>`> ,q$.,c>+,@,#,$,%,&,@*@**,=,-,;,>,)&,,',),!,~>~,{,],^,/,(,_,:,<,t>[,9&},E>)>|,p%1, %2,3,4,5,6,F;7,8,9,0,a,",
+"b,c,d,e,{=`@f,g,h,i,j,k,p%l,9 m,$$$$n,o,&,p,4=q,$>r,[*v&G&s,&,=,t,u,v,v>w,x,z>y,t*z,A,B,D&)*C,D,m@E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,",
+"T,U,V,W,X,Y,Z,`, '.'+'@'#'$'T=O&q@%'&'*'='-';'-'>','%*7*'')'t&U=!'~'{']'^'/'A=%*('_'A,:'<'['r>5=}'|'1'2'3'4'5'6'7'8'9'T>0'a'b'v*",
+"c'd'e'v;f'j#g'`.h'#'i'j'k'l'm'z*P&#,n'o'p','q'F@^'r'+*L&s't'u'v'w'x'y'z'='A'B'1&C'G#j*)*D'E'F'G'H'I'J'i,K'L'M'N'O'P'Q't%;&R'S'T'",
+"U'V'W'X'Y'Z'`' ).)+)@)#)#)$)>;%)5&4&d$7=)&,&2&L&u&$*.*&)*)=)-)};;)L*>),)')4=n,5=))},!)~){)])^)/)()_):)<)[)})|)1)2)3)K$j&k&4)5)6)",
+"7)8)9)u%0)a)b)c)d)e)f)/=H=g)X&h)s&i)u&2&j)2&7=3&t&t*/'&)k)l)m)9&n)o)')p)p)q)r)G&5=!)},'=s)t)u)v)w)x)y)z)A)T%3)B)C)D)u#E)c$F)G)H)",
+"I)J)K)L),-M)N)O)P)Q)R)S)T)U)V)W)J&L&%*1&%*X)%*9&j)Y)Z)`) !a&.!+!E>@!v&Q%#!$!%!d$^'q,q,&!*!=!r'v&$,I&+*-!;!$'>!U>,!k-'!)!9 !!~!{!",
+"]!^!/!n&(!_!:!<![!}!|!S).&1!2!3!J&9&7*9&7*u&$*v*&)&)4!5!6!6!7!i)!)8!j)[*$!$!F@j)#*M-4=z=;)r,t&9&7*9&}*l&9!l-0!a!b!0$c!l,9 d!2'e!",
+"f!g!h!5;W@i!j!k!l!m!n!o!p!q!r!s!s,y*t!u!v!x*w!x!y!z!|*A!t!|$B!C!D!E!G&F!)>-'G!H!I!J!K!L!M!N!O!P!E>J&1*/;Q!R!S!T!U!#+V!H,W!X!Y!Z!",
+"`! ~.~+~@~#~$~%~&~*~=~-~;~>~,~'~)~!~<;<;~~{~]~^~/~(~h)N&<;B=s*X)K&_~:~<~[~}~|~1~2~3~4~a*5~6~7~8~9~0~a~b~c~d~e~f~g~h~i~g-j~k~l~m~",
+"n~o~p~q~a$r~s~t~u~v~w~x~y~z~A~B~C~D~H&;'E~+,]~F~G~H~4*h)u*u*Y&3*s*I~J~K~L~M~N~O~P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{$-@{Q'#{${%{&{*{={",
+"-{;{>{3=,{4$'{){!{~{{{]{^{/{({_{:{<{[{}{|{1{2{3{4{5{H 6{7{8{9{0{a{b{c{d{e{f{g{>;h{i{j{k{b>l{m{n{o{p{q{r{s{t{u{v{w{p%x{y{{=z{A{B{",
+"C{D{E{F{G{H{I{J{K{L{M{D@N{O{P{Q{R{S{T{U{V{W{X{Y{Z{`{ ].]+]@]#]$]%]&] !*]=]-];]>],]'])]!]~]{]]]-,^]/](]_]:]<][]}]|]1]y{5,.%2]3]4]",
+"5]6]7]@-8]9]0]a]X*b]V#c]d]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]6*z]A]B]C]D]E]F]G]H]I]J]K]L]M]N]O]P]Q]R]S]T]U]V]W]X]Y]Z]`] ^",
+".^+^@^#^$^%^&^*^=^c]-^;^>^,^'^)^!^~^{^]^^^/^(^_^:^<^[^}^|^1^2^3^4^5^6^7^8^9^0^a^b^c^d^e^f^g^h^r'i^j^k^l^m^2*n^o^p^q^r^s^t^u^v^w^",
+"x^y^z^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^`^ /./+/@/#/$/%/&/*/=/-/;/>/N%,/'/0^E-)/!/~/{/]/^///(/_/:/</[/t^}/|/1/",
+"2/2/3/4/5/6/7/8/9/0/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/f&u/v/w/x/y/z/A/B/|)C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/1-t=U/V/W/X/",
+"Y/Y/Z/`/x$|- (.(+(@(q^y=s^#($(%(K-&(=&s%*(B-=(-(;(>(}#,=,('()(O'!(3)c~~({(](^(/(((_(:(<([(}(|(1(2(3(4(g%n$5(6(7(`;0$.$8(9(0(a(b(",
+"c(d(e(s*f(g(h(i(j(k(Z=l(r=m(n(o(q,p(q(P$r(s(i&t(u(v(w(x(y(z(A(.%K>c!B(+%j&+&C(D(E(X,F(G(<(H(I(J(K(X>2(1,g'L(M(N(O(8$9$P(Q(R(S(T(",
+"7]U(V(]*W(X(Y(Z(C*`( _B(._+_@_#_$_j~%_&_*_C)U%<*K$j~=_-_;_>_,_|,'_)_e&!_~_P.{_]_{$X,.%l-}#^_/_@'l-l-(_S*)(J'__:_<_2>X=Y,[_}_|_+(",
+"1_2_3_4_5_6_7_V/8_9_0_a_b_c_d_e_f_g_h_i_j_k_l_.>m_n_o_p_m_2',_q_O$r_s_t_u_v_w_U+9(x_Q(y_z_A_B_y)z)P'C_+&D_9_E_F_G_H_I_J_K_L_M_N_",
+"O_P_Q_R_S_T_U_V_W_X_Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:>:,:':):!:e(~:{:]:^:/:(:_:::<:[:}:|:1:2:3:4:5:6:7:8:9:0:a:b:c:d:e:f:g:h:i:j:k:",
+"l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:`:|: <.<+<@<#<$<%<&<*<=<-<;<><,<Y+'<)<!<~<{<]<",
+"^</<(<_<:<<<[<}<|<1<2<3<4<5<6<7<8<9<0<a<b<c<d<e<f<g<3^h<i<j<k<l<m<n<R:o<p<q<r<s<t<u<v<w<x<y<z<A<B<C<D<E<F<G<H<I<J<K<L<M<N<M<O<P<"};
Binary file images/dash.png has changed
Binary file images/defaultmap.png has changed
Binary file images/divider.png has changed
Binary file images/drugs.gif has changed
Binary file images/fetching.png has changed
Binary file images/fogoff.png has changed
Binary file images/fogon.png has changed
Binary file images/form.png has changed
Binary file images/grenade.gif has changed
Binary file images/gun1.gif has changed
Binary file images/gun2.gif has changed
Binary file images/hidefog.png has changed
--- a/images/icons.xml	Wed Nov 25 06:51:50 2009 -0600
+++ b/images/icons.xml	Wed Nov 25 12:34:04 2009 -0600
@@ -1,52 +1,52 @@
-<icons>
-<icon name='book' file='book.gif' />
-<icon name='folder' file='folder.gif' />
-<icon name='die' file='die.gif' />
-<icon name='skull' file='skull.gif' />
-<icon name='labtop' file='labtop.gif' />
-<icon name='flask' file='flask.gif' />
-<icon name='goblin' file='goblin.gif' />
-<icon name='note' file='note.gif' />
-<icon name='bullet' file='bullet.gif' />
-<icon name='ccmap' file='ccmap.gif' />
-<icon name='8ball' file='8ball.gif' />
-<icon name='car' file='car.gif' />
-<icon name='chess' file='chess.gif' />
-<icon name='compass' file='compass.gif' />
-<icon name='cyborg' file='cyborg.gif' />
-<icon name='drugs' file='drugs.gif' />
-<icon name='gear' file='gear.gif' />
-<icon name='grenade' file='grenade.gif' />
-<icon name='gun1' file='gun1.gif' />
-<icon name='gun2' file='gun2.gif' />
-<icon name='knight' file='knight.gif' />
-<icon name='money' file='money.gif' />
-<icon name='ninja' file='ninja.gif' />
-<icon name='orc' file='orc.gif' />
-<icon name='help' file='help.gif' />
-<icon name='oriental' file='oriental.gif' />
-<icon name='player' file='player.gif' />
-<icon name='questionhead' file='questionhead.gif' />
-<icon name='r2d2' file='r2d2.gif' />
-<icon name='rome' file='rome.gif' />
-<icon name='shades' file='shades.gif' />
-<icon name='spears' file='spears.gif' />
-<icon name='startrek' file='startrek.gif' />
-<icon name='sword' file='sword.gif' />
-<icon name='tank1' file='tank1.gif' />
-<icon name='tank2' file='tank2.gif' />
-<icon name='thief' file='thief.gif' />
-<icon name='tiefighter' file='tiefighter.gif' />
-<icon name='wizard1' file='wizard1.gif' />
-<icon name='d20' file='d20.gif' />
-<icon name='d10' file='d10.gif' />
-<icon name='d8' file='d8.gif' />
-<icon name='d4' file='d4.gif' />
-<icon name='grid' file='grid.gif' />
-<icon name='html' file='html.gif' />
-<icon name='browser' file='browser.gif' />
-<icon name='image' file='img.gif' />
-<icon name='tabber' file='tabber.png' />
-<icon name='divider' file='divider.png' />
-<icon name='form' file='form.png' />
-</icons>
+<icons>
+<icon name='book' file='book.gif' />
+<icon name='folder' file='folder.gif' />
+<icon name='die' file='die.gif' />
+<icon name='skull' file='skull.gif' />
+<icon name='labtop' file='labtop.gif' />
+<icon name='flask' file='flask.gif' />
+<icon name='goblin' file='goblin.gif' />
+<icon name='note' file='note.gif' />
+<icon name='bullet' file='bullet.gif' />
+<icon name='ccmap' file='ccmap.gif' />
+<icon name='8ball' file='8ball.gif' />
+<icon name='car' file='car.gif' />
+<icon name='chess' file='chess.gif' />
+<icon name='compass' file='compass.gif' />
+<icon name='cyborg' file='cyborg.gif' />
+<icon name='drugs' file='drugs.gif' />
+<icon name='gear' file='gear.gif' />
+<icon name='grenade' file='grenade.gif' />
+<icon name='gun1' file='gun1.gif' />
+<icon name='gun2' file='gun2.gif' />
+<icon name='knight' file='knight.gif' />
+<icon name='money' file='money.gif' />
+<icon name='ninja' file='ninja.gif' />
+<icon name='orc' file='orc.gif' />
+<icon name='help' file='help.gif' />
+<icon name='oriental' file='oriental.gif' />
+<icon name='player' file='player.gif' />
+<icon name='questionhead' file='questionhead.gif' />
+<icon name='r2d2' file='r2d2.gif' />
+<icon name='rome' file='rome.gif' />
+<icon name='shades' file='shades.gif' />
+<icon name='spears' file='spears.gif' />
+<icon name='startrek' file='startrek.gif' />
+<icon name='sword' file='sword.gif' />
+<icon name='tank1' file='tank1.gif' />
+<icon name='tank2' file='tank2.gif' />
+<icon name='thief' file='thief.gif' />
+<icon name='tiefighter' file='tiefighter.gif' />
+<icon name='wizard1' file='wizard1.gif' />
+<icon name='d20' file='d20.gif' />
+<icon name='d10' file='d10.gif' />
+<icon name='d8' file='d8.gif' />
+<icon name='d4' file='d4.gif' />
+<icon name='grid' file='grid.gif' />
+<icon name='html' file='html.gif' />
+<icon name='browser' file='browser.gif' />
+<icon name='image' file='img.gif' />
+<icon name='tabber' file='tabber.png' />
+<icon name='divider' file='divider.png' />
+<icon name='form' file='form.png' />
+</icons>
Binary file images/knight.gif has changed
Binary file images/money.gif has changed
Binary file images/player-whisper.gif has changed
Binary file images/r2d2.gif has changed
Binary file images/rectangle.png has changed
Binary file images/sflogo.png has changed
Binary file images/showfog.png has changed
Binary file images/spears.gif has changed
Binary file images/splash.jpg has changed
Binary file images/spotlight.png has changed
Binary file images/star.png has changed
Binary file images/startrek.gif has changed
Binary file images/tab_close.png has changed
Binary file images/tab_on.png has changed
Binary file images/tabber.png has changed
Binary file images/tank1.gif has changed
Binary file images/tank2.gif has changed
Binary file images/text.png has changed
Binary file images/tiefighter.gif has changed
Binary file images/wxPyButton.png has changed
Binary file images/wxWinButton.png has changed
--- a/license.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/license.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,339 +1,339 @@
-            GNU GENERAL PUBLIC LICENSE
-               Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-            GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-             END OF TERMS AND CONDITIONS
-
-        How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
+            GNU GENERAL PUBLIC LICENSE
+               Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+            GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+             END OF TERMS AND CONDITIONS
+
+        How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
 Public License instead of this License.
\ No newline at end of file
Binary file myfiles/webfiles/Textures/grass11.jpg has changed
--- a/orpg/__init__.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/__init__.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2 +1,2 @@
-__all__ = ['chat', 'dieroller', 'gametree','mapper', 'networking', 'tools',
-    'main', 'minidom', 'orpg_version', 'orpg_windows', 'orpg_xml', 'pulldom' ]
+__all__ = ['chat', 'dieroller', 'gametree','mapper', 'networking', 'tools',
+    'main', 'minidom', 'orpg_version', 'orpg_windows', 'orpg_xml', 'pulldom' ]
--- a/orpg/chat/chat_msg.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/chat/chat_msg.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,84 +1,84 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#    openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: chat_msg.py
-# Author: Ted Berg
-# Maintainer:
-# Version:
-#   $Id: chat_msg.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $
-#
-# Description: Contains class definitions for manipulating <chat/> messages
-#
-#
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#    openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: chat_msg.py
+# Author: Ted Berg
+# Maintainer:
+# Version:
+#   $Id: chat_msg.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $
+#
+# Description: Contains class definitions for manipulating <chat/> messages
+#
+#
 
-__version__ = "$Id: chat_msg.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $"
-
-from orpg.orpgCore import *
+__version__ = "$Id: chat_msg.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $"
+
+from orpg.orpgCore import *
 from chat_version import CHAT_VERSION
 from orpg.tools.orpg_log import logger, debug
 from xml.etree.ElementTree import tostring, fromstring
-
-CHAT_MESSAGE = 1
-WHISPER_MESSAGE = 2
-EMOTE_MESSAGE = 3
-INFO_MESSAGE = 4
-SYSTEM_MESSAGE = 5
-WHISPER_EMOTE_MESSAGE = 6
-
+
+CHAT_MESSAGE = 1
+WHISPER_MESSAGE = 2
+EMOTE_MESSAGE = 3
+INFO_MESSAGE = 4
+SYSTEM_MESSAGE = 5
+WHISPER_EMOTE_MESSAGE = 6
+
 class chat_msg:
-    
+    
     def __init__(self, xml_text="<chat type='1' version='"+CHAT_VERSION+"' alias='' ></chat>"):
         self.chat_dom = None
         self.takexml(xml_text)
 
-    def __del__(self):
-        if self.chat_dom:
-            self.chat_dom.unlink()
+    def __del__(self):
+        if self.chat_dom:
+            self.chat_dom.unlink()
 
     def toxml(self):
-        return tostring(self.chat_dom)
+        return tostring(self.chat_dom)
 
     def takexml(self,xml_text):
         xml_dom = fromstring(xml_text)
         self.takedom(xml_dom)
 
-    def takedom(self, xml_dom):
-        self.chat_dom = xml_dom
-        self.text_node = xml_dom.text
-    
-    def set_text(self, text):
-        self.chat_dom.text = text
-    
-    def set_type(self,type):
-        self.chat_dom.set("type", str(type))
-    
-    def get_type(self):
-        return int(self.chat_dom.get("type"))
+    def takedom(self, xml_dom):
+        self.chat_dom = xml_dom
+        self.text_node = xml_dom.text
+    
+    def set_text(self, text):
+        self.chat_dom.text = text
+    
+    def set_type(self,type):
+        self.chat_dom.set("type", str(type))
+    
+    def get_type(self):
+        return int(self.chat_dom.get("type"))
 
-    def set_alias(self,alias):
-        self.chat_dom.set("alias",alias)
+    def set_alias(self,alias):
+        self.chat_dom.set("alias",alias)
 
-    def get_alias(self):
-        return self.chat_dom.get("alias")
+    def get_alias(self):
+        return self.chat_dom.get("alias")
 
-    def get_text(self):
-        return self.text_node
+    def get_text(self):
+        return self.text_node
 
-    def get_version(self):
-        return self.chat_dom.get("version")
+    def get_version(self):
+        return self.chat_dom.get("version")
--- a/orpg/chat/chat_util.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/chat/chat_util.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,172 +1,172 @@
-# utility function; see Post() in chatwnd.py
-
-import re
+# utility function; see Post() in chatwnd.py
+
+import re
 import string
 from orpg.orpgCore import *
 from orpg.tools.orpg_log import logger, debug
-from orpg.tools.decorators import debugging
-
-#============================================
-# simple_html_repair(string)
-#
-# Crude html/xml parser/verifier.
-# Catches many mistyped and/or malformed
-# html tags and prevents them from causing
-# issues with the chat display (see chatwnd.py)
-# DOES NOT catch misused but properly formated
-#    html like <script> or <li> which are known
-#    to cause issues with the chat display
-#
-# Created 04-25-2005 by Snowdog
+from orpg.tools.decorators import debugging
+
+#============================================
+# simple_html_repair(string)
+#
+# Crude html/xml parser/verifier.
+# Catches many mistyped and/or malformed
+# html tags and prevents them from causing
+# issues with the chat display (see chatwnd.py)
+# DOES NOT catch misused but properly formated
+#    html like <script> or <li> which are known
+#    to cause issues with the chat display
+#
+# Created 04-25-2005 by Snowdog
 #=============================================
-
+
 def simple_html_repair(string):
-    "Returns string with extra > symbols to isolate badly formated HTML"
-    #walk though string checking positions of < and > tags.
-    first_instance = string.find('<')
-    if first_instance == -1: return string #no html, bail out.
-
-    #strip string of an instances of ">>" and "<<" recursively
-    #while (string.find(">>") != -1):string = string.replace(">>",">")
-    while (string.find("<<") != -1):string = string.replace("<<","<")
-
-    last_start = first_instance
-    in_tag_flag = 1
-    a = first_instance + 1
-    while a < len(string):
-        if string[a] == '<':
-            if in_tag_flag == 1:
-                #attempt to figure out best place to put missing >
-                #search from last_start to current position
-                at_front = 1
-                for best_pos in range(last_start,a):
-                    if (str(string[best_pos]).isspace())and (at_front == 0):
-                        break
-                    else:
-                        at_front = 0
-                        best_pos = best_pos + 1
-                a = best_pos
-                string = string[:a]+">"+string[a:]
-                in_tag_flag = 0
-                #jump back up one character to catch the last > and reset the in_tag_flag
-                a = a - 1
-            else:
-                in_tag_flag = 1
-                last_start = a
-
-        if string[a] == '>':
-            last_start = a #found a closing tag, move start of scan block up.
-            in_tag_flag = 0
-        if (a >= (len(string)-1))and(in_tag_flag == 1):
-            #at end of string and need a closing tag marker
-            string = string +">"
-        a = a+1
-
-    #strip string of an instances of "<>"
-    string = string.replace("<>","")
-
-    #sanity check. Count the < and > characters, if there arn't enough > chars
-    #tack them on the end to avoid open-tag conditions
-    diff = string.count('<') - string.count('>')
-    if diff > 0:
-        for d in range(1,diff):
+    "Returns string with extra > symbols to isolate badly formated HTML"
+    #walk though string checking positions of < and > tags.
+    first_instance = string.find('<')
+    if first_instance == -1: return string #no html, bail out.
+
+    #strip string of an instances of ">>" and "<<" recursively
+    #while (string.find(">>") != -1):string = string.replace(">>",">")
+    while (string.find("<<") != -1):string = string.replace("<<","<")
+
+    last_start = first_instance
+    in_tag_flag = 1
+    a = first_instance + 1
+    while a < len(string):
+        if string[a] == '<':
+            if in_tag_flag == 1:
+                #attempt to figure out best place to put missing >
+                #search from last_start to current position
+                at_front = 1
+                for best_pos in range(last_start,a):
+                    if (str(string[best_pos]).isspace())and (at_front == 0):
+                        break
+                    else:
+                        at_front = 0
+                        best_pos = best_pos + 1
+                a = best_pos
+                string = string[:a]+">"+string[a:]
+                in_tag_flag = 0
+                #jump back up one character to catch the last > and reset the in_tag_flag
+                a = a - 1
+            else:
+                in_tag_flag = 1
+                last_start = a
+
+        if string[a] == '>':
+            last_start = a #found a closing tag, move start of scan block up.
+            in_tag_flag = 0
+        if (a >= (len(string)-1))and(in_tag_flag == 1):
+            #at end of string and need a closing tag marker
+            string = string +">"
+        a = a+1
+
+    #strip string of an instances of "<>"
+    string = string.replace("<>","")
+
+    #sanity check. Count the < and > characters, if there arn't enough > chars
+    #tack them on the end to avoid open-tag conditions
+    diff = string.count('<') - string.count('>')
+    if diff > 0:
+        for d in range(1,diff):
             string = string+">"
     return string
-
-# Depricated! Might as well use the already made component.get('xml')
+
+# Depricated! Might as well use the already made component.get('xml')
 def strip_unicode(txt):
-    for i in xrange(len(txt)):
-        if txt[i] not in string.printable:
-            try:
-                txt = txt.replace(txt[i], '&#' + str(ord(txt[i])) + ';')
-            except:
-                txt = txt.replace(txt[i], '{?}')
-    return txt
-
-#================================================
-# strip_script_tags(string)
-#
-# removes all script tags (start and end)
-# 04-26-2005 Snowdog
+    for i in xrange(len(txt)):
+        if txt[i] not in string.printable:
+            try:
+                txt = txt.replace(txt[i], '&#' + str(ord(txt[i])) + ';')
+            except:
+                txt = txt.replace(txt[i], '{?}')
+    return txt
+
+#================================================
+# strip_script_tags(string)
+#
+# removes all script tags (start and end)
+# 04-26-2005 Snowdog
 #================================================
-
-def strip_script_tags(string):
-    #kill the <script> issue
-    p = re.compile( '<(\s*)(/*)[Ss][Cc][Rr][Ii][Pp][Tt](.*?)>')
-    string =  p.sub( "<!-- script tag removed //-->", string)
-    return string
-
-#================================================
-# strip_li_tags(string)
-#
-# removes all li tags (start and end)
-# 05-13-2005
-#================================================
+
+def strip_script_tags(string):
+    #kill the <script> issue
+    p = re.compile( '<(\s*)(/*)[Ss][Cc][Rr][Ii][Pp][Tt](.*?)>')
+    string =  p.sub( "<!-- script tag removed //-->", string)
+    return string
+
+#================================================
+# strip_li_tags(string)
+#
+# removes all li tags (start and end)
+# 05-13-2005
+#================================================
 
-def strip_li_tags(string):
-    #kill the <li> issue
-    string = re.sub( r'<(\s*)[Ll][Ii](.*?)>', r'<b><font color="#000000" size=+1>*</font></b>    ', string)
-    string = re.sub( r'<(/*)[Ll][Ii](.*?)>', r'<br />', string)
-    return string
-
-#================================================
-# strip_body_tags(string)
-#
-# removes all body tags (start and end) from messages
-# should not break the setting of custom background colors
-#   through legitimate means such as the OpenRPG settings.
-# 07-27-2005 by mDuo13
-#================================================
+def strip_li_tags(string):
+    #kill the <li> issue
+    string = re.sub( r'<(\s*)[Ll][Ii](.*?)>', r'<b><font color="#000000" size=+1>*</font></b>    ', string)
+    string = re.sub( r'<(/*)[Ll][Ii](.*?)>', r'<br />', string)
+    return string
 
-def strip_body_tags(string):
-    bodytag_regex = re.compile(r"""<\/?body.*?>""", re.I)
+#================================================
+# strip_body_tags(string)
+#
+# removes all body tags (start and end) from messages
+# should not break the setting of custom background colors
+#   through legitimate means such as the OpenRPG settings.
+# 07-27-2005 by mDuo13
+#================================================
+
+def strip_body_tags(string):
+    bodytag_regex = re.compile(r"""<\/?body.*?>""", re.I)
     string = re.sub(bodytag_regex, "", string)
-    return string
-
-#================================================
-# strip_misalignment_tags(string)
-#
-# removes the alignment aspect of <p> tags, since
-# simply closing one doesn't actually fix the text
-# alignment. (I'm assuming this is a bug in wxWindows'
-# html parser.)
-# However, closing <center> tags does
-# return the text to its normal alignment, so this
-# algorithm simply closes them, allowing them to be
-# used legitimately without causing much annoyance.
-# 07-27-2005 mDuo13
+    return string
+
+#================================================
+# strip_misalignment_tags(string)
+#
+# removes the alignment aspect of <p> tags, since
+# simply closing one doesn't actually fix the text
+# alignment. (I'm assuming this is a bug in wxWindows'
+# html parser.)
+# However, closing <center> tags does
+# return the text to its normal alignment, so this
+# algorithm simply closes them, allowing them to be
+# used legitimately without causing much annoyance.
+# 07-27-2005 mDuo13
 #================================================
-
-def strip_misalignment_tags(string):
-    alignment_regex = re.compile(r"""<p([^>]*?)align\s*=\s*('.*?'|".*?"|[^\s>]*)(.*?)>""", re.I)
-    string = re.sub(alignment_regex, "<p\\1\\3>", string)
-
-    center_regex = re.compile(r"""<center.*?>""", re.I)
-    endcenter_regex = re.compile(r"""</center.*?>""", re.I)
-    num_centertags = center_regex.findall(string)
-    num_endcentertags = endcenter_regex.findall(string)
-    if num_centertags > num_endcentertags:
-        missing_tags = len(num_centertags) - len(num_endcentertags)
+
+def strip_misalignment_tags(string):
+    alignment_regex = re.compile(r"""<p([^>]*?)align\s*=\s*('.*?'|".*?"|[^\s>]*)(.*?)>""", re.I)
+    string = re.sub(alignment_regex, "<p\\1\\3>", string)
+
+    center_regex = re.compile(r"""<center.*?>""", re.I)
+    endcenter_regex = re.compile(r"""</center.*?>""", re.I)
+    num_centertags = center_regex.findall(string)
+    num_endcentertags = endcenter_regex.findall(string)
+    if num_centertags > num_endcentertags:
+        missing_tags = len(num_centertags) - len(num_endcentertags)
         string = string + missing_tags*"</center>"#yes, you can do this.
-    return string
-
-#================================================
-# strip_img_tags(string)
-#
-# removes all img tags (start and end)
-# 05-13-2005
-# redone 07-11-2005 by mDuo13
+    return string
+
+#================================================
+# strip_img_tags(string)
+#
+# removes all img tags (start and end)
+# 05-13-2005
+# redone 07-11-2005 by mDuo13
 #================================================
-
-def strip_img_tags(string):
-    #This is a Settings definable feature, Allowing users to enable or disable image display to fix the client crash due to large img posted to chat.
-    #p = re.sub( r'<(\s*)(/*)[Ii][Mm][Gg][ ][Ss][Rr][Cc][=](.*?)>', r'<!-- img tag removed //--> <a href=\3>\3</a>', string)
-
-    #this regex is substantially more powerful than the one above
-    img_tag_regex = re.compile(r"""<img.*?src\s*?=\s*('.*?'|".*?"|[^\s>]*).*?>""", re.I)
-    #this is what replaces the regex match. the \\1 refers to the URL from the previous string
-    img_repl_str = "<a href=\\1>[img]</a>"
-
-    #replaces all instances of images in the string with links
-    p = re.sub(img_tag_regex, img_repl_str, string)
-    return p
+
+def strip_img_tags(string):
+    #This is a Settings definable feature, Allowing users to enable or disable image display to fix the client crash due to large img posted to chat.
+    #p = re.sub( r'<(\s*)(/*)[Ii][Mm][Gg][ ][Ss][Rr][Cc][=](.*?)>', r'<!-- img tag removed //--> <a href=\3>\3</a>', string)
+
+    #this regex is substantially more powerful than the one above
+    img_tag_regex = re.compile(r"""<img.*?src\s*?=\s*('.*?'|".*?"|[^\s>]*).*?>""", re.I)
+    #this is what replaces the regex match. the \\1 refers to the URL from the previous string
+    img_repl_str = "<a href=\\1>[img]</a>"
+
+    #replaces all instances of images in the string with links
+    p = re.sub(img_tag_regex, img_repl_str, string)
+    return p
--- a/orpg/chat/chat_version.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/chat/chat_version.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,3 +1,3 @@
-## this file hold the chat version ##
-
-CHAT_VERSION = "1.0"
+## this file hold the chat version ##
+
+CHAT_VERSION = "1.0"
--- a/orpg/chat/chatwnd.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/chat/chatwnd.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,1876 +1,1876 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#     openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: chatutils.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: chatwnd.py,v 1.177 2007/12/07 20:39:48 digitalxero Exp $
-#
-# Description: This file contains some of the basic definitions for the chat
-# utilities in the orpg project.
-#
-# History
-# 2002-01-20 HeroMan
-#   + Added 4 dialog items on toolbar in support of Alias Library Functionallity
-#   + Shrunk the text view button to an image
-# 2005-04-25 Snowdog
-#   + Added simple_html_repair() to post() to fix malformed html in the chat window
-#   + Added strip_script_tags() to post() to remove crash point. See chat_util.py
-# 2005-04-25 Snowdog
-#   + Added simple_html_repair() to post() to fix malformed html in the chat window
-#
-
-__version__ = "$Id: chatwnd.py,v 1.177 2007/12/07 20:39:48 digitalxero Exp $"
-
-
-##
-## Module Loading
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#     openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: chatutils.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: chatwnd.py,v 1.177 2007/12/07 20:39:48 digitalxero Exp $
+#
+# Description: This file contains some of the basic definitions for the chat
+# utilities in the orpg project.
+#
+# History
+# 2002-01-20 HeroMan
+#   + Added 4 dialog items on toolbar in support of Alias Library Functionallity
+#   + Shrunk the text view button to an image
+# 2005-04-25 Snowdog
+#   + Added simple_html_repair() to post() to fix malformed html in the chat window
+#   + Added strip_script_tags() to post() to remove crash point. See chat_util.py
+# 2005-04-25 Snowdog
+#   + Added simple_html_repair() to post() to fix malformed html in the chat window
+#
+
+__version__ = "$Id: chatwnd.py,v 1.177 2007/12/07 20:39:48 digitalxero Exp $"
+
+
+##
+## Module Loading
 ##
 import os, time, re, sys, traceback, webbrowser, commands, chat_msg, chat_util
 
-from orpg.orpg_version import VERSION
-from orpg.orpg_windows import *
-from orpg.player_list import WG_LIST
-from orpg.dirpath import dir_struct
-#from orpg.tools.metamenus import MenuEx #Needed?
-from string import *
+from orpg.orpg_version import VERSION
+from orpg.orpg_windows import *
+from orpg.player_list import WG_LIST
+from orpg.dirpath import dir_struct
+#from orpg.tools.metamenus import MenuEx #Needed?
+from string import *
 
-import cStringIO # for reading inline imagedata as a stream
-from HTMLParser import HTMLParser
-from wx.lib.expando import EVT_ETC_LAYOUT_NEEDED 
+import cStringIO # for reading inline imagedata as a stream
+from HTMLParser import HTMLParser
+from wx.lib.expando import EVT_ETC_LAYOUT_NEEDED 
 
-import orpg.tools.rgbhex
-import orpg.tools.inputValidator
-from orpg.tools.validate import validate
+import orpg.tools.rgbhex
+import orpg.tools.inputValidator
+from orpg.tools.validate import validate
 from orpg.tools.orpg_settings import settings
-import orpg.tools.predTextCtrl
+import orpg.tools.predTextCtrl
 from orpg.tools.orpg_log import logger, debug
 from orpg.orpgCore import component
 from xml.etree.ElementTree import tostring
 
-from orpg.networking.mplay_client import MPLAY_CONNECTED  # needed to only send typing/not_typing messages while connected
-
-NEWCHAT = False
-try:
-    import wx.webview
-    NEWCHAT = True
-except: pass
-NEWCHAT = False
-
-# Global parser for stripping HTML tags:
-# The 'tag stripping' is implicit, because this parser echoes every
-# type of html data *except* the tags.
-class HTMLStripper(HTMLParser):
-    
-    def __init__(self):
-        self.accum = ""
-        self.special_tags = ['hr', 'br', 'img']
-    
-    def handle_data(self, data):  # quote cdata literally
-        self.accum += data
-    
-    def handle_entityref(self, name): # entities must be preserved exactly
-        self.accum += "&" + name + ";"
-    
-    def handle_starttag(self, tag, attrs):
-        if tag in self.special_tags:
-            self.accum += '<' + tag
-            for attrib in attrs: self.accum += ' ' + attrib[0] + '="' + attrib[1] + '"'
-            self.accum += '>'
-    
-    def handle_charref(self, name):  # charrefs too
-        self.accum += "&#" + name + ";"
-htmlstripper = HTMLStripper()
-
-# utility function;  see Post().
-
-def strip_html(string):
-    "Return string tripped of html tags."
-    htmlstripper.reset()
-    htmlstripper.accum = ""
-    htmlstripper.feed(string)
-    htmlstripper.close()
-    return htmlstripper.accum
-
-
-def log( settings, c, text ):
-    filename = settings.get_setting('GameLogPrefix')
-    if filename > '' and filename[0] != commands.ANTI_LOG_CHAR:
-        filename = filename + time.strftime( '-%Y-%m-%d.html', time.localtime( time.time() ) )
-        #filename = time.strftime( filename, time.localtime( time.time() ) )
-        timestamp = time.ctime(time.time())
-        header = '[%s] : ' % ( timestamp );
-        if settings.get_setting('TimeStampGameLog') != '1': header = ''
-        try:
-            f = open( dir_struct["user"] + filename, 'a' )
-            f.write( '<div class="'+c+'">%s%s</div>\n' % ( header, text ) )
-            f.close()
-        except:
-            print "could not open " + dir_struct["user"] + filename + ", ignoring..."
-            pass
-
-# This class displayes the chat information in html?
-#
-# Defines:
-#   __init__(self, parent, id)
-#   OnLinkClicked(self, linkinfo)
-#   CalculateAllFonts(self, defaultsize)
-#   SetDefaultFontAndSize(self, fontname)
-#
-class chat_html_window(wx.html.HtmlWindow):
-    """ a wxHTMLwindow that will load links  """
-    # initialization subroutine
-    #
-    # !self : instance of self
-    # !parent :
-    # !id :
-    
-    def __init__(self, parent, id):
-        wx.html.HtmlWindow.__init__(self, parent, id, 
-                                    style=wx.SUNKEN_BORDER|wx.html.HW_SCROLLBAR_AUTO|wx.NO_FULL_REPAINT_ON_RESIZE)
-        self.parent = parent
-        self.build_menu()
-        self.Bind(wx.EVT_LEFT_UP, self.LeftUp)
-        self.Bind(wx.EVT_RIGHT_DOWN, self.onPopup)
-        if "gtk2" in wx.PlatformInfo: self.SetStandardFonts()
-        # def __init__ - end
-
-    
-    def onPopup(self, evt):
-        self.PopupMenu(self.menu)
-
-    
-    def LeftUp(self, event):
-        event.Skip()
-        wx.CallAfter(self.parent.set_chat_text_focus, None)
-
-    
-    def build_menu(self):
-        self.menu = wx.Menu()
-        item = wx.MenuItem(self.menu, wx.ID_ANY, "Copy", "Copy")
-        self.Bind(wx.EVT_MENU, self.OnM_EditCopy, item)
-        self.menu.AppendItem(item)
-
-    
-    def OnM_EditCopy(self, evt):
-        wx.TheClipboard.UsePrimarySelection(False)
-        wx.TheClipboard.Open()
-        wx.TheClipboard.SetData(wx.TextDataObject(self.SelectionToText()))
-        wx.TheClipboard.Close()
-
-    
-    def scroll_down(self):
-        maxrange = self.GetScrollRange(wx.VERTICAL)
-        pagesize = self.GetScrollPageSize(wx.VERTICAL)
-        self.Scroll(-1, maxrange-pagesize)
-
-    
-    def mouse_wheel(self, event):
-        amt = event.GetWheelRotation()
-        units = amt/(-(event.GetWheelDelta()))
-        self.ScrollLines(units*3)
-
-    
-    def Header(self):
-        return '<html><body bgcolor="' + self.parent.bgcolor + '" text="' + self.parent.textcolor + '">'
-
-    
-    def StripHeader(self):
-        return self.GetPageSource().replace(self.Header(), '')
-
-    
-    def GetPageSource(self):
-        return self.GetParser().GetSource()
-
-    # This subroutine fires up the webbrowser when a link is clicked.
-    #
-    # !self : instance of self
-    # !linkinfo : instance of a class that contains the link information
-    
-    def OnLinkClicked(self, linkinfo):
-        href = linkinfo.GetHref()
-        wb = webbrowser.get()
-        wb.open(href)
-    # def OnLinkClicked - end
-
-    
-    def CalculateAllFonts(self, defaultsize):
-        return [int(defaultsize * 0.4),
-                int(defaultsize * 0.7),
-                int(defaultsize),
-                int(defaultsize * 1.3),
-                int(defaultsize * 1.7),
-                int(defaultsize * 2),
-                int(defaultsize * 2.5)]
-
-    
-    def SetDefaultFontAndSize(self, fontname, fontsize):
-        """Set 'fontname' to the default chat font.
-           Returns current font settings in a (fontname, fontsize) tuple."""
-        self.SetFonts(fontname, "", self.CalculateAllFonts(int(fontsize)))
-        return (self.GetFont().GetFaceName(), self.GetFont().GetPointSize())
-
-# class chat_html_window - end
+from orpg.networking.mplay_client import MPLAY_CONNECTED  # needed to only send typing/not_typing messages while connected
+
+NEWCHAT = False
+try:
+    import wx.webview
+    NEWCHAT = True
+except: pass
+NEWCHAT = False
+
+# Global parser for stripping HTML tags:
+# The 'tag stripping' is implicit, because this parser echoes every
+# type of html data *except* the tags.
+class HTMLStripper(HTMLParser):
+    
+    def __init__(self):
+        self.accum = ""
+        self.special_tags = ['hr', 'br', 'img']
+    
+    def handle_data(self, data):  # quote cdata literally
+        self.accum += data
+    
+    def handle_entityref(self, name): # entities must be preserved exactly
+        self.accum += "&" + name + ";"
+    
+    def handle_starttag(self, tag, attrs):
+        if tag in self.special_tags:
+            self.accum += '<' + tag
+            for attrib in attrs: self.accum += ' ' + attrib[0] + '="' + attrib[1] + '"'
+            self.accum += '>'
+    
+    def handle_charref(self, name):  # charrefs too
+        self.accum += "&#" + name + ";"
+htmlstripper = HTMLStripper()
+
+# utility function;  see Post().
+
+def strip_html(string):
+    "Return string tripped of html tags."
+    htmlstripper.reset()
+    htmlstripper.accum = ""
+    htmlstripper.feed(string)
+    htmlstripper.close()
+    return htmlstripper.accum
+
+
+def log( settings, c, text ):
+    filename = settings.get_setting('GameLogPrefix')
+    if filename > '' and filename[0] != commands.ANTI_LOG_CHAR:
+        filename = filename + time.strftime( '-%Y-%m-%d.html', time.localtime( time.time() ) )
+        #filename = time.strftime( filename, time.localtime( time.time() ) )
+        timestamp = time.ctime(time.time())
+        header = '[%s] : ' % ( timestamp );
+        if settings.get_setting('TimeStampGameLog') != '1': header = ''
+        try:
+            f = open( dir_struct["user"] + filename, 'a' )
+            f.write( '<div class="'+c+'">%s%s</div>\n' % ( header, text ) )
+            f.close()
+        except:
+            print "could not open " + dir_struct["user"] + filename + ", ignoring..."
+            pass
+
+# This class displayes the chat information in html?
+#
+# Defines:
+#   __init__(self, parent, id)
+#   OnLinkClicked(self, linkinfo)
+#   CalculateAllFonts(self, defaultsize)
+#   SetDefaultFontAndSize(self, fontname)
+#
+class chat_html_window(wx.html.HtmlWindow):
+    """ a wxHTMLwindow that will load links  """
+    # initialization subroutine
+    #
+    # !self : instance of self
+    # !parent :
+    # !id :
+    
+    def __init__(self, parent, id):
+        wx.html.HtmlWindow.__init__(self, parent, id, 
+                                    style=wx.SUNKEN_BORDER|wx.html.HW_SCROLLBAR_AUTO|wx.NO_FULL_REPAINT_ON_RESIZE)
+        self.parent = parent
+        self.build_menu()
+        self.Bind(wx.EVT_LEFT_UP, self.LeftUp)
+        self.Bind(wx.EVT_RIGHT_DOWN, self.onPopup)
+        if "gtk2" in wx.PlatformInfo: self.SetStandardFonts()
+        # def __init__ - end
+
+    
+    def onPopup(self, evt):
+        self.PopupMenu(self.menu)
+
+    
+    def LeftUp(self, event):
+        event.Skip()
+        wx.CallAfter(self.parent.set_chat_text_focus, None)
+
+    
+    def build_menu(self):
+        self.menu = wx.Menu()
+        item = wx.MenuItem(self.menu, wx.ID_ANY, "Copy", "Copy")
+        self.Bind(wx.EVT_MENU, self.OnM_EditCopy, item)
+        self.menu.AppendItem(item)
+
+    
+    def OnM_EditCopy(self, evt):
+        wx.TheClipboard.UsePrimarySelection(False)
+        wx.TheClipboard.Open()
+        wx.TheClipboard.SetData(wx.TextDataObject(self.SelectionToText()))
+        wx.TheClipboard.Close()
+
+    
+    def scroll_down(self):
+        maxrange = self.GetScrollRange(wx.VERTICAL)
+        pagesize = self.GetScrollPageSize(wx.VERTICAL)
+        self.Scroll(-1, maxrange-pagesize)
+
+    
+    def mouse_wheel(self, event):
+        amt = event.GetWheelRotation()
+        units = amt/(-(event.GetWheelDelta()))
+        self.ScrollLines(units*3)
+
+    
+    def Header(self):
+        return '<html><body bgcolor="' + self.parent.bgcolor + '" text="' + self.parent.textcolor + '">'
+
+    
+    def StripHeader(self):
+        return self.GetPageSource().replace(self.Header(), '')
+
+    
+    def GetPageSource(self):
+        return self.GetParser().GetSource()
+
+    # This subroutine fires up the webbrowser when a link is clicked.
+    #
+    # !self : instance of self
+    # !linkinfo : instance of a class that contains the link information
+    
+    def OnLinkClicked(self, linkinfo):
+        href = linkinfo.GetHref()
+        wb = webbrowser.get()
+        wb.open(href)
+    # def OnLinkClicked - end
+
+    
+    def CalculateAllFonts(self, defaultsize):
+        return [int(defaultsize * 0.4),
+                int(defaultsize * 0.7),
+                int(defaultsize),
+                int(defaultsize * 1.3),
+                int(defaultsize * 1.7),
+                int(defaultsize * 2),
+                int(defaultsize * 2.5)]
+
+    
+    def SetDefaultFontAndSize(self, fontname, fontsize):
+        """Set 'fontname' to the default chat font.
+           Returns current font settings in a (fontname, fontsize) tuple."""
+        self.SetFonts(fontname, "", self.CalculateAllFonts(int(fontsize)))
+        return (self.GetFont().GetFaceName(), self.GetFont().GetPointSize())
+
+# class chat_html_window - end
 if NEWCHAT:
-    class ChatHtmlWindow(wx.webview.WebView):
-        
-        def __init__(self, parent, id):
-            wx.webview.WebView.__init__(self, parent, id)
-            self.parent = parent
-            self.__font = wx.Font(10, wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, faceName='Ariel')
-            self.build_menu()
-            self.Bind(wx.EVT_LEFT_UP, self.LeftUp)
-            self.Bind(wx.EVT_RIGHT_DOWN, self.onPopup)
-            self.Bind(wx.webview.EVT_WEBVIEW_BEFORE_LOAD, self.OnLinkClicked)
-
-        #Wrapers so I dont have to add special Code
-        def SetPage(self, htmlstring):
-            self.SetPageSource(htmlstring)
-
+    class ChatHtmlWindow(wx.webview.WebView):
+        
+        def __init__(self, parent, id):
+            wx.webview.WebView.__init__(self, parent, id)
+            self.parent = parent
+            self.__font = wx.Font(10, wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, faceName='Ariel')
+            self.build_menu()
+            self.Bind(wx.EVT_LEFT_UP, self.LeftUp)
+            self.Bind(wx.EVT_RIGHT_DOWN, self.onPopup)
+            self.Bind(wx.webview.EVT_WEBVIEW_BEFORE_LOAD, self.OnLinkClicked)
+
+        #Wrapers so I dont have to add special Code
+        def SetPage(self, htmlstring):
+            self.SetPageSource(htmlstring)
+
         def AppendToPage(self, htmlstring):
-            self.SetPageSource(self.GetPageSource() + htmlstring)
-
-        def GetFont(self):
-            return self.__font
-
-        def CalculateAllFonts(self, defaultsize):
-            return
-
-        def SetDefaultFontAndSize(self, fontname, fontsize):
-            self.__font = wx.Font(int(fontsize), 
-                            wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_NORMAL, 
-                            wx.FONTWEIGHT_NORMAL, faceName=fontname)
-            try: self.SetPageSource(self.Header() + self.StripHeader())
-            except Exception, e: print e
-            return (self.GetFont().GetFaceName(), self.GetFont().GetPointSize())
-
-        #Events
-        def OnLinkClicked(self, linkinfo):
-            href = linkinfo.GetHref()
-            wb = webbrowser.get()
-            wb.open(href)
-
-        def onPopup(self, evt):
-            self.PopupMenu(self.menu)
-
-        def LeftUp(self, event):
-            event.Skip()
-            wx.CallAfter(self.parent.set_chat_text_focus, None)
-
-        def OnM_EditCopy(self, evt):
-            wx.TheClipboard.UsePrimarySelection(False)
-            wx.TheClipboard.Open()
-            wx.TheClipboard.SetData(wx.TextDataObject(self.SelectionToText()))
-            wx.TheClipboard.Close()
-
-        #Cutom Methods
-        def Header(self):
-            return "<html><head><style>body {font-size: " + str(self.GetFont().GetPointSize()) + "px;font-family: " + self.GetFont().GetFaceName() + ";color: " + self.parent.textcolor + ";background-color: " + self.parent.bgcolor + ";margin: 0;padding: 0 0;height: 100%;}</style></head><body>"
-
-        def StripHeader(self):
-            tmp = self.GetPageSource().split('<BODY>')
-            if tmp[-1].find('<body>') > -1: tmp = tmp[-1].split('<body>')
-            return tmp[-1]
-
-        def build_menu(self):
-            self.menu = wx.Menu()
-            item = wx.MenuItem(self.menu, wx.ID_ANY, "Copy", "Copy")
-            self.Bind(wx.EVT_MENU, self.OnM_EditCopy, item)
-            self.menu.AppendItem(item)
-
-        def scroll_down(self):
-            maxrange = self.GetScrollRange(wx.VERTICAL)
-            pagesize = self.GetScrollPageSize(wx.VERTICAL)
-            self.Scroll(-1, maxrange-pagesize)
-
-        def mouse_wheel(self, event):
-            amt = event.GetWheelRotation()
-            units = amt/(-(event.GetWheelDelta()))
-            self.ScrollLines(units*3)
-    chat_html_window = ChatHtmlWindow
-
-#########################
-#chat frame window
-#########################
-# These are kinda global...and static..and should be located somewhere else
-# then the middle of a file between two classes.
-
-###################
-# Tab Types
-###################
-MAIN_TAB = wx.NewId()
-WHISPER_TAB = wx.NewId()
-GROUP_TAB = wx.NewId()
-NULL_TAB = wx.NewId()
-
-# This class defines the tabbed 'notebook' that holds multiple chatpanels.
-# It's the widget attached to the main application frame.
-#
-# Inherits:  wxNotebook
-#
-# Defines:
-#   create_private_tab(self, playerid)
-#   get_tab_index(self, chatpanel)
-#   destroy_private_tab(self, chatpanel)
-#   OnPageChanged(self, event)
-#   set_default_font(self, font, fontsize)
-
-class chat_notebook(orpgTabberWnd):
-    
-    def __init__(self, parent, size):
-        orpgTabberWnd.__init__(self, parent, True, size=size, 
-                style=FNB.FNB_DROPDOWN_TABS_LIST|FNB.FNB_NO_NAV_BUTTONS|FNB.FNB_MOUSE_MIDDLE_CLOSES_TABS)
-        self.settings = component.get("settings")
-        self.whisper_tabs = []
-        self.group_tabs = []
-        self.null_tabs = []
-        self.il = wx.ImageList(16, 16)
-        bmp = wx.Bitmap(dir_struct["icon"]+'player.gif')
-        self.il.Add(bmp)
-        bmp = wx.Bitmap(dir_struct["icon"]+'clear.gif')
-        self.il.Add(bmp)
-        self.SetImageList(self.il)
-        # Create "main" chatpanel tab, undeletable, connected to 'public' room.
-        self.MainChatPanel = chat_panel(self, -1, MAIN_TAB, 'all')
-        self.AddPage(self.MainChatPanel, "Main Room")
-        self.SetPageImage(0, 1)
-        self.chat_timer = wx.Timer(self, wx.NewId())
-        self.Bind(wx.EVT_TIMER, self.MainChatPanel.typingTimerFunc)
-        self.chat_timer.Start(1000)
-        # Hook up event handler for flipping tabs
-        self.Bind(FNB.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.onPageChanged)
-        self.Bind(FNB.EVT_FLATNOTEBOOK_PAGE_CHANGING, self.onPageChanging)
-        self.Bind(FNB.EVT_FLATNOTEBOOK_PAGE_CLOSING, self.onCloseTab)
-        # html font/fontsize is global to all the notebook tabs.
-        self.font, self.fontsize =  self.MainChatPanel.chatwnd.SetDefaultFontAndSize(self.settings.get_setting('defaultfont'), self.settings.get_setting('defaultfontsize'))
-        self.GMChatPanel = None
-        if self.settings.get_setting("GMWhisperTab") == '1':
-            self.create_gm_tab()
-        self.SetSelection(0)
-
-    def get_tab_index(self, chatpanel):
-        "Return the index of a chatpanel in the wxNotebook."
-
-        for i in xrange(self.GetPageCount()):
-            if (self.GetPage(i) == chatpanel):
-                return i
-
-    def create_gm_tab(self):
-        if self.GMChatPanel == None:
-            self.GMChatPanel = chat_panel(self, -1, MAIN_TAB, 'gm')
-            self.AddPage(self.GMChatPanel, "GM", False)
-            self.SetPageImage(self.GetPageCount()-1, 1)
-            self.GMChatPanel.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
-
-    def create_whisper_tab(self, playerid):
-        "Add a new chatpanel directly connected to integer 'playerid' via whispering."
-        private_tab = chat_panel(self, -1, WHISPER_TAB, playerid)
-        playername = strip_html(self.MainChatPanel.session.get_player_by_player_id(playerid)[0])
-        self.AddPage(private_tab, playername, False)
-        private_tab.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
-        self.whisper_tabs.append(private_tab)
-        self.newMsg(self.GetPageCount()-1)
-        self.AliasLib = component.get('alias')
-        wx.CallAfter(self.AliasLib.RefreshAliases)
-        return private_tab
-
-    def create_group_tab(self, group_name):
-        "Add a new chatpanel directly connected to integer 'playerid' via whispering."
-        private_tab = chat_panel(self, -1, GROUP_TAB, group_name)
-        self.AddPage(private_tab, group_name, False)
-        private_tab.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
-        self.group_tabs.append(private_tab)
-        self.newMsg(self.GetPageCount()-1)
-        self.AliasLib = component.get('alias')
-        wx.CallAfter(self.AliasLib.RefreshAliases)
-        return private_tab
-
-    def create_null_tab(self, tab_name):
-        "Add a new chatpanel directly connected to integer 'playerid' via whispering."
-        private_tab = chat_panel(self, -1, NULL_TAB, tab_name)
-        self.AddPage(private_tab, tab_name, False)
-        private_tab.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
-        self.null_tabs.append(private_tab)
-        self.newMsg(self.GetPageCount()-1)
-        self.AliasLib = component.get('alias')
-        wx.CallAfter(self.AliasLib.RefreshAliases)
-        return private_tab
-
-    def onCloseTab(self, evt):
-        try: tabid = evt.GetSelection()
-        except: tabid = self.GetSelection()
-        if self.GetPageText(tabid) == 'Main Room':
-            #send no close error to chat
-            evt.Veto()
-            return
-        if self.GetPageText(tabid) == 'GM':
-            msg = "Are You Sure You Want To Close This Page?"
-            dlg = wx.MessageDialog(self, msg, "NotebookCtrl Question",
-                                   wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-            if wx.Platform != '__WXMAC__':
-                dlg.SetFont(wx.Font(8, wx.NORMAL, wx.NORMAL, wx.NORMAL, False))
-
-            if dlg.ShowModal() in [wx.ID_NO]:
-                dlg.Destroy()
-                evt.Veto()
-                return
-            dlg.Destroy()
-            self.GMChatPanel = None
-            self.settings.set_setting("GMWhisperTab", "0")
-        panel = self.GetPage(tabid)
-        if panel in self.whisper_tabs: self.whisper_tabs.remove(panel)
-        elif panel in self.group_tabs: self.group_tabs.remove(panel)
-        elif panel in self.null_tabs: self.null_tabs.remove(panel)
-
-    def newMsg(self, tabid):
-        if tabid != self.GetSelection(): self.SetPageImage(tabid, 0)
-
-    def onPageChanging(self, event):
-        """When private chattabs are selected, set the bitmap back to 'normal'."""
-        event.Skip()
-
-    def onPageChanged(self, event):
-        """When private chattabs are selected, set the bitmap back to 'normal'."""
-        selected_idx = event.GetSelection()
-        self.SetPageImage(selected_idx, 1)
-        page = self.GetPage(selected_idx)
-        #wx.CallAfter(page.set_chat_text_focus, 0)
-        event.Skip()
-
-"""
- This class defines and builds the Chat Frame for OpenRPG
-
- Inherits: wxPanel
-
- Defines:
-   __init__((self, parent, id, openrpg, sendtarget)
-   build_ctrls(self)
-   on_buffer_size(self,evt)
-   set_colors(self)
-   set_buffersize(self)
-   set_chat_text(self,txt)
-   OnChar(self,event)
-   on_chat_save(self,evt)
-   on_text_color(self,event)
-   colorize(self, color, text)
-   on_text_format(self,event)
-   OnSize(self,event)
-   scroll_down(self)
-   InfoPost(self,s)
-   Post(self,s="",send=False,myself=False)
-   ParsePost(self,s,send=False,myself=False)
-   ParseDice(self,s)
-   ParseNodes(self,s)
-   get_sha_checksum(self)
-   get_color(self)
-
-"""
-
-class chat_panel(wx.Panel):
-
-    """
-    This is the initialization subroutine
-    
-    !self : instance of self
-    !parent : parent that defines the chatframe
-    !id :
-    !openrpg :
-    !sendtarget:  who gets outbound messages: either 'all' or a playerid
-    """
-
-    
-    def __init__(self, parent, id, tab_type, sendtarget):
-        wx.Panel.__init__(self, parent, id)
-        logger._set_log_to_console(False)
-        self.session = component.get('session')
-        self.settings = component.get('settings')
-        self.activeplugins = component.get('plugins')
-        self.parent = parent
-        # who receives outbound messages, either "all" or "playerid" string
-        self.sendtarget = sendtarget
-        self.type = tab_type
-        #self.sound_player = component.get('sound') #Removing!
-        # create die roller manager
-        #self.DiceManager = component.get('DiceManager') #Removing!
-        # create rpghex tool
-        self.r_h = orpg.tools.rgbhex.RGBHex()
-        self.h = 0
-        self.set_colors()
-        self.version = VERSION
-        self.histidx = -1
-        self.temptext = ""
-        self.history = []
-        self.storedata = []
-        #self.lasthistevt = None
-        self.parsed=0
-        #chat commands
-        self.lockscroll = False      # set the default to scrolling on.
-        self.chat_cmds = commands.chat_commands(self)
-        self.html_strip = strip_html
-        #Alias Lib stuff
-        self.defaultAliasName = 'Use Real Name'
-        self.defaultFilterName = 'No Filter'
-        self.advancedFilter = False
-        self.lastSend = 0         #  this is used to help implement the player typing indicator
-        self.lastPress = 0        #  this is used to help implement the player typing indicator
-        self.Bind(wx.EVT_SIZE, self.OnSize)
-        self.Bind(EVT_ETC_LAYOUT_NEEDED, self.OnSize) #require to keep text at bottom of chat when text entry expands --SD
-        self.build_ctrls()
-        StartupFont = self.settings.get_setting("defaultfont")
-        StartupFontSize = self.settings.get_setting("defaultfontsize")
-        if(StartupFont != "") and (StartupFontSize != ""):
-            try: self.set_default_font(StartupFont, int(StartupFontSize))
-            except: pass
-        self.font = self.chatwnd.GetFont().GetFaceName()
-        self.fontsize = self.chatwnd.GetFont().GetPointSize()
-        self.scroll_down()
-
-    def set_default_font(self, fontname=None, fontsize=None):
-        """Set all chatpanels to new default fontname/fontsize. 
-        Returns current font settings in a (fontname, fontsize) tuple."""
-        if (fontname is not None): newfont = fontname
-        else: newfont = self.font
-        if (fontsize is not None): newfontsize = int(fontsize)
-        else: newfontsize = int(self.fontsize)
-        self.chatwnd.SetDefaultFontAndSize(newfont, newfontsize)
-        self.InfoPost("Font is now " + newfont + " point size " + `newfontsize`)
-        self.font = newfont
-        self.fontsize = newfontsize
-        return (self.font, self.fontsize)
-
-    def build_menu(self):
-        top_frame = component.get('frame')
-        menu = wx.Menu()
-        item = wx.MenuItem(menu, wx.ID_ANY, "&Background color", "Background color")
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_BackgroundColor, item)
-        menu.AppendItem(item)
-        item = wx.MenuItem(menu, wx.ID_ANY, "&Text color", "Text color")
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_TextColor, item)
-        menu.AppendItem(item)
-        menu.AppendSeparator()
-        item = wx.MenuItem(menu, wx.ID_ANY, "&Chat Focus\tCtrl-H", "Chat Focus")
-        self.setChatFocusMenu = item
-        top_frame.Bind(wx.EVT_MENU, self.set_chat_text_focus, item)
-        menu.AppendItem(item)
-        menu.AppendSeparator()
-        item = wx.MenuItem(menu, wx.ID_ANY, "Toggle &Scroll Lock", "Toggle Scroll Lock")
-        top_frame.Bind(wx.EVT_MENU, self.lock_scroll, item)
-        menu.AppendItem(item)
-        item = wx.MenuItem(menu, wx.ID_ANY, "Save Chat &Log", "Save Chat Log")
-        top_frame.Bind(wx.EVT_MENU, self.on_chat_save, item)
-        menu.AppendItem(item)
-        item = wx.MenuItem(menu, wx.ID_ANY, "Text &View", "Text View")
-        top_frame.Bind(wx.EVT_MENU, self.pop_textpop, item)
-        menu.AppendItem(item)
-        item = wx.MenuItem(menu, wx.ID_ANY, "Forward Tab\tCtrl+Tab", "Swap Tabs")
-        top_frame.Bind(wx.EVT_MENU, self.forward_tabs, item)
-        menu.AppendItem(item)
-        item = wx.MenuItem(menu, wx.ID_ANY, "Forward Tab\tCtrl+Shift+Tab", "Swap Tabs")
-        top_frame.Bind(wx.EVT_MENU, self.back_tabs, item)
-        menu.AppendItem(item)
-        menu.AppendSeparator()
-        settingmenu = wx.Menu()
-        wndmenu = wx.Menu()
-        tabmenu = wx.Menu()
-        toolmenu = wx.Menu()
-        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Show Images", "Show Images", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_ShowImages, item)
-
-        wndmenu.AppendItem(item)
-        if self.settings.get_setting("Show_Images_In_Chat") == '1': item.Check(True)
-        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Strip HTML", "Strip HTML", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_StripHTML, item)
-        wndmenu.AppendItem(item)
-        if self.settings.get_setting("striphtml") == '1': item.Check(True)
-        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Chat Time Index", "Chat Time Index", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_ChatTimeIndex, item)
-        wndmenu.AppendItem(item)
-        if self.settings.get_setting("Chat_Time_Indexing") == '1': item.Check(True)
-        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Chat Auto Complete", "Chat Auto Complete", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_ChatAutoComplete, item)
-        wndmenu.AppendItem(item)
-        if self.settings.get_setting("SuppressChatAutoComplete") == '0': item.Check(True)
-        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Show ID in Chat", "Show ID in Chat", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_ShowIDinChat, item)
-        wndmenu.AppendItem(item)
-        if self.settings.get_setting("ShowIDInChat") == '1': item.Check(True)
-        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Log Time Index", "Log Time Index", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_LogTimeIndex, item)
-        wndmenu.AppendItem(item)
-        if self.settings.get_setting("TimeStampGameLog") == '1': item.Check(True)
-        settingmenu.AppendMenu(wx.ID_ANY, 'Chat Window', wndmenu )
-        item = wx.MenuItem(tabmenu, wx.ID_ANY, "Tabbed Whispers", "Tabbed Whispers", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_TabbedWhispers, item)
-        tabmenu.AppendItem(item)
-        if self.settings.get_setting("tabbedwhispers") == '1': item.Check(True)
-        item = wx.MenuItem(tabmenu, wx.ID_ANY, "GM Tab", "GM Tab", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_GMTab, item)
-        tabmenu.AppendItem(item)
-        if self.settings.get_setting("GMWhisperTab") == '1':item.Check(True)
-        item = wx.MenuItem(tabmenu, wx.ID_ANY, "Group Whisper Tabs", "Group Whisper Tabs", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_GroupWhisperTabs, item)
-        tabmenu.AppendItem(item)
-        if self.settings.get_setting("GroupWhisperTab") == '1': item.Check(True)
-        settingmenu.AppendMenu(wx.ID_ANY, 'Chat Tabs', tabmenu)
-        item = wx.MenuItem(toolmenu, wx.ID_ANY, "Dice Bar", "Dice Bar", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_DiceBar, item)
-        toolmenu.AppendItem(item)
-        if self.settings.get_setting("DiceButtons_On") == '1': item.Check(True)
-        item = wx.MenuItem(toolmenu, wx.ID_ANY, "Format Buttons", "Format Buttons", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_FormatButtons, item)
-        toolmenu.AppendItem(item)
-        if self.settings.get_setting("FormattingButtons_On") == '1': item.Check(True)
-        item = wx.MenuItem(toolmenu, wx.ID_ANY, "Alias Tool", "Alias Tool", wx.ITEM_CHECK)
-        top_frame.Bind(wx.EVT_MENU, self.OnMB_AliasTool, item)
-        toolmenu.AppendItem(item)
-        if self.settings.get_setting("AliasTool_On") == '1': item.Check(True)
-        settingmenu.AppendMenu(wx.ID_ANY, 'Chat Tool Bars', toolmenu)
-        menu.AppendMenu(wx.ID_ANY, 'Chat Settings', settingmenu)
-        top_frame.mainmenu.Insert(2, menu, '&Chat')
-
-    ## Settings Menu Events
-    def OnMB_ShowImages(self, event):
-        if event.IsChecked(): self.settings.set_setting("Show_Images_In_Chat", '1')
-        else: self.settings.set_setting("Show_Images_In_Chat", '0')
-
-    def OnMB_StripHTML(self, event):
-        if event.IsChecked(): self.settings.set_setting("striphtml", '1')
-        else: self.settings.set_setting("striphtml", '0')
-
-    def OnMB_ChatTimeIndex(self, event):
-        if event.IsChecked(): self.settings.set_setting("Chat_Time_Indexing", '1')
-        else: self.settings.set_setting("Chat_Time_Indexing", '0')
-
-    def OnMB_ChatAutoComplete(self, event):
-        if event.IsChecked(): self.settings.set_setting("SuppressChatAutoComplete", '0')
-        else: self.settings.set_setting("SuppressChatAutoComplete", '1')
-
-    def OnMB_ShowIDinChat(self, event):
-        if event.IsChecked(): self.settings.set_setting("ShowIDInChat", '1')
-        else: self.settings.set_setting("ShowIDInChat", '0')
-
-    def OnMB_LogTimeIndex(self, event):
-        if event.IsChecked(): self.settings.set_setting("TimeStampGameLog", '1')
-        else: self.settings.set_setting("TimeStampGameLog", '0')
-
-    def OnMB_TabbedWhispers(self, event):
-        if event.IsChecked(): self.settings.set_setting("tabbedwhispers", '1')
-        else: self.settings.set_setting("tabbedwhispers", '0')
-
-    def OnMB_GMTab(self, event):
-        if event.IsChecked():
-            self.settings.set_setting("GMWhisperTab", '1')
-            self.parent.create_gm_tab()
-        else: self.settings.set_setting("GMWhisperTab", '0')
-
-    def OnMB_GroupWhisperTabs(self, event):
-        if event.IsChecked(): self.settings.set_setting("GroupWhisperTab", '1')
-        else: self.settings.set_setting("GroupWhisperTab", '0')
-
-    def OnMB_DiceBar(self, event):
-        act = '0'
-        if event.IsChecked():
-            self.settings.set_setting("DiceButtons_On", '1')
-            act = '1'
-        else: self.settings.set_setting("DiceButtons_On", '0')
-        self.toggle_dice(act)
-        try: self.parent.GMChatPanel.toggle_dice(act)
-        except: pass
-        for panel in self.parent.whisper_tabs: panel.toggle_dice(act)
-        for panel in self.parent.group_tabs: panel.toggle_dice(act)
-        for panel in self.parent.null_tabs: panel.toggle_dice(act)
-
-    def OnMB_FormatButtons(self, event):
-        act = '0'
-        if event.IsChecked():
-            self.settings.set_setting("FormattingButtons_On", '1')
-            act = '1'
-        else:
-            self.settings.set_setting("FormattingButtons_On", '0')
-        self.toggle_formating(act)
-        try: self.parent.GMChatPanel.toggle_formating(act)
-        except: pass
-        for panel in self.parent.whisper_tabs: panel.toggle_formating(act)
-        for panel in self.parent.group_tabs: panel.toggle_formating(act)
-        for panel in self.parent.null_tabs: panel.toggle_formating(act)
-
-    def OnMB_AliasTool(self, event):
-        act = '0'
-        if event.IsChecked():
-            self.settings.set_setting("AliasTool_On", '1')
-            act = '1'
-        else: self.settings.set_setting("AliasTool_On", '0')
-        self.toggle_alias(act)
-        try: self.parent.GMChatPanel.toggle_alias(act)
-        except: pass
-        for panel in self.parent.whisper_tabs: panel.toggle_alias(act)
-        for panel in self.parent.group_tabs: panel.toggle_alias(act)
-        for panel in self.parent.null_tabs:panel.toggle_alias(act)
-
-    def OnMB_BackgroundColor(self, event):
-        top_frame = component.get('frame')
-        hexcolor = self.get_color()
-        if hexcolor != None:
-            self.bgcolor = hexcolor
-            self.settings.set_setting('bgcolor', hexcolor)
-            self.chatwnd.SetPage(self.ResetPage())
-            if self.settings.get_setting('ColorTree') == '1':
-                top_frame.tree.SetBackgroundColour(self.settings.get_setting('bgcolor'))
-                top_frame.tree.Refresh()
-                top_frame.players.SetBackgroundColour(self.settings.get_setting('bgcolor'))
-                top_frame.players.Refresh()
-            else:
-                top_frame.tree.SetBackgroundColour('white')
-                top_frame.tree.SetForegroundColour('black')
-                top_frame.tree.Refresh()
-                top_frame.players.SetBackgroundColour('white')
-                top_frame.players.SetForegroundColour('black')
-                top_frame.players.Refresh()
-            self.chatwnd.scroll_down()
-
-    
-    def OnMB_TextColor(self, event):
-        top_frame = component.get('frame')
-        hexcolor = self.get_color()
-        if hexcolor != None:
-            self.textcolor = hexcolor
-            self.settings.set_setting('textcolor', hexcolor)
-            self.chatwnd.SetPage(self.ResetPage())
-            if self.settings.get_setting('ColorTree') == '1':
-                top_frame.tree.SetForegroundColour(self.settings.get_setting('textcolor'))
-                top_frame.tree.Refresh()
-                top_frame.players.SetForegroundColour(self.settings.get_setting('textcolor'))
-                top_frame.players.Refresh()
-            else:
-                top_frame.tree.SetBackgroundColour('white')
-                top_frame.tree.SetForegroundColour('black')
-                top_frame.tree.Refresh()
-                top_frame.players.SetBackgroundColour('white')
-                top_frame.players.SetForegroundColour('black')
-                top_frame.players.Refresh()
-            self.chatwnd.scroll_down()
-
-    
-    def get_hot_keys(self):
-        # dummy menus for hotkeys
-        self.build_menu()
-        entries = []
-        entries.append((wx.ACCEL_CTRL, ord('H'), self.setChatFocusMenu.GetId()))
-        #entries.append((wx.ACCEL_CTRL, wx.WXK_TAB, SWAP_TABS))
-        return entries
-
-    
-    def forward_tabs(self, evt):
-        self.parent.AdvanceSelection()
-
-    def back_tabs(self, evt):
-        self.parent.AdvanceSelection(False)
-
-    # This subroutine builds the controls for the chat frame
-    #
-    # !self : instance of self
-    
-    def build_ctrls(self):
-        self.chatwnd = chat_html_window(self,-1)
-        self.set_colors()
-        wx.CallAfter(self.chatwnd.SetPage, self.chatwnd.Header())
-        if (self.sendtarget == "all"):
-            wx.CallAfter(self.Post, self.colorize(self.syscolor, 
-                "<b>Welcome to <a href='http://www.openrpg.com'>OpenRPG</a> version " + self.version + "...  </b>"))
-            #self.chat_cmds.on_help()
-        self.chattxt = orpg.tools.predTextCtrl.predTextCtrl(self, -1, "", 
-                        style=wx.TE_PROCESS_ENTER |wx.TE_PROCESS_TAB|wx.TE_LINEWRAP, 
-                        keyHook = self.myKeyHook, validator=None )
-        self.build_bar()
-        self.basesizer = wx.BoxSizer(wx.VERTICAL)
-        self.basesizer.Add( self.chatwnd, 1, wx.EXPAND )
-        self.basesizer.Add( self.toolbar_sizer, 0, wx.EXPAND )
+            self.SetPageSource(self.GetPageSource() + htmlstring)
+
+        def GetFont(self):
+            return self.__font
+
+        def CalculateAllFonts(self, defaultsize):
+            return
+
+        def SetDefaultFontAndSize(self, fontname, fontsize):
+            self.__font = wx.Font(int(fontsize), 
+                            wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_NORMAL, 
+                            wx.FONTWEIGHT_NORMAL, faceName=fontname)
+            try: self.SetPageSource(self.Header() + self.StripHeader())
+            except Exception, e: print e
+            return (self.GetFont().GetFaceName(), self.GetFont().GetPointSize())
+
+        #Events
+        def OnLinkClicked(self, linkinfo):
+            href = linkinfo.GetHref()
+            wb = webbrowser.get()
+            wb.open(href)
+
+        def onPopup(self, evt):
+            self.PopupMenu(self.menu)
+
+        def LeftUp(self, event):
+            event.Skip()
+            wx.CallAfter(self.parent.set_chat_text_focus, None)
+
+        def OnM_EditCopy(self, evt):
+            wx.TheClipboard.UsePrimarySelection(False)
+            wx.TheClipboard.Open()
+            wx.TheClipboard.SetData(wx.TextDataObject(self.SelectionToText()))
+            wx.TheClipboard.Close()
+
+        #Cutom Methods
+        def Header(self):
+            return "<html><head><style>body {font-size: " + str(self.GetFont().GetPointSize()) + "px;font-family: " + self.GetFont().GetFaceName() + ";color: " + self.parent.textcolor + ";background-color: " + self.parent.bgcolor + ";margin: 0;padding: 0 0;height: 100%;}</style></head><body>"
+
+        def StripHeader(self):
+            tmp = self.GetPageSource().split('<BODY>')
+            if tmp[-1].find('<body>') > -1: tmp = tmp[-1].split('<body>')
+            return tmp[-1]
+
+        def build_menu(self):
+            self.menu = wx.Menu()
+            item = wx.MenuItem(self.menu, wx.ID_ANY, "Copy", "Copy")
+            self.Bind(wx.EVT_MENU, self.OnM_EditCopy, item)
+            self.menu.AppendItem(item)
+
+        def scroll_down(self):
+            maxrange = self.GetScrollRange(wx.VERTICAL)
+            pagesize = self.GetScrollPageSize(wx.VERTICAL)
+            self.Scroll(-1, maxrange-pagesize)
+
+        def mouse_wheel(self, event):
+            amt = event.GetWheelRotation()
+            units = amt/(-(event.GetWheelDelta()))
+            self.ScrollLines(units*3)
+    chat_html_window = ChatHtmlWindow
+
+#########################
+#chat frame window
+#########################
+# These are kinda global...and static..and should be located somewhere else
+# then the middle of a file between two classes.
+
+###################
+# Tab Types
+###################
+MAIN_TAB = wx.NewId()
+WHISPER_TAB = wx.NewId()
+GROUP_TAB = wx.NewId()
+NULL_TAB = wx.NewId()
+
+# This class defines the tabbed 'notebook' that holds multiple chatpanels.
+# It's the widget attached to the main application frame.
+#
+# Inherits:  wxNotebook
+#
+# Defines:
+#   create_private_tab(self, playerid)
+#   get_tab_index(self, chatpanel)
+#   destroy_private_tab(self, chatpanel)
+#   OnPageChanged(self, event)
+#   set_default_font(self, font, fontsize)
+
+class chat_notebook(orpgTabberWnd):
+    
+    def __init__(self, parent, size):
+        orpgTabberWnd.__init__(self, parent, True, size=size, 
+                style=FNB.FNB_DROPDOWN_TABS_LIST|FNB.FNB_NO_NAV_BUTTONS|FNB.FNB_MOUSE_MIDDLE_CLOSES_TABS)
+        self.settings = component.get("settings")
+        self.whisper_tabs = []
+        self.group_tabs = []
+        self.null_tabs = []
+        self.il = wx.ImageList(16, 16)
+        bmp = wx.Bitmap(dir_struct["icon"]+'player.gif')
+        self.il.Add(bmp)
+        bmp = wx.Bitmap(dir_struct["icon"]+'clear.gif')
+        self.il.Add(bmp)
+        self.SetImageList(self.il)
+        # Create "main" chatpanel tab, undeletable, connected to 'public' room.
+        self.MainChatPanel = chat_panel(self, -1, MAIN_TAB, 'all')
+        self.AddPage(self.MainChatPanel, "Main Room")
+        self.SetPageImage(0, 1)
+        self.chat_timer = wx.Timer(self, wx.NewId())
+        self.Bind(wx.EVT_TIMER, self.MainChatPanel.typingTimerFunc)
+        self.chat_timer.Start(1000)
+        # Hook up event handler for flipping tabs
+        self.Bind(FNB.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.onPageChanged)
+        self.Bind(FNB.EVT_FLATNOTEBOOK_PAGE_CHANGING, self.onPageChanging)
+        self.Bind(FNB.EVT_FLATNOTEBOOK_PAGE_CLOSING, self.onCloseTab)
+        # html font/fontsize is global to all the notebook tabs.
+        self.font, self.fontsize =  self.MainChatPanel.chatwnd.SetDefaultFontAndSize(self.settings.get_setting('defaultfont'), self.settings.get_setting('defaultfontsize'))
+        self.GMChatPanel = None
+        if self.settings.get_setting("GMWhisperTab") == '1':
+            self.create_gm_tab()
+        self.SetSelection(0)
+
+    def get_tab_index(self, chatpanel):
+        "Return the index of a chatpanel in the wxNotebook."
+
+        for i in xrange(self.GetPageCount()):
+            if (self.GetPage(i) == chatpanel):
+                return i
+
+    def create_gm_tab(self):
+        if self.GMChatPanel == None:
+            self.GMChatPanel = chat_panel(self, -1, MAIN_TAB, 'gm')
+            self.AddPage(self.GMChatPanel, "GM", False)
+            self.SetPageImage(self.GetPageCount()-1, 1)
+            self.GMChatPanel.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
+
+    def create_whisper_tab(self, playerid):
+        "Add a new chatpanel directly connected to integer 'playerid' via whispering."
+        private_tab = chat_panel(self, -1, WHISPER_TAB, playerid)
+        playername = strip_html(self.MainChatPanel.session.get_player_by_player_id(playerid)[0])
+        self.AddPage(private_tab, playername, False)
+        private_tab.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
+        self.whisper_tabs.append(private_tab)
+        self.newMsg(self.GetPageCount()-1)
+        self.AliasLib = component.get('alias')
+        wx.CallAfter(self.AliasLib.RefreshAliases)
+        return private_tab
+
+    def create_group_tab(self, group_name):
+        "Add a new chatpanel directly connected to integer 'playerid' via whispering."
+        private_tab = chat_panel(self, -1, GROUP_TAB, group_name)
+        self.AddPage(private_tab, group_name, False)
+        private_tab.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
+        self.group_tabs.append(private_tab)
+        self.newMsg(self.GetPageCount()-1)
+        self.AliasLib = component.get('alias')
+        wx.CallAfter(self.AliasLib.RefreshAliases)
+        return private_tab
+
+    def create_null_tab(self, tab_name):
+        "Add a new chatpanel directly connected to integer 'playerid' via whispering."
+        private_tab = chat_panel(self, -1, NULL_TAB, tab_name)
+        self.AddPage(private_tab, tab_name, False)
+        private_tab.chatwnd.SetDefaultFontAndSize(self.font, self.fontsize)
+        self.null_tabs.append(private_tab)
+        self.newMsg(self.GetPageCount()-1)
+        self.AliasLib = component.get('alias')
+        wx.CallAfter(self.AliasLib.RefreshAliases)
+        return private_tab
+
+    def onCloseTab(self, evt):
+        try: tabid = evt.GetSelection()
+        except: tabid = self.GetSelection()
+        if self.GetPageText(tabid) == 'Main Room':
+            #send no close error to chat
+            evt.Veto()
+            return
+        if self.GetPageText(tabid) == 'GM':
+            msg = "Are You Sure You Want To Close This Page?"
+            dlg = wx.MessageDialog(self, msg, "NotebookCtrl Question",
+                                   wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+            if wx.Platform != '__WXMAC__':
+                dlg.SetFont(wx.Font(8, wx.NORMAL, wx.NORMAL, wx.NORMAL, False))
+
+            if dlg.ShowModal() in [wx.ID_NO]:
+                dlg.Destroy()
+                evt.Veto()
+                return
+            dlg.Destroy()
+            self.GMChatPanel = None
+            self.settings.set_setting("GMWhisperTab", "0")
+        panel = self.GetPage(tabid)
+        if panel in self.whisper_tabs: self.whisper_tabs.remove(panel)
+        elif panel in self.group_tabs: self.group_tabs.remove(panel)
+        elif panel in self.null_tabs: self.null_tabs.remove(panel)
+
+    def newMsg(self, tabid):
+        if tabid != self.GetSelection(): self.SetPageImage(tabid, 0)
+
+    def onPageChanging(self, event):
+        """When private chattabs are selected, set the bitmap back to 'normal'."""
+        event.Skip()
+
+    def onPageChanged(self, event):
+        """When private chattabs are selected, set the bitmap back to 'normal'."""
+        selected_idx = event.GetSelection()
+        self.SetPageImage(selected_idx, 1)
+        page = self.GetPage(selected_idx)
+        #wx.CallAfter(page.set_chat_text_focus, 0)
+        event.Skip()
+
+"""
+ This class defines and builds the Chat Frame for OpenRPG
+
+ Inherits: wxPanel
+
+ Defines:
+   __init__((self, parent, id, openrpg, sendtarget)
+   build_ctrls(self)
+   on_buffer_size(self,evt)
+   set_colors(self)
+   set_buffersize(self)
+   set_chat_text(self,txt)
+   OnChar(self,event)
+   on_chat_save(self,evt)
+   on_text_color(self,event)
+   colorize(self, color, text)
+   on_text_format(self,event)
+   OnSize(self,event)
+   scroll_down(self)
+   InfoPost(self,s)
+   Post(self,s="",send=False,myself=False)
+   ParsePost(self,s,send=False,myself=False)
+   ParseDice(self,s)
+   ParseNodes(self,s)
+   get_sha_checksum(self)
+   get_color(self)
+
+"""
+
+class chat_panel(wx.Panel):
+
+    """
+    This is the initialization subroutine
+    
+    !self : instance of self
+    !parent : parent that defines the chatframe
+    !id :
+    !openrpg :
+    !sendtarget:  who gets outbound messages: either 'all' or a playerid
+    """
+
+    
+    def __init__(self, parent, id, tab_type, sendtarget):
+        wx.Panel.__init__(self, parent, id)
+        logger._set_log_to_console(False)
+        self.session = component.get('session')
+        self.settings = component.get('settings')
+        self.activeplugins = component.get('plugins')
+        self.parent = parent
+        # who receives outbound messages, either "all" or "playerid" string
+        self.sendtarget = sendtarget
+        self.type = tab_type
+        #self.sound_player = component.get('sound') #Removing!
+        # create die roller manager
+        #self.DiceManager = component.get('DiceManager') #Removing!
+        # create rpghex tool
+        self.r_h = orpg.tools.rgbhex.RGBHex()
+        self.h = 0
+        self.set_colors()
+        self.version = VERSION
+        self.histidx = -1
+        self.temptext = ""
+        self.history = []
+        self.storedata = []
+        #self.lasthistevt = None
+        self.parsed=0
+        #chat commands
+        self.lockscroll = False      # set the default to scrolling on.
+        self.chat_cmds = commands.chat_commands(self)
+        self.html_strip = strip_html
+        #Alias Lib stuff
+        self.defaultAliasName = 'Use Real Name'
+        self.defaultFilterName = 'No Filter'
+        self.advancedFilter = False
+        self.lastSend = 0         #  this is used to help implement the player typing indicator
+        self.lastPress = 0        #  this is used to help implement the player typing indicator
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.Bind(EVT_ETC_LAYOUT_NEEDED, self.OnSize) #require to keep text at bottom of chat when text entry expands --SD
+        self.build_ctrls()
+        StartupFont = self.settings.get_setting("defaultfont")
+        StartupFontSize = self.settings.get_setting("defaultfontsize")
+        if(StartupFont != "") and (StartupFontSize != ""):
+            try: self.set_default_font(StartupFont, int(StartupFontSize))
+            except: pass
+        self.font = self.chatwnd.GetFont().GetFaceName()
+        self.fontsize = self.chatwnd.GetFont().GetPointSize()
+        self.scroll_down()
+
+    def set_default_font(self, fontname=None, fontsize=None):
+        """Set all chatpanels to new default fontname/fontsize. 
+        Returns current font settings in a (fontname, fontsize) tuple."""
+        if (fontname is not None): newfont = fontname
+        else: newfont = self.font
+        if (fontsize is not None): newfontsize = int(fontsize)
+        else: newfontsize = int(self.fontsize)
+        self.chatwnd.SetDefaultFontAndSize(newfont, newfontsize)
+        self.InfoPost("Font is now " + newfont + " point size " + `newfontsize`)
+        self.font = newfont
+        self.fontsize = newfontsize
+        return (self.font, self.fontsize)
+
+    def build_menu(self):
+        top_frame = component.get('frame')
+        menu = wx.Menu()
+        item = wx.MenuItem(menu, wx.ID_ANY, "&Background color", "Background color")
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_BackgroundColor, item)
+        menu.AppendItem(item)
+        item = wx.MenuItem(menu, wx.ID_ANY, "&Text color", "Text color")
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_TextColor, item)
+        menu.AppendItem(item)
+        menu.AppendSeparator()
+        item = wx.MenuItem(menu, wx.ID_ANY, "&Chat Focus\tCtrl-H", "Chat Focus")
+        self.setChatFocusMenu = item
+        top_frame.Bind(wx.EVT_MENU, self.set_chat_text_focus, item)
+        menu.AppendItem(item)
+        menu.AppendSeparator()
+        item = wx.MenuItem(menu, wx.ID_ANY, "Toggle &Scroll Lock", "Toggle Scroll Lock")
+        top_frame.Bind(wx.EVT_MENU, self.lock_scroll, item)
+        menu.AppendItem(item)
+        item = wx.MenuItem(menu, wx.ID_ANY, "Save Chat &Log", "Save Chat Log")
+        top_frame.Bind(wx.EVT_MENU, self.on_chat_save, item)
+        menu.AppendItem(item)
+        item = wx.MenuItem(menu, wx.ID_ANY, "Text &View", "Text View")
+        top_frame.Bind(wx.EVT_MENU, self.pop_textpop, item)
+        menu.AppendItem(item)
+        item = wx.MenuItem(menu, wx.ID_ANY, "Forward Tab\tCtrl+Tab", "Swap Tabs")
+        top_frame.Bind(wx.EVT_MENU, self.forward_tabs, item)
+        menu.AppendItem(item)
+        item = wx.MenuItem(menu, wx.ID_ANY, "Forward Tab\tCtrl+Shift+Tab", "Swap Tabs")
+        top_frame.Bind(wx.EVT_MENU, self.back_tabs, item)
+        menu.AppendItem(item)
+        menu.AppendSeparator()
+        settingmenu = wx.Menu()
+        wndmenu = wx.Menu()
+        tabmenu = wx.Menu()
+        toolmenu = wx.Menu()
+        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Show Images", "Show Images", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_ShowImages, item)
+
+        wndmenu.AppendItem(item)
+        if self.settings.get_setting("Show_Images_In_Chat") == '1': item.Check(True)
+        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Strip HTML", "Strip HTML", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_StripHTML, item)
+        wndmenu.AppendItem(item)
+        if self.settings.get_setting("striphtml") == '1': item.Check(True)
+        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Chat Time Index", "Chat Time Index", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_ChatTimeIndex, item)
+        wndmenu.AppendItem(item)
+        if self.settings.get_setting("Chat_Time_Indexing") == '1': item.Check(True)
+        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Chat Auto Complete", "Chat Auto Complete", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_ChatAutoComplete, item)
+        wndmenu.AppendItem(item)
+        if self.settings.get_setting("SuppressChatAutoComplete") == '0': item.Check(True)
+        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Show ID in Chat", "Show ID in Chat", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_ShowIDinChat, item)
+        wndmenu.AppendItem(item)
+        if self.settings.get_setting("ShowIDInChat") == '1': item.Check(True)
+        item = wx.MenuItem(wndmenu, wx.ID_ANY, "Log Time Index", "Log Time Index", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_LogTimeIndex, item)
+        wndmenu.AppendItem(item)
+        if self.settings.get_setting("TimeStampGameLog") == '1': item.Check(True)
+        settingmenu.AppendMenu(wx.ID_ANY, 'Chat Window', wndmenu )
+        item = wx.MenuItem(tabmenu, wx.ID_ANY, "Tabbed Whispers", "Tabbed Whispers", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_TabbedWhispers, item)
+        tabmenu.AppendItem(item)
+        if self.settings.get_setting("tabbedwhispers") == '1': item.Check(True)
+        item = wx.MenuItem(tabmenu, wx.ID_ANY, "GM Tab", "GM Tab", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_GMTab, item)
+        tabmenu.AppendItem(item)
+        if self.settings.get_setting("GMWhisperTab") == '1':item.Check(True)
+        item = wx.MenuItem(tabmenu, wx.ID_ANY, "Group Whisper Tabs", "Group Whisper Tabs", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_GroupWhisperTabs, item)
+        tabmenu.AppendItem(item)
+        if self.settings.get_setting("GroupWhisperTab") == '1': item.Check(True)
+        settingmenu.AppendMenu(wx.ID_ANY, 'Chat Tabs', tabmenu)
+        item = wx.MenuItem(toolmenu, wx.ID_ANY, "Dice Bar", "Dice Bar", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_DiceBar, item)
+        toolmenu.AppendItem(item)
+        if self.settings.get_setting("DiceButtons_On") == '1': item.Check(True)
+        item = wx.MenuItem(toolmenu, wx.ID_ANY, "Format Buttons", "Format Buttons", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_FormatButtons, item)
+        toolmenu.AppendItem(item)
+        if self.settings.get_setting("FormattingButtons_On") == '1': item.Check(True)
+        item = wx.MenuItem(toolmenu, wx.ID_ANY, "Alias Tool", "Alias Tool", wx.ITEM_CHECK)
+        top_frame.Bind(wx.EVT_MENU, self.OnMB_AliasTool, item)
+        toolmenu.AppendItem(item)
+        if self.settings.get_setting("AliasTool_On") == '1': item.Check(True)
+        settingmenu.AppendMenu(wx.ID_ANY, 'Chat Tool Bars', toolmenu)
+        menu.AppendMenu(wx.ID_ANY, 'Chat Settings', settingmenu)
+        top_frame.mainmenu.Insert(2, menu, '&Chat')
+
+    ## Settings Menu Events
+    def OnMB_ShowImages(self, event):
+        if event.IsChecked(): self.settings.set_setting("Show_Images_In_Chat", '1')
+        else: self.settings.set_setting("Show_Images_In_Chat", '0')
+
+    def OnMB_StripHTML(self, event):
+        if event.IsChecked(): self.settings.set_setting("striphtml", '1')
+        else: self.settings.set_setting("striphtml", '0')
+
+    def OnMB_ChatTimeIndex(self, event):
+        if event.IsChecked(): self.settings.set_setting("Chat_Time_Indexing", '1')
+        else: self.settings.set_setting("Chat_Time_Indexing", '0')
+
+    def OnMB_ChatAutoComplete(self, event):
+        if event.IsChecked(): self.settings.set_setting("SuppressChatAutoComplete", '0')
+        else: self.settings.set_setting("SuppressChatAutoComplete", '1')
+
+    def OnMB_ShowIDinChat(self, event):
+        if event.IsChecked(): self.settings.set_setting("ShowIDInChat", '1')
+        else: self.settings.set_setting("ShowIDInChat", '0')
+
+    def OnMB_LogTimeIndex(self, event):
+        if event.IsChecked(): self.settings.set_setting("TimeStampGameLog", '1')
+        else: self.settings.set_setting("TimeStampGameLog", '0')
+
+    def OnMB_TabbedWhispers(self, event):
+        if event.IsChecked(): self.settings.set_setting("tabbedwhispers", '1')
+        else: self.settings.set_setting("tabbedwhispers", '0')
+
+    def OnMB_GMTab(self, event):
+        if event.IsChecked():
+            self.settings.set_setting("GMWhisperTab", '1')
+            self.parent.create_gm_tab()
+        else: self.settings.set_setting("GMWhisperTab", '0')
+
+    def OnMB_GroupWhisperTabs(self, event):
+        if event.IsChecked(): self.settings.set_setting("GroupWhisperTab", '1')
+        else: self.settings.set_setting("GroupWhisperTab", '0')
+
+    def OnMB_DiceBar(self, event):
+        act = '0'
+        if event.IsChecked():
+            self.settings.set_setting("DiceButtons_On", '1')
+            act = '1'
+        else: self.settings.set_setting("DiceButtons_On", '0')
+        self.toggle_dice(act)
+        try: self.parent.GMChatPanel.toggle_dice(act)
+        except: pass
+        for panel in self.parent.whisper_tabs: panel.toggle_dice(act)
+        for panel in self.parent.group_tabs: panel.toggle_dice(act)
+        for panel in self.parent.null_tabs: panel.toggle_dice(act)
+
+    def OnMB_FormatButtons(self, event):
+        act = '0'
+        if event.IsChecked():
+            self.settings.set_setting("FormattingButtons_On", '1')
+            act = '1'
+        else:
+            self.settings.set_setting("FormattingButtons_On", '0')
+        self.toggle_formating(act)
+        try: self.parent.GMChatPanel.toggle_formating(act)
+        except: pass
+        for panel in self.parent.whisper_tabs: panel.toggle_formating(act)
+        for panel in self.parent.group_tabs: panel.toggle_formating(act)
+        for panel in self.parent.null_tabs: panel.toggle_formating(act)
+
+    def OnMB_AliasTool(self, event):
+        act = '0'
+        if event.IsChecked():
+            self.settings.set_setting("AliasTool_On", '1')
+            act = '1'
+        else: self.settings.set_setting("AliasTool_On", '0')
+        self.toggle_alias(act)
+        try: self.parent.GMChatPanel.toggle_alias(act)
+        except: pass
+        for panel in self.parent.whisper_tabs: panel.toggle_alias(act)
+        for panel in self.parent.group_tabs: panel.toggle_alias(act)
+        for panel in self.parent.null_tabs:panel.toggle_alias(act)
+
+    def OnMB_BackgroundColor(self, event):
+        top_frame = component.get('frame')
+        hexcolor = self.get_color()
+        if hexcolor != None:
+            self.bgcolor = hexcolor
+            self.settings.set_setting('bgcolor', hexcolor)
+            self.chatwnd.SetPage(self.ResetPage())
+            if self.settings.get_setting('ColorTree') == '1':
+                top_frame.tree.SetBackgroundColour(self.settings.get_setting('bgcolor'))
+                top_frame.tree.Refresh()
+                top_frame.players.SetBackgroundColour(self.settings.get_setting('bgcolor'))
+                top_frame.players.Refresh()
+            else:
+                top_frame.tree.SetBackgroundColour('white')
+                top_frame.tree.SetForegroundColour('black')
+                top_frame.tree.Refresh()
+                top_frame.players.SetBackgroundColour('white')
+                top_frame.players.SetForegroundColour('black')
+                top_frame.players.Refresh()
+            self.chatwnd.scroll_down()
+
+    
+    def OnMB_TextColor(self, event):
+        top_frame = component.get('frame')
+        hexcolor = self.get_color()
+        if hexcolor != None:
+            self.textcolor = hexcolor
+            self.settings.set_setting('textcolor', hexcolor)
+            self.chatwnd.SetPage(self.ResetPage())
+            if self.settings.get_setting('ColorTree') == '1':
+                top_frame.tree.SetForegroundColour(self.settings.get_setting('textcolor'))
+                top_frame.tree.Refresh()
+                top_frame.players.SetForegroundColour(self.settings.get_setting('textcolor'))
+                top_frame.players.Refresh()
+            else:
+                top_frame.tree.SetBackgroundColour('white')
+                top_frame.tree.SetForegroundColour('black')
+                top_frame.tree.Refresh()
+                top_frame.players.SetBackgroundColour('white')
+                top_frame.players.SetForegroundColour('black')
+                top_frame.players.Refresh()
+            self.chatwnd.scroll_down()
+
+    
+    def get_hot_keys(self):
+        # dummy menus for hotkeys
+        self.build_menu()
+        entries = []
+        entries.append((wx.ACCEL_CTRL, ord('H'), self.setChatFocusMenu.GetId()))
+        #entries.append((wx.ACCEL_CTRL, wx.WXK_TAB, SWAP_TABS))
+        return entries
+
+    
+    def forward_tabs(self, evt):
+        self.parent.AdvanceSelection()
+
+    def back_tabs(self, evt):
+        self.parent.AdvanceSelection(False)
+
+    # This subroutine builds the controls for the chat frame
+    #
+    # !self : instance of self
+    
+    def build_ctrls(self):
+        self.chatwnd = chat_html_window(self,-1)
+        self.set_colors()
+        wx.CallAfter(self.chatwnd.SetPage, self.chatwnd.Header())
+        if (self.sendtarget == "all"):
+            wx.CallAfter(self.Post, self.colorize(self.syscolor, 
+                "<b>Welcome to <a href='http://www.openrpg.com'>OpenRPG</a> version " + self.version + "...  </b>"))
+            #self.chat_cmds.on_help()
+        self.chattxt = orpg.tools.predTextCtrl.predTextCtrl(self, -1, "", 
+                        style=wx.TE_PROCESS_ENTER |wx.TE_PROCESS_TAB|wx.TE_LINEWRAP, 
+                        keyHook = self.myKeyHook, validator=None )
+        self.build_bar()
+        self.basesizer = wx.BoxSizer(wx.VERTICAL)
+        self.basesizer.Add( self.chatwnd, 1, wx.EXPAND )
+        self.basesizer.Add( self.toolbar_sizer, 0, wx.EXPAND )
         self.basesizer.Add( self.chattxt, 0, wx.EXPAND )
-        self.SetSizer(self.basesizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        #events
-        self.Bind(wx.EVT_BUTTON, self.on_text_format, self.boldButton)
-        self.Bind(wx.EVT_BUTTON, self.on_text_format, self.italicButton)
-        self.Bind(wx.EVT_BUTTON, self.on_text_format, self.underlineButton)
-        self.Bind(wx.EVT_BUTTON, self.on_text_color, self.color_button)
-        self.Bind(wx.EVT_BUTTON, self.on_chat_save, self.saveButton)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d4Button)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d6Button)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d8Button)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d10Button)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d12Button)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d20Button)
-        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d100Button)
-        self.dieIDs = {}
-        self.dieIDs[self.d4Button.GetId()] = 'd4'
-        self.dieIDs[self.d6Button.GetId()] = 'd6'
-        self.dieIDs[self.d8Button.GetId()] = 'd8'
-        self.dieIDs[self.d10Button.GetId()] = 'd10'
-        self.dieIDs[self.d12Button.GetId()] = 'd12'
-        self.dieIDs[self.d20Button.GetId()] = 'd20'
-        self.dieIDs[self.d100Button.GetId()] = 'd100'
-        self.Bind(wx.EVT_BUTTON, self.pop_textpop, self.textpop_lock)
-        self.Bind(wx.EVT_BUTTON, self.lock_scroll, self.scroll_lock)
-        self.chattxt.Bind(wx.EVT_MOUSEWHEEL, self.chatwnd.mouse_wheel)
-        self.chattxt.Bind(wx.EVT_CHAR, self.chattxt.OnChar)
-        self.chattxt.Bind(wx.EVT_TEXT_COPY, self.chatwnd.OnM_EditCopy)
-    # def build_ctrls - end
-
-    def build_bar(self):
-        self.toolbar_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.scroll_lock = None
-        self.numDieText = None
-        self.dieModText = None
-        if self.settings.get_setting('Toolbar_On') == "1":
-            self.build_alias()
-            self.build_dice()
-            self.build_scroll()
-            self.build_text()
-            self.toolbar_sizer.Add(self.textpop_lock, 0, wx.EXPAND)
-            self.toolbar_sizer.Add(self.scroll_lock, 0, wx.EXPAND)
-            self.build_formating()
-            self.build_colorbutton()
-
-    
-    def build_scroll(self):
-        self.scroll_lock = wx.Button( self, wx.ID_ANY, "Scroll ON",size= wx.Size(80,25))
-
-    
+        self.SetSizer(self.basesizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        #events
+        self.Bind(wx.EVT_BUTTON, self.on_text_format, self.boldButton)
+        self.Bind(wx.EVT_BUTTON, self.on_text_format, self.italicButton)
+        self.Bind(wx.EVT_BUTTON, self.on_text_format, self.underlineButton)
+        self.Bind(wx.EVT_BUTTON, self.on_text_color, self.color_button)
+        self.Bind(wx.EVT_BUTTON, self.on_chat_save, self.saveButton)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d4Button)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d6Button)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d8Button)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d10Button)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d12Button)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d20Button)
+        self.Bind(wx.EVT_BUTTON, self.onDieRoll, self.d100Button)
+        self.dieIDs = {}
+        self.dieIDs[self.d4Button.GetId()] = 'd4'
+        self.dieIDs[self.d6Button.GetId()] = 'd6'
+        self.dieIDs[self.d8Button.GetId()] = 'd8'
+        self.dieIDs[self.d10Button.GetId()] = 'd10'
+        self.dieIDs[self.d12Button.GetId()] = 'd12'
+        self.dieIDs[self.d20Button.GetId()] = 'd20'
+        self.dieIDs[self.d100Button.GetId()] = 'd100'
+        self.Bind(wx.EVT_BUTTON, self.pop_textpop, self.textpop_lock)
+        self.Bind(wx.EVT_BUTTON, self.lock_scroll, self.scroll_lock)
+        self.chattxt.Bind(wx.EVT_MOUSEWHEEL, self.chatwnd.mouse_wheel)
+        self.chattxt.Bind(wx.EVT_CHAR, self.chattxt.OnChar)
+        self.chattxt.Bind(wx.EVT_TEXT_COPY, self.chatwnd.OnM_EditCopy)
+    # def build_ctrls - end
+
+    def build_bar(self):
+        self.toolbar_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.scroll_lock = None
+        self.numDieText = None
+        self.dieModText = None
+        if self.settings.get_setting('Toolbar_On') == "1":
+            self.build_alias()
+            self.build_dice()
+            self.build_scroll()
+            self.build_text()
+            self.toolbar_sizer.Add(self.textpop_lock, 0, wx.EXPAND)
+            self.toolbar_sizer.Add(self.scroll_lock, 0, wx.EXPAND)
+            self.build_formating()
+            self.build_colorbutton()
+
+    
+    def build_scroll(self):
+        self.scroll_lock = wx.Button( self, wx.ID_ANY, "Scroll ON",size= wx.Size(80,25))
+
+    
     def build_alias(self):
-        self.aliasSizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.aliasList = wx.Choice(self, wx.ID_ANY, size=(100, 25), choices=[self.defaultAliasName])
-        self.aliasButton = createMaskedButton( self, dir_struct["icon"] + 'player.gif', 
+        self.aliasSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.aliasList = wx.Choice(self, wx.ID_ANY, size=(100, 25), choices=[self.defaultAliasName])
+        self.aliasButton = createMaskedButton( self, dir_struct["icon"] + 'player.gif', 
                                             'Refresh list of aliases from Game Tree', 
-                                            wx.ID_ANY, '#bdbdbd' )
-        self.aliasList.SetSelection(0)
-        self.filterList = wx.Choice(self, wx.ID_ANY, size=(100, 25), choices=[self.defaultFilterName])
-        self.filterButton = createMaskedButton( self, dir_struct["icon"] + 'add_filter.gif', 
+                                            wx.ID_ANY, '#bdbdbd' )
+        self.aliasList.SetSelection(0)
+        self.filterList = wx.Choice(self, wx.ID_ANY, size=(100, 25), choices=[self.defaultFilterName])
+        self.filterButton = createMaskedButton( self, dir_struct["icon"] + 'add_filter.gif', 
                                              'Refresh list of filters from Game Tree', 
-                                             wx.ID_ANY, '#bdbdbd' )
+                                             wx.ID_ANY, '#bdbdbd' )
         self.filterList.SetSelection(0)
 
-        self.aliasSizer.Add( self.aliasButton, 0, wx.EXPAND )
-        self.aliasSizer.Add( self.aliasList,0,wx.EXPAND)
-        self.aliasSizer.Add( self.filterButton, 0, wx.EXPAND )
+        self.aliasSizer.Add( self.aliasButton, 0, wx.EXPAND )
+        self.aliasSizer.Add( self.aliasList,0,wx.EXPAND)
+        self.aliasSizer.Add( self.filterButton, 0, wx.EXPAND )
         self.aliasSizer.Add( self.filterList,0,wx.EXPAND)
 
         self.toolbar_sizer.Add(self.aliasSizer, 0, wx.EXPAND)
 
-        if self.settings.get_setting('AliasTool_On') == '0': self.toggle_alias('0')
-        else: self.toggle_alias('1')
-    
+        if self.settings.get_setting('AliasTool_On') == '0': self.toggle_alias('0')
+        else: self.toggle_alias('1')
+    
     def toggle_alias(self, act):
         if act == '0': self.toolbar_sizer.Show(self.aliasSizer, False)
         else: self.toolbar_sizer.Show(self.aliasSizer, True)
-        self.toolbar_sizer.Layout()
-    
-    def build_text(self):
-        self.textpop_lock = createMaskedButton(self, dir_struct["icon"]+'note.gif', 'Open Text View Of Chat Session', wx.ID_ANY, '#bdbdbd')
-
-    
+        self.toolbar_sizer.Layout()
+    
+    def build_text(self):
+        self.textpop_lock = createMaskedButton(self, dir_struct["icon"]+'note.gif', 'Open Text View Of Chat Session', wx.ID_ANY, '#bdbdbd')
+
+    
     def build_dice(self):
-        self.diceSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.diceSizer = wx.BoxSizer(wx.HORIZONTAL)
         self.numDieText = wx.TextCtrl( self, wx.ID_ANY, "1", 
-                                    size= wx.Size(25, 25), validator=orpg.tools.inputValidator.MathOnlyValidator() )
+                                    size= wx.Size(25, 25), validator=orpg.tools.inputValidator.MathOnlyValidator() )
         self.dieModText = wx.TextCtrl( self, wx.ID_ANY, "", 
-                                    size= wx.Size(50, 25), validator=orpg.tools.inputValidator.MathOnlyValidator() )
-        self.d4Button = createMaskedButton(self, dir_struct["icon"]+'b_d4.gif', 'Roll d4', wx.ID_ANY)
-        self.d6Button = createMaskedButton(self, dir_struct["icon"]+'b_d6.gif', 'Roll d6', wx.ID_ANY)
-        self.d8Button = createMaskedButton(self, dir_struct["icon"]+'b_d8.gif', 'Roll d8', wx.ID_ANY)
-        self.d10Button = createMaskedButton(self, dir_struct["icon"]+'b_d10.gif', 'Roll d10', wx.ID_ANY)
-        self.d12Button = createMaskedButton(self, dir_struct["icon"]+'b_d12.gif', 'Roll d12', wx.ID_ANY)
-        self.d20Button = createMaskedButton(self, dir_struct["icon"]+'b_d20.gif', 'Roll d20', wx.ID_ANY)
+                                    size= wx.Size(50, 25), validator=orpg.tools.inputValidator.MathOnlyValidator() )
+        self.d4Button = createMaskedButton(self, dir_struct["icon"]+'b_d4.gif', 'Roll d4', wx.ID_ANY)
+        self.d6Button = createMaskedButton(self, dir_struct["icon"]+'b_d6.gif', 'Roll d6', wx.ID_ANY)
+        self.d8Button = createMaskedButton(self, dir_struct["icon"]+'b_d8.gif', 'Roll d8', wx.ID_ANY)
+        self.d10Button = createMaskedButton(self, dir_struct["icon"]+'b_d10.gif', 'Roll d10', wx.ID_ANY)
+        self.d12Button = createMaskedButton(self, dir_struct["icon"]+'b_d12.gif', 'Roll d12', wx.ID_ANY)
+        self.d20Button = createMaskedButton(self, dir_struct["icon"]+'b_d20.gif', 'Roll d20', wx.ID_ANY)
         self.d100Button = createMaskedButton(self, dir_struct["icon"]+'b_d100.gif', 'Roll d100', wx.ID_ANY)
-
-        self.diceSizer.Add( self.numDieText, 0, wx.ALIGN_CENTER | wx.EXPAND)
-        self.diceSizer.Add( self.d4Button, 0 ,wx.EXPAND)
-        self.diceSizer.Add( self.d6Button, 0 ,wx.EXPAND)
-        self.diceSizer.Add( self.d8Button, 0 ,wx.EXPAND)
-        self.diceSizer.Add( self.d10Button, 0 ,wx.EXPAND)
-        self.diceSizer.Add( self.d12Button, 0 ,wx.EXPAND)
-        self.diceSizer.Add( self.d20Button, 0 ,wx.EXPAND)
-        self.diceSizer.Add( self.d100Button, 0 ,wx.EXPAND)
+
+        self.diceSizer.Add( self.numDieText, 0, wx.ALIGN_CENTER | wx.EXPAND)
+        self.diceSizer.Add( self.d4Button, 0 ,wx.EXPAND)
+        self.diceSizer.Add( self.d6Button, 0 ,wx.EXPAND)
+        self.diceSizer.Add( self.d8Button, 0 ,wx.EXPAND)
+        self.diceSizer.Add( self.d10Button, 0 ,wx.EXPAND)
+        self.diceSizer.Add( self.d12Button, 0 ,wx.EXPAND)
+        self.diceSizer.Add( self.d20Button, 0 ,wx.EXPAND)
+        self.diceSizer.Add( self.d100Button, 0 ,wx.EXPAND)
         self.diceSizer.Add( self.dieModText, 0, wx.ALIGN_CENTER, 5 )
 
-        self.toolbar_sizer.Add( self.diceSizer, 0, wx.EXPAND)
-        if self.settings.get_setting('DiceButtons_On') == '0': self.toggle_dice('0')
-        else: self.toggle_dice('1')
-
-    
-    def toggle_dice(self, act):
+        self.toolbar_sizer.Add( self.diceSizer, 0, wx.EXPAND)
+        if self.settings.get_setting('DiceButtons_On') == '0': self.toggle_dice('0')
+        else: self.toggle_dice('1')
+
+    
+    def toggle_dice(self, act):
         if act == '0': self.toolbar_sizer.Show(self.diceSizer, False)
         else: self.toolbar_sizer.Show(self.diceSizer, True)
-        self.toolbar_sizer.Layout()
-
-    
+        self.toolbar_sizer.Layout()
+
+    
     def build_formating(self):
-        self.formatSizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.boldButton = createMaskedButton( self, dir_struct["icon"]+'bold.gif', 
-                                                            'Make the selected text Bold', wx.ID_ANY, '#bdbdbd')
-        self.italicButton = createMaskedButton( self, dir_struct["icon"]+'italic.gif', 
-                                                            'Italicize the selected text', wx.ID_ANY, '#bdbdbd' )
-        self.underlineButton = createMaskedButton( self, dir_struct["icon"]+'underlined.gif', 
+        self.formatSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.boldButton = createMaskedButton( self, dir_struct["icon"]+'bold.gif', 
+                                                            'Make the selected text Bold', wx.ID_ANY, '#bdbdbd')
+        self.italicButton = createMaskedButton( self, dir_struct["icon"]+'italic.gif', 
+                                                            'Italicize the selected text', wx.ID_ANY, '#bdbdbd' )
+        self.underlineButton = createMaskedButton( self, dir_struct["icon"]+'underlined.gif', 
                                                             'Underline the selected text', wx.ID_ANY, '#bdbdbd' )
-
-        self.formatSizer.Add( self.boldButton, 0, wx.EXPAND )
-        self.formatSizer.Add( self.italicButton, 0, wx.EXPAND )
+
+        self.formatSizer.Add( self.boldButton, 0, wx.EXPAND )
+        self.formatSizer.Add( self.italicButton, 0, wx.EXPAND )
         self.formatSizer.Add( self.underlineButton, 0, wx.EXPAND )
-        self.toolbar_sizer.Add( self.formatSizer, 0, wx.EXPAND )
-        if self.settings.get_setting('FormattingButtons_On') == '0': self.toggle_formating('0')
-        else: self.toggle_formating('1')
-
-    
-    def toggle_formating(self, act):
+        self.toolbar_sizer.Add( self.formatSizer, 0, wx.EXPAND )
+        if self.settings.get_setting('FormattingButtons_On') == '0': self.toggle_formating('0')
+        else: self.toggle_formating('1')
+
+    
+    def toggle_formating(self, act):
         if act == '0': self.toolbar_sizer.Show(self.formatSizer, False)
         else: self.toolbar_sizer.Show(self.formatSizer, True)
-        self.toolbar_sizer.Layout()
-
-    # Heroman - Ideally, we would use static labels...
-    
-    def build_colorbutton(self):
-        self.color_button = createMaskedButton(self, dir_struct["icon"]+'textcolor.gif', 
-                                                    'Text Color', wx.ID_ANY, '#bdbdbd', 
-                                                    wx.BITMAP_TYPE_GIF)
-
-        self.saveButton = createMaskedButton(self, dir_struct["icon"]+'save.bmp', 
-                                                    'Save the chatbuffer', wx.ID_ANY, 
-                                                    '#c0c0c0', wx.BITMAP_TYPE_BMP )
-        self.color_button.SetBackgroundColour(self.settings.get_setting('mytextcolor'))
-        self.toolbar_sizer.Add(self.color_button, 0, wx.EXPAND)
-        self.toolbar_sizer.Add(self.saveButton, 0, wx.EXPAND)
-
-    
-    def OnMotion(self, evt):
-        contain = self.chatwnd.GetInternalRepresentation()
-        if contain:
-            sx = sy = 0
-            x = y = 0
-            (sx,sy) = self.chatwnd.GetViewStart()
-            (sx1,sy1) = self.chatwnd.GetScrollPixelsPerUnit()
-            sx = sx*sx1
-            sy = sy*sy1
-            (x,y) = evt.GetPosition()
-            lnk = contain.GetLink(sx+x,sy+y)
-            if lnk:
-                try:
-                    link = lnk.GetHref()
-                    self.session.set_status_url(link)
-                except: pass
-        else: logger.general("Error, self.chatwnd.GetInternalRepresentation() return None")
-        evt.Skip()
-
-    #  This subroutine is registered with predTextCtrl to be run for every OnChar event
-    #  It checks if we need to send a typing message
-
-    #
-    #  self:  duh
-    #  event:  raw KeyEvent from OnChar()
-    
-    def myKeyHook(self, event):
-        if self.session.get_status() == MPLAY_CONNECTED:   #  only do if we're connected
-            thisPress = time.time()                #  thisPress is local temp variable
-            if (thisPress - self.lastSend) > 4:    #  Check to see if it's been 5 seconds since our last notice
-                                                   #    If we're not already typing, then self.lastSend will be 0
-                self.sendTyping(1)                 #  send a not typing event here (1 for True)
-            self.lastPress = thisPress             #  either way, record the time of this keystroke for use in
-                                                   #  self.typingTimerFunc()
-        if self.settings.get_setting('SuppressChatAutoComplete') == '1':
-            logger.debug("Exit chat_panel->myKeyHook(self, event) return 1")
-            return 1
-        else:
-            logger.debug("Exit chat_panel->myKeyHook(self, event) return 0")
-            return 0
-
-    #  This subroutine gets called once a second by the typing Timer
-    #  It checks if we need to send a not_typing message
-    #
-    #  self:  duh
-    
-    def typingTimerFunc(self, event):
-        #following added by mDuo13
-        ##############refresh_counter()##############
-        for plugin_fname in self.activeplugins.keys():
-            plugin = self.activeplugins[plugin_fname]
-            try: plugin.refresh_counter()
-            except Exception, e:
-                if str(e) != "'module' object has no attribute 'refresh_counter'":
-                    logger.general(traceback.format_exc())
-                    logger.general("EXCEPTION: " + str(e))
-        #end mDuo13 added code
-        if self.lastSend:                          #  This will be zero when not typing, so equiv to if is_typing
-            thisTime = time.time()                 #  thisTime is a local temp variable
-            if (thisTime - self.lastPress) > 4:    #  Check to see if it's been 5 seconds since our last keystroke
-                                                   #  If we're not already typing, then self.lastSend will be 0
-
-                self.sendTyping(0)                 #  send a typing event here (0 for False)
-    #  This subroutine actually takes care of sending the messages for typing/not_typing events
-    #
-    #  self:  duh
-    #  typing:  boolean
-
-    
-    def sendTyping(self, typing):
-        if typing:
-            self.lastSend = time.time()  #  remember our send time for use in myKeyHook()
-            #I think this is cleaner
-            status_text = self.settings.get_setting('TypingStatusAlias')
-            if status_text == "" or status_text == None: status_text = "Typing"
-            self.session.set_text_status(status_text)
-        else:
-            self.lastSend = 0                            #  set lastSend to zero to indicate we're not typing
-            #I think this is cleaner
-            status_text = self.settings.get_setting('IdleStatusAlias')
-            if status_text == "" or status_text == None: status_text = "Idle"
-            self.session.set_text_status(status_text)
-
-    # This subroutine sets the colors of the chat based on the settings in the
-    # self instance.
-    #
-    # !self : instance of self
-    
-    def set_colors(self):
-        # chat window backround color
-        self.bgcolor = self.settings.get_setting('bgcolor')
-        # chat window normal text color
-        self.textcolor = self.settings.get_setting('textcolor')
-        # color of text player types
-        self.mytextcolor = self.settings.get_setting('mytextcolor')
-        # color of system warnings
-        self.syscolor = self.settings.get_setting('syscolor')
-        # color of system info messages
-        self.infocolor = self.settings.get_setting('infocolor')
-        # color of emotes
-        self.emotecolor = self.settings.get_setting('emotecolor')
-        # color of whispers
-        self.whispercolor = self.settings.get_setting('whispercolor')
-    # def set_colors - end
-
-    # This subroutine will insert text into the chat window
-    #
-    # !self : instance of self
-    # !txt : text to be inserted into the chat window
-    
-    def set_chat_text(self, txt):
-        self.chattxt.SetValue(txt)
-        self.chattxt.SetFocus()
-        self.chattxt.SetInsertionPointEnd()
-    # def set_chat_text - end
-
-    
-    def get_chat_text(self):
-        return self.chattxt.GetValue()
-
-    # This subroutine sets the focus to the chat window
-    
-    def set_chat_text_focus(self, event):
-        wx.CallAfter(self.chattxt.SetFocus)
-    # def set_chat_text_focus - end
-
-    # This subrtouine grabs the user input and make the special keys and
-    # modifiers work.
-    #
-    # !self : instance of self
-    # !event :
-    #
-    # Note:  self.chattxt now handles it's own Key events.  It does, however still
-    #        call it's parent's (self) OnChar to handle "default" behavior.
-    
-    def OnChar(self, event):
-        s = self.chattxt.GetValue()
-        #self.histlen = len(self.history) - 1
-
-        ## RETURN KEY (no matter if there is text in chattxt)
-        #  This section is run even if there is nothing in the chattxt (as opposed to the next wx.WXK_RETURN handler
-        if event.GetKeyCode() == wx.WXK_RETURN:
-            logger.debug("event.GetKeyCode() == wx.WXK_RETURN")
-            self.set_colors()
-            if self.session.get_status() == MPLAY_CONNECTED:          #  only do if we're connected
-                self.sendTyping(0)                                    #  Send a "not_typing" event on enter key press
-        macroText=""
-        recycle_bin = {wx.WXK_F1: 'event.GetKeyCode() == wx.WXK_F1', wx.WXK_F2: 'event.GetKeyCode() == wx.WXK_F2', 
-                    wx.WXK_F3: 'event.GetKeyCode() == wx.WXK_F3', wx.WXK_F4: 'event.GetKeyCode() == wx.WXK_F4', 
-                    wx.WXK_F5: 'event.GetKeyCode() == wx.WXK_F5', wx.WXK_F6: 'event.GetKeyCode() == wx.WXK_F6', 
-                    wx.WXK_F7: 'event.GetKeyCode() == wx.WXK_F7', wx.WXK_F8: 'event.GetKeyCode() == wx.WXK_F8', 
-                    wx.WXK_F9: 'event.GetKeyCode() == wx.WXK_F9', wx.WXK_F10: 'event.GetKeyCode() == wx.WXK_F10', 
-                    wx.WXK_F11: 'event.GetKeyCode() == wx.WXK_F11', wx.WXK_F12: 'event.GetKeyCode() == wx.WXK_F12'}
-
-        bin_event = event.GetKeyCode()
-        if recycle_bin.has_key(bin_event):
-	    logger.debug(lambda bin_event: recycle_bin[bin_event])
-	    macroText = self.settings.get_setting(recycle_bin[bin_event][29:])
-	    recycle_bin = {}; del bin_event
-
-        # Append to the existing typed text as needed and make sure the status doesn't change back.
-        if len(macroText):
-            self.sendTyping(0)
-            s = macroText
-
-        ## RETURN KEY (and not text in control)
-        if (event.GetKeyCode() == wx.WXK_RETURN and len(s)) or len(macroText):
-            logger.debug("(event.GetKeyCode() == wx.WXK_RETURN and len(s)) or len(macroText)")
-            self.histidx = -1
-            self.temptext = ""
-            self.history = [s] + self.history#prepended instead of appended now, so higher index = greater age
-            if not len(macroText): self.chattxt.SetValue("")
-            # play sound
-            sound_file = self.settings.get_setting("SendSound")
-            if sound_file != '': component.get('sound').play(sound_file)
-            if s[0] != "/": ## it's not a slash command
-                s = self.ParsePost( s, True, True )
-            else: self.chat_cmds.docmd(s) # emote is in chatutils.py
-
-        ## UP KEY
-        elif event.GetKeyCode() == wx.WXK_UP:
-            logger.debug("event.GetKeyCode() == wx.WXK_UP")
-            if self.histidx < len(self.history)-1:
-                #text that's not in history but also hasn't been sent to chat gets stored in self.temptext
-                #this way if someone presses the up key, they don't lose their current message permanently
-                #(unless they also press enter at the time)
-                if self.histidx is -1: self.temptext = self.chattxt.GetValue()
-                self.histidx += 1
-                self.chattxt.SetValue(self.history[self.histidx])
-                self.chattxt.SetInsertionPointEnd()
-            else:
-                self.histidx = len(self.history) -1#in case it got too high somehow, this should fix it
-                #self.InfoPost("**Going up? I don't think so.**")
-            #print self.histidx, "in",self.history
-
-        ## DOWN KEY
-        elif event.GetKeyCode() == wx.WXK_DOWN:
-            logger.debug("event.GetKeyCode() == wx.WXK_DOWN")
-            #histidx of -1 indicates currently viewing text that's not in self.history
-            if self.histidx > -1:
-                self.histidx -= 1
-                if self.histidx is -1: #remember, it just decreased
-                    self.chattxt.SetValue(self.temptext)
-                else: self.chattxt.SetValue(self.history[self.histidx])
-                self.chattxt.SetInsertionPointEnd()
-            else: self.histidx = -1 #just in case it somehow got below -1, this should fix it
-                #self.InfoPost("**Going down? I don't think so.**")
-            #print self.histidx, "in",self.history
-
-        ## TAB KEY
-        elif  event.GetKeyCode() == wx.WXK_TAB:
-            logger.debug("event.GetKeyCode() == wx.WXK_TAB")
-            if s !="":
-                found = 0
-                nicks = []
-                testnick = ""
-                inlength = len(s)
-                for getnames in self.session.players.keys():
-                    striphtmltag = re.compile ('<[^>]+>*')
-                    testnick = striphtmltag.sub ("", self.session.players[getnames][0])
-                    if string.lower(s) == string.lower(testnick[:inlength]):
-                        found = found + 1
-                        nicks[len(nicks):]=[testnick]
-                if found == 0: ## no nick match
-                    self.Post(self.colorize(self.syscolor," ** No match found"))
-                elif found > 1: ## matched more than 1, tell user what matched
-                    nickstring = ""
-                    nicklist = []
-                    for foundnicks in nicks:
-                        nickstring = nickstring + foundnicks + ", "
-                        nicklist.append(foundnicks)
-                    nickstring = nickstring[:-2]
-                    self.Post(self.colorize(self.syscolor, " ** Multiple matches found: " + nickstring))
-                    # set text to the prefix match between first two matches
-                    settext = re.match(''.join(map(lambda x: '(%s?)' % x, string.lower(nicklist[0]))), string.lower(nicklist[1])).group()
-                    # run through the rest of the nicks
-                    for i in nicklist:
-                        settext = re.match(''.join(map(lambda x: '(%s?)' % x, string.lower(i))), string.lower(settext)).group()
-                    if settext:
-                        self.chattxt.SetValue(settext)
-                        self.chattxt.SetInsertionPointEnd()
-                else: ## put the matched name in the chattxt box
-                    settext = nicks[0] + ": "
-                    self.chattxt.SetValue(settext)
-                    self.chattxt.SetInsertionPointEnd()
-            else: ## not online, and no text in chattxt box
-                self.Post(self.colorize(self.syscolor, " ** That's the Tab key, Dave"))
-
-        ## PAGE UP
-        elif event.GetKeyCode() in (wx.WXK_PRIOR, wx.WXK_PAGEUP):
-            logger.debug("event.GetKeyCode() in (wx.WXK_PRIOR, wx.WXK_PAGEUP)")
-            self.chatwnd.ScrollPages(-1)
-            if not self.lockscroll: self.lock_scroll(0)
-
-        ## PAGE DOWN
-        elif event.GetKeyCode() in (wx.WXK_NEXT, wx.WXK_PAGEDOWN):
-            logger.debug("event.GetKeyCode() in (wx.WXK_NEXT, wx.WXK_PAGEDOWN)")
-            if not self.lockscroll: self.lock_scroll(0)
-            if ((self.chatwnd.GetScrollRange(1)-self.chatwnd.GetScrollPos(1)-self.chatwnd.GetScrollThumb(1) < 30) and self.lockscroll):
-                self.lock_scroll(0)
-            self.chatwnd.ScrollPages(1)
-
-        ## END
-        elif event.GetKeyCode() == wx.WXK_END:
-            logger.debug("event.GetKeyCode() == wx.WXK_END")
-            if self.lockscroll:
-                self.lock_scroll(0)
-                self.Post()
-            event.Skip()
-
-        ## NOTHING
-        else: event.Skip()
-        logger.debug("Exit chat_panel->OnChar(self, event)")
-    # def OnChar - end
-
-    
-    def onDieRoll(self, evt):
-        """Roll the dice based on the button pressed and the die modifiers entered, if any."""
-        # Get any die modifiers if they have been entered
-        numDie = self.numDieText.GetValue()
-        dieMod = self.dieModText.GetValue()
-        dieText = numDie
-        # Now, apply and roll die mods based on the button that was pressed
-        id = evt.GetId()
-        if self.dieIDs.has_key(id): dieText += self.dieIDs[id]
-        if len(dieMod) and dieMod[0] not in "*/-+": dieMod = "+" + dieMod
-        dieText += dieMod
-        dieText = "[" + dieText + "]"
-        self.ParsePost(dieText, 1, 1)
-        self.chattxt.SetFocus()
-
-    # This subroutine saves a chat buffer as html to a file chosen via a
-    # FileDialog.
-    #
-    # !self : instance of self
-    # !evt :
-    
-    def on_chat_save(self, evt):
-        f = wx.FileDialog(self,"Save Chat Buffer",".","","HTM* (*.htm*)|*.htm*|HTML (*.html)|*.html|HTM (*.htm)|*.htm",wx.SAVE)
-        if f.ShowModal() == wx.ID_OK:
-            file = open(f.GetPath(), "w")
-            file.write(self.ResetPage() + "</body></html>")
-            file.close()
-        f.Destroy()
-        os.chdir(dir_struct["home"])
-    # def on_chat_save - end
-
-    
-    def ResetPage(self):
-        self.set_colors()
-        buffertext = self.chatwnd.Header() + "\n"
-        buffertext += chat_util.strip_body_tags(self.chatwnd.StripHeader()).replace("<br>", 
-                                                                            "<br />").replace('</html>', 
-                                                                            '').replace("<br />", 
-                                                                            "<br />\n").replace("\n\n", '')
-        return buffertext
-
-    # This subroutine sets the color of selected text, or base text color if
-    # nothing is selected
-    
-    def on_text_color(self, event):
-        hexcolor = self.r_h.do_hex_color_dlg(self)
-        if hexcolor != None:
-            (beg,end) = self.chattxt.GetSelection()
-            if beg != end:
-                txt = self.chattxt.GetValue()
-                txt = txt[:beg]+self.colorize(hexcolor,txt[beg:end]) +txt[end:]
-                self.chattxt.SetValue(txt)
-                self.chattxt.SetInsertionPointEnd()
-                self.chattxt.SetFocus()
-            else:
-                self.color_button.SetBackgroundColour(hexcolor)
-                self.mytextcolor = hexcolor
-                self.settings.set_setting('mytextcolor',hexcolor)
-                self.set_colors()
-                self.Post()
-    # def on_text_color - end
-
-    # This subroutine take a color and a text string and formats it into html.
-    #
-    # !self : instance of self
-    # !color : color for the text to be set
-    # !text : text string to be included in the html.
-    
-    def colorize(self, color, text):
-        """Puts font tags of 'color' around 'text' value, and returns the string"""
-        return "<font color='" + color + "'>" + text + "</font>"
-    # def colorize - end
-
-    # This subroutine takes and event and inserts text with the basic format
-    # tags included.
-    #
-    # !self : instance of self
-    # !event :
-    
-    def on_text_format(self, event):
-        id = event.GetId()
-        txt = self.chattxt.GetValue()
-        (beg,end) = self.chattxt.GetSelection()
-        if beg != end: sel_txt = txt[beg:end]
-        else: sel_txt = txt
-        if id == self.boldButton.GetId(): sel_txt = "<b>" + sel_txt + "</b>"
-        elif id == self.italicButton.GetId(): sel_txt = "<i>" + sel_txt + "</i>"
-        elif id == self.underlineButton.GetId(): sel_txt = "<u>" + sel_txt + "</u>"
-        if beg != end: txt = txt[:beg] + sel_txt + txt[end:]
-        else: txt = sel_txt
-        self.chattxt.SetValue(txt)
-        self.chattxt.SetInsertionPointEnd()
-        self.chattxt.SetFocus()
-    # def on_text_format - end
-
-    
-    def lock_scroll(self, event):
-        if self.lockscroll:
-            self.lockscroll = False
-            self.scroll_lock.SetLabel("Scroll ON")
-            if len(self.storedata) != 0:
-                for line in self.storedata: self.chatwnd.AppendToPage(line)
-            self.storedata = []
-            self.scroll_down()
-        else:
-            self.lockscroll = True
-            self.scroll_lock.SetLabel("Scroll OFF")
-
-    # This subroutine will popup a text window with the chatbuffer contents
-    #
-    # !self : instance of self
-    # !event :
-    
-    def pop_textpop(self, event):
-        """searchable popup text view of chatbuffer"""
-        h_buffertext = self.ResetPage()
-        h_dlg = orpgScrolledMessageFrameEditor(self, h_buffertext, "Text View of Chat Window", None, (500,300))
-        h_dlg.Show(True)
-
-    # This subroutine will change the dimension of the window
-    #
-    # !self : instance of self
-    # !event :
-    
-    def OnSize(self, event=None):
-        event.Skip()
-        wx.CallAfter(self.scroll_down)
-    # def OnSize - end
-
-    
-    def scroll_down(self):
-        self.Freeze()
-        self.chatwnd.scroll_down()
-        self.Thaw()
-
-    ###### message helpers ######
-    
-    def PurgeChat(self):
-        self.set_colors()
-        self.chatwnd.SetPage(self.chatwnd.Header())
-
-    
-    def system_message(self, text):
-        self.send_chat_message(text,chat_msg.SYSTEM_MESSAGE)
-        self.SystemPost(text)
-
-    
-    def info_message(self, text):
-        self.send_chat_message(text,chat_msg.INFO_MESSAGE)
-        self.InfoPost(text)
-
-    
-    def get_gms(self):
-        the_gms = []
-        for playerid in self.session.players:
-            if len(self.session.players[playerid])>7:
-                if self.session.players[playerid][7]=="GM" and self.session.group_id != '0': the_gms += [playerid]
-        return the_gms
-
-    
-    def GetName(self):
-        self.AliasLib = component.get('alias')
-        player = self.session.get_my_info()
-        if self.AliasLib != None:
-            self.AliasLib.alias = self.aliasList.GetStringSelection();
-            if self.AliasLib.alias[0] != self.defaultAliasName:
-                logger.debug("Exit chat_panel->GetName(self)")
-                return [self.chat_display_name([self.AliasLib.alias[0], player[1], player[2]]), self.AliasLib.alias[1]]
-        return [self.chat_display_name(player), "Default"]
-
-    
-    def GetFilteredText(self, text):
-        advregex = re.compile('\"(.*?)\"', re.I)
-        self.AliasLib = component.get('alias')
-        if self.AliasLib != None:
-            self.AliasLib.filter = self.filterList.GetSelection()-1;
-            for rule in self.AliasLib.filterRegEx:
-                if not self.advancedFilter: text = re.sub(rule[0], rule[1], text)
-                else:
-                    for m in advregex.finditer(text):
-                        match = m.group(0)
-                        newmatch = re.sub(rule[0], rule[1], match)
-                        text = text.replace(match, newmatch)
-        return text
-
-    
-    def emote_message(self, text):
-        text = self.NormalizeParse(text)
-        text = self.colorize(self.emotecolor, text)
-
-        if self.type == MAIN_TAB and self.sendtarget == 'all': self.send_chat_message(text,chat_msg.EMOTE_MESSAGE)
-        elif self.type == MAIN_TAB and self.sendtarget == "gm":
-            msg_type = chat_msg.WHISPER_EMOTE_MESSAGE
-            the_gms = self.get_gms()
-            for each_gm in the_gms: self.send_chat_message(text,chat_msg.WHISPER_EMOTE_MESSAGE, str(each_gm))
-        elif self.type == GROUP_TAB and WG_LIST.has_key(self.sendtarget):
-            for pid in WG_LIST[self.sendtarget]:
-                self.send_chat_message(text,chat_msg.WHISPER_EMOTE_MESSAGE, str(pid))
-        elif self.type == WHISPER_TAB: self.send_chat_message(text,chat_msg.WHISPER_EMOTE_MESSAGE, str(self.sendtarget))
-        elif self.type == NULL_TAB: pass
-        name = self.GetName()[0]
-        text = "** " + name + " " + text + " **"
-        self.EmotePost(text)
-
-    
-    def whisper_to_players(self, text, player_ids):
-        tabbed_whispers_p = self.settings.get_setting("tabbedwhispers")
-        # Heroman - apply any filtering selected
-        text = self.NormalizeParse(text)
-        player_names = ""
-        # post to our chat before we colorize
-        for m in player_ids:
-            id = m.strip()
-            if self.session.is_valid_id(id):
-                returned_name = self.session.get_player_by_player_id(id)[0]
-                player_names += returned_name
-                player_names += ", "
-            else:
-                player_names += " Unknown!"
-                player_names += ", "
-        comma = ","
-        comma.join(player_ids)
-        if (self.sendtarget == "all"):
-            self.InfoPost("<i>whispering to "+ player_names + " " + text + "</i> ")
-        # colorize and loop, sending whisper messages to all valid clients
-        text = self.colorize(self.mytextcolor, text)
-        for id in player_ids:
-            id = id.strip()
-            if self.session.is_valid_id(id): self.send_chat_message(text,chat_msg.WHISPER_MESSAGE,id)
-            else: self.InfoPost(id + " Unknown!")
-
-    
-    def send_chat_message(self, text, type=chat_msg.CHAT_MESSAGE, player_id="all"):
-        #########send_msg()#############
-        send = 1
-        for plugin_fname in self.activeplugins.keys():
-            plugin = self.activeplugins[plugin_fname]
-            try: text, send = plugin.send_msg(text, send)
-            except Exception, e:
-                if str(e) != "'module' object has no attribute 'send_msg'":
-                    logger.general(traceback.format_exc())
-                    logger.general("EXCEPTION: " + str(e))
-        msg = chat_msg.chat_msg()
-        msg.set_text(text)
-        msg.set_type(type)
-        turnedoff = False
-        if self.settings.get_setting("ShowIDInChat") == "1":
-            turnedoff = True
-            self.settings.set_setting("ShowIDInChat", "0")
-        playername = self.GetName()[0]
-
-        if turnedoff: self.settings.set_setting("ShowIDInChat", "1")
-        msg.set_alias(playername)
-        if send: self.session.send(msg.toxml(),player_id)
-        del msg
-
-    #### incoming chat message handler #####
-    
-    def post_incoming_msg(self, msg, player):
-
-        # pull data
-        type = msg.get_type()
-        text = msg.get_text()
-        alias = msg.get_alias()
-        # who sent us the message?
-        if alias: display_name = self.chat_display_name([alias, player[1], player[2]])
-        elif player: display_name = self.chat_display_name(player)
-        else: display_name = "Server Administrator"
-
-        ######### START plugin_incoming_msg() ###########
-        for plugin_fname in self.activeplugins.keys():
-            plugin = self.activeplugins[plugin_fname]
-            try: text, type, name = plugin.plugin_incoming_msg(text, type, display_name, player)
-            except Exception, e:
-                if str(e) != "'module' object has no attribute 'receive_msg'":
-                    logger.general(traceback.format_exc())
-                    logger.general("EXCEPTION: " + str(e))
-        #end mDuo13 added code
-        #image stripping for players' names
-        strip_img = self.settings.get_setting("Show_Images_In_Chat")
-        if (strip_img == "0"): display_name = chat_util.strip_img_tags(display_name)
-        #end image stripping. --mDuo13, July 11th, 2005
-        # default sound
-        recvSound = "RecvSound"
-        # act on the type of messsage
-        if (type == chat_msg.CHAT_MESSAGE):
-            text = "<b>" + display_name + "</b>: " + text
-            self.Post(text)
-            self.parent.newMsg(0)
-        elif type == chat_msg.WHISPER_MESSAGE or type == chat_msg.WHISPER_EMOTE_MESSAGE:
-            tabbed_whispers_p = self.settings.get_setting("tabbedwhispers")
-            displaypanel = self
-            whisperingstring = " (whispering): "
-            panelexists = 0
-            GMWhisperTab = self.settings.get_setting("GMWhisperTab")
-            GroupWhisperTab = self.settings.get_setting("GroupWhisperTab")
-            name = '<i><b>' + display_name + '</b>: '
-            text += '</i>'
-            panelexists = 0
-            created = 0
-            try:
-                if GMWhisperTab == '1':
-                    the_gms = self.get_gms()
-                    #Check if whisper if from a GM
-                    if player[2] in the_gms:
-                        msg = name + ' (GM Whisper:) ' + text
-                        if type == chat_msg.WHISPER_MESSAGE: self.parent.GMChatPanel.Post(msg)
-                        else: self.parent.GMChatPanel.EmotePost("**" + msg + "**")
-                        idx = self.parent.get_tab_index(self.parent.GMChatPanel)
-                        self.parent.newMsg(idx)
-                        panelexists = 1
-                #See if message if from someone in our groups or for a whisper tab we already have
-                if not panelexists and GroupWhisperTab == "1":
-                    for panel in self.parent.group_tabs:
-                        if WG_LIST.has_key(panel.sendtarget) and WG_LIST[panel.sendtarget].has_key(int(player[2])):
-                            msg = name + text
-                            if type == chat_msg.WHISPER_MESSAGE: panel.Post(msg)
-                            else: panel.EmotePost("**" + msg + "**")
-                            idx = self.parent.get_tab_index(panel)
-                            self.parent.newMsg(idx)
-                            panelexists = 1
-                            break
-                if not panelexists and tabbed_whispers_p == "1":
-                    for panel in self.parent.whisper_tabs:
-                        #check for whisper tabs as well, to save the number of loops
-                        if panel.sendtarget == player[2]:
-                            msg = name + whisperingstring + text
-                            if type == chat_msg.WHISPER_MESSAGE: panel.Post(msg)
-                            else: panel.EmotePost("**" + msg + "**")
-                            idx = self.parent.get_tab_index(panel)
-                            self.parent.newMsg(idx)
-                            panelexists = 1
-                            break
-                #We did not fint the tab
-                if not panelexists:
-                    #If we get here the tab was not found
-                    if GroupWhisperTab == "1":
-                        for group in WG_LIST.keys():
-                            #Check if this group has the player in it
-                            if WG_LIST[group].has_key(int(player[2])):
-                                #Yup, post message. Player may be in more then 1 group so continue as well
-                                panel = self.parent.create_group_tab(group)
-                                msg = name + text
-                                if type == chat_msg.WHISPER_MESSAGE: wx.CallAfter(panel.Post, msg)
-                                else: wx.CallAfter(panel.EmotePost, "**" + msg + "**")
-                                created = 1
-                    #Check to see if we should create a whisper tab
-                    if not created and tabbed_whispers_p == "1":
-                        panel = self.parent.create_whisper_tab(player[2])
-                        msg = name + whisperingstring + text
-                        if type == chat_msg.WHISPER_MESSAGE: wx.CallAfter(panel.Post, msg)
-                        else: wx.CallAfter(panel.EmotePost, "**" + msg + "**")
-                        created = 1
-                    #Final check
-                    if not created:
-                        #No tabs to create, just send the message to the main chat tab
-                        msg = name + whisperingstring + text
-                        if type == chat_msg.WHISPER_MESSAGE: self.parent.MainChatPanel.Post(msg)
-                        else: self.parent.MainChatPanel.EmotePost("**" + msg + "**")
-                        self.parent.newMsg(0)
-            except Exception, e:
-                logger.general(traceback.format_exc())
-                logger.general("EXCEPTION: 'Error in posting whisper message': " + str(e))
-        elif (type == chat_msg.EMOTE_MESSAGE):
-            text = "** " + display_name + " " + text + " **"
-            self.EmotePost(text)
-            self.parent.newMsg(0)
-        elif (type == chat_msg.INFO_MESSAGE):
-            text = "<b>" + display_name + "</b>: " + text
-            self.InfoPost(text)
-            self.parent.newMsg(0)
-        elif (type == chat_msg.SYSTEM_MESSAGE):
-            text = "<b>" + display_name + "</b>: " + text
-            self.SystemPost(text)
-            self.parent.newMsg(0)
-        # playe sound
-        sound_file = self.settings.get_setting(recvSound)
-        if sound_file != '':
-            component.get('sound').play(sound_file)
-    #### Posting helpers #####
-
-    
-    def InfoPost(self, s):
-        self.Post(self.colorize(self.infocolor, s), c='info')
-
-    
-    def SystemPost(self, s):
-        self.Post(self.colorize(self.syscolor, s), c='system')
-
-    
-    def EmotePost(self, s):
-        self.Post(self.colorize(self.emotecolor, s), c='emote')
-
-    #### Standard Post method #####
-    
-    def Post(self, s="", send=False, myself=False, c='post'):
-        strip_p = self.settings.get_setting("striphtml")
-        strip_img = self.settings.get_setting("Show_Images_In_Chat")#moved back 7-11-05. --mDuo13
-        if (strip_p == "1"): s = strip_html(s)
-        if (strip_img == "0"): s = chat_util.strip_img_tags(s)
-        s = chat_util.simple_html_repair(s)
-        s = chat_util.strip_script_tags(s)
-        s = chat_util.strip_li_tags(s)
-        s = chat_util.strip_body_tags(s) #7-27-05 mDuo13
-        s = chat_util.strip_misalignment_tags(s) #7-27-05 mDuo13
-        aliasInfo = self.GetName()
-        display_name = aliasInfo[0]
-        if aliasInfo[1] != 'Default':
-            defaultcolor = self.settings.get_setting("mytextcolor")
-            self.settings.set_setting("mytextcolor", aliasInfo[1])
-            self.set_colors()
-        newline = ''
-        #following added by mDuo13
-        #########post_msg() - other##########
-        if not myself and not send:
-            for plugin_fname in self.activeplugins.keys():
-                plugin = self.activeplugins[plugin_fname]
-                try: s = plugin.post_msg(s, myself)
-                except Exception, e:
-                    if str(e) != "'module' object has no attribute 'post_msg'":
-                        logger.general(traceback.format_exc())
-                        logger.general("EXCEPTION: " + str(e))
-        #end mDuo13 added code
-        if myself:
-            name = "<b>" + display_name + "</b>: "
-            s = self.colorize(self.mytextcolor, s)
-        else: name = ""
-        if aliasInfo[1] != 'Default':
-            self.settings.set_setting("mytextcolor", defaultcolor)
-            self.set_colors()
-        #following line based on sourceforge patch #880403 from mDuo
-        # EDIT: Had to rework blank line check to handle malformed HTML throwing error.
-        #       this limits the effectiveness of this check -SD
-        lineHasText = 1
-        try: lineHasText = strip_html(s).replace("&nbsp;","").replace(" ","").strip()!=""
-        except:
-            # HTML parser has errored out (most likely). Being as all we are doing is
-            # scanning for empty/blank lines anyway there is no harm in letting a
+        self.toolbar_sizer.Layout()
+
+    # Heroman - Ideally, we would use static labels...
+    
+    def build_colorbutton(self):
+        self.color_button = createMaskedButton(self, dir_struct["icon"]+'textcolor.gif', 
+                                                    'Text Color', wx.ID_ANY, '#bdbdbd', 
+                                                    wx.BITMAP_TYPE_GIF)
+
+        self.saveButton = createMaskedButton(self, dir_struct["icon"]+'save.bmp', 
+                                                    'Save the chatbuffer', wx.ID_ANY, 
+                                                    '#c0c0c0', wx.BITMAP_TYPE_BMP )
+        self.color_button.SetBackgroundColour(self.settings.get_setting('mytextcolor'))
+        self.toolbar_sizer.Add(self.color_button, 0, wx.EXPAND)
+        self.toolbar_sizer.Add(self.saveButton, 0, wx.EXPAND)
+
+    
+    def OnMotion(self, evt):
+        contain = self.chatwnd.GetInternalRepresentation()
+        if contain:
+            sx = sy = 0
+            x = y = 0
+            (sx,sy) = self.chatwnd.GetViewStart()
+            (sx1,sy1) = self.chatwnd.GetScrollPixelsPerUnit()
+            sx = sx*sx1
+            sy = sy*sy1
+            (x,y) = evt.GetPosition()
+            lnk = contain.GetLink(sx+x,sy+y)
+            if lnk:
+                try:
+                    link = lnk.GetHref()
+                    self.session.set_status_url(link)
+                except: pass
+        else: logger.general("Error, self.chatwnd.GetInternalRepresentation() return None")
+        evt.Skip()
+
+    #  This subroutine is registered with predTextCtrl to be run for every OnChar event
+    #  It checks if we need to send a typing message
+
+    #
+    #  self:  duh
+    #  event:  raw KeyEvent from OnChar()
+    
+    def myKeyHook(self, event):
+        if self.session.get_status() == MPLAY_CONNECTED:   #  only do if we're connected
+            thisPress = time.time()                #  thisPress is local temp variable
+            if (thisPress - self.lastSend) > 4:    #  Check to see if it's been 5 seconds since our last notice
+                                                   #    If we're not already typing, then self.lastSend will be 0
+                self.sendTyping(1)                 #  send a not typing event here (1 for True)
+            self.lastPress = thisPress             #  either way, record the time of this keystroke for use in
+                                                   #  self.typingTimerFunc()
+        if self.settings.get_setting('SuppressChatAutoComplete') == '1':
+            logger.debug("Exit chat_panel->myKeyHook(self, event) return 1")
+            return 1
+        else:
+            logger.debug("Exit chat_panel->myKeyHook(self, event) return 0")
+            return 0
+
+    #  This subroutine gets called once a second by the typing Timer
+    #  It checks if we need to send a not_typing message
+    #
+    #  self:  duh
+    
+    def typingTimerFunc(self, event):
+        #following added by mDuo13
+        ##############refresh_counter()##############
+        for plugin_fname in self.activeplugins.keys():
+            plugin = self.activeplugins[plugin_fname]
+            try: plugin.refresh_counter()
+            except Exception, e:
+                if str(e) != "'module' object has no attribute 'refresh_counter'":
+                    logger.general(traceback.format_exc())
+                    logger.general("EXCEPTION: " + str(e))
+        #end mDuo13 added code
+        if self.lastSend:                          #  This will be zero when not typing, so equiv to if is_typing
+            thisTime = time.time()                 #  thisTime is a local temp variable
+            if (thisTime - self.lastPress) > 4:    #  Check to see if it's been 5 seconds since our last keystroke
+                                                   #  If we're not already typing, then self.lastSend will be 0
+
+                self.sendTyping(0)                 #  send a typing event here (0 for False)
+    #  This subroutine actually takes care of sending the messages for typing/not_typing events
+    #
+    #  self:  duh
+    #  typing:  boolean
+
+    
+    def sendTyping(self, typing):
+        if typing:
+            self.lastSend = time.time()  #  remember our send time for use in myKeyHook()
+            #I think this is cleaner
+            status_text = self.settings.get_setting('TypingStatusAlias')
+            if status_text == "" or status_text == None: status_text = "Typing"
+            self.session.set_text_status(status_text)
+        else:
+            self.lastSend = 0                            #  set lastSend to zero to indicate we're not typing
+            #I think this is cleaner
+            status_text = self.settings.get_setting('IdleStatusAlias')
+            if status_text == "" or status_text == None: status_text = "Idle"
+            self.session.set_text_status(status_text)
+
+    # This subroutine sets the colors of the chat based on the settings in the
+    # self instance.
+    #
+    # !self : instance of self
+    
+    def set_colors(self):
+        # chat window backround color
+        self.bgcolor = self.settings.get_setting('bgcolor')
+        # chat window normal text color
+        self.textcolor = self.settings.get_setting('textcolor')
+        # color of text player types
+        self.mytextcolor = self.settings.get_setting('mytextcolor')
+        # color of system warnings
+        self.syscolor = self.settings.get_setting('syscolor')
+        # color of system info messages
+        self.infocolor = self.settings.get_setting('infocolor')
+        # color of emotes
+        self.emotecolor = self.settings.get_setting('emotecolor')
+        # color of whispers
+        self.whispercolor = self.settings.get_setting('whispercolor')
+    # def set_colors - end
+
+    # This subroutine will insert text into the chat window
+    #
+    # !self : instance of self
+    # !txt : text to be inserted into the chat window
+    
+    def set_chat_text(self, txt):
+        self.chattxt.SetValue(txt)
+        self.chattxt.SetFocus()
+        self.chattxt.SetInsertionPointEnd()
+    # def set_chat_text - end
+
+    
+    def get_chat_text(self):
+        return self.chattxt.GetValue()
+
+    # This subroutine sets the focus to the chat window
+    
+    def set_chat_text_focus(self, event):
+        wx.CallAfter(self.chattxt.SetFocus)
+    # def set_chat_text_focus - end
+
+    # This subrtouine grabs the user input and make the special keys and
+    # modifiers work.
+    #
+    # !self : instance of self
+    # !event :
+    #
+    # Note:  self.chattxt now handles it's own Key events.  It does, however still
+    #        call it's parent's (self) OnChar to handle "default" behavior.
+    
+    def OnChar(self, event):
+        s = self.chattxt.GetValue()
+        #self.histlen = len(self.history) - 1
+
+        ## RETURN KEY (no matter if there is text in chattxt)
+        #  This section is run even if there is nothing in the chattxt (as opposed to the next wx.WXK_RETURN handler
+        if event.GetKeyCode() == wx.WXK_RETURN:
+            logger.debug("event.GetKeyCode() == wx.WXK_RETURN")
+            self.set_colors()
+            if self.session.get_status() == MPLAY_CONNECTED:          #  only do if we're connected
+                self.sendTyping(0)                                    #  Send a "not_typing" event on enter key press
+        macroText=""
+        recycle_bin = {wx.WXK_F1: 'event.GetKeyCode() == wx.WXK_F1', wx.WXK_F2: 'event.GetKeyCode() == wx.WXK_F2', 
+                    wx.WXK_F3: 'event.GetKeyCode() == wx.WXK_F3', wx.WXK_F4: 'event.GetKeyCode() == wx.WXK_F4', 
+                    wx.WXK_F5: 'event.GetKeyCode() == wx.WXK_F5', wx.WXK_F6: 'event.GetKeyCode() == wx.WXK_F6', 
+                    wx.WXK_F7: 'event.GetKeyCode() == wx.WXK_F7', wx.WXK_F8: 'event.GetKeyCode() == wx.WXK_F8', 
+                    wx.WXK_F9: 'event.GetKeyCode() == wx.WXK_F9', wx.WXK_F10: 'event.GetKeyCode() == wx.WXK_F10', 
+                    wx.WXK_F11: 'event.GetKeyCode() == wx.WXK_F11', wx.WXK_F12: 'event.GetKeyCode() == wx.WXK_F12'}
+
+        bin_event = event.GetKeyCode()
+        if recycle_bin.has_key(bin_event):
+	    logger.debug(lambda bin_event: recycle_bin[bin_event])
+	    macroText = self.settings.get_setting(recycle_bin[bin_event][29:])
+	    recycle_bin = {}; del bin_event
+
+        # Append to the existing typed text as needed and make sure the status doesn't change back.
+        if len(macroText):
+            self.sendTyping(0)
+            s = macroText
+
+        ## RETURN KEY (and not text in control)
+        if (event.GetKeyCode() == wx.WXK_RETURN and len(s)) or len(macroText):
+            logger.debug("(event.GetKeyCode() == wx.WXK_RETURN and len(s)) or len(macroText)")
+            self.histidx = -1
+            self.temptext = ""
+            self.history = [s] + self.history#prepended instead of appended now, so higher index = greater age
+            if not len(macroText): self.chattxt.SetValue("")
+            # play sound
+            sound_file = self.settings.get_setting("SendSound")
+            if sound_file != '': component.get('sound').play(sound_file)
+            if s[0] != "/": ## it's not a slash command
+                s = self.ParsePost( s, True, True )
+            else: self.chat_cmds.docmd(s) # emote is in chatutils.py
+
+        ## UP KEY
+        elif event.GetKeyCode() == wx.WXK_UP:
+            logger.debug("event.GetKeyCode() == wx.WXK_UP")
+            if self.histidx < len(self.history)-1:
+                #text that's not in history but also hasn't been sent to chat gets stored in self.temptext
+                #this way if someone presses the up key, they don't lose their current message permanently
+                #(unless they also press enter at the time)
+                if self.histidx is -1: self.temptext = self.chattxt.GetValue()
+                self.histidx += 1
+                self.chattxt.SetValue(self.history[self.histidx])
+                self.chattxt.SetInsertionPointEnd()
+            else:
+                self.histidx = len(self.history) -1#in case it got too high somehow, this should fix it
+                #self.InfoPost("**Going up? I don't think so.**")
+            #print self.histidx, "in",self.history
+
+        ## DOWN KEY
+        elif event.GetKeyCode() == wx.WXK_DOWN:
+            logger.debug("event.GetKeyCode() == wx.WXK_DOWN")
+            #histidx of -1 indicates currently viewing text that's not in self.history
+            if self.histidx > -1:
+                self.histidx -= 1
+                if self.histidx is -1: #remember, it just decreased
+                    self.chattxt.SetValue(self.temptext)
+                else: self.chattxt.SetValue(self.history[self.histidx])
+                self.chattxt.SetInsertionPointEnd()
+            else: self.histidx = -1 #just in case it somehow got below -1, this should fix it
+                #self.InfoPost("**Going down? I don't think so.**")
+            #print self.histidx, "in",self.history
+
+        ## TAB KEY
+        elif  event.GetKeyCode() == wx.WXK_TAB:
+            logger.debug("event.GetKeyCode() == wx.WXK_TAB")
+            if s !="":
+                found = 0
+                nicks = []
+                testnick = ""
+                inlength = len(s)
+                for getnames in self.session.players.keys():
+                    striphtmltag = re.compile ('<[^>]+>*')
+                    testnick = striphtmltag.sub ("", self.session.players[getnames][0])
+                    if string.lower(s) == string.lower(testnick[:inlength]):
+                        found = found + 1
+                        nicks[len(nicks):]=[testnick]
+                if found == 0: ## no nick match
+                    self.Post(self.colorize(self.syscolor," ** No match found"))
+                elif found > 1: ## matched more than 1, tell user what matched
+                    nickstring = ""
+                    nicklist = []
+                    for foundnicks in nicks:
+                        nickstring = nickstring + foundnicks + ", "
+                        nicklist.append(foundnicks)
+                    nickstring = nickstring[:-2]
+                    self.Post(self.colorize(self.syscolor, " ** Multiple matches found: " + nickstring))
+                    # set text to the prefix match between first two matches
+                    settext = re.match(''.join(map(lambda x: '(%s?)' % x, string.lower(nicklist[0]))), string.lower(nicklist[1])).group()
+                    # run through the rest of the nicks
+                    for i in nicklist:
+                        settext = re.match(''.join(map(lambda x: '(%s?)' % x, string.lower(i))), string.lower(settext)).group()
+                    if settext:
+                        self.chattxt.SetValue(settext)
+                        self.chattxt.SetInsertionPointEnd()
+                else: ## put the matched name in the chattxt box
+                    settext = nicks[0] + ": "
+                    self.chattxt.SetValue(settext)
+                    self.chattxt.SetInsertionPointEnd()
+            else: ## not online, and no text in chattxt box
+                self.Post(self.colorize(self.syscolor, " ** That's the Tab key, Dave"))
+
+        ## PAGE UP
+        elif event.GetKeyCode() in (wx.WXK_PRIOR, wx.WXK_PAGEUP):
+            logger.debug("event.GetKeyCode() in (wx.WXK_PRIOR, wx.WXK_PAGEUP)")
+            self.chatwnd.ScrollPages(-1)
+            if not self.lockscroll: self.lock_scroll(0)
+
+        ## PAGE DOWN
+        elif event.GetKeyCode() in (wx.WXK_NEXT, wx.WXK_PAGEDOWN):
+            logger.debug("event.GetKeyCode() in (wx.WXK_NEXT, wx.WXK_PAGEDOWN)")
+            if not self.lockscroll: self.lock_scroll(0)
+            if ((self.chatwnd.GetScrollRange(1)-self.chatwnd.GetScrollPos(1)-self.chatwnd.GetScrollThumb(1) < 30) and self.lockscroll):
+                self.lock_scroll(0)
+            self.chatwnd.ScrollPages(1)
+
+        ## END
+        elif event.GetKeyCode() == wx.WXK_END:
+            logger.debug("event.GetKeyCode() == wx.WXK_END")
+            if self.lockscroll:
+                self.lock_scroll(0)
+                self.Post()
+            event.Skip()
+
+        ## NOTHING
+        else: event.Skip()
+        logger.debug("Exit chat_panel->OnChar(self, event)")
+    # def OnChar - end
+
+    
+    def onDieRoll(self, evt):
+        """Roll the dice based on the button pressed and the die modifiers entered, if any."""
+        # Get any die modifiers if they have been entered
+        numDie = self.numDieText.GetValue()
+        dieMod = self.dieModText.GetValue()
+        dieText = numDie
+        # Now, apply and roll die mods based on the button that was pressed
+        id = evt.GetId()
+        if self.dieIDs.has_key(id): dieText += self.dieIDs[id]
+        if len(dieMod) and dieMod[0] not in "*/-+": dieMod = "+" + dieMod
+        dieText += dieMod
+        dieText = "[" + dieText + "]"
+        self.ParsePost(dieText, 1, 1)
+        self.chattxt.SetFocus()
+
+    # This subroutine saves a chat buffer as html to a file chosen via a
+    # FileDialog.
+    #
+    # !self : instance of self
+    # !evt :
+    
+    def on_chat_save(self, evt):
+        f = wx.FileDialog(self,"Save Chat Buffer",".","","HTM* (*.htm*)|*.htm*|HTML (*.html)|*.html|HTM (*.htm)|*.htm",wx.SAVE)
+        if f.ShowModal() == wx.ID_OK:
+            file = open(f.GetPath(), "w")
+            file.write(self.ResetPage() + "</body></html>")
+            file.close()
+        f.Destroy()
+        os.chdir(dir_struct["home"])
+    # def on_chat_save - end
+
+    
+    def ResetPage(self):
+        self.set_colors()
+        buffertext = self.chatwnd.Header() + "\n"
+        buffertext += chat_util.strip_body_tags(self.chatwnd.StripHeader()).replace("<br>", 
+                                                                            "<br />").replace('</html>', 
+                                                                            '').replace("<br />", 
+                                                                            "<br />\n").replace("\n\n", '')
+        return buffertext
+
+    # This subroutine sets the color of selected text, or base text color if
+    # nothing is selected
+    
+    def on_text_color(self, event):
+        hexcolor = self.r_h.do_hex_color_dlg(self)
+        if hexcolor != None:
+            (beg,end) = self.chattxt.GetSelection()
+            if beg != end:
+                txt = self.chattxt.GetValue()
+                txt = txt[:beg]+self.colorize(hexcolor,txt[beg:end]) +txt[end:]
+                self.chattxt.SetValue(txt)
+                self.chattxt.SetInsertionPointEnd()
+                self.chattxt.SetFocus()
+            else:
+                self.color_button.SetBackgroundColour(hexcolor)
+                self.mytextcolor = hexcolor
+                self.settings.set_setting('mytextcolor',hexcolor)
+                self.set_colors()
+                self.Post()
+    # def on_text_color - end
+
+    # This subroutine take a color and a text string and formats it into html.
+    #
+    # !self : instance of self
+    # !color : color for the text to be set
+    # !text : text string to be included in the html.
+    
+    def colorize(self, color, text):
+        """Puts font tags of 'color' around 'text' value, and returns the string"""
+        return "<font color='" + color + "'>" + text + "</font>"
+    # def colorize - end
+
+    # This subroutine takes and event and inserts text with the basic format
+    # tags included.
+    #
+    # !self : instance of self
+    # !event :
+    
+    def on_text_format(self, event):
+        id = event.GetId()
+        txt = self.chattxt.GetValue()
+        (beg,end) = self.chattxt.GetSelection()
+        if beg != end: sel_txt = txt[beg:end]
+        else: sel_txt = txt
+        if id == self.boldButton.GetId(): sel_txt = "<b>" + sel_txt + "</b>"
+        elif id == self.italicButton.GetId(): sel_txt = "<i>" + sel_txt + "</i>"
+        elif id == self.underlineButton.GetId(): sel_txt = "<u>" + sel_txt + "</u>"
+        if beg != end: txt = txt[:beg] + sel_txt + txt[end:]
+        else: txt = sel_txt
+        self.chattxt.SetValue(txt)
+        self.chattxt.SetInsertionPointEnd()
+        self.chattxt.SetFocus()
+    # def on_text_format - end
+
+    
+    def lock_scroll(self, event):
+        if self.lockscroll:
+            self.lockscroll = False
+            self.scroll_lock.SetLabel("Scroll ON")
+            if len(self.storedata) != 0:
+                for line in self.storedata: self.chatwnd.AppendToPage(line)
+            self.storedata = []
+            self.scroll_down()
+        else:
+            self.lockscroll = True
+            self.scroll_lock.SetLabel("Scroll OFF")
+
+    # This subroutine will popup a text window with the chatbuffer contents
+    #
+    # !self : instance of self
+    # !event :
+    
+    def pop_textpop(self, event):
+        """searchable popup text view of chatbuffer"""
+        h_buffertext = self.ResetPage()
+        h_dlg = orpgScrolledMessageFrameEditor(self, h_buffertext, "Text View of Chat Window", None, (500,300))
+        h_dlg.Show(True)
+
+    # This subroutine will change the dimension of the window
+    #
+    # !self : instance of self
+    # !event :
+    
+    def OnSize(self, event=None):
+        event.Skip()
+        wx.CallAfter(self.scroll_down)
+    # def OnSize - end
+
+    
+    def scroll_down(self):
+        self.Freeze()
+        self.chatwnd.scroll_down()
+        self.Thaw()
+
+    ###### message helpers ######
+    
+    def PurgeChat(self):
+        self.set_colors()
+        self.chatwnd.SetPage(self.chatwnd.Header())
+
+    
+    def system_message(self, text):
+        self.send_chat_message(text,chat_msg.SYSTEM_MESSAGE)
+        self.SystemPost(text)
+
+    
+    def info_message(self, text):
+        self.send_chat_message(text,chat_msg.INFO_MESSAGE)
+        self.InfoPost(text)
+
+    
+    def get_gms(self):
+        the_gms = []
+        for playerid in self.session.players:
+            if len(self.session.players[playerid])>7:
+                if self.session.players[playerid][7]=="GM" and self.session.group_id != '0': the_gms += [playerid]
+        return the_gms
+
+    
+    def GetName(self):
+        self.AliasLib = component.get('alias')
+        player = self.session.get_my_info()
+        if self.AliasLib != None:
+            self.AliasLib.alias = self.aliasList.GetStringSelection();
+            if self.AliasLib.alias[0] != self.defaultAliasName:
+                logger.debug("Exit chat_panel->GetName(self)")
+                return [self.chat_display_name([self.AliasLib.alias[0], player[1], player[2]]), self.AliasLib.alias[1]]
+        return [self.chat_display_name(player), "Default"]
+
+    
+    def GetFilteredText(self, text):
+        advregex = re.compile('\"(.*?)\"', re.I)
+        self.AliasLib = component.get('alias')
+        if self.AliasLib != None:
+            self.AliasLib.filter = self.filterList.GetSelection()-1;
+            for rule in self.AliasLib.filterRegEx:
+                if not self.advancedFilter: text = re.sub(rule[0], rule[1], text)
+                else:
+                    for m in advregex.finditer(text):
+                        match = m.group(0)
+                        newmatch = re.sub(rule[0], rule[1], match)
+                        text = text.replace(match, newmatch)
+        return text
+
+    
+    def emote_message(self, text):
+        text = self.NormalizeParse(text)
+        text = self.colorize(self.emotecolor, text)
+
+        if self.type == MAIN_TAB and self.sendtarget == 'all': self.send_chat_message(text,chat_msg.EMOTE_MESSAGE)
+        elif self.type == MAIN_TAB and self.sendtarget == "gm":
+            msg_type = chat_msg.WHISPER_EMOTE_MESSAGE
+            the_gms = self.get_gms()
+            for each_gm in the_gms: self.send_chat_message(text,chat_msg.WHISPER_EMOTE_MESSAGE, str(each_gm))
+        elif self.type == GROUP_TAB and WG_LIST.has_key(self.sendtarget):
+            for pid in WG_LIST[self.sendtarget]:
+                self.send_chat_message(text,chat_msg.WHISPER_EMOTE_MESSAGE, str(pid))
+        elif self.type == WHISPER_TAB: self.send_chat_message(text,chat_msg.WHISPER_EMOTE_MESSAGE, str(self.sendtarget))
+        elif self.type == NULL_TAB: pass
+        name = self.GetName()[0]
+        text = "** " + name + " " + text + " **"
+        self.EmotePost(text)
+
+    
+    def whisper_to_players(self, text, player_ids):
+        tabbed_whispers_p = self.settings.get_setting("tabbedwhispers")
+        # Heroman - apply any filtering selected
+        text = self.NormalizeParse(text)
+        player_names = ""
+        # post to our chat before we colorize
+        for m in player_ids:
+            id = m.strip()
+            if self.session.is_valid_id(id):
+                returned_name = self.session.get_player_by_player_id(id)[0]
+                player_names += returned_name
+                player_names += ", "
+            else:
+                player_names += " Unknown!"
+                player_names += ", "
+        comma = ","
+        comma.join(player_ids)
+        if (self.sendtarget == "all"):
+            self.InfoPost("<i>whispering to "+ player_names + " " + text + "</i> ")
+        # colorize and loop, sending whisper messages to all valid clients
+        text = self.colorize(self.mytextcolor, text)
+        for id in player_ids:
+            id = id.strip()
+            if self.session.is_valid_id(id): self.send_chat_message(text,chat_msg.WHISPER_MESSAGE,id)
+            else: self.InfoPost(id + " Unknown!")
+
+    
+    def send_chat_message(self, text, type=chat_msg.CHAT_MESSAGE, player_id="all"):
+        #########send_msg()#############
+        send = 1
+        for plugin_fname in self.activeplugins.keys():
+            plugin = self.activeplugins[plugin_fname]
+            try: text, send = plugin.send_msg(text, send)
+            except Exception, e:
+                if str(e) != "'module' object has no attribute 'send_msg'":
+                    logger.general(traceback.format_exc())
+                    logger.general("EXCEPTION: " + str(e))
+        msg = chat_msg.chat_msg()
+        msg.set_text(text)
+        msg.set_type(type)
+        turnedoff = False
+        if self.settings.get_setting("ShowIDInChat") == "1":
+            turnedoff = True
+            self.settings.set_setting("ShowIDInChat", "0")
+        playername = self.GetName()[0]
+
+        if turnedoff: self.settings.set_setting("ShowIDInChat", "1")
+        msg.set_alias(playername)
+        if send: self.session.send(msg.toxml(),player_id)
+        del msg
+
+    #### incoming chat message handler #####
+    
+    def post_incoming_msg(self, msg, player):
+
+        # pull data
+        type = msg.get_type()
+        text = msg.get_text()
+        alias = msg.get_alias()
+        # who sent us the message?
+        if alias: display_name = self.chat_display_name([alias, player[1], player[2]])
+        elif player: display_name = self.chat_display_name(player)
+        else: display_name = "Server Administrator"
+
+        ######### START plugin_incoming_msg() ###########
+        for plugin_fname in self.activeplugins.keys():
+            plugin = self.activeplugins[plugin_fname]
+            try: text, type, name = plugin.plugin_incoming_msg(text, type, display_name, player)
+            except Exception, e:
+                if str(e) != "'module' object has no attribute 'receive_msg'":
+                    logger.general(traceback.format_exc())
+                    logger.general("EXCEPTION: " + str(e))
+        #end mDuo13 added code
+        #image stripping for players' names
+        strip_img = self.settings.get_setting("Show_Images_In_Chat")
+        if (strip_img == "0"): display_name = chat_util.strip_img_tags(display_name)
+        #end image stripping. --mDuo13, July 11th, 2005
+        # default sound
+        recvSound = "RecvSound"
+        # act on the type of messsage
+        if (type == chat_msg.CHAT_MESSAGE):
+            text = "<b>" + display_name + "</b>: " + text
+            self.Post(text)
+            self.parent.newMsg(0)
+        elif type == chat_msg.WHISPER_MESSAGE or type == chat_msg.WHISPER_EMOTE_MESSAGE:
+            tabbed_whispers_p = self.settings.get_setting("tabbedwhispers")
+            displaypanel = self
+            whisperingstring = " (whispering): "
+            panelexists = 0
+            GMWhisperTab = self.settings.get_setting("GMWhisperTab")
+            GroupWhisperTab = self.settings.get_setting("GroupWhisperTab")
+            name = '<i><b>' + display_name + '</b>: '
+            text += '</i>'
+            panelexists = 0
+            created = 0
+            try:
+                if GMWhisperTab == '1':
+                    the_gms = self.get_gms()
+                    #Check if whisper if from a GM
+                    if player[2] in the_gms:
+                        msg = name + ' (GM Whisper:) ' + text
+                        if type == chat_msg.WHISPER_MESSAGE: self.parent.GMChatPanel.Post(msg)
+                        else: self.parent.GMChatPanel.EmotePost("**" + msg + "**")
+                        idx = self.parent.get_tab_index(self.parent.GMChatPanel)
+                        self.parent.newMsg(idx)
+                        panelexists = 1
+                #See if message if from someone in our groups or for a whisper tab we already have
+                if not panelexists and GroupWhisperTab == "1":
+                    for panel in self.parent.group_tabs:
+                        if WG_LIST.has_key(panel.sendtarget) and WG_LIST[panel.sendtarget].has_key(int(player[2])):
+                            msg = name + text
+                            if type == chat_msg.WHISPER_MESSAGE: panel.Post(msg)
+                            else: panel.EmotePost("**" + msg + "**")
+                            idx = self.parent.get_tab_index(panel)
+                            self.parent.newMsg(idx)
+                            panelexists = 1
+                            break
+                if not panelexists and tabbed_whispers_p == "1":
+                    for panel in self.parent.whisper_tabs:
+                        #check for whisper tabs as well, to save the number of loops
+                        if panel.sendtarget == player[2]:
+                            msg = name + whisperingstring + text
+                            if type == chat_msg.WHISPER_MESSAGE: panel.Post(msg)
+                            else: panel.EmotePost("**" + msg + "**")
+                            idx = self.parent.get_tab_index(panel)
+                            self.parent.newMsg(idx)
+                            panelexists = 1
+                            break
+                #We did not fint the tab
+                if not panelexists:
+                    #If we get here the tab was not found
+                    if GroupWhisperTab == "1":
+                        for group in WG_LIST.keys():
+                            #Check if this group has the player in it
+                            if WG_LIST[group].has_key(int(player[2])):
+                                #Yup, post message. Player may be in more then 1 group so continue as well
+                                panel = self.parent.create_group_tab(group)
+                                msg = name + text
+                                if type == chat_msg.WHISPER_MESSAGE: wx.CallAfter(panel.Post, msg)
+                                else: wx.CallAfter(panel.EmotePost, "**" + msg + "**")
+                                created = 1
+                    #Check to see if we should create a whisper tab
+                    if not created and tabbed_whispers_p == "1":
+                        panel = self.parent.create_whisper_tab(player[2])
+                        msg = name + whisperingstring + text
+                        if type == chat_msg.WHISPER_MESSAGE: wx.CallAfter(panel.Post, msg)
+                        else: wx.CallAfter(panel.EmotePost, "**" + msg + "**")
+                        created = 1
+                    #Final check
+                    if not created:
+                        #No tabs to create, just send the message to the main chat tab
+                        msg = name + whisperingstring + text
+                        if type == chat_msg.WHISPER_MESSAGE: self.parent.MainChatPanel.Post(msg)
+                        else: self.parent.MainChatPanel.EmotePost("**" + msg + "**")
+                        self.parent.newMsg(0)
+            except Exception, e:
+                logger.general(traceback.format_exc())
+                logger.general("EXCEPTION: 'Error in posting whisper message': " + str(e))
+        elif (type == chat_msg.EMOTE_MESSAGE):
+            text = "** " + display_name + " " + text + " **"
+            self.EmotePost(text)
+            self.parent.newMsg(0)
+        elif (type == chat_msg.INFO_MESSAGE):
+            text = "<b>" + display_name + "</b>: " + text
+            self.InfoPost(text)
+            self.parent.newMsg(0)
+        elif (type == chat_msg.SYSTEM_MESSAGE):
+            text = "<b>" + display_name + "</b>: " + text
+            self.SystemPost(text)
+            self.parent.newMsg(0)
+        # playe sound
+        sound_file = self.settings.get_setting(recvSound)
+        if sound_file != '':
+            component.get('sound').play(sound_file)
+    #### Posting helpers #####
+
+    
+    def InfoPost(self, s):
+        self.Post(self.colorize(self.infocolor, s), c='info')
+
+    
+    def SystemPost(self, s):
+        self.Post(self.colorize(self.syscolor, s), c='system')
+
+    
+    def EmotePost(self, s):
+        self.Post(self.colorize(self.emotecolor, s), c='emote')
+
+    #### Standard Post method #####
+    
+    def Post(self, s="", send=False, myself=False, c='post'):
+        strip_p = self.settings.get_setting("striphtml")
+        strip_img = self.settings.get_setting("Show_Images_In_Chat")#moved back 7-11-05. --mDuo13
+        if (strip_p == "1"): s = strip_html(s)
+        if (strip_img == "0"): s = chat_util.strip_img_tags(s)
+        s = chat_util.simple_html_repair(s)
+        s = chat_util.strip_script_tags(s)
+        s = chat_util.strip_li_tags(s)
+        s = chat_util.strip_body_tags(s) #7-27-05 mDuo13
+        s = chat_util.strip_misalignment_tags(s) #7-27-05 mDuo13
+        aliasInfo = self.GetName()
+        display_name = aliasInfo[0]
+        if aliasInfo[1] != 'Default':
+            defaultcolor = self.settings.get_setting("mytextcolor")
+            self.settings.set_setting("mytextcolor", aliasInfo[1])
+            self.set_colors()
+        newline = ''
+        #following added by mDuo13
+        #########post_msg() - other##########
+        if not myself and not send:
+            for plugin_fname in self.activeplugins.keys():
+                plugin = self.activeplugins[plugin_fname]
+                try: s = plugin.post_msg(s, myself)
+                except Exception, e:
+                    if str(e) != "'module' object has no attribute 'post_msg'":
+                        logger.general(traceback.format_exc())
+                        logger.general("EXCEPTION: " + str(e))
+        #end mDuo13 added code
+        if myself:
+            name = "<b>" + display_name + "</b>: "
+            s = self.colorize(self.mytextcolor, s)
+        else: name = ""
+        if aliasInfo[1] != 'Default':
+            self.settings.set_setting("mytextcolor", defaultcolor)
+            self.set_colors()
+        #following line based on sourceforge patch #880403 from mDuo
+        # EDIT: Had to rework blank line check to handle malformed HTML throwing error.
+        #       this limits the effectiveness of this check -SD
+        lineHasText = 1
+        try: lineHasText = strip_html(s).replace("&nbsp;","").replace(" ","").strip()!=""
+        except:
+            # HTML parser has errored out (most likely). Being as all we are doing is
+            # scanning for empty/blank lines anyway there is no harm in letting a
             # troublesome message though. Worst case is a blank line to chat.
-            lineHasText = 1
+            lineHasText = 1
         if lineHasText:
-            #following added by mDuo13
-            if myself:
-                s2 = s
-                ########post_msg() - self #######
-                for plugin_fname in self.activeplugins.keys():
-                    plugin = self.activeplugins[plugin_fname]
-                    try:
-                        s2 = plugin.post_msg(s2, myself)
-                    except Exception, e:
-                        if str(e) != "'module' object has no attribute 'post_msg'":
-                            logger.general(traceback.format_exc())
-                            logger.general("EXCEPTION: " + str(e))
-                if s2 != "":
-                    #Italici the messages from tabbed whispers
-                    if self.type == WHISPER_TAB or self.type == GROUP_TAB or self.sendtarget == 'gm':
-                        s2 = s2 + '</i>'
-                        name = '<i>' + name
-                        if self.type == WHISPER_TAB: name += " (whispering): "
-                        elif self.type == GROUP_TAB: name += self.settings.get_setting("gwtext") + ' '
-                        elif self.sendtarget == 'gm': name += " (whispering to GM) "
-                    newline = "<div class='"+c+"'> " + self.TimeIndexString() + name + s2 + "</div>"
-                    log( self.settings, c, name+s2 )
-            else:
-                newline = "<div class='"+c+"'> " + self.TimeIndexString() + name + s + "</div>"
-                log( self.settings, c, name+s )
-        else: send = False
-        newline = chat_util.strip_unicode(newline)
+            #following added by mDuo13
+            if myself:
+                s2 = s
+                ########post_msg() - self #######
+                for plugin_fname in self.activeplugins.keys():
+                    plugin = self.activeplugins[plugin_fname]
+                    try:
+                        s2 = plugin.post_msg(s2, myself)
+                    except Exception, e:
+                        if str(e) != "'module' object has no attribute 'post_msg'":
+                            logger.general(traceback.format_exc())
+                            logger.general("EXCEPTION: " + str(e))
+                if s2 != "":
+                    #Italici the messages from tabbed whispers
+                    if self.type == WHISPER_TAB or self.type == GROUP_TAB or self.sendtarget == 'gm':
+                        s2 = s2 + '</i>'
+                        name = '<i>' + name
+                        if self.type == WHISPER_TAB: name += " (whispering): "
+                        elif self.type == GROUP_TAB: name += self.settings.get_setting("gwtext") + ' '
+                        elif self.sendtarget == 'gm': name += " (whispering to GM) "
+                    newline = "<div class='"+c+"'> " + self.TimeIndexString() + name + s2 + "</div>"
+                    log( self.settings, c, name+s2 )
+            else:
+                newline = "<div class='"+c+"'> " + self.TimeIndexString() + name + s + "</div>"
+                log( self.settings, c, name+s )
+        else: send = False
+        newline = chat_util.strip_unicode(newline)
         if self.lockscroll == 0:
-            self.chatwnd.AppendToPage(newline)
-            self.scroll_down()
-        else: self.storedata.append(newline)
+            self.chatwnd.AppendToPage(newline)
+            self.scroll_down()
+        else: self.storedata.append(newline)
         if send:
-            if self.type == MAIN_TAB and self.sendtarget == 'all': self.send_chat_message(s)
-            elif self.type == MAIN_TAB and self.sendtarget == "gm":
-                the_gms = self.get_gms()
-                self.whisper_to_players(s, the_gms)
-            elif self.type == GROUP_TAB and WG_LIST.has_key(self.sendtarget):
-                members = []
-                for pid in WG_LIST[self.sendtarget]: members.append(str(WG_LIST[self.sendtarget][pid]))
-                self.whisper_to_players(self.settings.get_setting("gwtext") + s, members)
-            elif self.type == WHISPER_TAB: self.whisper_to_players(s, [self.sendtarget])
-            elif self.type == NULL_TAB: pass
-            else: self.InfoPost("Failed to send message, unknown send type for this tab")
-        self.parsed=0
-
-    #
-    # TimeIndexString()
-    #
-    # time indexing for chat display only (don't log time indexing)
-    # added by Snowdog 4/04
-    
-    def TimeIndexString(self):
-        try:
-            mtime = ""
-            if self.settings.get_setting('Chat_Time_Indexing') == "0": pass
-            elif self.settings.get_setting('Chat_Time_Indexing') == "1":
-                mtime = time.strftime("[%I:%M:%S] ", time.localtime())
-            return mtime
-        except Exception, e:
-            logger.general(traceback.format_exc())
-            logger.general("EXCEPTION: " + str(e))
-            return "[ERROR]"
-
-    ####  Post with parsing dice ####
-    
-    def ParsePost(self, s, send=False, myself=False):
-        s = self.NormalizeParse(s)
-        self.set_colors()
-        self.Post(s,send,myself)
-    
-    def NormalizeParse(self, s):
-        for plugin_fname in self.activeplugins.keys():
-            plugin = self.activeplugins[plugin_fname]
-            try: s = plugin.pre_parse(s)
-            except Exception, e:
-                if str(e) != "'module' object has no attribute 'post_msg'":
-                    logger.general(traceback.format_exc())
-                    logger.general("EXCEPTION: " + str(e))
-        if self.parsed == 0:
-            s = self.ParseNode(s)
-            s = self.ParseDice(s)
-            s = self.ParseFilter(s)
-            self.parsed = 1
-        return s
-    
-    def ParseFilter(self, s):
-        s = self.GetFilteredText(s)
-        return s
-    
-    def ParseNode(self, s):
-        """Parses player input for embedded nodes rolls"""
-        cur_loc = 0
-        #[a-zA-Z0-9 _\-\.]
-        reg = re.compile("(!@(.*?)@!)")
-        matches = reg.findall(s)
-        for i in xrange(0,len(matches)):
-            newstr = self.ParseNode(self.resolve_nodes(matches[i][1]))
-            s = s.replace(matches[i][0], newstr, 1)
-        return s
-    
-    def ParseDice(self, s):
-        """Parses player input for embedded dice rolls"""
-        reg = re.compile("\[([^]]*?)\]")
-        matches = reg.findall(s)
-        for i in xrange(0,len(matches)):
-            newstr = self.PraseUnknowns(matches[i])
-            qmode = 0
-            newstr1 = newstr
-            if newstr[0].lower() == 'q':
-                newstr = newstr[1:]
+            if self.type == MAIN_TAB and self.sendtarget == 'all': self.send_chat_message(s)
+            elif self.type == MAIN_TAB and self.sendtarget == "gm":
+                the_gms = self.get_gms()
+                self.whisper_to_players(s, the_gms)
+            elif self.type == GROUP_TAB and WG_LIST.has_key(self.sendtarget):
+                members = []
+                for pid in WG_LIST[self.sendtarget]: members.append(str(WG_LIST[self.sendtarget][pid]))
+                self.whisper_to_players(self.settings.get_setting("gwtext") + s, members)
+            elif self.type == WHISPER_TAB: self.whisper_to_players(s, [self.sendtarget])
+            elif self.type == NULL_TAB: pass
+            else: self.InfoPost("Failed to send message, unknown send type for this tab")
+        self.parsed=0
+
+    #
+    # TimeIndexString()
+    #
+    # time indexing for chat display only (don't log time indexing)
+    # added by Snowdog 4/04
+    
+    def TimeIndexString(self):
+        try:
+            mtime = ""
+            if self.settings.get_setting('Chat_Time_Indexing') == "0": pass
+            elif self.settings.get_setting('Chat_Time_Indexing') == "1":
+                mtime = time.strftime("[%I:%M:%S] ", time.localtime())
+            return mtime
+        except Exception, e:
+            logger.general(traceback.format_exc())
+            logger.general("EXCEPTION: " + str(e))
+            return "[ERROR]"
+
+    ####  Post with parsing dice ####
+    
+    def ParsePost(self, s, send=False, myself=False):
+        s = self.NormalizeParse(s)
+        self.set_colors()
+        self.Post(s,send,myself)
+    
+    def NormalizeParse(self, s):
+        for plugin_fname in self.activeplugins.keys():
+            plugin = self.activeplugins[plugin_fname]
+            try: s = plugin.pre_parse(s)
+            except Exception, e:
+                if str(e) != "'module' object has no attribute 'post_msg'":
+                    logger.general(traceback.format_exc())
+                    logger.general("EXCEPTION: " + str(e))
+        if self.parsed == 0:
+            s = self.ParseNode(s)
+            s = self.ParseDice(s)
+            s = self.ParseFilter(s)
+            self.parsed = 1
+        return s
+    
+    def ParseFilter(self, s):
+        s = self.GetFilteredText(s)
+        return s
+    
+    def ParseNode(self, s):
+        """Parses player input for embedded nodes rolls"""
+        cur_loc = 0
+        #[a-zA-Z0-9 _\-\.]
+        reg = re.compile("(!@(.*?)@!)")
+        matches = reg.findall(s)
+        for i in xrange(0,len(matches)):
+            newstr = self.ParseNode(self.resolve_nodes(matches[i][1]))
+            s = s.replace(matches[i][0], newstr, 1)
+        return s
+    
+    def ParseDice(self, s):
+        """Parses player input for embedded dice rolls"""
+        reg = re.compile("\[([^]]*?)\]")
+        matches = reg.findall(s)
+        for i in xrange(0,len(matches)):
+            newstr = self.PraseUnknowns(matches[i])
+            qmode = 0
+            newstr1 = newstr
+            if newstr[0].lower() == 'q':
+                newstr = newstr[1:]
                 qmode = 1
-            if newstr[0].lower() == '#':
-                newstr = newstr[1:]
-                qmode = 2
-            try: newstr = component.get('DiceManager').proccessRoll(newstr)
-            except: pass
-            if qmode == 1:
+            if newstr[0].lower() == '#':
+                newstr = newstr[1:]
+                qmode = 2
+            try: newstr = component.get('DiceManager').proccessRoll(newstr)
+            except: pass
+            if qmode == 1:
                 s = s.replace("[" + matches[i] + "]", "<!-- Official Roll [" + newstr1 + "] => " + newstr + "-->" + newstr, 1)
             elif qmode == 2:
-                s = s.replace("[" + matches[i] + "]", newstr[len(newstr)-2:-1], 1)
-            else: s = s.replace("[" + matches[i] + "]", "[" + newstr1 + "<!-- Official Roll -->] => " + newstr, 1)
-        return s
-    
-    def PraseUnknowns(self, s):
-	# Uses a tuple. Usage: ?Label}dY. If no Label is assigned then use ?}DY
-        newstr = "0"
-        reg = re.compile("(\?\{*)([a-zA-Z ]*)(\}*)")
-        matches = reg.findall(s)
-        for i in xrange(0,len(matches)):
-            lb = "Replace '?' with: "
-            if len(matches[i][0]):
-                lb = matches[i][1] + "?: "
-            dlg = wx.TextEntryDialog(self, lb, "Missing Value?")
-            dlg.SetValue('')
-            if matches[i][0] != '':
-                dlg.SetTitle("Enter Value for " + matches[i][1])
-            if dlg.ShowModal() == wx.ID_OK: newstr = dlg.GetValue()
-            if newstr == '': newstr = '0'
-            s = s.replace(matches[i][0], newstr, 1).replace(matches[i][1], '', 1).replace(matches[i][2], '', 1)
-            dlg.Destroy()
-        return s
-
-    # This subroutine builds a chat display name.
-    #
-    def chat_display_name(self, player):
-        if self.settings.get_setting("ShowIDInChat") == "0":
-            display_name = player[0]
-        else:
-            display_name = "("+player[2]+") " + player[0]
-        return display_name
-
-    # This subroutine will get a hex color and return it, or return nothing
-    #
-    def get_color(self):
-        data = wx.ColourData()
-        data.SetChooseFull(True)
-        dlg = wx.ColourDialog(self, data)
-        if dlg.ShowModal() == wx.ID_OK:
-            data = dlg.GetColourData()
-            (red,green,blue) = data.GetColour().Get()
-            hexcolor = self.r_h.hexstring(red, green, blue)
-            dlg.Destroy()
-            return hexcolor
-        else:
-            dlg.Destroy()
-            return None
-    # def get_color - end
-
-    def replace_quotes(self, s):
-        in_tag = 0
-        i = 0
-        rs = s[:]
-        for c in s:
-            if c == "<":
-                in_tag += 1
-            elif c == ">":
-                if in_tag:
-                    in_tag -= 1
-            elif c == '"':
-                if in_tag:
-                    rs = rs[:i] + "'" + rs[i+1:]
-            i += 1
-        return rs
-
-    def resolve_loop(self, node, path, step, depth):
-        if step == depth:
-            self.resolution(node)
-        else:
-            child_list = node.findall('nodehandler')
-            for child in child_list:
-                if step == depth: break
-                if child.get('name') == path[step]:
+                s = s.replace("[" + matches[i] + "]", newstr[len(newstr)-2:-1], 1)
+            else: s = s.replace("[" + matches[i] + "]", "[" + newstr1 + "<!-- Official Roll -->] => " + newstr, 1)
+        return s
+    
+    def PraseUnknowns(self, s):
+	# Uses a tuple. Usage: ?Label}dY. If no Label is assigned then use ?}DY
+        newstr = "0"
+        reg = re.compile("(\?\{*)([a-zA-Z ]*)(\}*)")
+        matches = reg.findall(s)
+        for i in xrange(0,len(matches)):
+            lb = "Replace '?' with: "
+            if len(matches[i][0]):
+                lb = matches[i][1] + "?: "
+            dlg = wx.TextEntryDialog(self, lb, "Missing Value?")
+            dlg.SetValue('')
+            if matches[i][0] != '':
+                dlg.SetTitle("Enter Value for " + matches[i][1])
+            if dlg.ShowModal() == wx.ID_OK: newstr = dlg.GetValue()
+            if newstr == '': newstr = '0'
+            s = s.replace(matches[i][0], newstr, 1).replace(matches[i][1], '', 1).replace(matches[i][2], '', 1)
+            dlg.Destroy()
+        return s
+
+    # This subroutine builds a chat display name.
+    #
+    def chat_display_name(self, player):
+        if self.settings.get_setting("ShowIDInChat") == "0":
+            display_name = player[0]
+        else:
+            display_name = "("+player[2]+") " + player[0]
+        return display_name
+
+    # This subroutine will get a hex color and return it, or return nothing
+    #
+    def get_color(self):
+        data = wx.ColourData()
+        data.SetChooseFull(True)
+        dlg = wx.ColourDialog(self, data)
+        if dlg.ShowModal() == wx.ID_OK:
+            data = dlg.GetColourData()
+            (red,green,blue) = data.GetColour().Get()
+            hexcolor = self.r_h.hexstring(red, green, blue)
+            dlg.Destroy()
+            return hexcolor
+        else:
+            dlg.Destroy()
+            return None
+    # def get_color - end
+
+    def replace_quotes(self, s):
+        in_tag = 0
+        i = 0
+        rs = s[:]
+        for c in s:
+            if c == "<":
+                in_tag += 1
+            elif c == ">":
+                if in_tag:
+                    in_tag -= 1
+            elif c == '"':
+                if in_tag:
+                    rs = rs[:i] + "'" + rs[i+1:]
+            i += 1
+        return rs
+
+    def resolve_loop(self, node, path, step, depth):
+        if step == depth:
+            self.resolution(node)
+        else:
+            child_list = node.findall('nodehandler')
+            for child in child_list:
+                if step == depth: break
+                if child.get('name') == path[step]:
                     node = child
                     step += 1
                     if node.get('class') in ('dnd35char_handler', "SWd20char_handler", "d20char_handler", "dnd3echar_handler"): self.resolve_cust_loop(node, path, step, depth)
-                    elif node.get('class') == 'rpg_grid_handler': self.resolve_grid(node, path, step, depth)
+                    elif node.get('class') == 'rpg_grid_handler': self.resolve_grid(node, path, step, depth)
                     else: self.resolve_loop(node, path, step, depth)
 
 
@@ -1964,38 +1964,38 @@
             elif path[step+1].title() == 'Mod': self.data = pc_stats[path[step].title()][1]
             elif path[step+1].title() == 'Check': self.data = '<b>'+path[step].title()+' Check:</b> [1d20+'+str(pc_stats[path[step].title()][1])+']'
             return
-
-    def resolution(self, node):
-        if self.passed == False:
-            self.passed = True
-            if node.get('class') == 'textctrl_handler': self.data = str(node.find('text').text)
-            else: self.data = 'Nodehandler for '+ node.get('class') + ' not done!' or 'Invalid Reference!'
-        else:
-            self.data = ''
+
+    def resolution(self, node):
+        if self.passed == False:
+            self.passed = True
+            if node.get('class') == 'textctrl_handler': self.data = str(node.find('text').text)
+            else: self.data = 'Nodehandler for '+ node.get('class') + ' not done!' or 'Invalid Reference!'
+        else:
+            self.data = ''
             pass
         self.data = self.ParseMap(self.data, node)
 
-    def ParseMap(self, s, node):
-        """Parses player input for embedded nodes rolls"""
-        cur_loc = 0
-        reg = re.compile("(!!(.*?)!!)")
+    def ParseMap(self, s, node):
+        """Parses player input for embedded nodes rolls"""
+        cur_loc = 0
+        reg = re.compile("(!!(.*?)!!)")
         matches = reg.findall(s)
-        for i in xrange(0,len(matches)):
-            newstr = txt = '!@' + node.get('map') + '::' + matches[i][1] + '@!'
+        for i in xrange(0,len(matches)):
+            newstr = txt = '!@' + node.get('map') + '::' + matches[i][1] + '@!'
             s = s.replace(matches[i][0], newstr, 1)
-            s = self.ParseNode(s)
-        return s
-
-    def resolve_nodes(self, s):
-        self.passed = False
-        self.data = 'Invalid Reference!'
-        value = ""
-        path = s.split('::')
-        depth = len(path)
+            s = self.ParseNode(s)
+        return s
+
+    def resolve_nodes(self, s):
+        self.passed = False
+        self.data = 'Invalid Reference!'
+        value = ""
+        path = s.split('::')
+        depth = len(path)
         self.gametree = component.get('tree')
         try: node = self.gametree.tree_map[path[0]]['node']
         except: return self.data
         if node.get('class') in ('dnd35char_handler', "SWd20char_handler", "d20char_handler", "dnd3echar_handler"): self.resolve_cust_loop(node, path, 1, depth)
-        elif node.get('class') == 'rpg_grid_handler': self.resolve_grid(node, path, 1, depth)
+        elif node.get('class') == 'rpg_grid_handler': self.resolve_grid(node, path, 1, depth)
         else: self.resolve_loop(node, path, 1, depth)
-        return self.data
+        return self.data
--- a/orpg/chat/commands.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/chat/commands.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,715 +1,715 @@
-# This class implements the basic chat commands available in the chat interface.
-#
-# Defines:
-#   __init__(self,chat)
-#   docmd(self,text)
-#   on_help(self)
-#   on_whisper(self,text)
-#
-
-
-import string, time
-import orpg.orpg_version
-import orpg.orpg_windows
-import traceback
-
-from orpg.orpgCore import component
-from orpg.tools.orpg_log import logger
-
-##--------------------------------------------------------------
-## dynamically loading module for extended developer commands
-## allows developers to work on new chat commands without
-## integrating them directly into the ORPG code allowing
-## updating of their code without merging changes
-## cmd_ext.py should NOT be included in the CVS or Actual Releases
-
-try:
-    import cmd_ext
-    print "Importing Developer Extended Command Set"
-except:
-    pass
-##----------------------------------------------------------------
-
-ANTI_LOG_CHAR = '!'
-
-class chat_commands:
-
-    # Initialization subroutine.
-    #
-    # !self : instance of self
-    # !chat : instance of the chat window to write to
-    
-    def __init__(self,chat):
-        self.post = chat.Post
-        self.colorize = chat.colorize
-        self.session = chat.session
-        #self.send = chat.session.send
-        self.settings = chat.settings
-        self.chat = chat
-        self.cmdlist = {}
-        self.shortcmdlist = {}
-        self.defaultcmds()
-        self.defaultcmdalias()
-        # def __init__ - end
-        self.previous_whisper = []
-
-
-        # This subroutine will take a text string and attempt to match to a series
-        # of implemented emotions.
-        #
-        # !self : instance of self
-        # !text : string of text matching an implemented emotion
-    
-    def addcommand(self, cmd, function, helpmsg):
-        if not self.cmdlist.has_key(cmd) and not self.shortcmdlist.has_key(cmd):
-            self.cmdlist[cmd] = {}
-            self.cmdlist[cmd]['function'] = function
-            self.cmdlist[cmd]['help'] = helpmsg
-            #print 'Command Added: ' + cmd
-
-    
-    def addshortcmd(self, shortcmd, longcmd):
-        if not self.shortcmdlist.has_key(shortcmd) and not self.cmdlist.has_key(shortcmd):
-            self.shortcmdlist[shortcmd] = longcmd
-
-    
-    def removecmd(self, cmd):
-        if self.cmdlist.has_key(cmd):
-            del self.cmdlist[cmd]
-        elif self.shortcmdlist.has_key(cmd):
-            del self.shortcmdlist[cmd]
-
-        #print 'Command Removed: ' + cmd
-
-
-    
-    def defaultcmds(self):
-        self.addcommand('/help', self.on_help, '- Displays this help message')
-        self.addcommand('/version', self.on_version, ' - Displays current version of OpenRPG.')
-        self.addcommand('/me', self.chat.emote_message, ' - Alias for **yourname does something.**')
-        self.addcommand('/ignore', self.on_ignore, '[player_id,player_id,... | ignored_ip,ignored_ip,... | list] - Toggle ignore for user associated with that player ID. Using the IP will remove only not toggle.')
-        self.addcommand('/load', self.on_load, 'filename - Loads settings from another ini file from the myfiles directory.')
-        self.addcommand('/role', self.on_role, '[player_id = GM | Player | Lurker] - Get player roles from ther server, self.or change the role of a player.')
-        self.addcommand('/font', self.on_font, 'fontname - Sets the font.')
-        self.addcommand('/fontsize', self.on_fontsize, 'size - Sets the size of your fonts.  Recomended 8 or better for the size.')
-        self.addcommand('/close', self.on_close, 'Close the chat tab')
-        self.addcommand('/set', self.on_set, '[setting[=value]] - Displays one or all settings, self.or sets a setting.')
-        self.addcommand('/whisper', self.on_whisper, 'player_id_number, ... = message - Whisper to player(s). Can contain multiple IDs.')
-        self.addcommand('/gw', self.on_groupwhisper, 'group_name=message - Type /gw help for more information')
-        self.addcommand('/gm', self.on_gmwhisper, 'message - Whispers to all GMs in the room')
-        self.addcommand('/name', self.on_name, 'name - Change your name.')
-        self.addcommand('/time', self.on_time, '- Display the local and GMT time and date.')
-        self.addcommand('/status', self.on_status, 'your_status - Set your online status (afk,away,etc..).')
-        self.addcommand('/dieroller', self.on_dieroller, '- Set your dieroller or list the available rollers.')
-        self.addcommand('/log', self.on_log, '[ on | off | to <em>filename</em> ] - Check log state, additionally turn logging on, self.off, self.or set the log filename prefix.')
-        self.addcommand('/update', self.on_update, '[get] - Get the latest version of OpenRPG.')
-        self.addcommand('/moderate', self.on_moderate, '[ on | off ][player_id=on|off] - Show who can speak in a moderated room, self.or turn room moderation on or off.')
-        self.addcommand('/tab', self.invoke_tab, 'player_id - Creates a tab so you can whisper rolls to youror what ever')
-        self.addcommand('/ping', self.on_ping, '- Ask for a response from the server.')
-        self.addcommand('/admin', self.on_remote_admin, '- Remote admin commands')
-        self.addcommand('/description', self.on_description, 'message - Creates a block of text, used for room descriptions and such')
-        self.addcommand('/sound', self.on_sound, 'Sound_URL - Plays a sound for all clients in the room.')
-        self.addcommand('/purge', self.on_purge, 'This will clear the entire chat window')
-        self.addcommand('/advfilter', self.on_filter, 'This will toggle the Advanced Filter')
-
-    
-    def defaultcmdalias(self):
-        self.addshortcmd('/?', '/help')
-        self.addshortcmd('/he', '/me')
-        self.addshortcmd('/she', '/me')
-        self.addshortcmd('/i', '/ignore')
-        self.addshortcmd('/w', '/whisper')
-        self.addshortcmd('/nick', '/name')
-        self.addshortcmd('/date', '/time')
-        self.addshortcmd('/desc', '/description')
-        self.addshortcmd('/d', '/description')
-
-        #This is just an example or a differant way the shorcmd can be used
-        self.addshortcmd('/sleep', '/me falls asleep')
-
-    
-    def docmd(self,text):
-        cmdsearch = string.split(text,None,1)
-        cmd = string.lower(cmdsearch[0])
-        start = len(cmd)
-        end = len(text)
-        cmdargs = text[start+1:end]
-
-        if self.cmdlist.has_key(cmd):
-            self.cmdlist[cmd]['function'](cmdargs)
-        elif self.shortcmdlist.has_key(cmd):
-            self.docmd(self.shortcmdlist[cmd] + " " + cmdargs)
-        else:
-            msg = "Sorry I don't know what %s is!" % (cmd)
-            self.chat.InfoPost(msg)
-
-    
-    def on_filter(self, cmdargs):
-        #print self.chat.advancedFilter
-        test = not self.chat.advancedFilter
-        #print test
-
-        for tab in self.chat.parent.whisper_tabs:
-            tab.advancedFilter = not self.chat.advancedFilter
-
-        for tab in self.chat.parent.null_tabs:
-            tab.advancedFilter = not self.chat.advancedFilter
-
-        for tab in self.chat.parent.group_tabs:
-            tab.advancedFilter = not self.chat.advancedFilter
-
-        if self.chat.parent.GMChatPanel != None:
-            self.chat.parent.GMChatPanel.advancedFilter = not self.chat.advancedFilter
-
-        self.chat.advancedFilter = not self.chat.advancedFilter
-
-        if self.chat.advancedFilter:
-            self.chat.InfoPost("Advanced Filtering has been turned On")
-        else:
-            self.chat.InfoPost("Advanced Filtering has been turned Off")
-
-    
-    def on_purge(self, cmdargs):
-        self.chat.PurgeChat()
-        self.chat.InfoPost('Chat Buffer has been Purged!')
-
-    
-    def on_sound(self, cmdargs):
-        if len(cmdargs) < 8:
-            self.chat.InfoPost("You must provide a URL for the file name, it does not work for just local sound files")
-            return
-        args = string.split(cmdargs, None, -1)
-
-        if args[0] == 'loop':
-            snd = args[1].replace('&', '&amp;')
-            loop = '1'
-        else:
-            snd = cmdargs.replace('&', '&amp;')
-            loop = ''
-
-        type = 'remote'
-
-        (name, ip, id, text_status, version, protocol_version, client_string, role) = self.session.get_my_info()
-        group_id = self.session.group_id
-        if (role != 'Lurker' and group_id != '0') or self.session.get_status() != 1:
-            try:
-                self.chat.sound_player.play(snd, type, loop)
-                if type == 'remote':
-                    snd_xml = '<sound url="' + snd + '" group_id="' + group_id + '" from="' + id + '" loop="' + str(loop) + '" />'
-                    self.session.send_sound(snd_xml)
-            except Exception, e:
-                print e
-                self.chat.InfoPost("Invalid sound file!")
-        elif role == 'Lurker':
-            self.chat.InfoPost("You must be a player or a GM to send a sound file!")
-        elif group_id == '0':
-            self.chat.InfoPost("You cannot send sound files to the lobby!")
-        else:
-            self.chat.InfoPost("Something dun fuckered up Frank!")
-
-    
-    def on_version(self, cmdargs=""):
-        self.chat.InfoPost("Version is OpenRPG " + self.chat.version)
-
-    
-    def on_load(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        try:
-            self.settings.setup_ini(args[0])
-            self.settings.reload_settings(self.chat)
-            self.chat.InfoPost("Settings Loaded from file " + args[0] )
-        except Exception,e:
-            print e
-            self.chat.InfoPost("ERROR Loading settings")
-
-    
-    def on_font(self, cmdargs):
-        try:
-            fontsettings = self.chat.set_default_font(fontname=cmdargs, fontsize=None)
-        except:
-            self.chat.InfoPost("ERROR setting default font")
-
-    
-    def on_fontsize(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        try:
-            fontsettings = self.chat.set_default_font(fontname=None, fontsize=int(args[0]))
-        except Exception, e:
-            print e
-            self.chat.InfoPost("ERROR setting default font size")
-
-    
-    def on_close(self, cmdargs):
-        try:
-            chatpanel = self.chat
-            if (chatpanel.sendtarget == "all"):
-                chatpanel.InfoPost("Error:  cannot close public chat tab.")
-            else:
-                chatpanel.chat_timer.Stop()
-                chatpanel.parent.onCloseTab(0)
-        except:
-            self.chat.InfoPost("Error:  cannot close private chat tab.")
-
-    
-    def on_time(self, cmdargs):
-        local_time = time.localtime()
-        gmt_time = time.gmtime()
-        format_string = "%A %b %d, %Y  %I:%M:%S%p"
-        self.chat.InfoPost("<br />Local: " + time.strftime(format_string)+\
-                           "<br />GMT: "+time.strftime(format_string,gmt_time))
-
-    
-    def on_dieroller(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        rm = component.get('DiceManager')
-        try:
-            rm.setRoller(args[0])
-            self.chat.SystemPost("You have changed your die roller to the <b>\"" + args[0] + "\"</b> roller.")
-            self.settings.set_setting('dieroller',args[0])
-        except Exception, e:
-            print e
-            self.chat.InfoPost("Available die rollers: " + str(rm.listRollers()))
-            self.chat.InfoPost("You are using the <b>\"" + rm.getRoller() + "\"</b> die roller.")
-
-    
-    def on_ping(self, cmdargs):
-        ct = time.clock()
-        msg = "<ping player='"+self.session.id+"' time='"+str(ct)+"' />"
-        self.session.outbox.put(msg)
-
-    
-    def on_log(self,cmdargs):
-        args = string.split(cmdargs,None,-1)
-        logfile = self.settings.get_setting( 'GameLogPrefix' )
-
-        if len( args ) == 0:
-            self.postLoggingState()
-        elif args[0] == "on" and logfile != '':
-            try:
-                while logfile[ 0 ] == ANTI_LOG_CHAR:
-                    #print logfile
-                    logfile = logfile[ 1: ]
-            except IndexError,e:
-                self.chat.SystemPost("log filename is blank, system will *not* be logging until a valid filename is specified" )
-                self.settings.set_setting( 'GameLogPrefix', logfile )
-                return
-            self.settings.set_setting( 'GameLogPrefix', logfile )
-            self.postLoggingState()
-        elif args[0] == "off":
-            logfile = ANTI_LOG_CHAR+logfile
-            self.settings.set_setting( 'GameLogPrefix', logfile )
-            self.postLoggingState()
-        elif args[0] == "to":
-            if len( args ) > 1:
-                logfile = args[1]
-                self.settings.set_setting( 'GameLogPrefix', logfile )
-            else:
-                self.chat.SystemPost('You must also specify a filename with the <em>/log to</em> command.' )
-            self.postLoggingState()
-        else:
-            self.chat.InfoPost("Unknown logging command, use 'on' or 'off'"  )
-
-    
-    def postLoggingState( self ):
-        logfile = self.settings.get_setting( 'GameLogPrefix' )
-        try:
-            if logfile[0] != ANTI_LOG_CHAR: comment = 'is'
-            else: comment = 'is not'
-        except: comment = 'is not'
-        suffix = time.strftime( '-%d-%m-%y.html', time.localtime( time.time() ) )
-        self.chat.InfoPost('Log filename is "%s%s", system is %s logging.' % (logfile, suffix, comment) )
-
-        # This subroutine will set the players netork status.
-        #
-        #!self : instance of self
-
-    
-    def on_name(self, cmdargs):
-        #only 20 chars no more! :)
-        if cmdargs == "":
-            self.chat.InfoPost("**Incorrect syntax for name.")
-        else:
-            #txt = txt[:50]
-            self.settings.set_setting('player', cmdargs)
-            self.session.set_name(str(cmdargs))
-
-    # def on_status - end
-        # This subroutine will set the players netork status.
-        #
-        # !self : instance of self
-    
-    def on_status(self, cmdargs):
-        if cmdargs ==  "":
-            self.chat.InfoPost("Incorrect synatx for status.")
-        else:
-        #only 20 chars no more! :)
-            txt = cmdargs[:20]
-            self.session.set_text_status(str(txt))
-    # def on_status - end
-
-    
-    def on_set(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        keys = self.settings.get_setting_keys()
-        #print keys
-        if len(args) == 0:
-            line = "<table border='2'>"
-            for m in keys:
-                line += "<tr><td>" + str(m) + "</td><td> " + str(self.settings.get_setting(m)) + "</td></tr>"
-            line += "</table>"
-            self.chat.InfoPost(line)
-        else:
-            split_name_from_data = cmdargs.find("=")
-            if split_name_from_data == -1:
-                for m in keys:
-                    if m == args[0]:
-                        return_string = "<table border='2'><tr><td>" + args[0] + "</td><td>"\
-                        + self.settings.get_setting(args[0]) + "</td></tr></table>"
-                        self.chat.InfoPost(return_string)
-            else:
-                name = cmdargs[:split_name_from_data].strip()
-                for m in keys:
-                    if m == name:
-                        setting = cmdargs[split_name_from_data+1:].strip()
-                        self.settings.set_setting(name,setting)
-                        return_string = name + " changed to " + setting
-                        self.chat.InfoPost(return_string)
-                        self.session.set_name(self.settings.get_setting("player"))
-                        self.chat.set_colors()
-                        self.chat.set_buffersize()
-
-        # This subroutine will display the correct usage of the different emotions.
-        #
-        #!self : instance of self
-
-    
-    def on_help(self, cmdargs=""):
-        cmds = self.cmdlist.keys()
-        cmds.sort()
-        shortcmds = self.shortcmdlist.keys()
-        shortcmds.sort()
-        msg = '<br /><b>Command Alias List:</b>'
-        for shortcmd in shortcmds:
-            msg += '<br /><b><font color="#0000CC">%s</font></b> is short for <font color="#000000">%s</font>' % (shortcmd, self.shortcmdlist[shortcmd])
-        msg += '<br /><br /><b>Command List:</b>'
-        for cmd in cmds:
-            msg += '<br /><b><font color="#000000">%s</font></b>' % (cmd)
-            for shortcmd in shortcmds:
-                if self.shortcmdlist[shortcmd] == cmd:
-                    msg += ', <b><font color="#0000CC">%s</font></b>' % (shortcmd)
-            msg += ' %s' % (self.cmdlist[cmd]['help'])
-        self.chat.InfoPost(msg)
-
-        # This subroutine will either show the list of currently ignored users
-        # !self : instance of self
-        # !text : string that is comprised of a list of users to toggle the ignore flag
-
-    
-    def on_ignore(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        (ignore_list, ignore_name) = self.session.get_ignore_list()
-        ignore_output = self.colorize(self.chat.syscolor,"<br /><u>Player IDs Currently being Ignored:</u><br />")
-        if cmdargs == "":
-            if len(ignore_list) == 0:
-                ignore_output += self.colorize(self.chat.infocolor,"No players are currently being ignored.<br />")
-            else:
-                for m in ignore_list:
-                    ignore_txt = m + " " + ignore_name[ignore_list.index(m)] + "<br />"
-                    ignore_output += self.colorize(self.chat.infocolor,ignore_txt)
-            self.chat.Post(ignore_output)
-        else:
-            players = cmdargs.split(",")
-            for m in players:
-                try:
-                    id = `int(m)`
-                    (result, id, name) = self.session.toggle_ignore(id)
-                    if result == 0:
-                        self.chat.InfoPost("Player " + name + " with ID:" + id + " no longer ignored")
-                    if result == 1:
-                        self.chat.InfoPost("Player " + name + " with ID:" + id + " now being ignored")
-                except:
-                    self.chat.InfoPost(m + " was ignored because it is an invalid player ID")
-                    traceback.print_exc()
-
-    
-    def on_role(self, cmdargs):
-        if cmdargs == "":
-            self.session.display_roles()
-            return
-        delim = cmdargs.find("=")
-        if delim < 0:
-            self.chat.InfoPost("**Incorrect synatax for Role." + str(delim))
-            return
-        player_ids = string.split(cmdargs[:delim],",")
-        role = cmdargs[delim+1:].strip()
-        role = role.lower()
-        if (role.lower() == "player") or (role.lower() == "gm") or (role.lower() == "lurker"):
-            if role.lower() == "player": role = "Player"
-            elif role.lower() == "gm":   role = "GM"
-            else: role = "Lurker"
-            try:
-                role_pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id))
-                if role_pwd != None:
-                    for m in player_ids:
-                        self.session.set_role(m.strip(),role,role_pwd)
-            except:  traceback.print_exc()
-#        return
-
-        # This subroutine implements the whisper functionality that enables a user
-        # to whisper to another user.
-        #
-        # !self : instance of self
-        # !text : string that is comprised of a list of users and the message to
-        #whisper.
-
-    
-    def on_whisper(self, cmdargs):
-        delim = cmdargs.find("=")
-
-        if delim < 0:
-            if self.previous_whisper: player_ids = self.previous_whisper
-            else:
-                self.chat.InfoPost("**Incorrect syntax for whisper." + str(delim))
-                return
-        else: player_ids = string.split(cmdargs[:delim], ",")
-        self.previous_whisper = player_ids
-        mesg = string.strip(cmdargs[delim+1:])
-        self.chat.whisper_to_players(mesg,player_ids)
-
-#---------------------------------------------------------
-# [START] Digitalxero Multi Whisper Group 1/1/05
-#---------------------------------------------------------
-    
-    def on_groupwhisper(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        delim = cmdargs.find("=")
-
-        if delim > 0: group_ids = string.split(cmdargs[:delim], ",")
-        elif args[0] == "add":
-            if not orpg.player_list.WG_LIST.has_key(args[2]):
-                orpg.player_list.WG_LIST[args[2]] = {}
-            orpg.player_list.WG_LIST[args[2]][int(args[1])] = int(args[1])
-            return
-        elif args[0] == "remove" or args[0] == "delete":
-            del orpg.player_list.WG_LIST[args[2]][int(args[1])]
-            if len(orpg.player_list.WG_LIST[args[2]]) == 0:
-                del orpg.player_list.WG_LIST[args[2]]
-            return
-        elif args[0] == "create" or args[0] == "new_group":
-            if not orpg.player_list.WG_LIST.has_key(args[1]):
-                orpg.player_list.WG_LIST[args[1]] = {}
-            return
-        elif args[0] == "list":
-            if orpg.player_list.WG_LIST.has_key(args[1]):
-                for n in orpg.player_list.WG_LIST[args[1]]:
-                    player = self.session.get_player_info(str(n))
-                    self.chat.InfoPost(str(player[0]))
-            else:
-                self.chat.InfoPost("Invalid Whisper Group Name")
-            return
-        elif args[0] == "clear":
-            if orpg.player_list.WG_LIST.has_key(args[1]):
-                orpg.player_list.WG_LIST[args[1]].clear()
-            else:
-                self.chat.InfoPost("Invalid Whisper Group Name")
-            return
-        elif args[0] == "clearall":
-            orpg.player_list.WG_LIST.clear()
-            return
-        else:
-            self.chat.InfoPost("<b>/gw add</b> (player_id) (group_name) - Adds [player_id] to [group_name]")
-            self.chat.InfoPost("<b>/gw remove</b> (player_id) (group_name) - Removes [player_id] from [group_name]")
-            self.chat.InfoPost("<b>/gw</b> (group_name)<b>=</b>(message) - Sends [message] to [group_name]")
-            self.chat.InfoPost("<b>/gw create</b> (group_name) - Creates a whisper group called [group_name]")
-            self.chat.InfoPost("<b>/gw list</b> (group_name) - Lists all players in [group_name]")
-            self.chat.InfoPost("<b>/gw clear</b> (group_name) - Removes all players from [group_name]")
-            self.chat.InfoPost("<b>/gw clearall</b> - Removes all existing whisper groups")
-            return
-        msg = string.strip(cmdargs[delim+1:])
-        for gid in group_ids:
-            idList = ""
-            for n in orpg.player_list.WG_LIST[gid]:
-                if idList == "": idList = str(n)
-                else: idList = str(n) + ", " + idList
-            self.on_whisper(idList + "=" + self.settings.get_setting("gwtext") + msg)
-
-#---------------------------------------------------------
-# [END] Digitalxero Multi Whisper Group 1/1/05
-#---------------------------------------------------------
-
-    
-    def on_gmwhisper(self, cmdargs):
-        if cmdargs == "":
-            self.chat.InfoPost("**Incorrect syntax for GM Whisper.")
-        else:
-            the_gms = self.chat.get_gms()
-            if len(the_gms):
-                gmstring = ""
-                for each_gm in the_gms:
-                    if gmstring != "": gmstring += ","
-                    gmstring += each_gm
-                self.on_whisper(gmstring + "=" + cmdargs)
-            else: self.chat.InfoPost("**No GMs to Whisper to.")
-
-    
-    def on_moderate(self, cmdargs):
-        if cmdargs != "":
-            pos = cmdargs.find("=")
-            if (pos < 0):
-                plist = ""
-                if cmdargs.lower() == "on": action = "enable"
-                elif cmdargs.lower() == "off": action="disable"
-                else:
-                    self.chat.InfoPost("Wrong syntax for moderate command!")
-                    return
-            else:
-                plist = string.strip(cmdargs[:pos])
-                tag = string.strip(cmdargs[pos+1:])
-                if tag.lower() == "on": action = "addvoice"
-                elif tag.lower() == "off": action = "delvoice"
-                else:
-                    self.chat.InfoPost("Wrong syntax for moderate command!")
-                    return
-            pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id))
-            if pwd != None:
-                msg = "<moderate"
-                msg += " action = '" + action + "'"
-                msg +=" from = '" + self.session.id + "' pwd='" + pwd + "'"
-                if (plist != ""): msg += " users='"+plist+"'"
-                msg += " />"
-                self.session.outbox.put(msg)
-            pass
-        else:
-            msg = "<moderate action='list' from='"+self.session.id+"' />"
-            self.session.outbox.put(msg)
-        self.session.update()
-
-    
-    def on_update(self, cmdargs):
-        self.chat.InfoPost("This command is no longer valid")
-
-    
-    def on_description(self, cmdargs):
-        if len(cmdargs) <= 0:
-            self.chat.InfoPost("**No description text to display." + str(delim))
-            return
-        mesg = "<table bgcolor='#c0c0c0' border='3' cellpadding='5' cellspacing='0' width='100%'><tr><td><font color='#000000'>"
-        mesg += string.strip(cmdargs)
-        mesg += "</font></td></tr></table>"
-        self.chat.Post(mesg)
-        self.chat.send_chat_message(mesg)
-
-    
-    def invoke_tab(self, cmdargs):
-        ######START mDuo13's Tab Initiator########
-        try:
-            int(cmdargs)
-            playerid = cmdargs.strip()
-            # Check to see if parent notebook already has a private tab for player
-            for panel in self.chat.parent.whisper_tabs:
-                if (panel.sendtarget == playerid):
-                    self.chat.Post("Cannot invoke tab: Tab already exists.")
-                    return
-            try: displaypanel = self.chat.parent.create_whisper_tab(playerid)
-            except:
-                self.chat.Post("That ID# is not valid.")
-                return
-            nidx = self.chat.parent.get_tab_index(displaypanel)
-            self.chat.parent.newMsg(nidx)
-            return
-        except:
-            displaypanel = self.chat.parent.create_null_tab(cmdargs)
-            nidx = self.chat.parent.get_tab_index(displaypanel)
-            self.chat.parent.newMsg(nidx)
-            return
-        #######END mDuo13's Tab Initiator#########
-
-
-    
-    def on_remote_admin(self, cmdargs):
-        args = string.split(cmdargs,None,-1)
-        #handles remote administration commands
-        try:
-            pass_state = 0
-            pwd = self.session.orpgFrame_callback.password_manager.GetSilentPassword("server")
-            if  pwd != None:
-                pass_state = 1
-            else: pwd = "<i>[NONE]</i>"
-
-            if len( args ) == 0:
-                #raw command return state info
-                msg = "<br /><b>Remote Administrator Config:</b>"
-                if pass_state != 1 : msg += " Password not set. Remote admin functions disabled<br />"
-                else: msg += " Enabled. Using password '"+pwd+"'<br />"
-                self.chat.SystemPost(msg)
-                return
-
-            if pass_state != 1 and args[0] != "set":
-                #no commands under this point will execute unless an admin password has been previously set
-                self.chat.SystemPost("Command ignored. No remote administrator password set!!")
-                return
-            msgbase = "<admin id='"+self.session.id+"' group_id='"+self.session.group_id+"' pwd='"+pwd+"'"
-            if args[0] == "set":
-                if len( args ) > 1:
-                    self.session.orpgFrame_callback.password_manager.server = str( args[1] )
-                    self.chat.SystemPost( "Remote administration commands using password: "+str(self.session.orpgFrame_callback.password_manager.GetSilentPassword("server"))+"" )
-                else:
-                    pwd = self.session.orpgFrame_callback.password_manager.GetPassword("server")
-                    if pwd != None:
-                        self.chat.SystemPost( "Remote administration commands using password: "+pwd+"" )
-            elif len(args) == 1:
-                admin_command = {'banlist': ' cmd="banlist" />',
-                                'help': " cmd='help' />",
-                                'roompasswords': " cmd='roompasswords' />",
-                                'uptime': " cmd='uptime' />",
-                                'list': " cmd='list' />",
-                                'killserver': " cmd='killserver' />",
-                                'savemaps': ' cmd="savemaps" />'
-                                }
-                if admin_command.has_key(args[0]):
-                    msg = msgbase + admin_command[args[0]]
-                    self.session.outbox.put(msg)
-
-            elif len(args) == 2:
-                admin_command = {'ban': ' cmd="ban" bid="' + str(args[1]) + '" />',
-                                'unban': ' cmd="unban" ip="' + str(args[1]) + '" />',
-                                'broadcast': " cmd='broadcast' msg='"+ string.join(args[1:])+"' />",
-                                'killgroup': " cmd='killgroup' gid='"+ str(args[1])+"' />"
-                                }
-                if admin_command.has_key(args[0]):
-                    msg = msgbase + admin_command[args[0]]
-                    self.session.outbox.put(msg)
-
-            elif len(args) == 3:
+# This class implements the basic chat commands available in the chat interface.
+#
+# Defines:
+#   __init__(self,chat)
+#   docmd(self,text)
+#   on_help(self)
+#   on_whisper(self,text)
+#
+
+
+import string, time
+import orpg.orpg_version
+import orpg.orpg_windows
+import traceback
+
+from orpg.orpgCore import component
+from orpg.tools.orpg_log import logger
+
+##--------------------------------------------------------------
+## dynamically loading module for extended developer commands
+## allows developers to work on new chat commands without
+## integrating them directly into the ORPG code allowing
+## updating of their code without merging changes
+## cmd_ext.py should NOT be included in the CVS or Actual Releases
+
+try:
+    import cmd_ext
+    print "Importing Developer Extended Command Set"
+except:
+    pass
+##----------------------------------------------------------------
+
+ANTI_LOG_CHAR = '!'
+
+class chat_commands:
+
+    # Initialization subroutine.
+    #
+    # !self : instance of self
+    # !chat : instance of the chat window to write to
+    
+    def __init__(self,chat):
+        self.post = chat.Post
+        self.colorize = chat.colorize
+        self.session = chat.session
+        #self.send = chat.session.send
+        self.settings = chat.settings
+        self.chat = chat
+        self.cmdlist = {}
+        self.shortcmdlist = {}
+        self.defaultcmds()
+        self.defaultcmdalias()
+        # def __init__ - end
+        self.previous_whisper = []
+
+
+        # This subroutine will take a text string and attempt to match to a series
+        # of implemented emotions.
+        #
+        # !self : instance of self
+        # !text : string of text matching an implemented emotion
+    
+    def addcommand(self, cmd, function, helpmsg):
+        if not self.cmdlist.has_key(cmd) and not self.shortcmdlist.has_key(cmd):
+            self.cmdlist[cmd] = {}
+            self.cmdlist[cmd]['function'] = function
+            self.cmdlist[cmd]['help'] = helpmsg
+            #print 'Command Added: ' + cmd
+
+    
+    def addshortcmd(self, shortcmd, longcmd):
+        if not self.shortcmdlist.has_key(shortcmd) and not self.cmdlist.has_key(shortcmd):
+            self.shortcmdlist[shortcmd] = longcmd
+
+    
+    def removecmd(self, cmd):
+        if self.cmdlist.has_key(cmd):
+            del self.cmdlist[cmd]
+        elif self.shortcmdlist.has_key(cmd):
+            del self.shortcmdlist[cmd]
+
+        #print 'Command Removed: ' + cmd
+
+
+    
+    def defaultcmds(self):
+        self.addcommand('/help', self.on_help, '- Displays this help message')
+        self.addcommand('/version', self.on_version, ' - Displays current version of OpenRPG.')
+        self.addcommand('/me', self.chat.emote_message, ' - Alias for **yourname does something.**')
+        self.addcommand('/ignore', self.on_ignore, '[player_id,player_id,... | ignored_ip,ignored_ip,... | list] - Toggle ignore for user associated with that player ID. Using the IP will remove only not toggle.')
+        self.addcommand('/load', self.on_load, 'filename - Loads settings from another ini file from the myfiles directory.')
+        self.addcommand('/role', self.on_role, '[player_id = GM | Player | Lurker] - Get player roles from ther server, self.or change the role of a player.')
+        self.addcommand('/font', self.on_font, 'fontname - Sets the font.')
+        self.addcommand('/fontsize', self.on_fontsize, 'size - Sets the size of your fonts.  Recomended 8 or better for the size.')
+        self.addcommand('/close', self.on_close, 'Close the chat tab')
+        self.addcommand('/set', self.on_set, '[setting[=value]] - Displays one or all settings, self.or sets a setting.')
+        self.addcommand('/whisper', self.on_whisper, 'player_id_number, ... = message - Whisper to player(s). Can contain multiple IDs.')
+        self.addcommand('/gw', self.on_groupwhisper, 'group_name=message - Type /gw help for more information')
+        self.addcommand('/gm', self.on_gmwhisper, 'message - Whispers to all GMs in the room')
+        self.addcommand('/name', self.on_name, 'name - Change your name.')
+        self.addcommand('/time', self.on_time, '- Display the local and GMT time and date.')
+        self.addcommand('/status', self.on_status, 'your_status - Set your online status (afk,away,etc..).')
+        self.addcommand('/dieroller', self.on_dieroller, '- Set your dieroller or list the available rollers.')
+        self.addcommand('/log', self.on_log, '[ on | off | to <em>filename</em> ] - Check log state, additionally turn logging on, self.off, self.or set the log filename prefix.')
+        self.addcommand('/update', self.on_update, '[get] - Get the latest version of OpenRPG.')
+        self.addcommand('/moderate', self.on_moderate, '[ on | off ][player_id=on|off] - Show who can speak in a moderated room, self.or turn room moderation on or off.')
+        self.addcommand('/tab', self.invoke_tab, 'player_id - Creates a tab so you can whisper rolls to youror what ever')
+        self.addcommand('/ping', self.on_ping, '- Ask for a response from the server.')
+        self.addcommand('/admin', self.on_remote_admin, '- Remote admin commands')
+        self.addcommand('/description', self.on_description, 'message - Creates a block of text, used for room descriptions and such')
+        self.addcommand('/sound', self.on_sound, 'Sound_URL - Plays a sound for all clients in the room.')
+        self.addcommand('/purge', self.on_purge, 'This will clear the entire chat window')
+        self.addcommand('/advfilter', self.on_filter, 'This will toggle the Advanced Filter')
+
+    
+    def defaultcmdalias(self):
+        self.addshortcmd('/?', '/help')
+        self.addshortcmd('/he', '/me')
+        self.addshortcmd('/she', '/me')
+        self.addshortcmd('/i', '/ignore')
+        self.addshortcmd('/w', '/whisper')
+        self.addshortcmd('/nick', '/name')
+        self.addshortcmd('/date', '/time')
+        self.addshortcmd('/desc', '/description')
+        self.addshortcmd('/d', '/description')
+
+        #This is just an example or a differant way the shorcmd can be used
+        self.addshortcmd('/sleep', '/me falls asleep')
+
+    
+    def docmd(self,text):
+        cmdsearch = string.split(text,None,1)
+        cmd = string.lower(cmdsearch[0])
+        start = len(cmd)
+        end = len(text)
+        cmdargs = text[start+1:end]
+
+        if self.cmdlist.has_key(cmd):
+            self.cmdlist[cmd]['function'](cmdargs)
+        elif self.shortcmdlist.has_key(cmd):
+            self.docmd(self.shortcmdlist[cmd] + " " + cmdargs)
+        else:
+            msg = "Sorry I don't know what %s is!" % (cmd)
+            self.chat.InfoPost(msg)
+
+    
+    def on_filter(self, cmdargs):
+        #print self.chat.advancedFilter
+        test = not self.chat.advancedFilter
+        #print test
+
+        for tab in self.chat.parent.whisper_tabs:
+            tab.advancedFilter = not self.chat.advancedFilter
+
+        for tab in self.chat.parent.null_tabs:
+            tab.advancedFilter = not self.chat.advancedFilter
+
+        for tab in self.chat.parent.group_tabs:
+            tab.advancedFilter = not self.chat.advancedFilter
+
+        if self.chat.parent.GMChatPanel != None:
+            self.chat.parent.GMChatPanel.advancedFilter = not self.chat.advancedFilter
+
+        self.chat.advancedFilter = not self.chat.advancedFilter
+
+        if self.chat.advancedFilter:
+            self.chat.InfoPost("Advanced Filtering has been turned On")
+        else:
+            self.chat.InfoPost("Advanced Filtering has been turned Off")
+
+    
+    def on_purge(self, cmdargs):
+        self.chat.PurgeChat()
+        self.chat.InfoPost('Chat Buffer has been Purged!')
+
+    
+    def on_sound(self, cmdargs):
+        if len(cmdargs) < 8:
+            self.chat.InfoPost("You must provide a URL for the file name, it does not work for just local sound files")
+            return
+        args = string.split(cmdargs, None, -1)
+
+        if args[0] == 'loop':
+            snd = args[1].replace('&', '&amp;')
+            loop = '1'
+        else:
+            snd = cmdargs.replace('&', '&amp;')
+            loop = ''
+
+        type = 'remote'
+
+        (name, ip, id, text_status, version, protocol_version, client_string, role) = self.session.get_my_info()
+        group_id = self.session.group_id
+        if (role != 'Lurker' and group_id != '0') or self.session.get_status() != 1:
+            try:
+                self.chat.sound_player.play(snd, type, loop)
+                if type == 'remote':
+                    snd_xml = '<sound url="' + snd + '" group_id="' + group_id + '" from="' + id + '" loop="' + str(loop) + '" />'
+                    self.session.send_sound(snd_xml)
+            except Exception, e:
+                print e
+                self.chat.InfoPost("Invalid sound file!")
+        elif role == 'Lurker':
+            self.chat.InfoPost("You must be a player or a GM to send a sound file!")
+        elif group_id == '0':
+            self.chat.InfoPost("You cannot send sound files to the lobby!")
+        else:
+            self.chat.InfoPost("Something dun fuckered up Frank!")
+
+    
+    def on_version(self, cmdargs=""):
+        self.chat.InfoPost("Version is OpenRPG " + self.chat.version)
+
+    
+    def on_load(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        try:
+            self.settings.setup_ini(args[0])
+            self.settings.reload_settings(self.chat)
+            self.chat.InfoPost("Settings Loaded from file " + args[0] )
+        except Exception,e:
+            print e
+            self.chat.InfoPost("ERROR Loading settings")
+
+    
+    def on_font(self, cmdargs):
+        try:
+            fontsettings = self.chat.set_default_font(fontname=cmdargs, fontsize=None)
+        except:
+            self.chat.InfoPost("ERROR setting default font")
+
+    
+    def on_fontsize(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        try:
+            fontsettings = self.chat.set_default_font(fontname=None, fontsize=int(args[0]))
+        except Exception, e:
+            print e
+            self.chat.InfoPost("ERROR setting default font size")
+
+    
+    def on_close(self, cmdargs):
+        try:
+            chatpanel = self.chat
+            if (chatpanel.sendtarget == "all"):
+                chatpanel.InfoPost("Error:  cannot close public chat tab.")
+            else:
+                chatpanel.chat_timer.Stop()
+                chatpanel.parent.onCloseTab(0)
+        except:
+            self.chat.InfoPost("Error:  cannot close private chat tab.")
+
+    
+    def on_time(self, cmdargs):
+        local_time = time.localtime()
+        gmt_time = time.gmtime()
+        format_string = "%A %b %d, %Y  %I:%M:%S%p"
+        self.chat.InfoPost("<br />Local: " + time.strftime(format_string)+\
+                           "<br />GMT: "+time.strftime(format_string,gmt_time))
+
+    
+    def on_dieroller(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        rm = component.get('DiceManager')
+        try:
+            rm.setRoller(args[0])
+            self.chat.SystemPost("You have changed your die roller to the <b>\"" + args[0] + "\"</b> roller.")
+            self.settings.set_setting('dieroller',args[0])
+        except Exception, e:
+            print e
+            self.chat.InfoPost("Available die rollers: " + str(rm.listRollers()))
+            self.chat.InfoPost("You are using the <b>\"" + rm.getRoller() + "\"</b> die roller.")
+
+    
+    def on_ping(self, cmdargs):
+        ct = time.clock()
+        msg = "<ping player='"+self.session.id+"' time='"+str(ct)+"' />"
+        self.session.outbox.put(msg)
+
+    
+    def on_log(self,cmdargs):
+        args = string.split(cmdargs,None,-1)
+        logfile = self.settings.get_setting( 'GameLogPrefix' )
+
+        if len( args ) == 0:
+            self.postLoggingState()
+        elif args[0] == "on" and logfile != '':
+            try:
+                while logfile[ 0 ] == ANTI_LOG_CHAR:
+                    #print logfile
+                    logfile = logfile[ 1: ]
+            except IndexError,e:
+                self.chat.SystemPost("log filename is blank, system will *not* be logging until a valid filename is specified" )
+                self.settings.set_setting( 'GameLogPrefix', logfile )
+                return
+            self.settings.set_setting( 'GameLogPrefix', logfile )
+            self.postLoggingState()
+        elif args[0] == "off":
+            logfile = ANTI_LOG_CHAR+logfile
+            self.settings.set_setting( 'GameLogPrefix', logfile )
+            self.postLoggingState()
+        elif args[0] == "to":
+            if len( args ) > 1:
+                logfile = args[1]
+                self.settings.set_setting( 'GameLogPrefix', logfile )
+            else:
+                self.chat.SystemPost('You must also specify a filename with the <em>/log to</em> command.' )
+            self.postLoggingState()
+        else:
+            self.chat.InfoPost("Unknown logging command, use 'on' or 'off'"  )
+
+    
+    def postLoggingState( self ):
+        logfile = self.settings.get_setting( 'GameLogPrefix' )
+        try:
+            if logfile[0] != ANTI_LOG_CHAR: comment = 'is'
+            else: comment = 'is not'
+        except: comment = 'is not'
+        suffix = time.strftime( '-%d-%m-%y.html', time.localtime( time.time() ) )
+        self.chat.InfoPost('Log filename is "%s%s", system is %s logging.' % (logfile, suffix, comment) )
+
+        # This subroutine will set the players netork status.
+        #
+        #!self : instance of self
+
+    
+    def on_name(self, cmdargs):
+        #only 20 chars no more! :)
+        if cmdargs == "":
+            self.chat.InfoPost("**Incorrect syntax for name.")
+        else:
+            #txt = txt[:50]
+            self.settings.set_setting('player', cmdargs)
+            self.session.set_name(str(cmdargs))
+
+    # def on_status - end
+        # This subroutine will set the players netork status.
+        #
+        # !self : instance of self
+    
+    def on_status(self, cmdargs):
+        if cmdargs ==  "":
+            self.chat.InfoPost("Incorrect synatx for status.")
+        else:
+        #only 20 chars no more! :)
+            txt = cmdargs[:20]
+            self.session.set_text_status(str(txt))
+    # def on_status - end
+
+    
+    def on_set(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        keys = self.settings.get_setting_keys()
+        #print keys
+        if len(args) == 0:
+            line = "<table border='2'>"
+            for m in keys:
+                line += "<tr><td>" + str(m) + "</td><td> " + str(self.settings.get_setting(m)) + "</td></tr>"
+            line += "</table>"
+            self.chat.InfoPost(line)
+        else:
+            split_name_from_data = cmdargs.find("=")
+            if split_name_from_data == -1:
+                for m in keys:
+                    if m == args[0]:
+                        return_string = "<table border='2'><tr><td>" + args[0] + "</td><td>"\
+                        + self.settings.get_setting(args[0]) + "</td></tr></table>"
+                        self.chat.InfoPost(return_string)
+            else:
+                name = cmdargs[:split_name_from_data].strip()
+                for m in keys:
+                    if m == name:
+                        setting = cmdargs[split_name_from_data+1:].strip()
+                        self.settings.set_setting(name,setting)
+                        return_string = name + " changed to " + setting
+                        self.chat.InfoPost(return_string)
+                        self.session.set_name(self.settings.get_setting("player"))
+                        self.chat.set_colors()
+                        self.chat.set_buffersize()
+
+        # This subroutine will display the correct usage of the different emotions.
+        #
+        #!self : instance of self
+
+    
+    def on_help(self, cmdargs=""):
+        cmds = self.cmdlist.keys()
+        cmds.sort()
+        shortcmds = self.shortcmdlist.keys()
+        shortcmds.sort()
+        msg = '<br /><b>Command Alias List:</b>'
+        for shortcmd in shortcmds:
+            msg += '<br /><b><font color="#0000CC">%s</font></b> is short for <font color="#000000">%s</font>' % (shortcmd, self.shortcmdlist[shortcmd])
+        msg += '<br /><br /><b>Command List:</b>'
+        for cmd in cmds:
+            msg += '<br /><b><font color="#000000">%s</font></b>' % (cmd)
+            for shortcmd in shortcmds:
+                if self.shortcmdlist[shortcmd] == cmd:
+                    msg += ', <b><font color="#0000CC">%s</font></b>' % (shortcmd)
+            msg += ' %s' % (self.cmdlist[cmd]['help'])
+        self.chat.InfoPost(msg)
+
+        # This subroutine will either show the list of currently ignored users
+        # !self : instance of self
+        # !text : string that is comprised of a list of users to toggle the ignore flag
+
+    
+    def on_ignore(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        (ignore_list, ignore_name) = self.session.get_ignore_list()
+        ignore_output = self.colorize(self.chat.syscolor,"<br /><u>Player IDs Currently being Ignored:</u><br />")
+        if cmdargs == "":
+            if len(ignore_list) == 0:
+                ignore_output += self.colorize(self.chat.infocolor,"No players are currently being ignored.<br />")
+            else:
+                for m in ignore_list:
+                    ignore_txt = m + " " + ignore_name[ignore_list.index(m)] + "<br />"
+                    ignore_output += self.colorize(self.chat.infocolor,ignore_txt)
+            self.chat.Post(ignore_output)
+        else:
+            players = cmdargs.split(",")
+            for m in players:
+                try:
+                    id = `int(m)`
+                    (result, id, name) = self.session.toggle_ignore(id)
+                    if result == 0:
+                        self.chat.InfoPost("Player " + name + " with ID:" + id + " no longer ignored")
+                    if result == 1:
+                        self.chat.InfoPost("Player " + name + " with ID:" + id + " now being ignored")
+                except:
+                    self.chat.InfoPost(m + " was ignored because it is an invalid player ID")
+                    traceback.print_exc()
+
+    
+    def on_role(self, cmdargs):
+        if cmdargs == "":
+            self.session.display_roles()
+            return
+        delim = cmdargs.find("=")
+        if delim < 0:
+            self.chat.InfoPost("**Incorrect synatax for Role." + str(delim))
+            return
+        player_ids = string.split(cmdargs[:delim],",")
+        role = cmdargs[delim+1:].strip()
+        role = role.lower()
+        if (role.lower() == "player") or (role.lower() == "gm") or (role.lower() == "lurker"):
+            if role.lower() == "player": role = "Player"
+            elif role.lower() == "gm":   role = "GM"
+            else: role = "Lurker"
+            try:
+                role_pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id))
+                if role_pwd != None:
+                    for m in player_ids:
+                        self.session.set_role(m.strip(),role,role_pwd)
+            except:  traceback.print_exc()
+#        return
+
+        # This subroutine implements the whisper functionality that enables a user
+        # to whisper to another user.
+        #
+        # !self : instance of self
+        # !text : string that is comprised of a list of users and the message to
+        #whisper.
+
+    
+    def on_whisper(self, cmdargs):
+        delim = cmdargs.find("=")
+
+        if delim < 0:
+            if self.previous_whisper: player_ids = self.previous_whisper
+            else:
+                self.chat.InfoPost("**Incorrect syntax for whisper." + str(delim))
+                return
+        else: player_ids = string.split(cmdargs[:delim], ",")
+        self.previous_whisper = player_ids
+        mesg = string.strip(cmdargs[delim+1:])
+        self.chat.whisper_to_players(mesg,player_ids)
+
+#---------------------------------------------------------
+# [START] Digitalxero Multi Whisper Group 1/1/05
+#---------------------------------------------------------
+    
+    def on_groupwhisper(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        delim = cmdargs.find("=")
+
+        if delim > 0: group_ids = string.split(cmdargs[:delim], ",")
+        elif args[0] == "add":
+            if not orpg.player_list.WG_LIST.has_key(args[2]):
+                orpg.player_list.WG_LIST[args[2]] = {}
+            orpg.player_list.WG_LIST[args[2]][int(args[1])] = int(args[1])
+            return
+        elif args[0] == "remove" or args[0] == "delete":
+            del orpg.player_list.WG_LIST[args[2]][int(args[1])]
+            if len(orpg.player_list.WG_LIST[args[2]]) == 0:
+                del orpg.player_list.WG_LIST[args[2]]
+            return
+        elif args[0] == "create" or args[0] == "new_group":
+            if not orpg.player_list.WG_LIST.has_key(args[1]):
+                orpg.player_list.WG_LIST[args[1]] = {}
+            return
+        elif args[0] == "list":
+            if orpg.player_list.WG_LIST.has_key(args[1]):
+                for n in orpg.player_list.WG_LIST[args[1]]:
+                    player = self.session.get_player_info(str(n))
+                    self.chat.InfoPost(str(player[0]))
+            else:
+                self.chat.InfoPost("Invalid Whisper Group Name")
+            return
+        elif args[0] == "clear":
+            if orpg.player_list.WG_LIST.has_key(args[1]):
+                orpg.player_list.WG_LIST[args[1]].clear()
+            else:
+                self.chat.InfoPost("Invalid Whisper Group Name")
+            return
+        elif args[0] == "clearall":
+            orpg.player_list.WG_LIST.clear()
+            return
+        else:
+            self.chat.InfoPost("<b>/gw add</b> (player_id) (group_name) - Adds [player_id] to [group_name]")
+            self.chat.InfoPost("<b>/gw remove</b> (player_id) (group_name) - Removes [player_id] from [group_name]")
+            self.chat.InfoPost("<b>/gw</b> (group_name)<b>=</b>(message) - Sends [message] to [group_name]")
+            self.chat.InfoPost("<b>/gw create</b> (group_name) - Creates a whisper group called [group_name]")
+            self.chat.InfoPost("<b>/gw list</b> (group_name) - Lists all players in [group_name]")
+            self.chat.InfoPost("<b>/gw clear</b> (group_name) - Removes all players from [group_name]")
+            self.chat.InfoPost("<b>/gw clearall</b> - Removes all existing whisper groups")
+            return
+        msg = string.strip(cmdargs[delim+1:])
+        for gid in group_ids:
+            idList = ""
+            for n in orpg.player_list.WG_LIST[gid]:
+                if idList == "": idList = str(n)
+                else: idList = str(n) + ", " + idList
+            self.on_whisper(idList + "=" + self.settings.get_setting("gwtext") + msg)
+
+#---------------------------------------------------------
+# [END] Digitalxero Multi Whisper Group 1/1/05
+#---------------------------------------------------------
+
+    
+    def on_gmwhisper(self, cmdargs):
+        if cmdargs == "":
+            self.chat.InfoPost("**Incorrect syntax for GM Whisper.")
+        else:
+            the_gms = self.chat.get_gms()
+            if len(the_gms):
+                gmstring = ""
+                for each_gm in the_gms:
+                    if gmstring != "": gmstring += ","
+                    gmstring += each_gm
+                self.on_whisper(gmstring + "=" + cmdargs)
+            else: self.chat.InfoPost("**No GMs to Whisper to.")
+
+    
+    def on_moderate(self, cmdargs):
+        if cmdargs != "":
+            pos = cmdargs.find("=")
+            if (pos < 0):
+                plist = ""
+                if cmdargs.lower() == "on": action = "enable"
+                elif cmdargs.lower() == "off": action="disable"
+                else:
+                    self.chat.InfoPost("Wrong syntax for moderate command!")
+                    return
+            else:
+                plist = string.strip(cmdargs[:pos])
+                tag = string.strip(cmdargs[pos+1:])
+                if tag.lower() == "on": action = "addvoice"
+                elif tag.lower() == "off": action = "delvoice"
+                else:
+                    self.chat.InfoPost("Wrong syntax for moderate command!")
+                    return
+            pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id))
+            if pwd != None:
+                msg = "<moderate"
+                msg += " action = '" + action + "'"
+                msg +=" from = '" + self.session.id + "' pwd='" + pwd + "'"
+                if (plist != ""): msg += " users='"+plist+"'"
+                msg += " />"
+                self.session.outbox.put(msg)
+            pass
+        else:
+            msg = "<moderate action='list' from='"+self.session.id+"' />"
+            self.session.outbox.put(msg)
+        self.session.update()
+
+    
+    def on_update(self, cmdargs):
+        self.chat.InfoPost("This command is no longer valid")
+
+    
+    def on_description(self, cmdargs):
+        if len(cmdargs) <= 0:
+            self.chat.InfoPost("**No description text to display." + str(delim))
+            return
+        mesg = "<table bgcolor='#c0c0c0' border='3' cellpadding='5' cellspacing='0' width='100%'><tr><td><font color='#000000'>"
+        mesg += string.strip(cmdargs)
+        mesg += "</font></td></tr></table>"
+        self.chat.Post(mesg)
+        self.chat.send_chat_message(mesg)
+
+    
+    def invoke_tab(self, cmdargs):
+        ######START mDuo13's Tab Initiator########
+        try:
+            int(cmdargs)
+            playerid = cmdargs.strip()
+            # Check to see if parent notebook already has a private tab for player
+            for panel in self.chat.parent.whisper_tabs:
+                if (panel.sendtarget == playerid):
+                    self.chat.Post("Cannot invoke tab: Tab already exists.")
+                    return
+            try: displaypanel = self.chat.parent.create_whisper_tab(playerid)
+            except:
+                self.chat.Post("That ID# is not valid.")
+                return
+            nidx = self.chat.parent.get_tab_index(displaypanel)
+            self.chat.parent.newMsg(nidx)
+            return
+        except:
+            displaypanel = self.chat.parent.create_null_tab(cmdargs)
+            nidx = self.chat.parent.get_tab_index(displaypanel)
+            self.chat.parent.newMsg(nidx)
+            return
+        #######END mDuo13's Tab Initiator#########
+
+
+    
+    def on_remote_admin(self, cmdargs):
+        args = string.split(cmdargs,None,-1)
+        #handles remote administration commands
+        try:
+            pass_state = 0
+            pwd = self.session.orpgFrame_callback.password_manager.GetSilentPassword("server")
+            if  pwd != None:
+                pass_state = 1
+            else: pwd = "<i>[NONE]</i>"
+
+            if len( args ) == 0:
+                #raw command return state info
+                msg = "<br /><b>Remote Administrator Config:</b>"
+                if pass_state != 1 : msg += " Password not set. Remote admin functions disabled<br />"
+                else: msg += " Enabled. Using password '"+pwd+"'<br />"
+                self.chat.SystemPost(msg)
+                return
+
+            if pass_state != 1 and args[0] != "set":
+                #no commands under this point will execute unless an admin password has been previously set
+                self.chat.SystemPost("Command ignored. No remote administrator password set!!")
+                return
+            msgbase = "<admin id='"+self.session.id+"' group_id='"+self.session.group_id+"' pwd='"+pwd+"'"
+            if args[0] == "set":
+                if len( args ) > 1:
+                    self.session.orpgFrame_callback.password_manager.server = str( args[1] )
+                    self.chat.SystemPost( "Remote administration commands using password: "+str(self.session.orpgFrame_callback.password_manager.GetSilentPassword("server"))+"" )
+                else:
+                    pwd = self.session.orpgFrame_callback.password_manager.GetPassword("server")
+                    if pwd != None:
+                        self.chat.SystemPost( "Remote administration commands using password: "+pwd+"" )
+            elif len(args) == 1:
+                admin_command = {'banlist': ' cmd="banlist" />',
+                                'help': " cmd='help' />",
+                                'roompasswords': " cmd='roompasswords' />",
+                                'uptime': " cmd='uptime' />",
+                                'list': " cmd='list' />",
+                                'killserver': " cmd='killserver' />",
+                                'savemaps': ' cmd="savemaps" />'
+                                }
+                if admin_command.has_key(args[0]):
+                    msg = msgbase + admin_command[args[0]]
+                    self.session.outbox.put(msg)
+
+            elif len(args) == 2:
+                admin_command = {'ban': ' cmd="ban" bid="' + str(args[1]) + '" />',
+                                'unban': ' cmd="unban" ip="' + str(args[1]) + '" />',
+                                'broadcast': " cmd='broadcast' msg='"+ string.join(args[1:])+"' />",
+                                'killgroup': " cmd='killgroup' gid='"+ str(args[1])+"' />"
+                                }
+                if admin_command.has_key(args[0]):
+                    msg = msgbase + admin_command[args[0]]
+                    self.session.outbox.put(msg)
+
+            elif len(args) == 3:
                 admin_command = {'message':" cmd='message' to_id='"+ str(args[1])+"' msg='"+ string.join(args[2:])+"' />",
-                                'nameroom': " cmd='nameroom' rmid='"+ str(args[1])+"' name='"+ string.join(args[2:])+"' />",
-                                'passwd': " cmd='passwd' gid='"+str(args[1])+"' pass='"+ str(args[2])+"' />"
-                                 }
-                if admin_command.has_key(args[0]):
-                    msg = msgbase + admin_command[args[0]]
-                    self.session.outbox.put(msg)
-
-            elif args[0] == "banip":
-                #Ban a player from the server
-                try: bname = str(args[2])
-                except: bname = 'Unknown'
-                msg = msgbase + ' cmd="banip" bip="' + str(args[1]) + '" bname="' + bname + '"/>'
-                self.session.outbox.put(msg)
-
-            elif args[0] == "createroom":
-                #request creation of a (temporary) persistant room
-                if len(args) < 2:
-                    self.chat.SystemPost( "You must supply a name and boot password at least. <br />/admin createroom &lt;name&gt; &lt;boot password&gt; [password]" )
-                    return
-                if len(args) < 3:
-                    self.chat.SystemPost( "You must supply a boot password also.<br />/admin createroom &lt;name&gt; &lt;boot password&gt; [password]" )
-                    return
-                if len(args) < 4: args.append("")
-                msg = msgbase + " cmd='createroom' name='"+str(args[1])+"' boot='"+ str(args[2])+"' pass='"+ str(args[3])+"' />"
-                self.session.outbox.put(msg)
-
-            else: self.chat.InfoPost("Unknown administrator command"  )
-            #command_function = {'banip': self.admin.r_admin_banip, 'createroom': self.r_admin_createroom,}
-        except:
-            self.chat.InfoPost("An error has occured while processing a Remote Administrator command!")
-            traceback.print_exc()
+                                'nameroom': " cmd='nameroom' rmid='"+ str(args[1])+"' name='"+ string.join(args[2:])+"' />",
+                                'passwd': " cmd='passwd' gid='"+str(args[1])+"' pass='"+ str(args[2])+"' />"
+                                 }
+                if admin_command.has_key(args[0]):
+                    msg = msgbase + admin_command[args[0]]
+                    self.session.outbox.put(msg)
+
+            elif args[0] == "banip":
+                #Ban a player from the server
+                try: bname = str(args[2])
+                except: bname = 'Unknown'
+                msg = msgbase + ' cmd="banip" bip="' + str(args[1]) + '" bname="' + bname + '"/>'
+                self.session.outbox.put(msg)
+
+            elif args[0] == "createroom":
+                #request creation of a (temporary) persistant room
+                if len(args) < 2:
+                    self.chat.SystemPost( "You must supply a name and boot password at least. <br />/admin createroom &lt;name&gt; &lt;boot password&gt; [password]" )
+                    return
+                if len(args) < 3:
+                    self.chat.SystemPost( "You must supply a boot password also.<br />/admin createroom &lt;name&gt; &lt;boot password&gt; [password]" )
+                    return
+                if len(args) < 4: args.append("")
+                msg = msgbase + " cmd='createroom' name='"+str(args[1])+"' boot='"+ str(args[2])+"' pass='"+ str(args[3])+"' />"
+                self.session.outbox.put(msg)
+
+            else: self.chat.InfoPost("Unknown administrator command"  )
+            #command_function = {'banip': self.admin.r_admin_banip, 'createroom': self.r_admin_createroom,}
+        except:
+            self.chat.InfoPost("An error has occured while processing a Remote Administrator command!")
+            traceback.print_exc()
--- a/orpg/dieroller/HOWTO.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/HOWTO.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,72 +1,72 @@
-HOW TO CREATE A NEW DIE ROLLER
-
-So you want a make a new roller or add a new option? here's a short guide.
-
-
-Step 1:  Create a new die roller sub class.
-
-You need to derive a new die roller class from an existing die roller class.  
-Most likely, this will be the std die roller class. 
-
-The basics would look like this:
-
-class new_roller(std):
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-        .....
-
-    ....
-
-Step 2: Implement new methods and/or override existing ones.
-
-Now, you just need to implement any new die options and override any 
-existing ones that you want to act differently.  The most common options 
-to override are the sum and __str__ functions.  Sum is used to determine 
-the result of the rolls and __str__ is used to display the results in 
-a user friendly string.
-
-For example:
-
-class new_roller(std):
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-        .....
-
-    def myoption(self,param):
-        ....
-
-    def sum(self):
-        ....
-
-    def __str__(self):
-        ....
-
-REMEMBER!
-Always return an instance of your die roller for each option expect str and sum.
-
-
-Step 3:
-
-Modify Utils.py
-
-You need to make some minor modifications to utils.py to facilitate 
-your new roller.  You need to a) add an import call for your roller, 
-and b) add your roller to the list of available rollers. 
-
-For example:
-
-from die import *
-# add addtional rollers here
-from myroller import *
-....
-
-rollers = ['std','wod','d20','myroller']
-
-Step 4:  You're done! 
-
-Test it and make sure it works.  When you think its done, send it to 
-the openrpg developers and they might include it in future releases.
-
--Chris Davis
-
-
+HOW TO CREATE A NEW DIE ROLLER
+
+So you want a make a new roller or add a new option? here's a short guide.
+
+
+Step 1:  Create a new die roller sub class.
+
+You need to derive a new die roller class from an existing die roller class.  
+Most likely, this will be the std die roller class. 
+
+The basics would look like this:
+
+class new_roller(std):
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+        .....
+
+    ....
+
+Step 2: Implement new methods and/or override existing ones.
+
+Now, you just need to implement any new die options and override any 
+existing ones that you want to act differently.  The most common options 
+to override are the sum and __str__ functions.  Sum is used to determine 
+the result of the rolls and __str__ is used to display the results in 
+a user friendly string.
+
+For example:
+
+class new_roller(std):
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+        .....
+
+    def myoption(self,param):
+        ....
+
+    def sum(self):
+        ....
+
+    def __str__(self):
+        ....
+
+REMEMBER!
+Always return an instance of your die roller for each option expect str and sum.
+
+
+Step 3:
+
+Modify Utils.py
+
+You need to make some minor modifications to utils.py to facilitate 
+your new roller.  You need to a) add an import call for your roller, 
+and b) add your roller to the list of available rollers. 
+
+For example:
+
+from die import *
+# add addtional rollers here
+from myroller import *
+....
+
+rollers = ['std','wod','d20','myroller']
+
+Step 4:  You're done! 
+
+Test it and make sure it works.  When you think its done, send it to 
+the openrpg developers and they might include it in future releases.
+
+-Chris Davis
+
+
--- a/orpg/dieroller/__init__.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/__init__.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,1 +1,1 @@
-__all__ = ['dice', 'rollers', 'die', 'd20', 'std', 'hackmaster', 'hero', 'shadowrun', 'sr4', 'srex', 'utils', 'wod', 'wodex', 'utils']
+__all__ = ['dice', 'rollers', 'die', 'd20', 'std', 'hackmaster', 'hero', 'shadowrun', 'sr4', 'srex', 'utils', 'wod', 'wodex', 'utils']
--- a/orpg/dieroller/d20.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/d20.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,123 +1,123 @@
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: d20.py
-# Author: OpenRPG Dev Team
-# Maintainer:
-# Version:
-#   $Id: d20.py,v 1.9 2006/11/04 21:24:19 digitalxero Exp $
-#
-# Description: d20 die roller
-#
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: d20.py
+# Author: OpenRPG Dev Team
+# Maintainer:
+# Version:
+#   $Id: d20.py,v 1.9 2006/11/04 21:24:19 digitalxero Exp $
+#
+# Description: d20 die roller
+#
 from die import *
-
-__version__ = "$Id: d20.py,v 1.9 2006/11/04 21:24:19 digitalxero Exp $"
-
-# d20 stands for "d20 system" not 20 sided die :)
-
-class d20(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-# these methods return new die objects for specific options
-
-    
-    def attack(self,AC,mod,critical):
-        return d20attack(self,AC,mod,critical)
-
-    
-    def dc(self,DC,mod):
-        return d20dc(self,DC,mod)
-
-class d20dc(std):
-    
-    def __init__(self,source=[],DC=10,mod=0):
-        std.__init__(self,source)
-        self.DC = DC
-        self.mod = mod
-        self.append(static_di(mod))
-
-    
-    def is_success(self):
-        return ((self.sum() >= self.DC or self.data[0] == 20) and self.data[0] != 1)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (" + str(self.sum()) + ")"
-
-        myStr += " vs DC " + str(self.DC)
-
-        if self.is_success():
-            myStr += " Success!"
-        else:
-            myStr += " Failure!"
-
-        return myStr
-
-
-class d20attack(std):
-    
-    def __init__(self,source=[],AC=10,mod=0,critical=20):
-        std.__init__(self,source)
-        self.mod = mod
-        self.critical = critical
-        self.AC = AC
-        self.append(static_di(mod))
-        self.critical_check()
-
-    
-    def attack(AC=10,mod=0,critical=20):
-        self.mod = mod
-        self.critical = critical
-        self.AC = AC
-
-    
-    def critical_check(self):
-        self.critical_result = 0
-        self.critical_roll = 0
-        if self.data[0] >= self.critical and self.is_hit():
-            self.critical_roll = die_base(20) + self.mod
-            if self.critical_roll.sum() >= self.AC:
-                self.critical_result = 1
-
-    
-    def is_critical(self):
-        return self.critical_result
-
-    
-    def is_hit(self):
-        return ((self.sum() >= self.AC or self.data[0] == 20) and self.data[0] != 1)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (" + str(self.sum()) + ")"
-
-        myStr += " vs AC " + str(self.AC)
-
-        if self.is_critical():
-            myStr += " Critical"
-
-        if self.is_hit():
-            myStr += " Hit!"
-        else:
-            myStr += " Miss!"
-
-        return myStr
+
+__version__ = "$Id: d20.py,v 1.9 2006/11/04 21:24:19 digitalxero Exp $"
+
+# d20 stands for "d20 system" not 20 sided die :)
+
+class d20(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+# these methods return new die objects for specific options
+
+    
+    def attack(self,AC,mod,critical):
+        return d20attack(self,AC,mod,critical)
+
+    
+    def dc(self,DC,mod):
+        return d20dc(self,DC,mod)
+
+class d20dc(std):
+    
+    def __init__(self,source=[],DC=10,mod=0):
+        std.__init__(self,source)
+        self.DC = DC
+        self.mod = mod
+        self.append(static_di(mod))
+
+    
+    def is_success(self):
+        return ((self.sum() >= self.DC or self.data[0] == 20) and self.data[0] != 1)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+
+        myStr += " vs DC " + str(self.DC)
+
+        if self.is_success():
+            myStr += " Success!"
+        else:
+            myStr += " Failure!"
+
+        return myStr
+
+
+class d20attack(std):
+    
+    def __init__(self,source=[],AC=10,mod=0,critical=20):
+        std.__init__(self,source)
+        self.mod = mod
+        self.critical = critical
+        self.AC = AC
+        self.append(static_di(mod))
+        self.critical_check()
+
+    
+    def attack(AC=10,mod=0,critical=20):
+        self.mod = mod
+        self.critical = critical
+        self.AC = AC
+
+    
+    def critical_check(self):
+        self.critical_result = 0
+        self.critical_roll = 0
+        if self.data[0] >= self.critical and self.is_hit():
+            self.critical_roll = die_base(20) + self.mod
+            if self.critical_roll.sum() >= self.AC:
+                self.critical_result = 1
+
+    
+    def is_critical(self):
+        return self.critical_result
+
+    
+    def is_hit(self):
+        return ((self.sum() >= self.AC or self.data[0] == 20) and self.data[0] != 1)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+
+        myStr += " vs AC " + str(self.AC)
+
+        if self.is_critical():
+            myStr += " Critical"
+
+        if self.is_hit():
+            myStr += " Hit!"
+        else:
+            myStr += " Miss!"
+
+        return myStr
--- a/orpg/dieroller/die.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/die.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,584 +1,584 @@
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: die.py
-# Author: Andrew Bennett
-# Maintainer:
-# Version:
-#   $Id: die.py,v 1.13 2007/03/13 17:53:42 digitalxero Exp $
-#
-# Description: This class is used to make working with dice easier
-#
-
-__version__ = "$Id: die.py,v 1.13 2007/03/13 17:53:42 digitalxero Exp $"
-
-
-import random
-import UserList
-import copy
-#import string
-
-class die_base(UserList.UserList):
-
-    
-    def __init__(self,source = []):
-        if isinstance(source, (int, float, basestring)):
-            s = []
-            s.append(di(source))
-        else:
-            s = source
-        UserList.UserList.__init__(self,s)
-
-
-    
-    def sum(self):
-        s = 0
-        for a in self.data:
-            s += int(a)
-        return s
-
-    
-    def __lshift__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            o = other
-        elif hasattr(other,"sum"):
-            o = other.sum()
-        else:
-            return None
-
-        result = []
-        for die in self:
-            if die < o:
-                result.append(die)
-        return self.__class__(result)
-
-    
-    def __rshift__(self,other):
-
-        if type(other) == type(3) or type(other) == type(3.0):
-            o = other
-        elif hasattr(other,"sum"):
-            o = other.sum()
-        else:
-            return None
-
-        result = []
-        for die in self:
-            if die > o:
-                result.append(die)
-        return self.__class__(result)
-
-    
-    def __rlshift__(self,other):
-        return self.__rshift__(other)
-
-    
-    def __rrshift__(self,other):
-        return self.__lshift__(other)
-
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            myStr += "] = (" + str(self.sum()) + ")"
-        else:
-            myStr = "[] = (0)"
-        return myStr
-
-    
-    def __lt__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return (self.sum() < other)
-        elif hasattr(other,"sum"):
-            return  (self.sum() < other.sum())
-        else:
-            return UserList.UserList.__lt__(self,other)
-
-    
-    def __le__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return (self.sum() <= other)
-        elif hasattr(other,"sum"):
-            return  (self.sum() <= other.sum())
-        else:
-            return UserList.UserList.__le__(self,other)
-
-    
-    def __eq__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return (self.sum() == other)
-        elif hasattr(other,"sum"):
-            return  (self.sum() == other.sum())
-        else:
-            return UserList.UserList.__eq__(self,other)
-
-    
-    def __ne__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return (self.sum() != other)
-        elif hasattr(other,"sum"):
-            return  (self.sum() != other.sum())
-        else:
-            return UserList.UserList.__ne__(self,other)
-
-    
-    def __gt__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return (self.sum() > other)
-        elif hasattr(other,"sum"):
-            return  (self.sum() > other.sum())
-        else:
-            return UserList.UserList.__gt__(self,other)
-
-    
-    def __ge__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return (self.sum() >= other)
-        elif hasattr(other,"sum"):
-            return  (self.sum() >= other.sum())
-        else:
-            return UserList.UserList.__ge__(self,other)
-
-    
-    def __cmp__(self,other):
-        #  this function included for backwards compatibility
-        #  As of 2.1, lists implement the "rich comparison"
-        #  methods overloaded above.
-        if type(other) == type(3) or type(other) == type(3.0):
-            return cmp(self.sum(), other)
-        elif hasattr(other,"sum"):
-            return  cmp(self.sum(), other.sum())
-        else:
-            return UserList.UserList.__cmp__(self,other)
-
-
-    
-    def __rcmp__(self,other):
-        return self.__cmp__(other)
-
-    
-    def __add__(self,other):
-        mycopy = copy.deepcopy(self)
-        if type(other) == type(3) or type(other) == type(3.0):
-            #if other < 0:
-            #    return self.__sub__(-other)
-            #other = [di(other,other)]
-            other = [static_di(other)]
-            #return self.sum() + other
-
-        elif type(other) == type("test"):
-            return self
-        mycopy.extend(other)
-        #result = UserList.UserList.__add__(mycopy,other)
-        return mycopy
-
-    
-    def __iadd__(self,other):
-        return self.__add__(other)
-
-    
-    def __radd__(self,other):
-        mycopy = copy.deepcopy(self)
-        if type(other) == type(3) or type(other) == type(3.0):
-            new_die = di(0)
-            new_die.set_value(other)
-            other = new_die
-        mycopy.insert(0,other)
-        return mycopy
-
-    
-    def __int__(self):
-        return self.sum()
-
-    
-    def __sub__(self,other):
-        mycopy = copy.deepcopy(self)
-        if type(other) == type(3) or type(other) == type(3.0):
-            neg_die = static_di(-other)
-            #neg_die.set_value(-other)
-            other = [neg_die]
-            #return self.sum() - other
-        else:
-            other = -other
-        mycopy.extend(other)
-        return mycopy
-
-    
-    def __rsub__(self,other):
-        mycopy = -copy.deepcopy(self)
-        #print type(other)
-        if type(other) == type(3) or type(other) == type(3.0):
-            new_die = di(0)
-            new_die.set_value(other)
-            other = new_die
-        mycopy.insert(0,other)
-        return mycopy
-
-    
-    def __isub__(self,other):
-        return self.__sub__(other)
-
-    
-    def __mul__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.sum() * other
-        elif hasattr(other,"sum"):
-            return other.sum() * self.sum()
-        else:
-            return UserList.UserList.__mul__(self,other)
-
-    
-    def __rmul__(self,other):
-        return self.__mul__(other)
-
-    
-    def __div__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return float(self.sum()) / other
-        elif hasattr(other,"sum"):
-            return  float(self.sum()) / other.sum()
-        else:
-            return UserList.UserList.__div__(self,other)
-
-    
-    def __rdiv__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return other / float(self.sum())
-        elif hasattr(other,"sum"):
-            return  other.sum() / float(self.sum())
-        else:
-            return UserList.UserList.__rdiv__(self,other)
-
-    
-    def __mod__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.sum()%other
-        elif hasattr(other,"sum"):
-            return  self.sum() % other.sum()
-        else:
-            return UserList.UserList.__mod__(self,other)
-
-    
-    def __rmod__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return other % self.sum()
-        elif hasattr(other,"sum"):
-            return  other.sum() % self.sum()
-        else:
-            return UserList.UserList.__rmod__(self,other)
-
-    
-    def __neg__(self):
-        for i in range(len(self.data)):
-            self.data[i] = -self.data[i]
-        return self
-
-    
-    def __pos__(self):
-        for i in range(len(self.data)):
-            self.data[i] = +self.data[i]
-        return self
-
-    
-    def __abs__(self):
-        for i in range(len(self.data)):
-            self.data[i] = abs(self.data[i])
-        return self
-        #return abs(self.sum())
-
-    
-    def __pow__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.sum() ** other
-        elif hasattr(other,"sum"):
-            return  self.sum() ** other.sum()
-        else:
-            return UserList.UserList.__pow__(self,other)
-
-
-    
-    def __rpow__(self,other):
-        #  We're overloading exponentiation of ints to create "other" number of dice
-
-        if other >= 1:
-            result = self.__class__(self[0].sides)
-            for t in range(other-1):
-                result+=self.__class__(self[0].sides)
-        else:
-            result = None
-
-        return result
-
-### di class to handle actual dice
-
-class di:
-    
-    def __init__(self,sides,min=1):
-        self.sides = sides
-        self.history = None
-        self.value = None
-        self.target = None
-        self.roll(min)
-
-    
-    def __str__(self):
-        if len(self.history) > 1:
-            return str(self.history)
-        else:
-            return str(self.value)
-
-    
-    def __neg__(self):
-        self.value = -self.value
-        for i in range(len(self.history)):
-            self.history[i] = -self.history[i]
-        return self
-
-    
-    def __pos__(self):
-        self.value = +self.value
-        for i in range(len(self.history)):
-            self.history[i] = +self.history[i]
-        return self
-
-    
-    def __abs__(self):
-        self.value = abs(self.value)
-        for i in range(len(self.history)):
-            self.history[i] = abs(self.history[i])
-        return self
-
-    
-    def __repr__(self):
-        if len(self.history) > 1:
-            return str(self.history)
-        else:
-            return str(self.value)
-
-    
-    def __int__(self):
-        return self.value
-
-
-    
-    def __lt__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.value < other
-        elif hasattr(other,"value"):
-            return self.value < other.value
-        else:
-            return self < other
-
-    
-    def __le__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.value <= other
-        elif hasattr(other,"value"):
-            return self.value <= other.value
-        else:
-            return self <= other
-
-    
-    def __eq__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.value == other
-        elif hasattr(other,"value"):
-            return self.value == other.value
-        else:
-            return self == other
-
-    
-    def __ne__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.value != other
-        elif hasattr(other,"value"):
-            return self.value != other.value
-        else:
-            return self != other
-
-    
-    def __gt__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.value > other
-        elif hasattr(other,"value"):
-            return self.value > other.value
-        else:
-            return self > other
-
-    
-    def __ge__(self,other):
-        if type(other) == type(3) or type(other) == type(3.0):
-            return self.value >= other
-        elif hasattr(other,"value"):
-            return self.value >= other.value
-        else:
-            return self >= other
-
-    
-    def __cmp__(self,other):
-        #  this function included for backwards compatibility
-        #  As of 2.1, lists implement the "rich comparison"
-        #  methods overloaded above.
-        if type(other) == type(3) or type(other) == type(3.0):
-            return cmp(self.value, other)
-        elif hasattr(other,"value"):
-            return cmp(self.value, other.value)
-        else:
-            return cmp(self,other)
-
-    
-    def roll(self,min=1):
-        if isinstance(self.sides, basestring) and self.sides.lower() == 'f':
-            self.value = random.randint(-1, 1)
-        else:
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: die.py
+# Author: Andrew Bennett
+# Maintainer:
+# Version:
+#   $Id: die.py,v 1.13 2007/03/13 17:53:42 digitalxero Exp $
+#
+# Description: This class is used to make working with dice easier
+#
+
+__version__ = "$Id: die.py,v 1.13 2007/03/13 17:53:42 digitalxero Exp $"
+
+
+import random
+import UserList
+import copy
+#import string
+
+class die_base(UserList.UserList):
+
+    
+    def __init__(self,source = []):
+        if isinstance(source, (int, float, basestring)):
+            s = []
+            s.append(di(source))
+        else:
+            s = source
+        UserList.UserList.__init__(self,s)
+
+
+    
+    def sum(self):
+        s = 0
+        for a in self.data:
+            s += int(a)
+        return s
+
+    
+    def __lshift__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            o = other
+        elif hasattr(other,"sum"):
+            o = other.sum()
+        else:
+            return None
+
+        result = []
+        for die in self:
+            if die < o:
+                result.append(die)
+        return self.__class__(result)
+
+    
+    def __rshift__(self,other):
+
+        if type(other) == type(3) or type(other) == type(3.0):
+            o = other
+        elif hasattr(other,"sum"):
+            o = other.sum()
+        else:
+            return None
+
+        result = []
+        for die in self:
+            if die > o:
+                result.append(die)
+        return self.__class__(result)
+
+    
+    def __rlshift__(self,other):
+        return self.__rshift__(other)
+
+    
+    def __rrshift__(self,other):
+        return self.__lshift__(other)
+
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            myStr += "] = (" + str(self.sum()) + ")"
+        else:
+            myStr = "[] = (0)"
+        return myStr
+
+    
+    def __lt__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return (self.sum() < other)
+        elif hasattr(other,"sum"):
+            return  (self.sum() < other.sum())
+        else:
+            return UserList.UserList.__lt__(self,other)
+
+    
+    def __le__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return (self.sum() <= other)
+        elif hasattr(other,"sum"):
+            return  (self.sum() <= other.sum())
+        else:
+            return UserList.UserList.__le__(self,other)
+
+    
+    def __eq__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return (self.sum() == other)
+        elif hasattr(other,"sum"):
+            return  (self.sum() == other.sum())
+        else:
+            return UserList.UserList.__eq__(self,other)
+
+    
+    def __ne__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return (self.sum() != other)
+        elif hasattr(other,"sum"):
+            return  (self.sum() != other.sum())
+        else:
+            return UserList.UserList.__ne__(self,other)
+
+    
+    def __gt__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return (self.sum() > other)
+        elif hasattr(other,"sum"):
+            return  (self.sum() > other.sum())
+        else:
+            return UserList.UserList.__gt__(self,other)
+
+    
+    def __ge__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return (self.sum() >= other)
+        elif hasattr(other,"sum"):
+            return  (self.sum() >= other.sum())
+        else:
+            return UserList.UserList.__ge__(self,other)
+
+    
+    def __cmp__(self,other):
+        #  this function included for backwards compatibility
+        #  As of 2.1, lists implement the "rich comparison"
+        #  methods overloaded above.
+        if type(other) == type(3) or type(other) == type(3.0):
+            return cmp(self.sum(), other)
+        elif hasattr(other,"sum"):
+            return  cmp(self.sum(), other.sum())
+        else:
+            return UserList.UserList.__cmp__(self,other)
+
+
+    
+    def __rcmp__(self,other):
+        return self.__cmp__(other)
+
+    
+    def __add__(self,other):
+        mycopy = copy.deepcopy(self)
+        if type(other) == type(3) or type(other) == type(3.0):
+            #if other < 0:
+            #    return self.__sub__(-other)
+            #other = [di(other,other)]
+            other = [static_di(other)]
+            #return self.sum() + other
+
+        elif type(other) == type("test"):
+            return self
+        mycopy.extend(other)
+        #result = UserList.UserList.__add__(mycopy,other)
+        return mycopy
+
+    
+    def __iadd__(self,other):
+        return self.__add__(other)
+
+    
+    def __radd__(self,other):
+        mycopy = copy.deepcopy(self)
+        if type(other) == type(3) or type(other) == type(3.0):
+            new_die = di(0)
+            new_die.set_value(other)
+            other = new_die
+        mycopy.insert(0,other)
+        return mycopy
+
+    
+    def __int__(self):
+        return self.sum()
+
+    
+    def __sub__(self,other):
+        mycopy = copy.deepcopy(self)
+        if type(other) == type(3) or type(other) == type(3.0):
+            neg_die = static_di(-other)
+            #neg_die.set_value(-other)
+            other = [neg_die]
+            #return self.sum() - other
+        else:
+            other = -other
+        mycopy.extend(other)
+        return mycopy
+
+    
+    def __rsub__(self,other):
+        mycopy = -copy.deepcopy(self)
+        #print type(other)
+        if type(other) == type(3) or type(other) == type(3.0):
+            new_die = di(0)
+            new_die.set_value(other)
+            other = new_die
+        mycopy.insert(0,other)
+        return mycopy
+
+    
+    def __isub__(self,other):
+        return self.__sub__(other)
+
+    
+    def __mul__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.sum() * other
+        elif hasattr(other,"sum"):
+            return other.sum() * self.sum()
+        else:
+            return UserList.UserList.__mul__(self,other)
+
+    
+    def __rmul__(self,other):
+        return self.__mul__(other)
+
+    
+    def __div__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return float(self.sum()) / other
+        elif hasattr(other,"sum"):
+            return  float(self.sum()) / other.sum()
+        else:
+            return UserList.UserList.__div__(self,other)
+
+    
+    def __rdiv__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return other / float(self.sum())
+        elif hasattr(other,"sum"):
+            return  other.sum() / float(self.sum())
+        else:
+            return UserList.UserList.__rdiv__(self,other)
+
+    
+    def __mod__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.sum()%other
+        elif hasattr(other,"sum"):
+            return  self.sum() % other.sum()
+        else:
+            return UserList.UserList.__mod__(self,other)
+
+    
+    def __rmod__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return other % self.sum()
+        elif hasattr(other,"sum"):
+            return  other.sum() % self.sum()
+        else:
+            return UserList.UserList.__rmod__(self,other)
+
+    
+    def __neg__(self):
+        for i in range(len(self.data)):
+            self.data[i] = -self.data[i]
+        return self
+
+    
+    def __pos__(self):
+        for i in range(len(self.data)):
+            self.data[i] = +self.data[i]
+        return self
+
+    
+    def __abs__(self):
+        for i in range(len(self.data)):
+            self.data[i] = abs(self.data[i])
+        return self
+        #return abs(self.sum())
+
+    
+    def __pow__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.sum() ** other
+        elif hasattr(other,"sum"):
+            return  self.sum() ** other.sum()
+        else:
+            return UserList.UserList.__pow__(self,other)
+
+
+    
+    def __rpow__(self,other):
+        #  We're overloading exponentiation of ints to create "other" number of dice
+
+        if other >= 1:
+            result = self.__class__(self[0].sides)
+            for t in range(other-1):
+                result+=self.__class__(self[0].sides)
+        else:
+            result = None
+
+        return result
+
+### di class to handle actual dice
+
+class di:
+    
+    def __init__(self,sides,min=1):
+        self.sides = sides
+        self.history = None
+        self.value = None
+        self.target = None
+        self.roll(min)
+
+    
+    def __str__(self):
+        if len(self.history) > 1:
+            return str(self.history)
+        else:
+            return str(self.value)
+
+    
+    def __neg__(self):
+        self.value = -self.value
+        for i in range(len(self.history)):
+            self.history[i] = -self.history[i]
+        return self
+
+    
+    def __pos__(self):
+        self.value = +self.value
+        for i in range(len(self.history)):
+            self.history[i] = +self.history[i]
+        return self
+
+    
+    def __abs__(self):
+        self.value = abs(self.value)
+        for i in range(len(self.history)):
+            self.history[i] = abs(self.history[i])
+        return self
+
+    
+    def __repr__(self):
+        if len(self.history) > 1:
+            return str(self.history)
+        else:
+            return str(self.value)
+
+    
+    def __int__(self):
+        return self.value
+
+
+    
+    def __lt__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.value < other
+        elif hasattr(other,"value"):
+            return self.value < other.value
+        else:
+            return self < other
+
+    
+    def __le__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.value <= other
+        elif hasattr(other,"value"):
+            return self.value <= other.value
+        else:
+            return self <= other
+
+    
+    def __eq__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.value == other
+        elif hasattr(other,"value"):
+            return self.value == other.value
+        else:
+            return self == other
+
+    
+    def __ne__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.value != other
+        elif hasattr(other,"value"):
+            return self.value != other.value
+        else:
+            return self != other
+
+    
+    def __gt__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.value > other
+        elif hasattr(other,"value"):
+            return self.value > other.value
+        else:
+            return self > other
+
+    
+    def __ge__(self,other):
+        if type(other) == type(3) or type(other) == type(3.0):
+            return self.value >= other
+        elif hasattr(other,"value"):
+            return self.value >= other.value
+        else:
+            return self >= other
+
+    
+    def __cmp__(self,other):
+        #  this function included for backwards compatibility
+        #  As of 2.1, lists implement the "rich comparison"
+        #  methods overloaded above.
+        if type(other) == type(3) or type(other) == type(3.0):
+            return cmp(self.value, other)
+        elif hasattr(other,"value"):
+            return cmp(self.value, other.value)
+        else:
+            return cmp(self,other)
+
+    
+    def roll(self,min=1):
+        if isinstance(self.sides, basestring) and self.sides.lower() == 'f':
+            self.value = random.randint(-1, 1)
+        else:
             #self.value = random.randint(min, self.sides)
-            self.value = int(random.uniform(min, self.sides+1))
-        self.history = []
-        self.history.append(self.value)
-
-    
-    def extraroll(self):
-        if isinstance(self.sides, basestring) and self.sides.lower() == 'f':
-            result = random.randint(-1, 1)
-        else:
+            self.value = int(random.uniform(min, self.sides+1))
+        self.history = []
+        self.history.append(self.value)
+
+    
+    def extraroll(self):
+        if isinstance(self.sides, basestring) and self.sides.lower() == 'f':
+            result = random.randint(-1, 1)
+        else:
             #result = random.randint(1, self.sides)
-            result = int(random.uniform(1,self.sides+1))
-
-        self.value += result
-        self.history.append(result)
-
-    
-    def lastroll(self):
-        return self.history[len(self.history)-1]
-
-    
-    def set_value(self,value):
-        self.value = value
-        self.history = []
-        self.history.append(self.value)
-
-    
-    def modify(self,mod):
-        self.value += mod
-        self.history.append(mod)
-
-    
-    def gethistory(self):
-        return self.history[:]
-
-class static_di(di):
-    
-    def __init__(self,value):
-        di.__init__(self,value,value)
-        self.set_value(value)
-
-
-class std(die_base):
-    
-    def __init__(self,source=[]):
-        die_base.__init__(self,source)
-
-    #  Examples of adding member functions through inheritance.
-
-    
-    def ascending(self):
-        result = self[:]
-        result.sort()
-        return result
-
-    
-    def descending(self):
-        result = self[:]
-        result.sort()
-        result.reverse()
-        return result
-
-    
-    def takeHighest(self,num_dice):
-        return self.descending()[:num_dice]
-
-    
-    def takeLowest(self,num_dice):
-        return self.ascending()[:num_dice]
-
-    
-    def extra(self,num):
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() >= num:
-                self.data[i].extraroll()
-        return self
-
-    
-    def open(self,num):
-        if num <= 1:
-            self
-        done = 1
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() >= num:
-                self.data[i].extraroll()
-                done = 0
-        if done:
-            return self
-        else:
-            return self.open(num)
-
-    
-    def minroll(self,min):
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() < min:
-                self.data[i].roll(min)
-        return self
-
-    
-    def each(self,mod):
-        mod = int(mod)
-        for i in range(len(self.data)):
-            self.data[i].modify(mod)
-        return self
-
-
-    
-    def vs(self, target):
-        for dn in self.data:
-            dn.target = target
-        return self
-
-
-    ## If we are testing against a saving throw, we check for
-    ## greater than or equal to against the target value and
-    ## we only return the number of successful saves.  A negative
-    ## value will never be generated.
-    
-    def sum(self):
-        retValue = 0
-        for dn in self.data:
-            setValue = reduce( lambda x, y : int(x)+int(y), dn.history )
-            if dn.target:
-                if setValue >= dn.target:
-                    retValue += 1
-
-            else:
-                retValue += setValue
-
-        return retValue
+            result = int(random.uniform(1,self.sides+1))
+
+        self.value += result
+        self.history.append(result)
+
+    
+    def lastroll(self):
+        return self.history[len(self.history)-1]
+
+    
+    def set_value(self,value):
+        self.value = value
+        self.history = []
+        self.history.append(self.value)
+
+    
+    def modify(self,mod):
+        self.value += mod
+        self.history.append(mod)
+
+    
+    def gethistory(self):
+        return self.history[:]
+
+class static_di(di):
+    
+    def __init__(self,value):
+        di.__init__(self,value,value)
+        self.set_value(value)
+
+
+class std(die_base):
+    
+    def __init__(self,source=[]):
+        die_base.__init__(self,source)
+
+    #  Examples of adding member functions through inheritance.
+
+    
+    def ascending(self):
+        result = self[:]
+        result.sort()
+        return result
+
+    
+    def descending(self):
+        result = self[:]
+        result.sort()
+        result.reverse()
+        return result
+
+    
+    def takeHighest(self,num_dice):
+        return self.descending()[:num_dice]
+
+    
+    def takeLowest(self,num_dice):
+        return self.ascending()[:num_dice]
+
+    
+    def extra(self,num):
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() >= num:
+                self.data[i].extraroll()
+        return self
+
+    
+    def open(self,num):
+        if num <= 1:
+            self
+        done = 1
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() >= num:
+                self.data[i].extraroll()
+                done = 0
+        if done:
+            return self
+        else:
+            return self.open(num)
+
+    
+    def minroll(self,min):
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() < min:
+                self.data[i].roll(min)
+        return self
+
+    
+    def each(self,mod):
+        mod = int(mod)
+        for i in range(len(self.data)):
+            self.data[i].modify(mod)
+        return self
+
+
+    
+    def vs(self, target):
+        for dn in self.data:
+            dn.target = target
+        return self
+
+
+    ## If we are testing against a saving throw, we check for
+    ## greater than or equal to against the target value and
+    ## we only return the number of successful saves.  A negative
+    ## value will never be generated.
+    
+    def sum(self):
+        retValue = 0
+        for dn in self.data:
+            setValue = reduce( lambda x, y : int(x)+int(y), dn.history )
+            if dn.target:
+                if setValue >= dn.target:
+                    retValue += 1
+
+            else:
+                retValue += setValue
+
+        return retValue
--- a/orpg/dieroller/dieroller.txt	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/dieroller.txt	Wed Nov 25 12:34:04 2009 -0600
@@ -1,309 +1,309 @@
-The New Dicing System:  A Proposal for OpenRPG
-----------------------------------------------
-
-The current dice system for OpenRPG has several limitations.  Foremost
-among these are the fact that adding a new, non-standard dicing mechanism
-requires editing of the basic dice code.  There are several secondary 
-limitations, such as the fact that while the dice system can handle math,
-it cannot be used as a calculator -- it will not allow expressions that do
-not involve dice.
-
-This proposal is for a new dicing system to replace the current one in
-OpenRPG.  Since the dicing system is something that users will interact
-with frequently, a new system needs to be considered carefully.  This
-document attempts to describe the new dicing system so that such 
-consideration can be given to it.  It is expected that this document will
-grow and change as it is scrutinized.
-
-
-Design goals for this dicing system:
-
- 1. Should be easy for new users to get started with, based on knowing
-    standard RPG dice notation (NdX) and basic math.
-
- 2. Should, as far as practical, maintain compatibility with existing
-    character sheets, etc., that use the current dice system.
-
- 3. Should allow users to create new dice types and new ways of 
-    counting dice.  Ideally, this should not require programming, except
-    in exceptional cases.
-
- 4. The dice system should be usable for doing basic math that does
-    not involve dice.
-
- 5. The dice system should be able to handle most current RPG dicing
-    systems.
-
-Things this dicing system is designed to NOT do:
-
- 1. Be a programming language.  There are no facilities in it for 
-    user input, output formatting, loops, if-then-else, or similar
-    things.  If these are desired for something involving dice, an
-    appropriate node and nodehandler can be created.
-
- 2. Handle all theoretically possible dicing systems without the
-    need for programming plugins.  First off, this is impossible.  
-    Second, even making an attempt to would require supporting 
-    dicing methods that don't actually turn up in any real game.
-
- 3. Handle floating-point math.  I don't know of any systems that
-    use it in their dice schemes right now.  If there are some,
-    we might have to consider adding it.
-
-
-Syntax Specification 
-
-What follows is a BNF specification for the proposed dicing system, with
-explanatory text interleaved.  At the end of this document is a copy of
-the BNF with no explanations, for those who would like to look at it "all
-together".  Note that BNF describes only syntax, and not semantics; thus,
-while anything generated with this grammar should be syntactically correct,
-that doesn't mean it will make sense or be allowed.
-
-
-dice string ::= <expression>
-                <expression> of <comparison> | <comparison>
-
-This is the top level.  The major thing of note here is that comparisons
-only occur at this level.  This is intentional; the result of a comparison
-is a boolean true/false flag rather than a number.  Thus, it makes no 
-sense to allow people to perform further numerical operations on the 
-result of a comparison.  Systems where dice are triggered by the results 
-of other dice are left for the realm of plugins.
-
-                
-comparison ::= <expression> <relation> <expression>
-
-expression ::= <factor> | <factor> <low-op> <factor>
-
-The separation into "low-op" and "high-op" of the operators is to allow
-order of operations to be handled more easily.  Syntactically, it's not
-really necessary, but it should be helpful in implementation.
-
-
-factor :: = <term> | <term> <high-op> <term> |
-            <multi-dice> | <multi-dice> <high-op> <term> |
-            <term> <high-op> <multi-dice>
-
-Here we start to hit some complication.  The intent of the different 
-entries for multi-dice is that we don't want to allow things like
-[3d6 each * 2d6 each].  We are *not* doing vector multiplication!
-The "expression" level doesn't have any such limitation on syntax; 
-things like [3d6 each + 2d6 each] we'll have to either think of a 
-logical way to handle, or disallow on a semantic level.  (Well... I 
-suppose it could be handled in the BNF, but I think it would get
-kind of messy.)
-
-
-term ::= <dice> | <unit>
-
-unit ::= <number> | ( <expression> )
-
-Dice are not considered a unit.  This means that things like [3d6d10] can't
-be done without using parentheses.  I consider that to be a win for 
-clarity.
-
-
-dice ::= <unit>d<unit> | <unit>d<name> | <dice> <flag> | lastroll
-
-The <name> entry here allows for user-created dice (in the syntax, at 
-least...).
-
-
-multi-dice ::= ( <dice>, <dice>+ ) |               # (1d6,1d8)
-               <dice> each |                       # 3d6 each
-               ( <expression> of <expression> ) |  # (3 of 2d6)
-               lastroll |                          # lastroll
-               <multi-dice> <flag>                 # (3 of 2d6) best 2
-
-"lastroll" by itself can be either dice or multi-dice.  I'm thinking that it
- 
-should be whatever type the last roll was.
-
-
-flag ::= reroll <condition> |          # repeats
-         reroll <slice> |              # once only
-         grow <condition> |            # reroll and add
-         shrink <condition> |          # reroll and subtract
-         drop <condition> |
-         drop <slice> |
-         take <condition> |
-         take <slice> |
-         <slice> |                     # implied "take"
-         <name> <condition> |          # user-created
-         <name>                        # user-created
-
-Technically, we don't need both "drop" and "take" -- one implies the 
-other.  However, having both should make the language easier to use.
-
-"reroll" will work differently depending on whether a condition or a 
-slice is given.  If a condition is given, it will reroll until none of
-the dice in the set meet the reroll condition (or until it hits a maximum
-allowed number of rerolls).  If a slice is given, it will reroll those
-dice once.  IMHO, this behavior makes the most sense.
-
-The <name> entries here are to allow for user-created flags.  Note that
-as I've specified things right now, a user-created flag can have a
- condition,
-but not a slice.  That's mostly because I couldn't think of a case where
-a slice would be useful... should we add it anyways?
-
-
-slice ::= highest | lowest | highest <number> | lowest <number>
-
-"highest" and "lowest" without a number are equivalent to doing them with
-1 as the number.  This is to simplify things like [4d6 drop lowest].
-
-
-condition ::= <relation> <unit>
-
-This is for conditions on flags.  Note that it can take a unit, so you could
-
-use dice in a condition; however, I think the unit should only be evaluated 
-
-once, to make things faster.  Anyone for repetitive evaluation?
-
-
-low-op ::= + | - | min | max
-
-"min" takes two values and returns the highest of them, and "max"
-returns the lowest of them.  This might seem counterintuitive, but
-it's meant to be used with dice, like so:
-
-  3d6 min 8   - always returns 8 or higher
-
-  3d6 max 15  - always returns 15 or lower
-
-I decided to put min and max as having the same precedence as + and -,
-because if they had higher precedence, then:
-
-  3d6+2 min 10 
-
-would be equivalent to 3d6+10.  (It would take the max of 2 and 10, then
-add that to 3d6).  One problem that does arise here is with multiplication 
-and division:  [1d6 min 5 * 2] will be equivalent to [1d6 min 10], since
-multiplication has higher precedence.  We may just want to warn people 
-that min and max can be screwy unless you parenthesize, unless someone can
-think of a better way to handle them.
-
-
-high-op ::= * | / | mod
-
-The / is integer division, of course, since we're doing integer math.  
-
-
-number ::= <digit>+ | -<digit>+
-
-Positive and negative numbers are allowed.  This means that, syntactically,
-[-2d-4] is legal.  Do we want to modify the BNF to disallow this, or handle
-it on a semantic level?
-
-
-name ::= <letter>[<letter>|<digit>]*
-
-We may want to expand to allow underscores and dashes in user-created names.
-
-
-
-letter ::= A-Z | a-z
-
-digit ::= 0-9
-
-relation ::= < | > | <= | >= | => | =< | = | ==
-
-
-
-Well, that's the BNF.  Again, at the end is a copy without all the running
-commentary.
-
-
-Thoughts on Implementation:
-
-First, I think a sort of "dice library" of common functions needs to be
-created.  This would include rolling a set of dice, getting the highest
-of a group of dice, growing and shrinking dice from a set based on 
-conditions, and so on.  These functions should be available for use by
-custom-written dice types.
-
-Next, that library should be used as a tool in implementing a dice-string
-interpreter.  That will require creating a parser for the dice-string 
-'language'.  This could be either a custom-written parser, or possibly
-one created with some of the Python parser generators.  A custom-written
-parser may take longer to do and be a bit more finicky to maintain, but
-it would remove a dependency from the code.
-
-User-created flags and dice types could be supported in two ways:
-
- - First, by allowing users to specify strings in the dice language
-   that the flags/expressions would expand to -- basically, allowing
-   dice macros.
-
- - Second, by adding hooks for python modules to be associated with
-   user-created dice or flag types.  This is likely to be the more
-   complicated of the two solutions, but it would also be more 
-   flexible.
-
-Personally, I think both are desirable -- the first, so that 
-non-programming users can create simple die and flag types.  The
-second, because by design, there are some things this dice system 
-just won't do.
-
-
-Further work needed:
-
- - specs for the "dice library"
-
- - specs on an interface for python modules meant to be dice and
-   flag types.
-
-----------------------------------------------------------------
-
-start ::= <expression> |
-          <comparison>
-
-comparison ::= <expression> <condition>
-
-expression ::= <term> | <term> <low-op> <factor>
-
-term ::= <factor> | <factor> <high-op> <unit>
-
-factor ::= <atom> | <dice_set>
-
-atom ::= <number> | ( <expression> )
-
-dice_set ::= <dice> <dice_set>, <dice> | <expr> of <dice> | <dice> each |
-             lastroll
-
-dice ::= <atom>d<atom> | <atom>d<name> | <dice> <flag>
-
-flag ::= reroll <condition> |
-         reroll <slice> |
-         grow <condition> |  
-         shrink <condition> |        
-         drop <condition> |
-         drop <slice> |
-         take <condition> |
-         take <slice> |
-         <slice> |         
-         <name> <condition> |
-	 <name> <slice> |
-         <name>
-
-slice ::= highest | lowest | highest <number> | lowest <number>
-
-condition ::= <relation> <unit>
-
-low-op ::= + | -
-
-high-op ::= * | / | mod| max | min
-
-number ::= <digit>+ | -<digit>+
-
-name ::= <letter>[<letter>|<digit>]*
-
-letter ::= A-Z | a-z
-
-digit ::= 0-9
-
-relation ::= < | > | <= | >= | => | =< | = | ==
-
+The New Dicing System:  A Proposal for OpenRPG
+----------------------------------------------
+
+The current dice system for OpenRPG has several limitations.  Foremost
+among these are the fact that adding a new, non-standard dicing mechanism
+requires editing of the basic dice code.  There are several secondary 
+limitations, such as the fact that while the dice system can handle math,
+it cannot be used as a calculator -- it will not allow expressions that do
+not involve dice.
+
+This proposal is for a new dicing system to replace the current one in
+OpenRPG.  Since the dicing system is something that users will interact
+with frequently, a new system needs to be considered carefully.  This
+document attempts to describe the new dicing system so that such 
+consideration can be given to it.  It is expected that this document will
+grow and change as it is scrutinized.
+
+
+Design goals for this dicing system:
+
+ 1. Should be easy for new users to get started with, based on knowing
+    standard RPG dice notation (NdX) and basic math.
+
+ 2. Should, as far as practical, maintain compatibility with existing
+    character sheets, etc., that use the current dice system.
+
+ 3. Should allow users to create new dice types and new ways of 
+    counting dice.  Ideally, this should not require programming, except
+    in exceptional cases.
+
+ 4. The dice system should be usable for doing basic math that does
+    not involve dice.
+
+ 5. The dice system should be able to handle most current RPG dicing
+    systems.
+
+Things this dicing system is designed to NOT do:
+
+ 1. Be a programming language.  There are no facilities in it for 
+    user input, output formatting, loops, if-then-else, or similar
+    things.  If these are desired for something involving dice, an
+    appropriate node and nodehandler can be created.
+
+ 2. Handle all theoretically possible dicing systems without the
+    need for programming plugins.  First off, this is impossible.  
+    Second, even making an attempt to would require supporting 
+    dicing methods that don't actually turn up in any real game.
+
+ 3. Handle floating-point math.  I don't know of any systems that
+    use it in their dice schemes right now.  If there are some,
+    we might have to consider adding it.
+
+
+Syntax Specification 
+
+What follows is a BNF specification for the proposed dicing system, with
+explanatory text interleaved.  At the end of this document is a copy of
+the BNF with no explanations, for those who would like to look at it "all
+together".  Note that BNF describes only syntax, and not semantics; thus,
+while anything generated with this grammar should be syntactically correct,
+that doesn't mean it will make sense or be allowed.
+
+
+dice string ::= <expression>
+                <expression> of <comparison> | <comparison>
+
+This is the top level.  The major thing of note here is that comparisons
+only occur at this level.  This is intentional; the result of a comparison
+is a boolean true/false flag rather than a number.  Thus, it makes no 
+sense to allow people to perform further numerical operations on the 
+result of a comparison.  Systems where dice are triggered by the results 
+of other dice are left for the realm of plugins.
+
+                
+comparison ::= <expression> <relation> <expression>
+
+expression ::= <factor> | <factor> <low-op> <factor>
+
+The separation into "low-op" and "high-op" of the operators is to allow
+order of operations to be handled more easily.  Syntactically, it's not
+really necessary, but it should be helpful in implementation.
+
+
+factor :: = <term> | <term> <high-op> <term> |
+            <multi-dice> | <multi-dice> <high-op> <term> |
+            <term> <high-op> <multi-dice>
+
+Here we start to hit some complication.  The intent of the different 
+entries for multi-dice is that we don't want to allow things like
+[3d6 each * 2d6 each].  We are *not* doing vector multiplication!
+The "expression" level doesn't have any such limitation on syntax; 
+things like [3d6 each + 2d6 each] we'll have to either think of a 
+logical way to handle, or disallow on a semantic level.  (Well... I 
+suppose it could be handled in the BNF, but I think it would get
+kind of messy.)
+
+
+term ::= <dice> | <unit>
+
+unit ::= <number> | ( <expression> )
+
+Dice are not considered a unit.  This means that things like [3d6d10] can't
+be done without using parentheses.  I consider that to be a win for 
+clarity.
+
+
+dice ::= <unit>d<unit> | <unit>d<name> | <dice> <flag> | lastroll
+
+The <name> entry here allows for user-created dice (in the syntax, at 
+least...).
+
+
+multi-dice ::= ( <dice>, <dice>+ ) |               # (1d6,1d8)
+               <dice> each |                       # 3d6 each
+               ( <expression> of <expression> ) |  # (3 of 2d6)
+               lastroll |                          # lastroll
+               <multi-dice> <flag>                 # (3 of 2d6) best 2
+
+"lastroll" by itself can be either dice or multi-dice.  I'm thinking that it
+ 
+should be whatever type the last roll was.
+
+
+flag ::= reroll <condition> |          # repeats
+         reroll <slice> |              # once only
+         grow <condition> |            # reroll and add
+         shrink <condition> |          # reroll and subtract
+         drop <condition> |
+         drop <slice> |
+         take <condition> |
+         take <slice> |
+         <slice> |                     # implied "take"
+         <name> <condition> |          # user-created
+         <name>                        # user-created
+
+Technically, we don't need both "drop" and "take" -- one implies the 
+other.  However, having both should make the language easier to use.
+
+"reroll" will work differently depending on whether a condition or a 
+slice is given.  If a condition is given, it will reroll until none of
+the dice in the set meet the reroll condition (or until it hits a maximum
+allowed number of rerolls).  If a slice is given, it will reroll those
+dice once.  IMHO, this behavior makes the most sense.
+
+The <name> entries here are to allow for user-created flags.  Note that
+as I've specified things right now, a user-created flag can have a
+ condition,
+but not a slice.  That's mostly because I couldn't think of a case where
+a slice would be useful... should we add it anyways?
+
+
+slice ::= highest | lowest | highest <number> | lowest <number>
+
+"highest" and "lowest" without a number are equivalent to doing them with
+1 as the number.  This is to simplify things like [4d6 drop lowest].
+
+
+condition ::= <relation> <unit>
+
+This is for conditions on flags.  Note that it can take a unit, so you could
+
+use dice in a condition; however, I think the unit should only be evaluated 
+
+once, to make things faster.  Anyone for repetitive evaluation?
+
+
+low-op ::= + | - | min | max
+
+"min" takes two values and returns the highest of them, and "max"
+returns the lowest of them.  This might seem counterintuitive, but
+it's meant to be used with dice, like so:
+
+  3d6 min 8   - always returns 8 or higher
+
+  3d6 max 15  - always returns 15 or lower
+
+I decided to put min and max as having the same precedence as + and -,
+because if they had higher precedence, then:
+
+  3d6+2 min 10 
+
+would be equivalent to 3d6+10.  (It would take the max of 2 and 10, then
+add that to 3d6).  One problem that does arise here is with multiplication 
+and division:  [1d6 min 5 * 2] will be equivalent to [1d6 min 10], since
+multiplication has higher precedence.  We may just want to warn people 
+that min and max can be screwy unless you parenthesize, unless someone can
+think of a better way to handle them.
+
+
+high-op ::= * | / | mod
+
+The / is integer division, of course, since we're doing integer math.  
+
+
+number ::= <digit>+ | -<digit>+
+
+Positive and negative numbers are allowed.  This means that, syntactically,
+[-2d-4] is legal.  Do we want to modify the BNF to disallow this, or handle
+it on a semantic level?
+
+
+name ::= <letter>[<letter>|<digit>]*
+
+We may want to expand to allow underscores and dashes in user-created names.
+
+
+
+letter ::= A-Z | a-z
+
+digit ::= 0-9
+
+relation ::= < | > | <= | >= | => | =< | = | ==
+
+
+
+Well, that's the BNF.  Again, at the end is a copy without all the running
+commentary.
+
+
+Thoughts on Implementation:
+
+First, I think a sort of "dice library" of common functions needs to be
+created.  This would include rolling a set of dice, getting the highest
+of a group of dice, growing and shrinking dice from a set based on 
+conditions, and so on.  These functions should be available for use by
+custom-written dice types.
+
+Next, that library should be used as a tool in implementing a dice-string
+interpreter.  That will require creating a parser for the dice-string 
+'language'.  This could be either a custom-written parser, or possibly
+one created with some of the Python parser generators.  A custom-written
+parser may take longer to do and be a bit more finicky to maintain, but
+it would remove a dependency from the code.
+
+User-created flags and dice types could be supported in two ways:
+
+ - First, by allowing users to specify strings in the dice language
+   that the flags/expressions would expand to -- basically, allowing
+   dice macros.
+
+ - Second, by adding hooks for python modules to be associated with
+   user-created dice or flag types.  This is likely to be the more
+   complicated of the two solutions, but it would also be more 
+   flexible.
+
+Personally, I think both are desirable -- the first, so that 
+non-programming users can create simple die and flag types.  The
+second, because by design, there are some things this dice system 
+just won't do.
+
+
+Further work needed:
+
+ - specs for the "dice library"
+
+ - specs on an interface for python modules meant to be dice and
+   flag types.
+
+----------------------------------------------------------------
+
+start ::= <expression> |
+          <comparison>
+
+comparison ::= <expression> <condition>
+
+expression ::= <term> | <term> <low-op> <factor>
+
+term ::= <factor> | <factor> <high-op> <unit>
+
+factor ::= <atom> | <dice_set>
+
+atom ::= <number> | ( <expression> )
+
+dice_set ::= <dice> <dice_set>, <dice> | <expr> of <dice> | <dice> each |
+             lastroll
+
+dice ::= <atom>d<atom> | <atom>d<name> | <dice> <flag>
+
+flag ::= reroll <condition> |
+         reroll <slice> |
+         grow <condition> |  
+         shrink <condition> |        
+         drop <condition> |
+         drop <slice> |
+         take <condition> |
+         take <slice> |
+         <slice> |         
+         <name> <condition> |
+	 <name> <slice> |
+         <name>
+
+slice ::= highest | lowest | highest <number> | lowest <number>
+
+condition ::= <relation> <unit>
+
+low-op ::= + | -
+
+high-op ::= * | / | mod| max | min
+
+number ::= <digit>+ | -<digit>+
+
+name ::= <letter>[<letter>|<digit>]*
+
+letter ::= A-Z | a-z
+
+digit ::= 0-9
+
+relation ::= < | > | <= | >= | => | =< | = | ==
+
--- a/orpg/dieroller/gurps.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/gurps.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,723 +1,723 @@
-#This program is free software; you can redistribute it and/or
-#modify it under the terms of the GNU General Public License
-#as published by the Free Software Foundation; either version 2
-#of the License, or (at your option) any later version.
-#
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#GNU General Public License for more details.
-#
-#You should have received a copy of the GNU General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-# --
-#
-# File: gurps.py
-# Version:
-#   $Id: gurps.py,v 1.3
-#
-# Description: Modified Hero System die roller based on DJM and Heroman's Hero
-# dieroller
-#
-# GURPS is a trademark of Steve Jackson Games, and its rules and art are
-# copyrighted by Steve Jackson Games. All rights are reserved by Steve Jackson
-# Games. This game aid is the original creation of Naryt with help from Pyrandon
-# and is released for free distribution, and not for resale, under the
-# permissions granted in the Steve Jackson Games Online Policy.
-# http://www.sjgames.com/general/online_policy.html
-#
-# Errors should be reported to rpg@ormonds.net
-#
-# Changelog:
-# V 1.3  2007/03/23  Thomas M. Edwards <tmedwards@motoslave.net>
-#   Fixed gurpsskill, gurpsdefaultskill, and gurpssupernatural to correctly
-#   return a normal failure when the roll is 17 and the effective skill is 27+;
-#   previously, they would erroneously return a critical failure.  This fix also
-#   corrects the less serious issue whereby rolls of 17 and an effective skill
-#   of 17-26 would report "failure by X" instead of merely "failure", which is
-#   wrong as the only reason the roll failed was because a 17 was rolled, not
-#   because the roll exceeded the effective skill.
-# V 1.2 29 October 2006, added defaultskill (Rule of 20 [B344]), supernatural
-#   (Rule of 16 [B349]).  The frightcheck roll is now the actual Fright Check
-#   (with Rule of 14 [B360]) and a lookup oon the Fright Check Table if needed.
-#   The fightcheckfail roll is the old Fright Check Table lookup.
-#   Removes the Help roller as it was nothing but trouble, see
-#   http://openrpg.wrathof.com/repository/GURPS/GURPS_Roller_1.7.xml for help
-#   in using this roller.
-# V 1 Original gurps release 2006/05/28 00:00:00, modified crit_hit, crit_headblow, crit_miss, crit_unarm, spellfail, frightcheck and help_me
-#       Corrects numerous descriptions
-# v.1 original gurps release by Naryt 2005/10/17 16:34:00
-
-from die import *
-from time import time, clock
-import random
-
-__version__ = "$Id: gurps.py,v 1.5 2007/05/06 16:42:55 digitalxero Exp $"
-
-# gurps
-
-class gurps(std):
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-# these methods return new die objects for specific options
-
-# Original msk roll renamed to be easier to understand/remember
-    
-    def skill(self,skill,mod):
-        return gurpsskill(self,skill,mod)
-
-    
-    def defaultskill(self,stat,defaultlevel,mod):
-        return gurpsdefaultskill(self,stat,defaultlevel,mod)
-
-    
-    def supernatural(self,skill,resistance,mod):
-        return gurpssupernatural(self,skill,resistance,mod)
-
-    
-    def crit_hit(self):
-        return gurpscrit_hit(self)
-
-    
-    def crit_headblow(self):
-        return gurpscrit_headblow(self)
-
-    
-    def crit_miss(self):
-        return gurpscrit_miss(self)
-
-    
-    def crit_unarm(self):
-        return gurpscrit_unarm(self)
-
-    
-    def spellfail(self):
-        return gurpsspellfail(self)
-
-    
-    def frightcheck(self,level,mod):
-        return gurpsfrightcheck(self,level,mod)
-
-    
-    def frightcheckfail(self,mod):
-        return gurpsfrightcheckfail(self,mod)
-
-class gurpsskill(std):
-    
-    def __init__(self,source=[],skill=0,mod=0):
-        std.__init__(self,source)
-        self.skill = skill
-        self.mod = mod
-
-    
-    def is_success(self):
-        return (((self.sum()) <= self.skill+self.mod) and (self.sum() < 17))
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr +="]"
-        myStr += " = <b>" + str(self.sum()) + "</b>"
-        myStr += " vs <b>(" + str(self.skill+self.mod) + ")</b>"
-
-        Diff = abs((self.skill+self.mod) - self.sum())
-
-        if self.is_success():
-            if self.sum() == 3 or self.sum() == 4:
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
-            elif self.sum() == 5 and (self.skill+self.mod > 14):
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
-            elif self.sum() == 6 and (self.skill+self.mod > 15):
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
-        else:
-            if self.sum() == 18:
-                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-#            elif self.sum() == 17 and (self.skill+self.mod < 16):
-#                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-            elif self.sum() == 17:
-                if (self.skill+self.mod) < 16:
-                    myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-                else:
-                    myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
-            elif  Diff > 9:
-                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +" </font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
-
-        return myStr
-
-class gurpsdefaultskill(std):
-    
-    def __init__(self,source=[],stat=0,defaultlevel=0,mod=0):
-        std.__init__(self,source)
-        self.stat = stat
-        self.defaultlevel = defaultlevel
-        self.mod = mod
-
-    
-    def is_success(self):
-        if self.stat < 21:
-            intSkillVal = self.stat + self.defaultlevel + self.mod
-        else:
-            intSkillVal = 20 + self.defaultlevel + self.mod
-        return (((self.sum()) <= intSkillVal) and (self.sum() < 17))
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr +="]"
-        myStr += " = <b>" + str(self.sum()) + "</b>"
-        strRule = ""
-        if self.stat < 21:
-            intSkillVal = self.stat + self.defaultlevel + self.mod
-        else:
-            intSkillVal = 20 + self.defaultlevel + self.mod
-            strRule = "<br />Rule of 20 in effect [B173, B344]"
-
-        myStr += " vs <b>(" + str(intSkillVal) + ")</b>"
-
-        Diff = abs((intSkillVal) - self.sum())
-
-        if self.is_success():
-            if self.sum() == 3 or self.sum() == 4:
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
-            elif self.sum() == 5 and (intSkillVal > 14):
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +"</font> [B556]"
-            elif self.sum() == 6 and (intSkillVal > 15):
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +"</font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +"</font>"
-        else:
-            if self.sum() == 18:
-                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-            elif self.sum() == 17:
-                if intSkillVal < 16:
-                    myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-                else:
-                    myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
-            elif  Diff > 9:
-                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +"</font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +"</font>"
-
-        myStr += strRule
-        return myStr
-
-class gurpssupernatural(std):
-    
-    def __init__(self,source=[],skill=0,resistance=0,mod=0):
-        std.__init__(self,source)
-        self.skill = skill
-        self.resistance = resistance
-        self.mod = mod
-
-    
-    def is_success(self):
-        if self.skill+self.mod > 16:
-            if self.resistance > 16:
-                if self.resistance > self.skill+self.mod:
-                    newSkill = self.skill+self.mod
-                else:
-                    newSkill = self.resistance
-            else:
-                newSkill = 16
-        else:
-            newSkill = self.skill+self.mod
-        return (((self.sum()) <= newSkill) and (self.sum() < 17))
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr +="]"
-        myStr += " = <b>" + str(self.sum()) + "</b>"
-        strRule = ""
-        if self.skill+self.mod > 16:
-            if self.resistance > 16:
-                if self.resistance > self.skill+self.mod:
-                    newSkill = self.skill+self.mod
-                    strRule = "<br />Rule of 16:  Subject's Resistance is higher than skill, no change in skill [B349]"
-                else:
-                    newSkill = self.resistance
-                    strRule = "<br />Rule of 16:  Effective skill limited by subject's Resistance [B349]"
-            else:
-                newSkill = 16
-                strRule = "<br />Rule of 16:  Effective skill limited to 16 [B349]"
-        else:
-            newSkill = self.skill+self.mod
-        myStr += " vs <b>(" + str(newSkill) + ")</b>"
-
-        Diff = abs((newSkill) - self.sum())
-
-        if self.is_success():
-            if self.sum() == 3 or self.sum() == 4:
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
-            elif self.sum() == 5 and (newSkill > 14):
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
-            elif self.sum() == 6 and (newSkill > 15):
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
-        else:
-            if self.sum() == 18:
-                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-            elif self.sum() == 17:
-                if newSkill < 16:
-                    myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
-                else:
-                    myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
-            elif  Diff > 9:
-                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +" </font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
-
-        myStr += strRule
-        return myStr
-
-class gurpscrit_hit(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
-        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
-            myStr += ","                  #Adds a comma after each die
-            myStr += str(a)           #Adds the value of each die.
-        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
-        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
-
-        if self.sum() > 8 and self.sum() < 12:
-            myStr += " <font color='#ff0000'>The blow inflicts normal damage.</font> [B556]"
-        elif self.sum() == 12:
-            myStr += " <font color='#ff0000'>The blow inflicts normal damage, AND victim drops anything they hold--even if no damage penetrates DR.</font> [B556]"
-        elif self.sum() == 8:
-            myStr += " <font color='#ff0000'>Damage penetrating DR does double shock (-8 max) AND if it hits the victim's limb, it's crippled for 16-HT seconds (unless wound is enough to cripple permanently!).</font> [B556]"
-        elif self.sum() == 13 or self.sum() == 14 or self.sum() == 7:
-            myStr += " <font color='#ff0000'>If any damage penetrates DR, treat as major wound. See [B420] for major wounds.</font> [B556]"
-        elif self.sum() == 6 or self.sum() == 15:
-            myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage.</font> [B556]"
-        elif self.sum() == 5 or self.sum() == 16:
-            myStr += " <font color='#ff0000'>The blow inflicts double damage.</font> [B556]"
-        elif self.sum() == 4 or self.sum() == 17:
-            myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded down, after applying any armor divisors.</font> [B556]"
-        elif self.sum() == 3 or self.sum() == 18 :
-            myStr += " <font color='#ff0000'>The blow inflicts triple damage.</font> [B556]"
-
-        return myStr
-
-class gurpscrit_headblow(std):
-    
    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
-        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
-            myStr += ","                  #Adds a comma after each die
-            myStr += str(a)           #Adds the value of each die.
-        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
-        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
-
-        if self.sum() > 8 and self.sum() < 12:
-            myStr += " <font color='#ff0000'>The blow inflicts normal damage.</font> [B556]"
-        elif self.sum() == 12 or self.sum() == 13:
-            myStr += " <font color='#ff0000'>Normal damage to the head, BUT if any penetrates DR victim is scarred (-1 to appearance, -2 if burning or corrosive attacks) OR, if <i>crushing</i> then victim deafened [see B422 for duration].</font> [B556]"
-        elif self.sum() == 8:
-            myStr += " <font color='#ff0000'>Normal damage to head, but victim knocked off balance: must Do Nothing until next turn (but can defend).</font> [B556]"
-        elif self.sum() == 14:
-            myStr += " <font color='#ff0000'>Normal damage to head, but victim drops their weapon.  If holding two weapons, roll randomly for which one is dropped.</font> [B556]"
-        elif self.sum() == 6 or self.sum() == 7:
-            myStr += " <font color='#ff0000'>If you aimed for face or skull, you hit an eye [B399];  otherwise, DR only half effective & if even 1 point damage penetrates it's a major wound [B420].  If you hit an eye and that should be impossible, treat as if a <b>4</b> were rolled, see [B556].</font> [B556]"
-        elif self.sum() == 15:
-            myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage.</font> [B556]"
-        elif self.sum() == 16:
-            myStr += " <font color='#ff0000'>The blow inflicts double damage.</font> [B556]"
-        elif self.sum() == 4 or self.sum() == 5:
-            myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded up, after applying armor divisors AND if even 1 point penetrates it's a major wound [B420].</font> [B556]"
-        elif self.sum() == 17:
-            myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded up, after applying any armor divisors.</font> [B556]"
-        elif self.sum() == 3:
-            myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage AND ignores all DR.</font> [B556]"
-        elif self.sum() == 18:
-            myStr += " <font color='#ff0000'>The blow inflicts triple damage.</font> [B556]"
-
-        return myStr
-
-class gurpscrit_miss(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
-        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
-            myStr += ","                  #Adds a comma after each die
-            myStr += str(a)           #Adds the value of each die.
-        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
-        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
-
-        if self.sum() > 8 and self.sum() < 12:
-            myStr += " <font color='#ff0000'>You drop your weapon (& a <i>cheap</i> weapon breaks).</font> [B556]"
-        elif self.sum() == 12 or self.sum() == 8:
-            myStr += " <font color='#ff0000'>Your weapon turns in your hand;  must Ready it before it can be used again.</font> [B556]"
-        elif self.sum() == 13 or self.sum() == 7:
-            myStr += " <font color='#ff0000'>You lose your balance & can do nothing else (not even free actions) until next turn;  all defenses -2 until next turn.</font> [B556]"
-        elif self.sum() == 14:
-            yrdStr = str(int(random.uniform(1,7)))
-            myStr += " <font color='#ff0000'>A <i>swung</i> weapon flies from hand " + yrdStr + " yards (50% chance straight forward/backward) anyone on the target of the flying weapon makes a DX roll or takes half-damage; a <i>thrust</i> or <i>ranged</i> weapon is dropped (& a <i>cheap</i> weapon breaks).</font> [B556]"
-        elif self.sum() == 6:
-            myStr += " <font color='#ff0000'>You hit yourself in arm or leg (50/50 chance), doing half damage;  if impaling, piercing, or ranged attack, then roll again (if you hit yourself again then use that result).</font> [B556]"
-        elif self.sum() == 15:
-            myStr += " <font color='#ff0000'>You strain your shoulder!  Weapon arm crippled for 30 min;  do not drop weapon, but that arm is useless.</font> [B557]"
-        elif self.sum() == 16:
-            myStr += " <font color='#ff0000'>If <i>melee attack,</i>  you fall down!  If <i>ranged attack,</i> you lose your balance & can do nothing until next turn & all defenses -2 until next turn.</font> [B557]"
-        elif self.sum() == 5:
-            myStr += " <font color='#ff0000'>You hit yourself in the arm or leg (50/50 chance), doing normal damage;  if impaling, piercing, or ranged attack, then roll again (if you hit yourself again then use that result).</font> [B556]"
-        elif self.sum() == 4 or self.sum() == 3 or self.sum() == 17 or self.sum() == 18:
-            broke = int(random.uniform(3,19))
-            if broke >=5 and broke <=16:
-                brokestr = "it is dropped."
-            else:
-                brokestr = "the weapon also breaks!"
-            myStr += " <font color='#ff0000'>A normal weapon breaks [B485];  if solid crushing weapon OR fine, very fine, or magical weapon " + brokestr + "</font> [B556] Note, second for roll non-normal weapons already fingured into this result."
-
-        return myStr
-
-class gurpscrit_unarm(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
-        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
-            myStr += ","                  #Adds a comma after each die
-            myStr += str(a)           #Adds the value of each die.
-        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
-        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
-
-        if self.sum() > 8 and self.sum() < 12:
-            myStr += " <font color='#ff0000'>You lose your balance;  you can do nothing else (not even free actions) until next turn, and all defenses -2 until next turn.</font> [B557]"
-        elif self.sum() == 12:
-            myStr += " <font color='#ff0000'>You trip; make a DX roll to avoid falling at -4 if kicking or twice the normal penatly for a technique that normally requires a DX to avoid injury on even a normal failure (e.g., Jump Kick).</font> [B557]"
-        elif self.sum() == 8:
-            myStr += " <font color='#ff0000'>You fall down!</font> [B557]"
-        elif self.sum() == 13:
-            myStr += " <font color='#ff0000'>You drop your guard:  all defenses -2 for the next turn & any Evaluate bonus or Feint penalties against you are doubled.  This is obvious to those around you.</font> [B557]"
-        elif self.sum() == 7 or self.sum() == 14:
-            myStr += " <font color='#ff0000'>You stumble:  <i>If attacking,</i> you advance one yard past opponent with them behind you (you are facing away); <i>if parrying</i> you fall down!</font> [B557]"
-        elif self.sum() == 15:
-            mslStr = str(int(random.uniform(1,4)))
-            myStr += " <font color='#ff0000'>You tear a muscle; " + mslStr + " HT damage to the limb used to attack (to one limb if two used to attack), & -3 to use it (-1 w/high pain thresh); also all atacks & defenses -1 until next turn.  If neck was injured -3 (-1 w/high pain thresh) applies to ALL actions.</font> [B557]"
-        elif self.sum() == 6:
-            myStr += " <font color='#ff0000'>You hit a solid object (wall, floor, etc.) & take crushing damage equalt to 1/2 of (your thrusting damage - your DR) (<i>EXCEPTION:</i> If attacking with natural weapons, such as claws or teeth, they <i>break</i> -1 damage on future attacks until you heal (for recovery, B422).</font> [B557]"
-        elif self.sum() == 5 or self.sum() == 16:
-            myStr += " <font color='#ff0000'>You hit a solid object (wall, floor, etc.) & take crushing damage = your thrusting damage - your DR (<i>EXCEPTION:</i> if opponent using impaling weapon, you fall on it & take damage based on your ST).  If attacking an opponent who is using an impaling weapon, you fall on <i>his weapon</i>.  You suffer the weapon's normal damage based on <i>your</i> <b>ST</b>.</font> [B557]"
-        elif self.sum() == 4:
-            myStr += " <font color='#ff0000'>If attacking or parrying with a limb, you strain the limb:  1 HP damage & it's crippled for 30 min. If biting, butting, etc., have moderate neck pain (B428) for next 20-HT min minimum of 1 minute.</font> [B557]"
-        elif self.sum() == 17:
-            myStr += " <font color='#ff0000'>If attacking or parrying with a limb, you strain the limb:  1 HP damage & it's crippled for 30 min. If IQ 3-5 animal, it loses its nerve & flees on next turn or surrenders if cornered.</font> [B557]"
-        elif self.sum() == 3 or self.sum() == 18 :
-            myStr += " <font color='#ff0000'>You knock yourself out!  Roll vs. HT every 30 min. to recover.</font> [B557]"
-
-        return myStr
-
-class gurpsspellfail(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr +="]"
-        myStr += " = <b>" + str(self.sum()) + "</b>"
-
-        if self.sum() == 10 or self.sum() == 11:
-            myStr += " <font color='#ff0000'>Spell produces nothing but a loud noise, bright flash, awful odor, etc.</font> [B236]"
-        elif self.sum() == 9:
-            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster is stunned (IQ roll to recover).</font> [B236]"
-        elif self.sum() == 12:
-            myStr += " <font color='#ff0000'>Spell produces a weak and useless shadow of the intended effect.</font> [B236]"
-        elif self.sum() == 8:
-            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster takes 1 point of damage.</font> [B236]"
-        elif self.sum() == 13:
-            myStr += " <font color='#ff0000'>Spell produces the reverse of the intended effect.</font> [B236]"
-        elif self.sum() == 7:
-            myStr += " <font color='#ff0000'>Spell affects someone or something other than the intended subject.</font> [B236]"
-        elif self.sum() == 14:
-            myStr += " <font color='#ff0000'>Spell seems to work, but it is only a useless illusion.</font> [B236]"
-        elif self.sum() == 5 or self.sum() == 6:
-            myStr += " <font color='#ff0000'>Spell is cast on one of the caster's companions (if harmful) or a random nearby foe (if beneficial).</font> [B236]"
-        elif self.sum() == 15 or self.sum() == 16:
-            myStr += " <font color='#ff0000'>Spell has the reverse of the intended, on the wrong target.  Roll randomly.</font> [B236]"
-        elif self.sum() == 4:
-            myStr += " <font color='#ff0000'>Spell is cast on caster (if harmful) or on a random nearby foe (if beneficial).</font> [B236]"
-        elif self.sum() == 17:
-            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster temporarily forgets the spell.  Make a weekly IQ roll (after a week passes) until the spell is remembered.</font> [B236]"
-        elif self.sum() == 3:
-            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster takes 1d of injury.</font> [B236]"
-        elif self.sum() == 18:
-            myStr += " <font color='#ff0000'>Spell fails entirely.  A demon or other malign entity appears and attacks the caster.  (GM may waive this if the caster and spell were both lily-white, pure good in intent.)</font> [B236]"
-
-        return myStr
-
-class gurpsfrightcheck(std):
-    
-    def __init__(self,source=[],skill=0,mod=0):
-        std.__init__(self,source)
-        self.skill = skill
-        self.mod = mod
-
-    
-    def is_success(self):
-        return (((self.sum()) <= self.skill+self.mod) and (self.sum() < 14))
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr +="]"
-        myStr += " = <b>" + str(self.sum()) + "</b>"
-
-        if self.skill+self.mod < 14:
-            myStr += " vs <b>(" + str(self.skill+self.mod) + ")</b>"
-            Diff = abs((self.skill+self.mod) - self.sum())
-        else:
-            myStr += " vs <b>(13)</b>"
-            Diff = abs(13 - self.sum())
-
-        if self.is_success():
-            if self.sum() == 3 or self.sum() == 4:
-                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
-            else:
-                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
-        else:
-                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
-
-        if self.skill + self.mod > 13:
-            myStr += " Rule of 14 in effect [B360]"
-
-        if not(self.is_success()):
-            intD1 = int(random.uniform(1,7))
-            intD2 = int(random.uniform(1,7))
-            intD3 = int(random.uniform(1,7))
-            intFright = intD1 + intD2 + intD3 + Diff
-            myStr += "<br />Rolling on Fright Check Table<br />[" + str(intD1) + "," + str(intD2) + "," + str(intD3) + "] ==> " + str(intFright - Diff) + " +  " + str(Diff) + " = " + str(intFright) + "<br />"
-            if intFright < 6:
-                myStr += "<font color='#ff0000'>Stunned for one second, then recover automatically.</font> [B360]"
-            elif intFright < 8:
-                myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. unmodified Will to snap out of it.</font> [B360]"
-            elif intFright < 10:
-                myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
-            elif intFright == 10:
-                strStun = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
-            elif intFright == 11:
-                strStun = str(int(random.uniform(2,13)))
-                myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
-            elif intFright == 12:
-                myStr += "<font color='#ff0000'>Lose your lunch.  Treat this as retching for (25-HT) seconds, and then roll vs. HT each second to recover [B428].</font> [B361]"
-            elif intFright == 13:
-                myStr += "<font color='#ff0000'>Acquire a new mental quirk.</font> [B361]"
-            elif intFright < 16:
-                strFP = str(int(random.uniform(1,7)))
-                strSeconds = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Lose " + strFP + " FP, and stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
-            elif intFright == 16:
-                strSeconds = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.  Acquire a new mental quirk.</font> [B361]"
-            elif intFright == 17:
-                strMinutes = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.</font> [B361]"
-            elif intFright == 18:
-                strMinutes = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.</font> [B361]"
-            elif intFright == 19:
-                strMinutes = str(int(random.uniform(2,13)))
-                myStr += "<font color='#ff0000'>Severe faint, lasting for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.  Take 1 HP of injury.</font> [B361]"
-            elif intFright == 20:
-                strMinutes = str(int(random.uniform(4,25)))
-                strFP = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Faint bordering on shock, lastering for " + strMinutes + " minutes.  Also, lose " + strFP + " FP.</font> [B361]"
-            elif intFright == 21:
-                strMinutes = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Panic.  You run around screaming, sit down and cry, or do something else equally pointless for " + strMinutes + " minutes.  Every minute after that, roll vs. unmodified Will to snap out of it.</font> [B361]"
-            elif intFright == 22:
-                myStr += "<font color='#ff0000'>Acquire a new -10-point Delusion (B130).</font> [B361]"
-            elif intFright == 23:
-                myStr += "<font color='#ff0000'>Acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
-            elif intFright == 24:
-                myStr += "<font color='#ff0000'>Major physical effect, set by the GM: hair turns white, age five years overnight, go partially deaf, etc.  (Acquire -15 points worth of physical disadvantages.  Each year of aging = -3 points.)</font> [B361]"
-            elif intFright == 25 :
-                myStr += "<font color='#ff0000'>If you already have a Phobia or other mental disadvantage that is logically related to the frightening incident, your self-control number becomes one step worse.  If not, or if your self-control number is already 6, add a new -10-point Phobia or other -10-point mental disadvantage.</font> [B361]"
-            elif intFright == 26:
-                strMinutes = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Delusion (B130).</font> [B361]"
-            elif intFright == 27:
-                strMinutes = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
-            elif intFright == 28:
-                myStr += "<font color='#ff0000'>Light coma.  You fall unconscious, rolling vs. HT every 30 minutes to recover.  For 6 hours after you come to, all skill rolls and attribute checks are at -2.</font> [B361]"
-            elif intFright == 29:
-                strHours = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.</font> [B361]"
-            elif intFright == 30:
-                strDays = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Catatonia.  Stare into space for " + strDays + " days.  Then roll vs. HT.  On a failed roll, remain catatonic for another " + strDays + " days, and so on.  If you have no medical care, lose 1 HP the first day, 2 HP the second day and so on.  If you survive and awaken, all skill rolls and attribute checks are at -2 for as many days as the catatonia lasted.</font> [B361]"
-            elif intFright == 31:
-                strMinutes = str(int(random.uniform(1,7)))
-                strFP = str(int(random.uniform(1,7)))
-                strInjury = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Seizure.  You lose control of your body and fall to the ground in a fit lasting " + strMinutes + " minutes and costing " + strFP + " FP.  Also, roll vs. HT.  On a failure, take " + strInjury + " HP of injury.  On a critical failure, you also lose 1 HT <i>permanently</i>.</font> [B361]"
-            elif intFright == 32:
-                strInjury = str(int(random.uniform(2,13)))
-                myStr += "<font color='#ff0000'>Stricken.  You fall to the ground, taking " + strInjury + " HP of injury in the form of a mild heart attack or stroke.</font> [B361]"
-            elif intFright == 33:
-                myStr += "<font color='#ff0000'>Total panic.  You are out of control; you might do anything (GM rolls 3d: the higher the roll, the more useless your reaction).  For instance, you might jump off a cliff to avoid the monster.  If you survive your first reaction, roll vs. Will to come out of the panic.  If you fail, the GM rolls again for another panic reaction, and so on!</font> [B361]"
-            elif intFright == 34:
-                myStr += "<font color='#ff0000'>Acquire a new -15-point Delusion (B130).</font> [B361]"
-            elif intFright == 35:
-                myStr += "<font color='#ff0000'>Acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
-            elif intFright == 36:
-                myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -20 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
-            elif intFright == 37:
-                myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -30 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
-            elif intFright == 39:
-                strHours = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Delusion (B130).</font> [B361]"
-            elif intFright == 39:
-                strHours = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
-            else:
-                strHours = str(int(random.uniform(1,7)))
-                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.  Also lose 1 point of IQ <i>permanently</i>.  This automatically reduces all IQ-based skill, including magic spells, by 1.</font> [B361]"
-        return myStr
-
-class gurpsfrightcheckfail(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-        self.mod = mod
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr +="] + " + str(self.mod)
-        intFright = self.sum() + self.mod
-        myStr += " = <b>" + str(intFright) + "</b> "
-
-        if intFright < 6:
-            myStr += "<font color='#ff0000'>Stunned for one second, then recover automatically.</font> [B360]"
-        elif intFright < 8:
-            myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. unmodified Will to snap out of it.</font> [B360]"
-        elif intFright < 10:
-            myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
-        elif intFright == 10:
-            strStun = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
-        elif intFright == 11:
-            strStun = str(int(random.uniform(2,13)))
-            myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
-        elif intFright == 12:
-            myStr += "<font color='#ff0000'>Lose your lunch.  Treat this as retching for (25-HT) seconds, and then roll vs. HT each second to recover [B428].</font> [B361]"
-        elif intFright == 13:
-            myStr += "<font color='#ff0000'>Acquire a new mental quirk.</font> [B361]"
-        elif intFright < 16:
-            strFP = str(int(random.uniform(1,7)))
-            strSeconds = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Lose " + strFP + " FP, and stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
-        elif intFright == 16:
-            strSeconds = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.  Acquire a new mental quirk.</font> [B361]"
-        elif intFright == 17:
-            strMinutes = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.</font> [B361]"
-        elif intFright == 18:
-            strMinutes = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.</font> [B361]"
-        elif intFright == 19:
-            strMinutes = str(int(random.uniform(2,13)))
-            myStr += "<font color='#ff0000'>Severe faint, lasting for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.  Take 1 HP of injury.</font> [B361]"
-        elif intFright == 20:
-            strMinutes = str(int(random.uniform(4,25)))
-            strFP = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Faint bordering on shock, lastering for " + strMinutes + " minutes.  Also, lose " + strFP + " FP.</font> [B361]"
-        elif intFright == 21:
-            strMinutes = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Panic.  You run around screaming, sit down and cry, or do something else equally pointless for " + strMinutes + " minutes.  Every minute after that, roll vs. unmodified Will to snap out of it.</font> [B361]"
-        elif intFright == 22:
-            myStr += "<font color='#ff0000'>Acquire a new -10-point Delusion (B130).</font> [B361]"
-        elif intFright == 23:
-            myStr += "<font color='#ff0000'>Acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
-        elif intFright == 24:
-            myStr += "<font color='#ff0000'>Major physical effect, set by the GM: hair turns white, age five years overnight, go partially deaf, etc.  (Acquire -15 points worth of physical disadvantages.  Each year of aging = -3 points.)</font> [B361]"
-        elif intFright == 25 :
-            myStr += "<font color='#ff0000'>If you already have a Phobia or other mental disadvantage that is logically related to the frightening incident, your self-control number becomes one step worse.  If not, or if your self-control number is already 6, add a new -10-point Phobia or other -10-point mental disadvantage.</font> [B361]"
-        elif intFright == 26:
-            strMinutes = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Delusion (B130).</font> [B361]"
-        elif intFright == 27:
-            strMinutes = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
-        elif intFright == 28:
-            myStr += "<font color='#ff0000'>Light coma.  You fall unconscious, rolling vs. HT every 30 minutes to recover.  For 6 hours after you come to, all skill rolls and attribute checks are at -2.</font> [B361]"
-        elif intFright == 29:
-            strHours = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.</font> [B361]"
-        elif intFright == 30:
-            strDays = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Catatonia.  Stare into space for " + strDays + " days.  Then roll vs. HT.  On a failed roll, remain catatonic for another " + strDays + " days, and so on.  If you have no medical care, lose 1 HP the first day, 2 HP the second day and so on.  If you survive and awaken, all skill rolls and attribute checks are at -2 for as many days as the catatonia lasted.</font> [B361]"
-        elif intFright == 31:
-            strMinutes = str(int(random.uniform(1,7)))
-            strFP = str(int(random.uniform(1,7)))
-            strInjury = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Seizure.  You lose control of your body and fall to the ground in a fit lasting " + strMinutes + " minutes and costing " + strFP + " FP.  Also, roll vs. HT.  On a failure, take " + strInjury + " HP of injury.  On a critical failure, you also lose 1 HT <i>permanently</i>.</font> [B361]"
-        elif intFright == 32:
-            strInjury = str(int(random.uniform(2,13)))
-            myStr += "<font color='#ff0000'>Stricken.  You fall to the ground, taking " + strInjury + " HP of injury in the form of a mild heart attack or stroke.</font> [B361]"
-        elif intFright == 33:
-            myStr += "<font color='#ff0000'>Total panic.  You are out of control; you might do anything (GM rolls 3d: the higher the roll, the more useless your reaction).  For instance, you might jump off a cliff to avoid the monster.  If you survive your first reaction, roll vs. Will to come out of the panic.  If you fail, the GM rolls again for another panic reaction, and so on!</font> [B361]"
-        elif intFright == 34:
-            myStr += "<font color='#ff0000'>Acquire a new -15-point Delusion (B130).</font> [B361]"
-        elif intFright == 35:
-            myStr += "<font color='#ff0000'>Acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
-        elif intFright == 36:
-            myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -20 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
-        elif intFright == 37:
-            myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -30 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
-        elif intFright == 39:
-            strHours = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Delusion (B130).</font> [B361]"
-        elif intFright == 39:
-            strHours = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
-        else:
-            strHours = str(int(random.uniform(1,7)))
-            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.  Also lose 1 point of IQ <i>permanently</i>.  This automatically reduces all IQ-based skill, including magic spells, by 1.</font> [B361]"
-
-        return myStr
+#This program is free software; you can redistribute it and/or
+#modify it under the terms of the GNU General Public License
+#as published by the Free Software Foundation; either version 2
+#of the License, or (at your option) any later version.
+#
+#This program is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#GNU General Public License for more details.
+#
+#You should have received a copy of the GNU General Public License
+#along with this program; if not, write to the Free Software
+#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+# --
+#
+# File: gurps.py
+# Version:
+#   $Id: gurps.py,v 1.3
+#
+# Description: Modified Hero System die roller based on DJM and Heroman's Hero
+# dieroller
+#
+# GURPS is a trademark of Steve Jackson Games, and its rules and art are
+# copyrighted by Steve Jackson Games. All rights are reserved by Steve Jackson
+# Games. This game aid is the original creation of Naryt with help from Pyrandon
+# and is released for free distribution, and not for resale, under the
+# permissions granted in the Steve Jackson Games Online Policy.
+# http://www.sjgames.com/general/online_policy.html
+#
+# Errors should be reported to rpg@ormonds.net
+#
+# Changelog:
+# V 1.3  2007/03/23  Thomas M. Edwards <tmedwards@motoslave.net>
+#   Fixed gurpsskill, gurpsdefaultskill, and gurpssupernatural to correctly
+#   return a normal failure when the roll is 17 and the effective skill is 27+;
+#   previously, they would erroneously return a critical failure.  This fix also
+#   corrects the less serious issue whereby rolls of 17 and an effective skill
+#   of 17-26 would report "failure by X" instead of merely "failure", which is
+#   wrong as the only reason the roll failed was because a 17 was rolled, not
+#   because the roll exceeded the effective skill.
+# V 1.2 29 October 2006, added defaultskill (Rule of 20 [B344]), supernatural
+#   (Rule of 16 [B349]).  The frightcheck roll is now the actual Fright Check
+#   (with Rule of 14 [B360]) and a lookup oon the Fright Check Table if needed.
+#   The fightcheckfail roll is the old Fright Check Table lookup.
+#   Removes the Help roller as it was nothing but trouble, see
+#   http://openrpg.wrathof.com/repository/GURPS/GURPS_Roller_1.7.xml for help
+#   in using this roller.
+# V 1 Original gurps release 2006/05/28 00:00:00, modified crit_hit, crit_headblow, crit_miss, crit_unarm, spellfail, frightcheck and help_me
+#       Corrects numerous descriptions
+# v.1 original gurps release by Naryt 2005/10/17 16:34:00
+
+from die import *
+from time import time, clock
+import random
+
+__version__ = "$Id: gurps.py,v 1.5 2007/05/06 16:42:55 digitalxero Exp $"
+
+# gurps
+
+class gurps(std):
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+# these methods return new die objects for specific options
+
+# Original msk roll renamed to be easier to understand/remember
+    
+    def skill(self,skill,mod):
+        return gurpsskill(self,skill,mod)
+
+    
+    def defaultskill(self,stat,defaultlevel,mod):
+        return gurpsdefaultskill(self,stat,defaultlevel,mod)
+
+    
+    def supernatural(self,skill,resistance,mod):
+        return gurpssupernatural(self,skill,resistance,mod)
+
+    
+    def crit_hit(self):
+        return gurpscrit_hit(self)
+
+    
+    def crit_headblow(self):
+        return gurpscrit_headblow(self)
+
+    
+    def crit_miss(self):
+        return gurpscrit_miss(self)
+
+    
+    def crit_unarm(self):
+        return gurpscrit_unarm(self)
+
+    
+    def spellfail(self):
+        return gurpsspellfail(self)
+
+    
+    def frightcheck(self,level,mod):
+        return gurpsfrightcheck(self,level,mod)
+
+    
+    def frightcheckfail(self,mod):
+        return gurpsfrightcheckfail(self,mod)
+
+class gurpsskill(std):
+    
+    def __init__(self,source=[],skill=0,mod=0):
+        std.__init__(self,source)
+        self.skill = skill
+        self.mod = mod
+
+    
+    def is_success(self):
+        return (((self.sum()) <= self.skill+self.mod) and (self.sum() < 17))
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr +="]"
+        myStr += " = <b>" + str(self.sum()) + "</b>"
+        myStr += " vs <b>(" + str(self.skill+self.mod) + ")</b>"
+
+        Diff = abs((self.skill+self.mod) - self.sum())
+
+        if self.is_success():
+            if self.sum() == 3 or self.sum() == 4:
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
+            elif self.sum() == 5 and (self.skill+self.mod > 14):
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
+            elif self.sum() == 6 and (self.skill+self.mod > 15):
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
+        else:
+            if self.sum() == 18:
+                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+#            elif self.sum() == 17 and (self.skill+self.mod < 16):
+#                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+            elif self.sum() == 17:
+                if (self.skill+self.mod) < 16:
+                    myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+                else:
+                    myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
+            elif  Diff > 9:
+                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +" </font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
+
+        return myStr
+
+class gurpsdefaultskill(std):
+    
+    def __init__(self,source=[],stat=0,defaultlevel=0,mod=0):
+        std.__init__(self,source)
+        self.stat = stat
+        self.defaultlevel = defaultlevel
+        self.mod = mod
+
+    
+    def is_success(self):
+        if self.stat < 21:
+            intSkillVal = self.stat + self.defaultlevel + self.mod
+        else:
+            intSkillVal = 20 + self.defaultlevel + self.mod
+        return (((self.sum()) <= intSkillVal) and (self.sum() < 17))
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr +="]"
+        myStr += " = <b>" + str(self.sum()) + "</b>"
+        strRule = ""
+        if self.stat < 21:
+            intSkillVal = self.stat + self.defaultlevel + self.mod
+        else:
+            intSkillVal = 20 + self.defaultlevel + self.mod
+            strRule = "<br />Rule of 20 in effect [B173, B344]"
+
+        myStr += " vs <b>(" + str(intSkillVal) + ")</b>"
+
+        Diff = abs((intSkillVal) - self.sum())
+
+        if self.is_success():
+            if self.sum() == 3 or self.sum() == 4:
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
+            elif self.sum() == 5 and (intSkillVal > 14):
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +"</font> [B556]"
+            elif self.sum() == 6 and (intSkillVal > 15):
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +"</font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +"</font>"
+        else:
+            if self.sum() == 18:
+                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+            elif self.sum() == 17:
+                if intSkillVal < 16:
+                    myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+                else:
+                    myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
+            elif  Diff > 9:
+                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +"</font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +"</font>"
+
+        myStr += strRule
+        return myStr
+
+class gurpssupernatural(std):
+    
+    def __init__(self,source=[],skill=0,resistance=0,mod=0):
+        std.__init__(self,source)
+        self.skill = skill
+        self.resistance = resistance
+        self.mod = mod
+
+    
+    def is_success(self):
+        if self.skill+self.mod > 16:
+            if self.resistance > 16:
+                if self.resistance > self.skill+self.mod:
+                    newSkill = self.skill+self.mod
+                else:
+                    newSkill = self.resistance
+            else:
+                newSkill = 16
+        else:
+            newSkill = self.skill+self.mod
+        return (((self.sum()) <= newSkill) and (self.sum() < 17))
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr +="]"
+        myStr += " = <b>" + str(self.sum()) + "</b>"
+        strRule = ""
+        if self.skill+self.mod > 16:
+            if self.resistance > 16:
+                if self.resistance > self.skill+self.mod:
+                    newSkill = self.skill+self.mod
+                    strRule = "<br />Rule of 16:  Subject's Resistance is higher than skill, no change in skill [B349]"
+                else:
+                    newSkill = self.resistance
+                    strRule = "<br />Rule of 16:  Effective skill limited by subject's Resistance [B349]"
+            else:
+                newSkill = 16
+                strRule = "<br />Rule of 16:  Effective skill limited to 16 [B349]"
+        else:
+            newSkill = self.skill+self.mod
+        myStr += " vs <b>(" + str(newSkill) + ")</b>"
+
+        Diff = abs((newSkill) - self.sum())
+
+        if self.is_success():
+            if self.sum() == 3 or self.sum() == 4:
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
+            elif self.sum() == 5 and (newSkill > 14):
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
+            elif self.sum() == 6 and (newSkill > 15):
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b> by " + str(Diff) +" </font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
+        else:
+            if self.sum() == 18:
+                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+            elif self.sum() == 17:
+                if newSkill < 16:
+                    myStr += " or less <font color='#ff0000'><b>Critical Failure!</b></font> [B556]"
+                else:
+                    myStr += " or less <font color='#ff0000'><b>Failure!</b></font> [B556]"
+            elif  Diff > 9:
+                myStr += " or less <font color='#ff0000'><b>Critical Failure!</b> by " + str(Diff) +" </font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
+
+        myStr += strRule
+        return myStr
+
+class gurpscrit_hit(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
+        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
+            myStr += ","                  #Adds a comma after each die
+            myStr += str(a)           #Adds the value of each die.
+        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
+        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
+
+        if self.sum() > 8 and self.sum() < 12:
+            myStr += " <font color='#ff0000'>The blow inflicts normal damage.</font> [B556]"
+        elif self.sum() == 12:
+            myStr += " <font color='#ff0000'>The blow inflicts normal damage, AND victim drops anything they hold--even if no damage penetrates DR.</font> [B556]"
+        elif self.sum() == 8:
+            myStr += " <font color='#ff0000'>Damage penetrating DR does double shock (-8 max) AND if it hits the victim's limb, it's crippled for 16-HT seconds (unless wound is enough to cripple permanently!).</font> [B556]"
+        elif self.sum() == 13 or self.sum() == 14 or self.sum() == 7:
+            myStr += " <font color='#ff0000'>If any damage penetrates DR, treat as major wound. See [B420] for major wounds.</font> [B556]"
+        elif self.sum() == 6 or self.sum() == 15:
+            myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage.</font> [B556]"
+        elif self.sum() == 5 or self.sum() == 16:
+            myStr += " <font color='#ff0000'>The blow inflicts double damage.</font> [B556]"
+        elif self.sum() == 4 or self.sum() == 17:
+            myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded down, after applying any armor divisors.</font> [B556]"
+        elif self.sum() == 3 or self.sum() == 18 :
+            myStr += " <font color='#ff0000'>The blow inflicts triple damage.</font> [B556]"
+
+        return myStr
+
+class gurpscrit_headblow(std):
+    
    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
+        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
+            myStr += ","                  #Adds a comma after each die
+            myStr += str(a)           #Adds the value of each die.
+        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
+        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
+
+        if self.sum() > 8 and self.sum() < 12:
+            myStr += " <font color='#ff0000'>The blow inflicts normal damage.</font> [B556]"
+        elif self.sum() == 12 or self.sum() == 13:
+            myStr += " <font color='#ff0000'>Normal damage to the head, BUT if any penetrates DR victim is scarred (-1 to appearance, -2 if burning or corrosive attacks) OR, if <i>crushing</i> then victim deafened [see B422 for duration].</font> [B556]"
+        elif self.sum() == 8:
+            myStr += " <font color='#ff0000'>Normal damage to head, but victim knocked off balance: must Do Nothing until next turn (but can defend).</font> [B556]"
+        elif self.sum() == 14:
+            myStr += " <font color='#ff0000'>Normal damage to head, but victim drops their weapon.  If holding two weapons, roll randomly for which one is dropped.</font> [B556]"
+        elif self.sum() == 6 or self.sum() == 7:
+            myStr += " <font color='#ff0000'>If you aimed for face or skull, you hit an eye [B399];  otherwise, DR only half effective & if even 1 point damage penetrates it's a major wound [B420].  If you hit an eye and that should be impossible, treat as if a <b>4</b> were rolled, see [B556].</font> [B556]"
+        elif self.sum() == 15:
+            myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage.</font> [B556]"
+        elif self.sum() == 16:
+            myStr += " <font color='#ff0000'>The blow inflicts double damage.</font> [B556]"
+        elif self.sum() == 4 or self.sum() == 5:
+            myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded up, after applying armor divisors AND if even 1 point penetrates it's a major wound [B420].</font> [B556]"
+        elif self.sum() == 17:
+            myStr += " <font color='#ff0000'>The victim's DR protects at half value, rounded up, after applying any armor divisors.</font> [B556]"
+        elif self.sum() == 3:
+            myStr += " <font color='#ff0000'>The blow inflicts maximum normal damage AND ignores all DR.</font> [B556]"
+        elif self.sum() == 18:
+            myStr += " <font color='#ff0000'>The blow inflicts triple damage.</font> [B556]"
+
+        return myStr
+
+class gurpscrit_miss(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
+        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
+            myStr += ","                  #Adds a comma after each die
+            myStr += str(a)           #Adds the value of each die.
+        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
+        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
+
+        if self.sum() > 8 and self.sum() < 12:
+            myStr += " <font color='#ff0000'>You drop your weapon (& a <i>cheap</i> weapon breaks).</font> [B556]"
+        elif self.sum() == 12 or self.sum() == 8:
+            myStr += " <font color='#ff0000'>Your weapon turns in your hand;  must Ready it before it can be used again.</font> [B556]"
+        elif self.sum() == 13 or self.sum() == 7:
+            myStr += " <font color='#ff0000'>You lose your balance & can do nothing else (not even free actions) until next turn;  all defenses -2 until next turn.</font> [B556]"
+        elif self.sum() == 14:
+            yrdStr = str(int(random.uniform(1,7)))
+            myStr += " <font color='#ff0000'>A <i>swung</i> weapon flies from hand " + yrdStr + " yards (50% chance straight forward/backward) anyone on the target of the flying weapon makes a DX roll or takes half-damage; a <i>thrust</i> or <i>ranged</i> weapon is dropped (& a <i>cheap</i> weapon breaks).</font> [B556]"
+        elif self.sum() == 6:
+            myStr += " <font color='#ff0000'>You hit yourself in arm or leg (50/50 chance), doing half damage;  if impaling, piercing, or ranged attack, then roll again (if you hit yourself again then use that result).</font> [B556]"
+        elif self.sum() == 15:
+            myStr += " <font color='#ff0000'>You strain your shoulder!  Weapon arm crippled for 30 min;  do not drop weapon, but that arm is useless.</font> [B557]"
+        elif self.sum() == 16:
+            myStr += " <font color='#ff0000'>If <i>melee attack,</i>  you fall down!  If <i>ranged attack,</i> you lose your balance & can do nothing until next turn & all defenses -2 until next turn.</font> [B557]"
+        elif self.sum() == 5:
+            myStr += " <font color='#ff0000'>You hit yourself in the arm or leg (50/50 chance), doing normal damage;  if impaling, piercing, or ranged attack, then roll again (if you hit yourself again then use that result).</font> [B556]"
+        elif self.sum() == 4 or self.sum() == 3 or self.sum() == 17 or self.sum() == 18:
+            broke = int(random.uniform(3,19))
+            if broke >=5 and broke <=16:
+                brokestr = "it is dropped."
+            else:
+                brokestr = "the weapon also breaks!"
+            myStr += " <font color='#ff0000'>A normal weapon breaks [B485];  if solid crushing weapon OR fine, very fine, or magical weapon " + brokestr + "</font> [B556] Note, second for roll non-normal weapons already fingured into this result."
+
+        return myStr
+
+class gurpscrit_unarm(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0]) #Variable myStr holds text and first we put a [ into it and then adds the first die rolled
+        for a in self.data[1:]:             #This is a for loop.  It will do the next two lines of code for every die (except the first die which we handled in the line above) in the roll.
+            myStr += ","                  #Adds a comma after each die
+            myStr += str(a)           #Adds the value of each die.
+        myStr += "] = "                 #Adds ] = to the end of the string (note the += means append to whatever is already stored in the variable
+        myStr += str(self.sum())          #Finally we add the actual result of the roll and myStr contains something like [3,2,1] = 6
+
+        if self.sum() > 8 and self.sum() < 12:
+            myStr += " <font color='#ff0000'>You lose your balance;  you can do nothing else (not even free actions) until next turn, and all defenses -2 until next turn.</font> [B557]"
+        elif self.sum() == 12:
+            myStr += " <font color='#ff0000'>You trip; make a DX roll to avoid falling at -4 if kicking or twice the normal penatly for a technique that normally requires a DX to avoid injury on even a normal failure (e.g., Jump Kick).</font> [B557]"
+        elif self.sum() == 8:
+            myStr += " <font color='#ff0000'>You fall down!</font> [B557]"
+        elif self.sum() == 13:
+            myStr += " <font color='#ff0000'>You drop your guard:  all defenses -2 for the next turn & any Evaluate bonus or Feint penalties against you are doubled.  This is obvious to those around you.</font> [B557]"
+        elif self.sum() == 7 or self.sum() == 14:
+            myStr += " <font color='#ff0000'>You stumble:  <i>If attacking,</i> you advance one yard past opponent with them behind you (you are facing away); <i>if parrying</i> you fall down!</font> [B557]"
+        elif self.sum() == 15:
+            mslStr = str(int(random.uniform(1,4)))
+            myStr += " <font color='#ff0000'>You tear a muscle; " + mslStr + " HT damage to the limb used to attack (to one limb if two used to attack), & -3 to use it (-1 w/high pain thresh); also all atacks & defenses -1 until next turn.  If neck was injured -3 (-1 w/high pain thresh) applies to ALL actions.</font> [B557]"
+        elif self.sum() == 6:
+            myStr += " <font color='#ff0000'>You hit a solid object (wall, floor, etc.) & take crushing damage equalt to 1/2 of (your thrusting damage - your DR) (<i>EXCEPTION:</i> If attacking with natural weapons, such as claws or teeth, they <i>break</i> -1 damage on future attacks until you heal (for recovery, B422).</font> [B557]"
+        elif self.sum() == 5 or self.sum() == 16:
+            myStr += " <font color='#ff0000'>You hit a solid object (wall, floor, etc.) & take crushing damage = your thrusting damage - your DR (<i>EXCEPTION:</i> if opponent using impaling weapon, you fall on it & take damage based on your ST).  If attacking an opponent who is using an impaling weapon, you fall on <i>his weapon</i>.  You suffer the weapon's normal damage based on <i>your</i> <b>ST</b>.</font> [B557]"
+        elif self.sum() == 4:
+            myStr += " <font color='#ff0000'>If attacking or parrying with a limb, you strain the limb:  1 HP damage & it's crippled for 30 min. If biting, butting, etc., have moderate neck pain (B428) for next 20-HT min minimum of 1 minute.</font> [B557]"
+        elif self.sum() == 17:
+            myStr += " <font color='#ff0000'>If attacking or parrying with a limb, you strain the limb:  1 HP damage & it's crippled for 30 min. If IQ 3-5 animal, it loses its nerve & flees on next turn or surrenders if cornered.</font> [B557]"
+        elif self.sum() == 3 or self.sum() == 18 :
+            myStr += " <font color='#ff0000'>You knock yourself out!  Roll vs. HT every 30 min. to recover.</font> [B557]"
+
+        return myStr
+
+class gurpsspellfail(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr +="]"
+        myStr += " = <b>" + str(self.sum()) + "</b>"
+
+        if self.sum() == 10 or self.sum() == 11:
+            myStr += " <font color='#ff0000'>Spell produces nothing but a loud noise, bright flash, awful odor, etc.</font> [B236]"
+        elif self.sum() == 9:
+            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster is stunned (IQ roll to recover).</font> [B236]"
+        elif self.sum() == 12:
+            myStr += " <font color='#ff0000'>Spell produces a weak and useless shadow of the intended effect.</font> [B236]"
+        elif self.sum() == 8:
+            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster takes 1 point of damage.</font> [B236]"
+        elif self.sum() == 13:
+            myStr += " <font color='#ff0000'>Spell produces the reverse of the intended effect.</font> [B236]"
+        elif self.sum() == 7:
+            myStr += " <font color='#ff0000'>Spell affects someone or something other than the intended subject.</font> [B236]"
+        elif self.sum() == 14:
+            myStr += " <font color='#ff0000'>Spell seems to work, but it is only a useless illusion.</font> [B236]"
+        elif self.sum() == 5 or self.sum() == 6:
+            myStr += " <font color='#ff0000'>Spell is cast on one of the caster's companions (if harmful) or a random nearby foe (if beneficial).</font> [B236]"
+        elif self.sum() == 15 or self.sum() == 16:
+            myStr += " <font color='#ff0000'>Spell has the reverse of the intended, on the wrong target.  Roll randomly.</font> [B236]"
+        elif self.sum() == 4:
+            myStr += " <font color='#ff0000'>Spell is cast on caster (if harmful) or on a random nearby foe (if beneficial).</font> [B236]"
+        elif self.sum() == 17:
+            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster temporarily forgets the spell.  Make a weekly IQ roll (after a week passes) until the spell is remembered.</font> [B236]"
+        elif self.sum() == 3:
+            myStr += " <font color='#ff0000'>Spell fails entirely.  Caster takes 1d of injury.</font> [B236]"
+        elif self.sum() == 18:
+            myStr += " <font color='#ff0000'>Spell fails entirely.  A demon or other malign entity appears and attacks the caster.  (GM may waive this if the caster and spell were both lily-white, pure good in intent.)</font> [B236]"
+
+        return myStr
+
+class gurpsfrightcheck(std):
+    
+    def __init__(self,source=[],skill=0,mod=0):
+        std.__init__(self,source)
+        self.skill = skill
+        self.mod = mod
+
+    
+    def is_success(self):
+        return (((self.sum()) <= self.skill+self.mod) and (self.sum() < 14))
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr +="]"
+        myStr += " = <b>" + str(self.sum()) + "</b>"
+
+        if self.skill+self.mod < 14:
+            myStr += " vs <b>(" + str(self.skill+self.mod) + ")</b>"
+            Diff = abs((self.skill+self.mod) - self.sum())
+        else:
+            myStr += " vs <b>(13)</b>"
+            Diff = abs(13 - self.sum())
+
+        if self.is_success():
+            if self.sum() == 3 or self.sum() == 4:
+                myStr += " or less <font color='#ff0000'><b>Critical Success!</b></font> [B556]"
+            else:
+                myStr += " or less <font color='#ff0000'><b>Success!</b> by " + str(Diff) +" </font>"
+        else:
+                myStr += " or less <font color='#ff0000'><b>Failure!</b> by " + str(Diff) +" </font>"
+
+        if self.skill + self.mod > 13:
+            myStr += " Rule of 14 in effect [B360]"
+
+        if not(self.is_success()):
+            intD1 = int(random.uniform(1,7))
+            intD2 = int(random.uniform(1,7))
+            intD3 = int(random.uniform(1,7))
+            intFright = intD1 + intD2 + intD3 + Diff
+            myStr += "<br />Rolling on Fright Check Table<br />[" + str(intD1) + "," + str(intD2) + "," + str(intD3) + "] ==> " + str(intFright - Diff) + " +  " + str(Diff) + " = " + str(intFright) + "<br />"
+            if intFright < 6:
+                myStr += "<font color='#ff0000'>Stunned for one second, then recover automatically.</font> [B360]"
+            elif intFright < 8:
+                myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. unmodified Will to snap out of it.</font> [B360]"
+            elif intFright < 10:
+                myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
+            elif intFright == 10:
+                strStun = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
+            elif intFright == 11:
+                strStun = str(int(random.uniform(2,13)))
+                myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
+            elif intFright == 12:
+                myStr += "<font color='#ff0000'>Lose your lunch.  Treat this as retching for (25-HT) seconds, and then roll vs. HT each second to recover [B428].</font> [B361]"
+            elif intFright == 13:
+                myStr += "<font color='#ff0000'>Acquire a new mental quirk.</font> [B361]"
+            elif intFright < 16:
+                strFP = str(int(random.uniform(1,7)))
+                strSeconds = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Lose " + strFP + " FP, and stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
+            elif intFright == 16:
+                strSeconds = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.  Acquire a new mental quirk.</font> [B361]"
+            elif intFright == 17:
+                strMinutes = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.</font> [B361]"
+            elif intFright == 18:
+                strMinutes = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.</font> [B361]"
+            elif intFright == 19:
+                strMinutes = str(int(random.uniform(2,13)))
+                myStr += "<font color='#ff0000'>Severe faint, lasting for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.  Take 1 HP of injury.</font> [B361]"
+            elif intFright == 20:
+                strMinutes = str(int(random.uniform(4,25)))
+                strFP = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Faint bordering on shock, lastering for " + strMinutes + " minutes.  Also, lose " + strFP + " FP.</font> [B361]"
+            elif intFright == 21:
+                strMinutes = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Panic.  You run around screaming, sit down and cry, or do something else equally pointless for " + strMinutes + " minutes.  Every minute after that, roll vs. unmodified Will to snap out of it.</font> [B361]"
+            elif intFright == 22:
+                myStr += "<font color='#ff0000'>Acquire a new -10-point Delusion (B130).</font> [B361]"
+            elif intFright == 23:
+                myStr += "<font color='#ff0000'>Acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
+            elif intFright == 24:
+                myStr += "<font color='#ff0000'>Major physical effect, set by the GM: hair turns white, age five years overnight, go partially deaf, etc.  (Acquire -15 points worth of physical disadvantages.  Each year of aging = -3 points.)</font> [B361]"
+            elif intFright == 25 :
+                myStr += "<font color='#ff0000'>If you already have a Phobia or other mental disadvantage that is logically related to the frightening incident, your self-control number becomes one step worse.  If not, or if your self-control number is already 6, add a new -10-point Phobia or other -10-point mental disadvantage.</font> [B361]"
+            elif intFright == 26:
+                strMinutes = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Delusion (B130).</font> [B361]"
+            elif intFright == 27:
+                strMinutes = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
+            elif intFright == 28:
+                myStr += "<font color='#ff0000'>Light coma.  You fall unconscious, rolling vs. HT every 30 minutes to recover.  For 6 hours after you come to, all skill rolls and attribute checks are at -2.</font> [B361]"
+            elif intFright == 29:
+                strHours = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.</font> [B361]"
+            elif intFright == 30:
+                strDays = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Catatonia.  Stare into space for " + strDays + " days.  Then roll vs. HT.  On a failed roll, remain catatonic for another " + strDays + " days, and so on.  If you have no medical care, lose 1 HP the first day, 2 HP the second day and so on.  If you survive and awaken, all skill rolls and attribute checks are at -2 for as many days as the catatonia lasted.</font> [B361]"
+            elif intFright == 31:
+                strMinutes = str(int(random.uniform(1,7)))
+                strFP = str(int(random.uniform(1,7)))
+                strInjury = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Seizure.  You lose control of your body and fall to the ground in a fit lasting " + strMinutes + " minutes and costing " + strFP + " FP.  Also, roll vs. HT.  On a failure, take " + strInjury + " HP of injury.  On a critical failure, you also lose 1 HT <i>permanently</i>.</font> [B361]"
+            elif intFright == 32:
+                strInjury = str(int(random.uniform(2,13)))
+                myStr += "<font color='#ff0000'>Stricken.  You fall to the ground, taking " + strInjury + " HP of injury in the form of a mild heart attack or stroke.</font> [B361]"
+            elif intFright == 33:
+                myStr += "<font color='#ff0000'>Total panic.  You are out of control; you might do anything (GM rolls 3d: the higher the roll, the more useless your reaction).  For instance, you might jump off a cliff to avoid the monster.  If you survive your first reaction, roll vs. Will to come out of the panic.  If you fail, the GM rolls again for another panic reaction, and so on!</font> [B361]"
+            elif intFright == 34:
+                myStr += "<font color='#ff0000'>Acquire a new -15-point Delusion (B130).</font> [B361]"
+            elif intFright == 35:
+                myStr += "<font color='#ff0000'>Acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
+            elif intFright == 36:
+                myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -20 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
+            elif intFright == 37:
+                myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -30 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
+            elif intFright == 39:
+                strHours = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Delusion (B130).</font> [B361]"
+            elif intFright == 39:
+                strHours = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
+            else:
+                strHours = str(int(random.uniform(1,7)))
+                myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.  Also lose 1 point of IQ <i>permanently</i>.  This automatically reduces all IQ-based skill, including magic spells, by 1.</font> [B361]"
+        return myStr
+
+class gurpsfrightcheckfail(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr +="] + " + str(self.mod)
+        intFright = self.sum() + self.mod
+        myStr += " = <b>" + str(intFright) + "</b> "
+
+        if intFright < 6:
+            myStr += "<font color='#ff0000'>Stunned for one second, then recover automatically.</font> [B360]"
+        elif intFright < 8:
+            myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. unmodified Will to snap out of it.</font> [B360]"
+        elif intFright < 10:
+            myStr += "<font color='#ff0000'>Stunned for one second.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
+        elif intFright == 10:
+            strStun = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B360]"
+        elif intFright == 11:
+            strStun = str(int(random.uniform(2,13)))
+            myStr += "<font color='#ff0000'>Stunned for " + strStun + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
+        elif intFright == 12:
+            myStr += "<font color='#ff0000'>Lose your lunch.  Treat this as retching for (25-HT) seconds, and then roll vs. HT each second to recover [B428].</font> [B361]"
+        elif intFright == 13:
+            myStr += "<font color='#ff0000'>Acquire a new mental quirk.</font> [B361]"
+        elif intFright < 16:
+            strFP = str(int(random.uniform(1,7)))
+            strSeconds = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Lose " + strFP + " FP, and stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.</font> [B361]"
+        elif intFright == 16:
+            strSeconds = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Stunned for " + strSeconds + " seconds.  Every second after that, roll vs. Will, plus whatever bonuses or penalties you had on your original roll, to snap out of it.  Acquire a new mental quirk.</font> [B361]"
+        elif intFright == 17:
+            strMinutes = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.</font> [B361]"
+        elif intFright == 18:
+            strMinutes = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.</font> [B361]"
+        elif intFright == 19:
+            strMinutes = str(int(random.uniform(2,13)))
+            myStr += "<font color='#ff0000'>Severe faint, lasting for " + strMinutes + " minutes.  Every minute after that roll vs. HT to recover.  Take 1 HP of injury.</font> [B361]"
+        elif intFright == 20:
+            strMinutes = str(int(random.uniform(4,25)))
+            strFP = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Faint bordering on shock, lastering for " + strMinutes + " minutes.  Also, lose " + strFP + " FP.</font> [B361]"
+        elif intFright == 21:
+            strMinutes = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Panic.  You run around screaming, sit down and cry, or do something else equally pointless for " + strMinutes + " minutes.  Every minute after that, roll vs. unmodified Will to snap out of it.</font> [B361]"
+        elif intFright == 22:
+            myStr += "<font color='#ff0000'>Acquire a new -10-point Delusion (B130).</font> [B361]"
+        elif intFright == 23:
+            myStr += "<font color='#ff0000'>Acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
+        elif intFright == 24:
+            myStr += "<font color='#ff0000'>Major physical effect, set by the GM: hair turns white, age five years overnight, go partially deaf, etc.  (Acquire -15 points worth of physical disadvantages.  Each year of aging = -3 points.)</font> [B361]"
+        elif intFright == 25 :
+            myStr += "<font color='#ff0000'>If you already have a Phobia or other mental disadvantage that is logically related to the frightening incident, your self-control number becomes one step worse.  If not, or if your self-control number is already 6, add a new -10-point Phobia or other -10-point mental disadvantage.</font> [B361]"
+        elif intFright == 26:
+            strMinutes = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Delusion (B130).</font> [B361]"
+        elif intFright == 27:
+            strMinutes = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Faint for " + strMinutes + " minutes and roll vs. HT immediately.  On a failed roll, take 1 HP of injury as you collapse.  Every minute after that roll vs. HT to recover.  Also acquire a new -10-point Phobia (B148) or other -10-point mental disadvantage.</font> [B361]"
+        elif intFright == 28:
+            myStr += "<font color='#ff0000'>Light coma.  You fall unconscious, rolling vs. HT every 30 minutes to recover.  For 6 hours after you come to, all skill rolls and attribute checks are at -2.</font> [B361]"
+        elif intFright == 29:
+            strHours = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.</font> [B361]"
+        elif intFright == 30:
+            strDays = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Catatonia.  Stare into space for " + strDays + " days.  Then roll vs. HT.  On a failed roll, remain catatonic for another " + strDays + " days, and so on.  If you have no medical care, lose 1 HP the first day, 2 HP the second day and so on.  If you survive and awaken, all skill rolls and attribute checks are at -2 for as many days as the catatonia lasted.</font> [B361]"
+        elif intFright == 31:
+            strMinutes = str(int(random.uniform(1,7)))
+            strFP = str(int(random.uniform(1,7)))
+            strInjury = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Seizure.  You lose control of your body and fall to the ground in a fit lasting " + strMinutes + " minutes and costing " + strFP + " FP.  Also, roll vs. HT.  On a failure, take " + strInjury + " HP of injury.  On a critical failure, you also lose 1 HT <i>permanently</i>.</font> [B361]"
+        elif intFright == 32:
+            strInjury = str(int(random.uniform(2,13)))
+            myStr += "<font color='#ff0000'>Stricken.  You fall to the ground, taking " + strInjury + " HP of injury in the form of a mild heart attack or stroke.</font> [B361]"
+        elif intFright == 33:
+            myStr += "<font color='#ff0000'>Total panic.  You are out of control; you might do anything (GM rolls 3d: the higher the roll, the more useless your reaction).  For instance, you might jump off a cliff to avoid the monster.  If you survive your first reaction, roll vs. Will to come out of the panic.  If you fail, the GM rolls again for another panic reaction, and so on!</font> [B361]"
+        elif intFright == 34:
+            myStr += "<font color='#ff0000'>Acquire a new -15-point Delusion (B130).</font> [B361]"
+        elif intFright == 35:
+            myStr += "<font color='#ff0000'>Acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
+        elif intFright == 36:
+            myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -20 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
+        elif intFright == 37:
+            myStr += "<font color='#ff0000'>Severe physical effect, set by the GM.  (Acquire -30 points worth of physical disadvantages, aging = -3 per year).</font> [B361]"
+        elif intFright == 39:
+            strHours = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Delusion (B130).</font> [B361]"
+        elif intFright == 39:
+            strHours = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.</font> [B361]"
+        else:
+            strHours = str(int(random.uniform(1,7)))
+            myStr += "<font color='#ff0000'>Coma.  You fall unconcious for " + strHours + " hours.  At the end of the " + strHours + " hours, roll vs. HT to recover.  Continue to roll every " + strHours + " hours until you recover.  Also acquire a new -15-point Phobia (B148) or other -15-point mental disadvantage.  Also lose 1 point of IQ <i>permanently</i>.  This automatically reduces all IQ-based skill, including magic spells, by 1.</font> [B361]"
+
+        return myStr
--- a/orpg/dieroller/hackmaster.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/hackmaster.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,225 +1,225 @@
-#!/usr/bin/env python
-# Copyright Not Yet, see how much I trust you
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: hackmaster.py
-# Author: Ric Soard
-# Maintainer:
-# Version:
-#   $Id: hackmaster.py,v 0.4 2003/08/12
-#
-# Description: special die roller for HackMaster(C)(TM) RPG
-#               has penetration damage - .damage(bonus,honor)
-#               has attack - .attack(bonus, honor)
-#               has severity .severity(honor)
-#               has help - .help()
-#
-#
-import random
-from die import *
-
-__version__ = "$Id: hackmaster.py,v 1.8 2006/11/15 12:11:22 digitalxero Exp $"
-
-#hackmaster Class basically passes into functional classes
-class hackmaster(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-    
-    def damage(self, mod, hon):
-        return HMdamage(self, mod, hon)
-
-    
-    def attack(self, mod, hon):
-        return HMattack(self, mod, hon)
-
-    
-    def help(self):
-        return HMhelp(self)
-
-    
-    def severity(self, honor):
-        return HMSeverity(self, honor)
-
-
-# HM Damage roller - rolles penetration as per the PHB - re-rolles on max die - 1, adds honor to the penetration rolls
-# and this appears to be invisible to the user ( if a 4 on a d4 is rolled a 3 will appear and be followed by another
-# die. if High honor then a 4 will appear followed by a another die.
-class HMdamage(std):
-    
-    def __init__(self,source=[], mod = 0, hon = 0):
-        std.__init__(self,source)
-        self.mod = mod
-        self.hon = hon
-        self.check_pen()
-        #here we roll the mod die
-        self.append(static_di(self.mod))
-        #here we roll the honor die
-        self.append(static_di(self.hon))
-
-    
-    def damage(mod = 0, hon = 0):
-        self.mod = mod
-        self.hon = hon
-
-# This function is called by default to display the die string to the chat window.
-# Our die string attempts to explain the results
-    
-    def __str__(self):
-        myStr = "Damage "
-        myStr += "[Damage Roll, Modifiers, Honor]: " + " [" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (" + str(self.sum()) + ")"
-
-        return myStr
-
-# This function checks to see if we need to reroll for penetration
-    
-    def check_pen(self):
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() >= self.data[i].sides:
-                self.pen_roll(i)
-
-#this function rolls the penetration die, and checks to see if it needs to be re-rolled again.
-    
-    def pen_roll(self,num):
-        result = int(random.uniform(1,self.data[num].sides+1))
-        self.data[num].value += (result - 1 + self.hon)
-        self.data[num].history.append(result - 1 + self.hon)
-        if result >= self.data[num].sides:
-            self.pen_roll(num)
-
-# this function rolls for the HM Attack. the function checks for a 20 and displays critical, and a 1
-# and displays fumble
-class HMattack(std):
-    
-    def __init__(self, source=[], mod = 0, base_severity = 0, hon = 0, size = 0):
-        std.__init__(self,source)
-        self.size = size
-        self.mod = mod
-        self.base_severity = base_severity
-        self.hon = hon
-        self.fumble = 0
-        self.crit = 0
-        self.check_crit()
-        #this is a static die that adds the modifier
-        self.append(static_di(self.mod))
-        #this is a static die that adds honor, we want high rolls so it's +1
-        self.append(static_di(self.hon))
-
-
-    
-    def check_crit(self):
-        if self.data[0] == self.data[0].sides:
-            self.crit = 1
-        if self.data[0] == 1:
-            self.fumble = 1
-
-
-    #this function is the out put to the chat window, it basicaly just displays the roll unless
-    #it's a natural 20, or a natural 1
-    
-    def __str__(self):
-        if self.crit > 0:
-            myStr = "Critical Hit!!: "
-        elif self.fumble > 0:
-            myStr = "FUMBLE!!"
-        else:
-            myStr = "To Hit:"
-        myStr += "[To Hit Roll, Modifiers, Honor]" + " [" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (" + str(self.sum()) + ")"
-        return myStr
-
-class HMhelp(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-        self.source = source
-
-    
-    def __str__(self):
-        myStr = " <br /> .attack(Bonus, Honor): <br />"
-        myStr += " The attack roll rolles the dice and adds your bonus <br />"
-        myStr += " and honor modifier and returns you final roll. <br />"
-        myStr += " On a natural 20 the dieroller displays Critical Hit!! <br />"
-        myStr += " On a natural 1 the dieroller displays FUMBLE!! <br />"
-        myStr += " Example A 1st level fighter with +1 to hit and a +2 sword and High Honor <br />"
-        myStr += " would roll [1d20.attack(3,1)] <br />"
-        myStr += " .damage(Bonus, Honor): <br />"
-        myStr += " The damage roll rolls the dice and rerolls on a max roll for <br />"
-        myStr += " penetration damage, the penetration die is -1 and is rerolled on a max roll <br />"
-        myStr += " The roller returns the damage dice, monidifiers, and honor <br />"
-        myStr += " Example A magic-user uses a quaterstaff +1 with high honor, he would roll <br />"
-        myStr += " [1d6.damage(1,1)] <br />"
-        myStr += " .severity(honor): <br />"
-        myStr += " the severity is for critical hit resolution - the character rolls <br />"
-        myStr += " a d8 and adds honor bonus. the die is rerolled on natural 8 and natural 1 with a -1 modifier <br />"
-        myStr += " on an 8 the reroll is added on a 1 the reroll is subtracted <br />"
-        myStr += " Example [1d8.severity(1)] <br />"
-        myStr += " .help() : <br />"
-        myStr += " displays this message <br />"
-
-        return myStr
-
-# the severity roll is for critical resolution. The die is rerolled and added
-#on a natural 8 and rerolled and subtracted on a 1
-class HMSeverity(std):
-    
-    def __init__(self, source =[], honor=0):
-        std.__init__(self,source)
-        self.source = source
-        self.hon = honor
-        self.data = []
-        self.append(di(8))
-        self.CheckReroll()
-        self.append(static_di(self.hon))
-
-
-    
-    def __str__(self):
-        myStr = "[Severity Dice, Honor]" + " [" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (" + str(self.sum()) + ")"
-        return myStr
-
-    
-    def CheckReroll(self):
-        if self.data[0] == self.data[0].sides:
-            self.crit_chain(0,1)
-        if self.data[0] == 1:
-            self.crit_chain(0,-1)
-
-    #this function needes moved for severity
-    
-    def crit_chain(self,num,neg):
-        result = int(random.uniform(1,self.data[num].sides+1))
-        self.data[num].value += (((result - 1) * neg) + self.hon)
-        self.data[num].history.append(((result - 1) * neg) + self.hon)
-        if result >= self.data[num].sides:
-            self.crit_chain(num,1)
-        if result == 1:
-            self.crit_chain(num,-1)
+#!/usr/bin/env python
+# Copyright Not Yet, see how much I trust you
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: hackmaster.py
+# Author: Ric Soard
+# Maintainer:
+# Version:
+#   $Id: hackmaster.py,v 0.4 2003/08/12
+#
+# Description: special die roller for HackMaster(C)(TM) RPG
+#               has penetration damage - .damage(bonus,honor)
+#               has attack - .attack(bonus, honor)
+#               has severity .severity(honor)
+#               has help - .help()
+#
+#
+import random
+from die import *
+
+__version__ = "$Id: hackmaster.py,v 1.8 2006/11/15 12:11:22 digitalxero Exp $"
+
+#hackmaster Class basically passes into functional classes
+class hackmaster(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+    
+    def damage(self, mod, hon):
+        return HMdamage(self, mod, hon)
+
+    
+    def attack(self, mod, hon):
+        return HMattack(self, mod, hon)
+
+    
+    def help(self):
+        return HMhelp(self)
+
+    
+    def severity(self, honor):
+        return HMSeverity(self, honor)
+
+
+# HM Damage roller - rolles penetration as per the PHB - re-rolles on max die - 1, adds honor to the penetration rolls
+# and this appears to be invisible to the user ( if a 4 on a d4 is rolled a 3 will appear and be followed by another
+# die. if High honor then a 4 will appear followed by a another die.
+class HMdamage(std):
+    
+    def __init__(self,source=[], mod = 0, hon = 0):
+        std.__init__(self,source)
+        self.mod = mod
+        self.hon = hon
+        self.check_pen()
+        #here we roll the mod die
+        self.append(static_di(self.mod))
+        #here we roll the honor die
+        self.append(static_di(self.hon))
+
+    
+    def damage(mod = 0, hon = 0):
+        self.mod = mod
+        self.hon = hon
+
+# This function is called by default to display the die string to the chat window.
+# Our die string attempts to explain the results
+    
+    def __str__(self):
+        myStr = "Damage "
+        myStr += "[Damage Roll, Modifiers, Honor]: " + " [" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+
+        return myStr
+
+# This function checks to see if we need to reroll for penetration
+    
+    def check_pen(self):
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() >= self.data[i].sides:
+                self.pen_roll(i)
+
+#this function rolls the penetration die, and checks to see if it needs to be re-rolled again.
+    
+    def pen_roll(self,num):
+        result = int(random.uniform(1,self.data[num].sides+1))
+        self.data[num].value += (result - 1 + self.hon)
+        self.data[num].history.append(result - 1 + self.hon)
+        if result >= self.data[num].sides:
+            self.pen_roll(num)
+
+# this function rolls for the HM Attack. the function checks for a 20 and displays critical, and a 1
+# and displays fumble
+class HMattack(std):
+    
+    def __init__(self, source=[], mod = 0, base_severity = 0, hon = 0, size = 0):
+        std.__init__(self,source)
+        self.size = size
+        self.mod = mod
+        self.base_severity = base_severity
+        self.hon = hon
+        self.fumble = 0
+        self.crit = 0
+        self.check_crit()
+        #this is a static die that adds the modifier
+        self.append(static_di(self.mod))
+        #this is a static die that adds honor, we want high rolls so it's +1
+        self.append(static_di(self.hon))
+
+
+    
+    def check_crit(self):
+        if self.data[0] == self.data[0].sides:
+            self.crit = 1
+        if self.data[0] == 1:
+            self.fumble = 1
+
+
+    #this function is the out put to the chat window, it basicaly just displays the roll unless
+    #it's a natural 20, or a natural 1
+    
+    def __str__(self):
+        if self.crit > 0:
+            myStr = "Critical Hit!!: "
+        elif self.fumble > 0:
+            myStr = "FUMBLE!!"
+        else:
+            myStr = "To Hit:"
+        myStr += "[To Hit Roll, Modifiers, Honor]" + " [" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+        return myStr
+
+class HMhelp(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+        self.source = source
+
+    
+    def __str__(self):
+        myStr = " <br /> .attack(Bonus, Honor): <br />"
+        myStr += " The attack roll rolles the dice and adds your bonus <br />"
+        myStr += " and honor modifier and returns you final roll. <br />"
+        myStr += " On a natural 20 the dieroller displays Critical Hit!! <br />"
+        myStr += " On a natural 1 the dieroller displays FUMBLE!! <br />"
+        myStr += " Example A 1st level fighter with +1 to hit and a +2 sword and High Honor <br />"
+        myStr += " would roll [1d20.attack(3,1)] <br />"
+        myStr += " .damage(Bonus, Honor): <br />"
+        myStr += " The damage roll rolls the dice and rerolls on a max roll for <br />"
+        myStr += " penetration damage, the penetration die is -1 and is rerolled on a max roll <br />"
+        myStr += " The roller returns the damage dice, monidifiers, and honor <br />"
+        myStr += " Example A magic-user uses a quaterstaff +1 with high honor, he would roll <br />"
+        myStr += " [1d6.damage(1,1)] <br />"
+        myStr += " .severity(honor): <br />"
+        myStr += " the severity is for critical hit resolution - the character rolls <br />"
+        myStr += " a d8 and adds honor bonus. the die is rerolled on natural 8 and natural 1 with a -1 modifier <br />"
+        myStr += " on an 8 the reroll is added on a 1 the reroll is subtracted <br />"
+        myStr += " Example [1d8.severity(1)] <br />"
+        myStr += " .help() : <br />"
+        myStr += " displays this message <br />"
+
+        return myStr
+
+# the severity roll is for critical resolution. The die is rerolled and added
+#on a natural 8 and rerolled and subtracted on a 1
+class HMSeverity(std):
+    
+    def __init__(self, source =[], honor=0):
+        std.__init__(self,source)
+        self.source = source
+        self.hon = honor
+        self.data = []
+        self.append(di(8))
+        self.CheckReroll()
+        self.append(static_di(self.hon))
+
+
+    
+    def __str__(self):
+        myStr = "[Severity Dice, Honor]" + " [" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+        return myStr
+
+    
+    def CheckReroll(self):
+        if self.data[0] == self.data[0].sides:
+            self.crit_chain(0,1)
+        if self.data[0] == 1:
+            self.crit_chain(0,-1)
+
+    #this function needes moved for severity
+    
+    def crit_chain(self,num,neg):
+        result = int(random.uniform(1,self.data[num].sides+1))
+        self.data[num].value += (((result - 1) * neg) + self.hon)
+        self.data[num].history.append(((result - 1) * neg) + self.hon)
+        if result >= self.data[num].sides:
+            self.crit_chain(num,1)
+        if result == 1:
+            self.crit_chain(num,-1)
--- a/orpg/dieroller/hero.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/hero.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,246 +1,246 @@
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: Hero.py
-# Version:
-#   $Id: Hero.py,v .3 DJM & Heroman
-#
-# Description: Hero System die roller originally based on Posterboy's D20 Dieroller
-#
-# Changelog:
-# v.3 by Heroman
-# Added hl() to show hit location (+side), and hk() for Hit Location killing damage
-# (No random stun multiplier)
-# v.2 DJM
-# Removed useless modifiers from the Normal damage roller
-# Changed Combat Value roller and SKill roller so that positive numbers are bonuses,
-# negative numbers are penalties
-# Changed Killing damage roller to correct stun multiplier bug
-# Handled new rounding issues
-#
-# v.1 original release DJM
-
-from die import *
-from time import time, clock
-import random
-
-__version__ = "$Id: hero.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $"
-
-# Hero stands for "Hero system" not 20 sided die :)
-
-class hero(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-# these methods return new die objects for specific options
-
-    
-    def k(self,mod):
-        return herok(self,mod)
-
-    
-    def hl(self):
-        return herohl(self)
-
-    
-    def hk(self):
-        return herohk(self)
-
-    
-    def n(self):
-        return heron(self)
-
-    
-    def cv(self,cv,mod):
-        return herocv(self,cv,mod)
-
-    
-    def sk(self,sk,mod):
-        return herosk(self,sk,mod)
-
-class herocv(std):
-    
-    def __init__(self,source=[],cv=10,mod=0):
-        std.__init__(self,source)
-        self.cv = cv
-        self.mod = mod
-
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (" + str(self.sum()) + ")"
-
-        myStr += " with a CV of " + str(self.cv)
-        myStr += " and a modifier of " + str(self.mod)
-        cvhit = 11 + self.cv - self.sum() + self.mod
-        myStr += " hits up to <b>DCV <font color='#ff0000'>" + str(cvhit) + "</font></b>"
-        return myStr
-
-class herosk(std):
-    
-    def __init__(self,source=[],sk=11,mod=0):
-        std.__init__(self,source)
-        self.sk = sk
-        self.mod = mod
-
-    
-    def is_success(self):
-        return (((self.sum()-self.mod) <= self.sk))
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        strAdd="] - "
-        swapmod=self.mod
-        if self.mod < 0:
-            strAdd= "] + "
-            swapmod= -self.mod
-        myStr += strAdd + str(swapmod)
-        modSum = self.sum()-self.mod
-        myStr += " = (" + str(modSum) + ")"
-        myStr += " vs " + str(self.sk)
-
-        if self.is_success():
-            myStr += " or less <font color='#ff0000'>Success!"
-        else:
-            myStr += " or less <font color='#ff0000'>Failure!"
-
-        Diff = self.sk - modSum
-        myStr += " by " + str(Diff) +" </font>"
-
-        return myStr
-
-class herok(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-        self.mod = mod
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>)"
-        stunx = random.randint(1,6)-1
-        if stunx <= 1:
-            stunx = 1
-        myStr += " <b>Body</b> and a stunx of (" + str(stunx)
-        stunx = stunx + self.mod
-        myStr += " + " + str(self.mod)
-        stunsum = round(self.sum()) * stunx
-        myStr += ") for a total of (<font color='#ff0000'><b>" + str(int(stunsum)) + "</b></font>) <b>Stun</b>"
-        return myStr
-
-class herohl(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-        self.mod = mod
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        side = random.randint(1,6)
-        sidestr = "Left "
-        if side >=4:
-            sidestr = "Right "
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>) "
-        location = int(round(self.sum()))
-        if location <= 5:
-            myStr += "Location: <B>Head</B>, StunX:<B>x5</B>, NStun:<B>x2</B>, Bodyx:<B>x2</B>"
-        elif location == 6:
-            myStr += "Location: <B>" + sidestr + "Hand</B>, StunX:<B>x1</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
-        elif location == 7:
-            myStr += "Location: <B>" + sidestr + "Arm</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
-        elif location == 8:
-            myStr += "Location: <B>" + sidestr + "Arm</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
-        elif location == 9:
-            myStr += "Location: <B>" + sidestr + "Shoulder</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
-        elif location == 10:
-            myStr += "Location: <B>Chest</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
-        elif location == 11:
-            myStr += "Location: <B>Chest</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
-        elif location == 12:
-            myStr += "Location: <B>Stomach</B>, StunX:<B>x4</B>, NStun:<B>x1 1/2</B>, Bodyx:<B>x1</B>"
-        elif location == 13:
-            myStr += "Location: <B>Vitals</B>, StunX:<B>x4</B>, NStun:<B>x1 1/2</B>, Bodyx:<B>x2</B>"
-        elif location == 14:
-            myStr += "Location: <B>" + sidestr + "Thigh</B>, StunX:<B>x2</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
-        elif location == 15:
-            myStr += "Location: <B>" + sidestr + "Leg</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
-        elif location == 16:
-            myStr += "Location: <B>" + sidestr + "Leg</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
-        elif location >= 17:
-            myStr += "Location: <B>" + sidestr + "Foot</B>, StunX:<B>x1</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
-        return myStr
-
-class herohk(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-        self.mod = mod
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>)"
-        stunx = 1
-        myStr += " <b>Body</b> "
-        stunx = stunx + self.mod
-        stunsum = round(self.sum()) * stunx
-        myStr += " for a total of (<font color='#ff0000'><b>" + str(int(stunsum)) + "</b></font>) <b>Stun</b>"
-        return myStr
-
-class heron(std):
-    
-    def __init__(self,source=[],mod=0):
-        std.__init__(self,source)
-        self.bodtot=0
-
-    
-    def __str__(self):
-        myStr = "[" + str(self.data[0])
-        if self.data[0] == 6:
-            self.bodtot=self.bodtot+2
-        else:
-            self.bodtot=self.bodtot+1
-        if self.data[0] <= 1:
-            self.bodtot=self.bodtot-1
-        for a in self.data[1:]:
-            myStr += ","
-            myStr += str(a)
-            if a == 6:
-                self.bodtot=self.bodtot+2
-            else:
-                self.bodtot=self.bodtot+1
-            if a <= 1:
-                self.bodtot=self.bodtot-1
-        myStr += "] = (<font color='#ff0000'><b>" + str(self.bodtot) + "</b></font>)"
-        myStr += " <b>Body</b> and "
-        myStr += "(<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>) <b>Stun</b>"
-        return myStr
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: Hero.py
+# Version:
+#   $Id: Hero.py,v .3 DJM & Heroman
+#
+# Description: Hero System die roller originally based on Posterboy's D20 Dieroller
+#
+# Changelog:
+# v.3 by Heroman
+# Added hl() to show hit location (+side), and hk() for Hit Location killing damage
+# (No random stun multiplier)
+# v.2 DJM
+# Removed useless modifiers from the Normal damage roller
+# Changed Combat Value roller and SKill roller so that positive numbers are bonuses,
+# negative numbers are penalties
+# Changed Killing damage roller to correct stun multiplier bug
+# Handled new rounding issues
+#
+# v.1 original release DJM
+
+from die import *
+from time import time, clock
+import random
+
+__version__ = "$Id: hero.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $"
+
+# Hero stands for "Hero system" not 20 sided die :)
+
+class hero(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+# these methods return new die objects for specific options
+
+    
+    def k(self,mod):
+        return herok(self,mod)
+
+    
+    def hl(self):
+        return herohl(self)
+
+    
+    def hk(self):
+        return herohk(self)
+
+    
+    def n(self):
+        return heron(self)
+
+    
+    def cv(self,cv,mod):
+        return herocv(self,cv,mod)
+
+    
+    def sk(self,sk,mod):
+        return herosk(self,sk,mod)
+
+class herocv(std):
+    
+    def __init__(self,source=[],cv=10,mod=0):
+        std.__init__(self,source)
+        self.cv = cv
+        self.mod = mod
+
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (" + str(self.sum()) + ")"
+
+        myStr += " with a CV of " + str(self.cv)
+        myStr += " and a modifier of " + str(self.mod)
+        cvhit = 11 + self.cv - self.sum() + self.mod
+        myStr += " hits up to <b>DCV <font color='#ff0000'>" + str(cvhit) + "</font></b>"
+        return myStr
+
+class herosk(std):
+    
+    def __init__(self,source=[],sk=11,mod=0):
+        std.__init__(self,source)
+        self.sk = sk
+        self.mod = mod
+
+    
+    def is_success(self):
+        return (((self.sum()-self.mod) <= self.sk))
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        strAdd="] - "
+        swapmod=self.mod
+        if self.mod < 0:
+            strAdd= "] + "
+            swapmod= -self.mod
+        myStr += strAdd + str(swapmod)
+        modSum = self.sum()-self.mod
+        myStr += " = (" + str(modSum) + ")"
+        myStr += " vs " + str(self.sk)
+
+        if self.is_success():
+            myStr += " or less <font color='#ff0000'>Success!"
+        else:
+            myStr += " or less <font color='#ff0000'>Failure!"
+
+        Diff = self.sk - modSum
+        myStr += " by " + str(Diff) +" </font>"
+
+        return myStr
+
+class herok(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>)"
+        stunx = random.randint(1,6)-1
+        if stunx <= 1:
+            stunx = 1
+        myStr += " <b>Body</b> and a stunx of (" + str(stunx)
+        stunx = stunx + self.mod
+        myStr += " + " + str(self.mod)
+        stunsum = round(self.sum()) * stunx
+        myStr += ") for a total of (<font color='#ff0000'><b>" + str(int(stunsum)) + "</b></font>) <b>Stun</b>"
+        return myStr
+
+class herohl(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        side = random.randint(1,6)
+        sidestr = "Left "
+        if side >=4:
+            sidestr = "Right "
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>) "
+        location = int(round(self.sum()))
+        if location <= 5:
+            myStr += "Location: <B>Head</B>, StunX:<B>x5</B>, NStun:<B>x2</B>, Bodyx:<B>x2</B>"
+        elif location == 6:
+            myStr += "Location: <B>" + sidestr + "Hand</B>, StunX:<B>x1</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 7:
+            myStr += "Location: <B>" + sidestr + "Arm</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 8:
+            myStr += "Location: <B>" + sidestr + "Arm</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 9:
+            myStr += "Location: <B>" + sidestr + "Shoulder</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 10:
+            myStr += "Location: <B>Chest</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 11:
+            myStr += "Location: <B>Chest</B>, StunX:<B>x3</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 12:
+            myStr += "Location: <B>Stomach</B>, StunX:<B>x4</B>, NStun:<B>x1 1/2</B>, Bodyx:<B>x1</B>"
+        elif location == 13:
+            myStr += "Location: <B>Vitals</B>, StunX:<B>x4</B>, NStun:<B>x1 1/2</B>, Bodyx:<B>x2</B>"
+        elif location == 14:
+            myStr += "Location: <B>" + sidestr + "Thigh</B>, StunX:<B>x2</B>, NStun:<B>x1</B>, Bodyx:<B>x1</B>"
+        elif location == 15:
+            myStr += "Location: <B>" + sidestr + "Leg</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location == 16:
+            myStr += "Location: <B>" + sidestr + "Leg</B>, StunX:<B>x2</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        elif location >= 17:
+            myStr += "Location: <B>" + sidestr + "Foot</B>, StunX:<B>x1</B>, NStun:<B>x1/2</B>, Bodyx:<B>x1/2</B>"
+        return myStr
+
+class herohk(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.mod = mod
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+        myStr += "] = (<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>)"
+        stunx = 1
+        myStr += " <b>Body</b> "
+        stunx = stunx + self.mod
+        stunsum = round(self.sum()) * stunx
+        myStr += " for a total of (<font color='#ff0000'><b>" + str(int(stunsum)) + "</b></font>) <b>Stun</b>"
+        return myStr
+
+class heron(std):
+    
+    def __init__(self,source=[],mod=0):
+        std.__init__(self,source)
+        self.bodtot=0
+
+    
+    def __str__(self):
+        myStr = "[" + str(self.data[0])
+        if self.data[0] == 6:
+            self.bodtot=self.bodtot+2
+        else:
+            self.bodtot=self.bodtot+1
+        if self.data[0] <= 1:
+            self.bodtot=self.bodtot-1
+        for a in self.data[1:]:
+            myStr += ","
+            myStr += str(a)
+            if a == 6:
+                self.bodtot=self.bodtot+2
+            else:
+                self.bodtot=self.bodtot+1
+            if a <= 1:
+                self.bodtot=self.bodtot-1
+        myStr += "] = (<font color='#ff0000'><b>" + str(self.bodtot) + "</b></font>)"
+        myStr += " <b>Body</b> and "
+        myStr += "(<font color='#ff0000'><b>" + str(int(round(self.sum()))) + "</b></font>) <b>Stun</b>"
+        return myStr
--- a/orpg/dieroller/runequest.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/runequest.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,740 +1,740 @@
-
-
-
-
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-#-------------------------------------------------------------------------
-#
-#  Usage:
-#
-#   Die  Roller: /dieroller rq
-#
-#   Skill  Roll: [1d100.skill(50,0,0)]         # ( skill%, modifer, MA% )
-#
-#   Parry  Roll: [1d100.parry(50,0,0,12)]      # ( skill%, modifer, MA%, Weapon/Shield AP )
-#
-#   Dodge  Roll: [1d100.parry(50,0,0)]         # ( skill%, modifer, MA% )
-#
-#   Attack Roll: [1d100.attack(50,0,0,2,9,3,0)]
-#       ( skill%, modifer, MA%, min weap dam, max weap dam, dam bonus, truesword )
-#
-#   Sorcery Roll: [1d100.sorcery(90,   0,   3,   6,   1,   1,    1)]
-#                               (sk, mod, pow, cer, int,  acc, mlt)
-#
-#
-#
-#   Skill Training Unlimited Roll: [1d100.trainskill(30,75)]       # (starting skill%, desired skill%)
-#   Skill Training Cost Limited:   [1d100.trainskillcost(1000, 50) # (payment, starting skill%)
-#   Skill Training Time Limited:   [1d100.trainskilltime(150, 50)  # (time, strting skill%)
-#
-#-------------------------------------------------------------------------
-# --
-#
-# File: rq.py
-# Version:
-#   $Id: rq.py,v .1 pelwer
-#
-# Description: Runequest die roller originally based on Heroman's Hero Dieroller
-#
-#
-# v.1 - pelwer - 2/5/2005
-#  o Original release
-# v.2 - pelwer - 10/30/2006
-#  o Ported to openrpg+ by removing dependance on whrandom
-#  o Fixed Riposte spelling
-#  o Deleted sorcalc - never used
-#  o Added Sorcery Fumble table to sorcery spell roller
-#
-
-from die import *
-from time import time, clock
-import random
-from math import floor
-
-__version__ = "$Id: runequest.py,v 1.4 2006/11/15 12:11:22 digitalxero Exp $"
-
-# rq stands for "Runequest"
-
-class runequest(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-    # these methods return new die objects for specific options
-
-    
-    def skill(self,sk,mod,ma):
-        return rqskill(self,sk,mod,ma)
-
-    
-    def parry(self,sk,mod,ma,AP):
-        return rqparry(self,sk,mod,ma,AP)
-
-    
-    def dodge(self,sk,mod,ma):
-        return rqdodge(self,sk,mod,ma)
-
-    
-    def attack(self,sk,mod,ma,mindam,maxdam,bondam,trueswd):
-        return rqattack(self,sk,mod,ma,mindam,maxdam,bondam,trueswd)
-
-    
-    def sorcery(self,sk,mod,pow,cer,int,acc,mlt):
-        return rqsorcery(self,sk,mod,pow,cer,int,acc,mlt)
-
-    
-    def trainskill(self,initial,final):
-        return rqtrainskill(self,initial,final)
-
-    
-    def trainskillcost(self,cost,sk):
-        return rqtrainskillcost(self,cost,sk)
-
-    
-    def trainskilltime(self,time,sk):
-        return rqtrainskilltime(self,time,sk)
-
-#  RQ Skill Training Cost/Time unlimited
-#
-# [1d100.trainskill(10,20)]
-#          initial skill%, final skill%
-#
-# sk    = skill %
-#
-#
-class rqtrainskill(std):
-    
-    def __init__(self,source=[],initial=11,final=0):
-        std.__init__(self,source)
-        self.s = initial
-        self.f = final
-
-    
-    def __str__(self):
-        myStr = "Unrestricted Training"
-
-        if self.s == 0:
-            myStr = "Initial training completed for Cost(50) Time(20) Skill(1 + modifier)"
-        else:
-            cost  = 0
-            time  = 0
-            myStr = "Training: "
-
-            while self.s < self.f and self.s < 75:
-                cost   += self.s * 5
-                time   += self.s * 1
-                self.s += random.uniform(1,4) + 1
-
-            myStr  = "Training completed:\n"
-            myStr += "\tCost(" + str(int(cost)) + ")\n"
-            myStr += "\tTime(" + str(int(time)) + ")\n"
-            myStr += "\tSkill(" + str(int(self.s)) + ")"
-
-        return myStr
-
-
-#  RQ Skill Training Cost Limited
-#
-# [1d100.trainskillcost(50,0)]
-#          cost, skill%
-#
-# cost  = cash for training
-# sk    = skill %
-#
-#
-class rqtrainskillcost(std):
-    
-    def __init__(self,source=[],cost=11,sk=0):
-        std.__init__(self,source)
-        self.cost = cost
-        self.sk   = sk
-
-    
-    def __str__(self):
-        myStr = ""
-
-        if self.sk == 0 and self.cost >= 50:
-            myStr = "Initial training completed for Cost(50), Time(50), Skill(1 + modifier)"
-        else:
-            cost  = 0
-            time  = 0
-            icost = self.sk * 5
-
-            myStr = "Training: "
-
-            while (cost + icost) < self.cost:
-                if self.sk >= 75:
-                    break
-
-                cost += icost
-                time += self.sk * 1
-                self.sk += random.uniform(1,4) + 1
-                icost = self.sk * 5
-
-            myStr  = "Training completed: "
-            myStr += "Cost(" + str(int(cost)) + ") "
-            myStr += "Time(" + str(int(time)) + ") "
-            myStr += "Skill(" + str(int(self.sk)) + ")"
-
-        return myStr
-
-
-#  RQ Skill Training Time Limited
-#
-# [1d100.trainskilltime(50,0)]
-#          time, skill%
-#
-# time  = time for training
-# sk    = skill %
-#
-#
-class rqtrainskilltime(std):
-    
-    def __init__(self,source=[],time=11,sk=0):
-        std.__init__(self,source)
-        self.time = time
-        self.sk   = sk
-
-    
-    def __str__(self):
-        myStr = ""
-
-        if self.sk == 0 and self.time >= 20:
-            myStr = "Initial training completed for Cost(50), Time(50), Skill(1 + modifier)"
-        else:
-            cost  = 0
-            time  = 0
-            itime = self.sk * 1
-
-            myStr = "Trainingsss: "
-
-            while (time + itime) < self.time:
-                if self.sk >= 75:
-                    break
-
-                cost += self.sk * 5
-                time += itime
-                self.sk += random.uniform(1,4) + 1
-                itime = self.sk * 5
-
-            myStr  = "Training completed: "
-            myStr += "Cost(" + str(int(cost)) + ") "
-            myStr += "Time(" + str(int(time)) + ") "
-            myStr += "Skill(" + str(int(self.sk)) + ")"
-
-        return myStr
-
-#  RQ Skill Roll
-#
-# [1d100.skill(50,0,0)]
-#          skill%, modifer, ma%
-#
-# sk    = skill %
-# mod   = modifier %
-# ma    = martial arts %
-# skill = sk + mod
-#
-# success   roll <= skill
-#
-# failure   roll > skill
-#
-# crit
-#     push( @{$::Cre{Weapons}{$weap_cnt}}, POSIX::floor( skill/20 ) );
-#
-# special
-#     push( @{$::Cre{Weapons}{$weap_cnt}}, POSIX::floor( $skill/5 ) );
-#
-# fumble: if ( $skill > 100 ) { $fum = 0; } else { $fum = 100 - $skill; }
-#             $fum = 100 - POSIX::floor( $fum/20 );
-#             if ( $fum == 100 ) { $fum = '00'; };
-#
-class rqskill(std):
-    
-    def __init__(self,source=[],sk=11,mod=0,ma=0):
-        std.__init__(self,source)
-        self.sk  = sk
-        self.mod = mod
-        self.ma  = ma
-
-    
-    def is_success(self):
-        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
-
-    
-    def is_ma(self):
-        return (self.sum() <= self.ma)
-
-    
-    def is_special(self):
-        return (self.sum() <= int(floor((self.sk + self.mod)/5)))
-
-    
-    def is_critical(self):
-        return (self.sum() <= int(floor((self.sk + self.mod) / 20)))
-
-    
-    def is_fumble(self):
-        if ( self.sk >= 100 ):
-            fum = 0
-        else:
-            fum = (100 - self.sk )
-        final_fum = ( 100 - int( floor( fum/20  ) ) )
-        return (  self.sum() >= final_fum )
-
-    
-    def __str__(self):
-        strAdd="+"
-        swapmod= self.mod
-        if self.mod < 0:
-            strAdd= "-"
-            swapmod= -self.mod
-        modSum = self.sum()
-        # build output string
-        myStr = " (" + str(modSum) + ")"
-        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
-
-        if self.is_fumble(): myStr += " <b><font color=red>Fumble!</font></b>"
-        elif self.is_critical(): myStr += " <b><font color=green>Critical!</font></b>"
-        elif self.is_special(): myStr += " <i><font color=green>Special!</font></i>"
-        elif self.is_success() and self.is_ma(): myStr += " <i><font color=green>Special!</font></i>"
-        elif self.is_success(): myStr += " <font color=blue>Success!</font>"
-        else: myStr += " <font color=red>Failure!</font>"
-
-        Diff = self.sk - modSum
-        myStr += " </font>"
-
-        return myStr
-
-#
-# RQ Parry Roll
-#
-# same as skill but with fumble dice and armor points
-#
-# [1d100.parry(50,0,0,12)]
-#             skill%, modifer, ma%, Weapon AP
-#
-
-class rqparry(std):
-    
-    def __init__(self,source=[],sk=11,mod=0,ma=0,AP=0):
-        std.__init__(self,source)
-        self.sk = sk
-        self.mod = mod
-        self.ma  = ma
-        self.AP = AP
-
-    
-    def is_success(self):
-        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
-
-    
-    def is_special(self):
-        return (self.sum() <= int(floor((self.sk + self.mod) / 5)))
-
-    
-    def is_ma(self):
-        return (self.sum() <= self.ma)
-
-    
-    def is_riposte(self):
-        return (self.sum() <= (self.ma / 5))
-
-    
-    def is_critical(self):
-        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/20 ) ) ) )
-
-    
-    def is_fumble(self):
-        if ( self.sk >= 100 ):
-            fum = 0
-        else:
-            fum = (100 - self.sk )
-        final_fum = ( 100 - int( floor( fum/20  ) ) )
-        return (  self.sum() >= final_fum )
-
-    
-    def __str__(self):
-
-        # get fumble roll result in case needed
-        fum_roll = random.randint(1,100)
-
-        # get special AP
-        spec_AP = int( floor ( self.AP * 1.5 ) )
-
-        # figure out +/- for modifer
-        strAdd="+"
-        swapmod= self.mod
-        if self.mod < 0:
-            strAdd= "-"
-            swapmod= -self.mod
-        modSum = self.sum()
-
-        # build output string
-        myStr = " (" + str(modSum) + ")"
-        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
-
-        if self.is_fumble():
-            myStr += " <b><font color=red>Fumble!</font>  See Fumble Chart [" + str(fum_roll) + "]</b>"
-        elif self.is_critical() and self.is_riposte():
-            myStr += " <b><font color=green>Critical!</font> All damage blocked!</b>"
-            myStr += " Riposte next SR"
-        elif self.is_critical():
-         myStr += " <b><font color=green>Critical!</font> All damage blocked!</b>"
-        elif self.is_special and self.is_riposte():
-            myStr += " <i><font color=green>Special!</font> Weapon/Shield AP [" + str(spec_AP) + "]</i>"
-            myStr += " Riposte next SR"
-        elif self.is_special():
-            myStr += " <i><font color=green>Special!</font> Weapon/Shield AP [" + str(spec_AP) + "]</i>"
-        elif self.is_success() and self.is_ma():
-            myStr += " <i><font color=green>Special!</font> Weapon/Shield AP [" + str(spec_AP) + "]</i>"
-        elif self.is_success():
-            myStr += " <font color=blue>Success!</font> Weapon/Shield AP [" + str(self.AP) + "]"
-        else:
-            myStr += " <font color=red>Failure!</font>"
-
-        Diff = self.sk - modSum
-        myStr += " </font>"
-
-        return myStr
-
-# RQ Dodge Roll
-#
-# same as skill but with fumble dice and armor points
-#
-# [1d100.parry(50,0,0)]
-#             skill%, modifer, ma%
-#
-
-class rqdodge(std):
-    
-    def __init__(self,source=[],sk=11,mod=0,ma=0,AP=0):
-        std.__init__(self,source)
-        self.sk = sk
-        self.mod = mod
-        self.ma  = ma
-        self.AP = AP
-
-    
-    def is_success(self):
-        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
-
-    
-    def is_special(self):
-        return (self.sum() <= int(floor((self.sk + self.mod) / 5)))
-
-    
-    def is_ma(self):
-        return (self.sum() <= self.ma)
-
-    
-    def is_riposte(self):
-        return (self.sum() <= (self.ma / 5))
-
-    
-    def is_critical(self):
-        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/20 ) ) ) )
-
-    
-    def is_fumble(self):
-        if ( self.sk >= 100 ):
-            fum = 0
-        else:
-            fum = (100 - self.sk )
-        final_fum = ( 100 - int( floor( fum/20  ) ) )
-        return (  self.sum() >= final_fum )
-
-    
-    def __str__(self):
-
-        # get fumble roll result in case needed
-        fum_roll = random.randint(1,100)
-
-        # get special AP
-        spec_AP = int( floor ( self.AP * 1.5 ) )
-
-        # figure out +/- for modifer
-        strAdd="+"
-        swapmod= self.mod
-        if self.mod < 0:
-            strAdd= "-"
-            swapmod= -self.mod
-        modSum = self.sum()
-
-        # build output string
-        myStr = " (" + str(modSum) + ")"
-        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
-
-        if self.is_fumble():
-            myStr += " <b><font color=red>Fumble!</font>  See Fumble Chart [" + str(fum_roll) + "]</b>"
-        elif self.is_critical() and self.is_riposte():
-            myStr += " <b><font color=green>Critical!</font> All damage dodged!</b>"
-            myStr += " Riposte on next SR"
-        elif self.is_critical():
-            myStr += " <b><font color=green>Critical!</font> All damage dodged!</b>"
-        elif self.is_special and self.is_riposte():
-            myStr += " <i><font color=green>Special!</font> Damage dodged</b>"
-            myStr += " Riposte on next SR"
-        elif self.is_special():
-            myStr += " <i><font color=green>Special!</font> Damage dodged</b>"
-        elif self.is_success() and self.is_ma():
-            myStr += " <i><font color=green>Special!</font> Damage dodged</b>"
-        elif self.is_success():
-            myStr += " <font color=blue>Success!</font> Damage dodged</b>"
-        else:
-            myStr += " <font color=red>Failure!</font>"
-
-        Diff = self.sk - modSum
-        myStr += " </font>"
-
-        return myStr
-
-
-
-#
-# RQ Attack Roll
-#
-# same as skill but with fumble dice and armor points
-#
-# [1d100.attack(50,0,0,2,9,3,1)]
-#             skill%, modifer, ma%, min weap dam, max weap dam, dam bonus, truesword_enabled
-#
-class rqattack(std):
-    
-    def __init__(self,source=[],sk=11,mod=0,ma=0,mindam=0,maxdam=0,bondam=0,trueswd=0):
-        std.__init__(self,source)
-        self.sk = sk
-        self.mod = mod
-        self.ma  = ma
-        self.mindam = mindam
-        self.maxdam = maxdam
-        self.bondam = bondam
-        self.trueswd = trueswd
-
-    
-    def is_success(self):
-        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
-
-    
-    def is_ma(self):
-        return (self.sum() <= self.ma)
-
-    
-    def is_special(self):
-        return (self.sum() <= int(floor((self.sk + self.mod) / 5)))
-
-    
-    def is_critical(self):
-        return ((self.sum() <= int(floor((self.sk + self.mod) / 20))))
-
-    
-    def is_supercritical(self):
-        return (self.sum() == 1)
-
-    
-    def is_fumble(self):
-        if ( self.sk >= 100 ):
-            fum = 0
-        else:
-            fum = (100 - self.sk )
-        final_fum = ( 100 - int( floor( fum/20  ) ) )
-        return (  self.sum() >= final_fum )
-
-    
-    def __str__(self):
-
-        # get fumble roll result in case needed
-        fum_roll = random.randint(1,100)
-
-        # get hit location roll result in case needed
-        location = random.randint(1,20)
-        myStr = " to the ["+ str(location) + "] "
-        if location < 5:
-            myStr += "<B>Right Leg</B>"
-        elif location < 9:
-            myStr += "<B>Left Leg</B>"
-        elif location < 12:
-            myStr += "<B>Abdomen</B>"
-        elif location < 13:
-            myStr += "<B>Chest</B>"
-        elif location < 16:
-            myStr += "<B>Right Arm</B>"
-        elif location < 19:
-            myStr += "<B>Left Arm</B>"
-        else:
-            myStr += "<B>Head</B>"
-        hit_loc = myStr
-
-
-        # get normal damage in case needed
-        norm_damage = random.randint(self.mindam*(self.trueswd+1),self.maxdam*(self.trueswd+1)) + self.bondam
-        norm_damage_string  = "{" + str( self.mindam*(self.trueswd+1) ) + "-"
-        norm_damage_string += str(self.maxdam*(self.trueswd+1)) + "+" + str(self.bondam)
-        norm_damage_string += "}[" + str(norm_damage) + "] "
-
-        # get special/critical damage in case needed
-        crit_damage = random.randint( self.mindam*(self.trueswd+2), self.maxdam*(self.trueswd+2) ) + self.bondam
-        crit_damage_string = "{" + str( self.mindam*(self.trueswd+2) ) + "-" + str(self.maxdam*(self.trueswd+2)) + "+" + str(self.bondam) + "}[" + str(crit_damage) + "] "
-
-        # get supercritical damage in case needed
-        super_damage = norm_damage + self.maxdam
-        super_damage_string  = "{" + str( self.mindam*(self.trueswd+1) ) + "-"
-        super_damage_string += str(self.maxdam*(self.trueswd+1)) + "+" + str(self.maxdam)
-        super_damage_string += "+" + str(self.bondam) + "}[" + str(super_damage) + "] "
-
-        # figure out +/- for modifer
-        strAdd="+"
-        swapmod= self.mod
-        if self.mod < 0:
-            strAdd= "-"
-            swapmod= -self.mod
-        modSum = self.sum()
-
-        # build output string
-        myStr = " (" + str(modSum) + ")"
-        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
-
-        if self.is_fumble():
-            myStr += " <b><font color=red>Fumble!</font>  See Fumble Chart [" + str(fum_roll) + "]</b>"
-        elif (self.is_supercritical() and self.is_success()):
-            myStr += " <b><font color=green>Super Critical!</font></b> Damage: " + str(super_damage_string) + "<u>No Armor Stops</u>" + str(hit_loc)
-        elif (self.is_critical() and self.is_success()):
-            myStr += " <b><font color=green>Critical!</font></b> Damage: " + str(crit_damage_string) + "<u>No Armor Stops</u>" + str(hit_loc)
-        elif ( self.is_special() and self.is_success() ):
-            myStr += " <i><font color=green>Special!</font></i> Damage: " + str(crit_damage_string) + str(hit_loc)
-        elif (self.is_success() and self.is_ma()):
-            myStr += " <i><font color=green>Special!</font></i> Damage: " + str(crit_damage_string) + str(hit_loc)
-        elif self.is_success():
-            myStr += " <font color=blue>Success!</font> Damage: " + str(norm_damage_string) + str(hit_loc)
-        else:
-            myStr += " <font color=red>Failure!</font>"
-
-        return myStr
-
-#
-#
-#   Sorcery Roll: [1d100.sorcery(90,   10,  5,   4,   3,   2,    1)]
-#                               (sk, mod, pow, cer, int,  acc, mlt)
-#
-# Ceremony: (+1d6% per strike rank spent on ceremony)
-# Intensity: (-3% per point of Intensity)
-# Duration: (-4% per point of Duration)
-# Range: (-5% per point of Range)
-# Multispell: (-10% per each spell over 1)
-# Acceleration: (-5% per point of Acceleration)
-# Hold: (-2% per point in spell Held)
-#
-class rqsorcery(std):
-    
-    def __init__(self,source=[],sk=11,mod=0,pow=0,cer=0,int=0,acc=0,mlt=0):
-        std.__init__(self,source)
-        self.sk  = sk   # sorcery skill
-        self.mod = mod  # additional modifier ( from duration, range, etc )
-        self.pow = pow  # boost pow and additional pow ( from duration, range, etc )
-        self.cer = cer  # ceremony d6
-        self.int = int  # intensity ( -3% )
-        self.acc = acc  # accelerate ( -5% )
-        self.mlt = mlt  # multispell ( -10% )
-
-    
-    def is_success(self):
-        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
-
-    
-    def is_special(self):
-        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/5  ) ) ) )
-
-    
-    def is_critical(self):
-        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/20 ) ) ) )
-
-    
-    def is_fumble(self):
-        if ( self.sk >= 100 ):
-            fum = 0
-        else:
-            fum = (100 - self.sk )
-        final_fum = ( 100 - int( floor( fum/20  ) ) )
-        return (  self.sum() >= final_fum )
-
-    
-    def __str__(self):
-
-        # get fumble roll result in case needed
-        fum_roll = random.randint(2,12)
-        if fum_roll == 12 :
-            fum_string = "<br /><font color=purple>Caster temporarily forgets spell. Make an INTx5 roll each day to remember.</font>"
-        if fum_roll == 11 :
-            fum_string = "<br /><font color=purple>Caster temporarily forgets spell. Make an INTx5 roll each hour to remember.  </font>"
-        if fum_roll == 10 :
-            fum_string = "<br /><font color=purple>Spell produces reverse of the intended effect.  </font>"
-        if fum_roll == 9 :
-            fum_string = "<br /><font color=purple>Caster is Stunned. Roll INTx3 to recover at SR 10 each round.  </font>"
-        if fum_roll == 8 :
-            fum_string = "<br /><font color=purple>Caster takes 2D6 Damage to THP  </font>"
-        if fum_roll == 7 :
-            fum_string = "<br /><font color=purple>Spell produces reverse of the intended effect at 2x Intensity.  </font>"
-        if fum_roll == 6 :
-            fum_string = "<br /><font color=purple>Spell is cast on companions (if harmful) or on random nearby foes (if beneficial)  </font>"
-        if fum_roll == 5 :
-            fum_string = "<br /><font color=purple>Caster takes 1d6 Damage to Head  </font>"
-        if fum_roll == 4 :
-            fum_string = "<br /><font color=purple>Spell is cast on caster (if harmful) or on random nearby foe (if beneficial)  </font>"
-        if fum_roll == 3 :
-            fum_string = "<br /><font color=purple>Caster takes 1d6 Damage to THP  </font>"
-        if fum_roll == 2 :
-            fum_string = "<br /><font color=purple>Caster takes 1 point of Damage to Head  </font>"
-
-        # roll ceremony
-        ceremony_roll = random.randint( self.cer, (self.cer*6) )
-
-        # subtract manipulations
-        extra_mod = self.mod
-        self.mod += ceremony_roll - self.int*3 - self.acc*5 - self.mlt*10
-
-        # add up power cost
-        extra_pow = self.pow
-        self.pow += self.int + self.mlt + self.acc
-        special_pow = int( floor( ( self.pow )/2  ) )
-
-        # figure out +/- for modifer
-        strAdd="+"
-        swapmod= self.mod
-        if self.mod < 0:
-            strAdd= "-"
-            swapmod= -self.mod
-        modSum = self.sum()
-
-        # build output string
-        myStr = " (" + str(modSum) + ")"
-        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
-
-        if self.is_fumble():
-            myStr += " <b><font color=red>Fumble!</font>  POW Cost: [" + str(self.pow) + "],</b> " + fum_string
-        elif self.is_critical():
-            myStr += " <b><font color=green>Critical!</font></b> POW Cost: [1] "
-        elif self.is_special():
-            myStr += " <i><font color=green>Special!</font></i> POW Cost: [" + str(special_pow) + "] "
-        elif self.is_success():
-            myStr += " <font color=blue>Success!</font> POW Cost: [" + str(self.pow) + "] "
-        else:
-            myStr += " <font color=red>Failure!</font> POW Cost: [1]"
-
-        # print spell details
-        myStr += "<br /> --- Other Modifiers:["    + str( extra_mod     ) + "], "
-        myStr += "Extra POW:[" + str( extra_pow     ) + "], "
-        myStr += "Ceremony:[+"          + str( ceremony_roll ) + "%], "
-        myStr += "Intensity(-3):["      + str( self.int      ) + "], "
-        myStr += "Accelerate(-5):["     + str( self.acc      ) + "], "
-        myStr += "Multispell(-10):["    + str( self.mlt      ) + "] ---"
-
+
+
+
+
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#-------------------------------------------------------------------------
+#
+#  Usage:
+#
+#   Die  Roller: /dieroller rq
+#
+#   Skill  Roll: [1d100.skill(50,0,0)]         # ( skill%, modifer, MA% )
+#
+#   Parry  Roll: [1d100.parry(50,0,0,12)]      # ( skill%, modifer, MA%, Weapon/Shield AP )
+#
+#   Dodge  Roll: [1d100.parry(50,0,0)]         # ( skill%, modifer, MA% )
+#
+#   Attack Roll: [1d100.attack(50,0,0,2,9,3,0)]
+#       ( skill%, modifer, MA%, min weap dam, max weap dam, dam bonus, truesword )
+#
+#   Sorcery Roll: [1d100.sorcery(90,   0,   3,   6,   1,   1,    1)]
+#                               (sk, mod, pow, cer, int,  acc, mlt)
+#
+#
+#
+#   Skill Training Unlimited Roll: [1d100.trainskill(30,75)]       # (starting skill%, desired skill%)
+#   Skill Training Cost Limited:   [1d100.trainskillcost(1000, 50) # (payment, starting skill%)
+#   Skill Training Time Limited:   [1d100.trainskilltime(150, 50)  # (time, strting skill%)
+#
+#-------------------------------------------------------------------------
+# --
+#
+# File: rq.py
+# Version:
+#   $Id: rq.py,v .1 pelwer
+#
+# Description: Runequest die roller originally based on Heroman's Hero Dieroller
+#
+#
+# v.1 - pelwer - 2/5/2005
+#  o Original release
+# v.2 - pelwer - 10/30/2006
+#  o Ported to openrpg+ by removing dependance on whrandom
+#  o Fixed Riposte spelling
+#  o Deleted sorcalc - never used
+#  o Added Sorcery Fumble table to sorcery spell roller
+#
+
+from die import *
+from time import time, clock
+import random
+from math import floor
+
+__version__ = "$Id: runequest.py,v 1.4 2006/11/15 12:11:22 digitalxero Exp $"
+
+# rq stands for "Runequest"
+
+class runequest(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+    # these methods return new die objects for specific options
+
+    
+    def skill(self,sk,mod,ma):
+        return rqskill(self,sk,mod,ma)
+
+    
+    def parry(self,sk,mod,ma,AP):
+        return rqparry(self,sk,mod,ma,AP)
+
+    
+    def dodge(self,sk,mod,ma):
+        return rqdodge(self,sk,mod,ma)
+
+    
+    def attack(self,sk,mod,ma,mindam,maxdam,bondam,trueswd):
+        return rqattack(self,sk,mod,ma,mindam,maxdam,bondam,trueswd)
+
+    
+    def sorcery(self,sk,mod,pow,cer,int,acc,mlt):
+        return rqsorcery(self,sk,mod,pow,cer,int,acc,mlt)
+
+    
+    def trainskill(self,initial,final):
+        return rqtrainskill(self,initial,final)
+
+    
+    def trainskillcost(self,cost,sk):
+        return rqtrainskillcost(self,cost,sk)
+
+    
+    def trainskilltime(self,time,sk):
+        return rqtrainskilltime(self,time,sk)
+
+#  RQ Skill Training Cost/Time unlimited
+#
+# [1d100.trainskill(10,20)]
+#          initial skill%, final skill%
+#
+# sk    = skill %
+#
+#
+class rqtrainskill(std):
+    
+    def __init__(self,source=[],initial=11,final=0):
+        std.__init__(self,source)
+        self.s = initial
+        self.f = final
+
+    
+    def __str__(self):
+        myStr = "Unrestricted Training"
+
+        if self.s == 0:
+            myStr = "Initial training completed for Cost(50) Time(20) Skill(1 + modifier)"
+        else:
+            cost  = 0
+            time  = 0
+            myStr = "Training: "
+
+            while self.s < self.f and self.s < 75:
+                cost   += self.s * 5
+                time   += self.s * 1
+                self.s += random.uniform(1,4) + 1
+
+            myStr  = "Training completed:\n"
+            myStr += "\tCost(" + str(int(cost)) + ")\n"
+            myStr += "\tTime(" + str(int(time)) + ")\n"
+            myStr += "\tSkill(" + str(int(self.s)) + ")"
+
+        return myStr
+
+
+#  RQ Skill Training Cost Limited
+#
+# [1d100.trainskillcost(50,0)]
+#          cost, skill%
+#
+# cost  = cash for training
+# sk    = skill %
+#
+#
+class rqtrainskillcost(std):
+    
+    def __init__(self,source=[],cost=11,sk=0):
+        std.__init__(self,source)
+        self.cost = cost
+        self.sk   = sk
+
+    
+    def __str__(self):
+        myStr = ""
+
+        if self.sk == 0 and self.cost >= 50:
+            myStr = "Initial training completed for Cost(50), Time(50), Skill(1 + modifier)"
+        else:
+            cost  = 0
+            time  = 0
+            icost = self.sk * 5
+
+            myStr = "Training: "
+
+            while (cost + icost) < self.cost:
+                if self.sk >= 75:
+                    break
+
+                cost += icost
+                time += self.sk * 1
+                self.sk += random.uniform(1,4) + 1
+                icost = self.sk * 5
+
+            myStr  = "Training completed: "
+            myStr += "Cost(" + str(int(cost)) + ") "
+            myStr += "Time(" + str(int(time)) + ") "
+            myStr += "Skill(" + str(int(self.sk)) + ")"
+
+        return myStr
+
+
+#  RQ Skill Training Time Limited
+#
+# [1d100.trainskilltime(50,0)]
+#          time, skill%
+#
+# time  = time for training
+# sk    = skill %
+#
+#
+class rqtrainskilltime(std):
+    
+    def __init__(self,source=[],time=11,sk=0):
+        std.__init__(self,source)
+        self.time = time
+        self.sk   = sk
+
+    
+    def __str__(self):
+        myStr = ""
+
+        if self.sk == 0 and self.time >= 20:
+            myStr = "Initial training completed for Cost(50), Time(50), Skill(1 + modifier)"
+        else:
+            cost  = 0
+            time  = 0
+            itime = self.sk * 1
+
+            myStr = "Trainingsss: "
+
+            while (time + itime) < self.time:
+                if self.sk >= 75:
+                    break
+
+                cost += self.sk * 5
+                time += itime
+                self.sk += random.uniform(1,4) + 1
+                itime = self.sk * 5
+
+            myStr  = "Training completed: "
+            myStr += "Cost(" + str(int(cost)) + ") "
+            myStr += "Time(" + str(int(time)) + ") "
+            myStr += "Skill(" + str(int(self.sk)) + ")"
+
+        return myStr
+
+#  RQ Skill Roll
+#
+# [1d100.skill(50,0,0)]
+#          skill%, modifer, ma%
+#
+# sk    = skill %
+# mod   = modifier %
+# ma    = martial arts %
+# skill = sk + mod
+#
+# success   roll <= skill
+#
+# failure   roll > skill
+#
+# crit
+#     push( @{$::Cre{Weapons}{$weap_cnt}}, POSIX::floor( skill/20 ) );
+#
+# special
+#     push( @{$::Cre{Weapons}{$weap_cnt}}, POSIX::floor( $skill/5 ) );
+#
+# fumble: if ( $skill > 100 ) { $fum = 0; } else { $fum = 100 - $skill; }
+#             $fum = 100 - POSIX::floor( $fum/20 );
+#             if ( $fum == 100 ) { $fum = '00'; };
+#
+class rqskill(std):
+    
+    def __init__(self,source=[],sk=11,mod=0,ma=0):
+        std.__init__(self,source)
+        self.sk  = sk
+        self.mod = mod
+        self.ma  = ma
+
+    
+    def is_success(self):
+        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
+
+    
+    def is_ma(self):
+        return (self.sum() <= self.ma)
+
+    
+    def is_special(self):
+        return (self.sum() <= int(floor((self.sk + self.mod)/5)))
+
+    
+    def is_critical(self):
+        return (self.sum() <= int(floor((self.sk + self.mod) / 20)))
+
+    
+    def is_fumble(self):
+        if ( self.sk >= 100 ):
+            fum = 0
+        else:
+            fum = (100 - self.sk )
+        final_fum = ( 100 - int( floor( fum/20  ) ) )
+        return (  self.sum() >= final_fum )
+
+    
+    def __str__(self):
+        strAdd="+"
+        swapmod= self.mod
+        if self.mod < 0:
+            strAdd= "-"
+            swapmod= -self.mod
+        modSum = self.sum()
+        # build output string
+        myStr = " (" + str(modSum) + ")"
+        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
+
+        if self.is_fumble(): myStr += " <b><font color=red>Fumble!</font></b>"
+        elif self.is_critical(): myStr += " <b><font color=green>Critical!</font></b>"
+        elif self.is_special(): myStr += " <i><font color=green>Special!</font></i>"
+        elif self.is_success() and self.is_ma(): myStr += " <i><font color=green>Special!</font></i>"
+        elif self.is_success(): myStr += " <font color=blue>Success!</font>"
+        else: myStr += " <font color=red>Failure!</font>"
+
+        Diff = self.sk - modSum
+        myStr += " </font>"
+
         return myStr
+
+#
+# RQ Parry Roll
+#
+# same as skill but with fumble dice and armor points
+#
+# [1d100.parry(50,0,0,12)]
+#             skill%, modifer, ma%, Weapon AP
+#
+
+class rqparry(std):
+    
+    def __init__(self,source=[],sk=11,mod=0,ma=0,AP=0):
+        std.__init__(self,source)
+        self.sk = sk
+        self.mod = mod
+        self.ma  = ma
+        self.AP = AP
+
+    
+    def is_success(self):
+        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
+
+    
+    def is_special(self):
+        return (self.sum() <= int(floor((self.sk + self.mod) / 5)))
+
+    
+    def is_ma(self):
+        return (self.sum() <= self.ma)
+
+    
+    def is_riposte(self):
+        return (self.sum() <= (self.ma / 5))
+
+    
+    def is_critical(self):
+        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/20 ) ) ) )
+
+    
+    def is_fumble(self):
+        if ( self.sk >= 100 ):
+            fum = 0
+        else:
+            fum = (100 - self.sk )
+        final_fum = ( 100 - int( floor( fum/20  ) ) )
+        return (  self.sum() >= final_fum )
+
+    
+    def __str__(self):
+
+        # get fumble roll result in case needed
+        fum_roll = random.randint(1,100)
+
+        # get special AP
+        spec_AP = int( floor ( self.AP * 1.5 ) )
+
+        # figure out +/- for modifer
+        strAdd="+"
+        swapmod= self.mod
+        if self.mod < 0:
+            strAdd= "-"
+            swapmod= -self.mod
+        modSum = self.sum()
+
+        # build output string
+        myStr = " (" + str(modSum) + ")"
+        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
+
+        if self.is_fumble():
+            myStr += " <b><font color=red>Fumble!</font>  See Fumble Chart [" + str(fum_roll) + "]</b>"
+        elif self.is_critical() and self.is_riposte():
+            myStr += " <b><font color=green>Critical!</font> All damage blocked!</b>"
+            myStr += " Riposte next SR"
+        elif self.is_critical():
+         myStr += " <b><font color=green>Critical!</font> All damage blocked!</b>"
+        elif self.is_special and self.is_riposte():
+            myStr += " <i><font color=green>Special!</font> Weapon/Shield AP [" + str(spec_AP) + "]</i>"
+            myStr += " Riposte next SR"
+        elif self.is_special():
+            myStr += " <i><font color=green>Special!</font> Weapon/Shield AP [" + str(spec_AP) + "]</i>"
+        elif self.is_success() and self.is_ma():
+            myStr += " <i><font color=green>Special!</font> Weapon/Shield AP [" + str(spec_AP) + "]</i>"
+        elif self.is_success():
+            myStr += " <font color=blue>Success!</font> Weapon/Shield AP [" + str(self.AP) + "]"
+        else:
+            myStr += " <font color=red>Failure!</font>"
+
+        Diff = self.sk - modSum
+        myStr += " </font>"
+
+        return myStr
+
+# RQ Dodge Roll
+#
+# same as skill but with fumble dice and armor points
+#
+# [1d100.parry(50,0,0)]
+#             skill%, modifer, ma%
+#
+
+class rqdodge(std):
+    
+    def __init__(self,source=[],sk=11,mod=0,ma=0,AP=0):
+        std.__init__(self,source)
+        self.sk = sk
+        self.mod = mod
+        self.ma  = ma
+        self.AP = AP
+
+    
+    def is_success(self):
+        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
+
+    
+    def is_special(self):
+        return (self.sum() <= int(floor((self.sk + self.mod) / 5)))
+
+    
+    def is_ma(self):
+        return (self.sum() <= self.ma)
+
+    
+    def is_riposte(self):
+        return (self.sum() <= (self.ma / 5))
+
+    
+    def is_critical(self):
+        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/20 ) ) ) )
+
+    
+    def is_fumble(self):
+        if ( self.sk >= 100 ):
+            fum = 0
+        else:
+            fum = (100 - self.sk )
+        final_fum = ( 100 - int( floor( fum/20  ) ) )
+        return (  self.sum() >= final_fum )
+
+    
+    def __str__(self):
+
+        # get fumble roll result in case needed
+        fum_roll = random.randint(1,100)
+
+        # get special AP
+        spec_AP = int( floor ( self.AP * 1.5 ) )
+
+        # figure out +/- for modifer
+        strAdd="+"
+        swapmod= self.mod
+        if self.mod < 0:
+            strAdd= "-"
+            swapmod= -self.mod
+        modSum = self.sum()
+
+        # build output string
+        myStr = " (" + str(modSum) + ")"
+        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
+
+        if self.is_fumble():
+            myStr += " <b><font color=red>Fumble!</font>  See Fumble Chart [" + str(fum_roll) + "]</b>"
+        elif self.is_critical() and self.is_riposte():
+            myStr += " <b><font color=green>Critical!</font> All damage dodged!</b>"
+            myStr += " Riposte on next SR"
+        elif self.is_critical():
+            myStr += " <b><font color=green>Critical!</font> All damage dodged!</b>"
+        elif self.is_special and self.is_riposte():
+            myStr += " <i><font color=green>Special!</font> Damage dodged</b>"
+            myStr += " Riposte on next SR"
+        elif self.is_special():
+            myStr += " <i><font color=green>Special!</font> Damage dodged</b>"
+        elif self.is_success() and self.is_ma():
+            myStr += " <i><font color=green>Special!</font> Damage dodged</b>"
+        elif self.is_success():
+            myStr += " <font color=blue>Success!</font> Damage dodged</b>"
+        else:
+            myStr += " <font color=red>Failure!</font>"
+
+        Diff = self.sk - modSum
+        myStr += " </font>"
+
+        return myStr
+
+
+
+#
+# RQ Attack Roll
+#
+# same as skill but with fumble dice and armor points
+#
+# [1d100.attack(50,0,0,2,9,3,1)]
+#             skill%, modifer, ma%, min weap dam, max weap dam, dam bonus, truesword_enabled
+#
+class rqattack(std):
+    
+    def __init__(self,source=[],sk=11,mod=0,ma=0,mindam=0,maxdam=0,bondam=0,trueswd=0):
+        std.__init__(self,source)
+        self.sk = sk
+        self.mod = mod
+        self.ma  = ma
+        self.mindam = mindam
+        self.maxdam = maxdam
+        self.bondam = bondam
+        self.trueswd = trueswd
+
+    
+    def is_success(self):
+        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
+
+    
+    def is_ma(self):
+        return (self.sum() <= self.ma)
+
+    
+    def is_special(self):
+        return (self.sum() <= int(floor((self.sk + self.mod) / 5)))
+
+    
+    def is_critical(self):
+        return ((self.sum() <= int(floor((self.sk + self.mod) / 20))))
+
+    
+    def is_supercritical(self):
+        return (self.sum() == 1)
+
+    
+    def is_fumble(self):
+        if ( self.sk >= 100 ):
+            fum = 0
+        else:
+            fum = (100 - self.sk )
+        final_fum = ( 100 - int( floor( fum/20  ) ) )
+        return (  self.sum() >= final_fum )
+
+    
+    def __str__(self):
+
+        # get fumble roll result in case needed
+        fum_roll = random.randint(1,100)
+
+        # get hit location roll result in case needed
+        location = random.randint(1,20)
+        myStr = " to the ["+ str(location) + "] "
+        if location < 5:
+            myStr += "<B>Right Leg</B>"
+        elif location < 9:
+            myStr += "<B>Left Leg</B>"
+        elif location < 12:
+            myStr += "<B>Abdomen</B>"
+        elif location < 13:
+            myStr += "<B>Chest</B>"
+        elif location < 16:
+            myStr += "<B>Right Arm</B>"
+        elif location < 19:
+            myStr += "<B>Left Arm</B>"
+        else:
+            myStr += "<B>Head</B>"
+        hit_loc = myStr
+
+
+        # get normal damage in case needed
+        norm_damage = random.randint(self.mindam*(self.trueswd+1),self.maxdam*(self.trueswd+1)) + self.bondam
+        norm_damage_string  = "{" + str( self.mindam*(self.trueswd+1) ) + "-"
+        norm_damage_string += str(self.maxdam*(self.trueswd+1)) + "+" + str(self.bondam)
+        norm_damage_string += "}[" + str(norm_damage) + "] "
+
+        # get special/critical damage in case needed
+        crit_damage = random.randint( self.mindam*(self.trueswd+2), self.maxdam*(self.trueswd+2) ) + self.bondam
+        crit_damage_string = "{" + str( self.mindam*(self.trueswd+2) ) + "-" + str(self.maxdam*(self.trueswd+2)) + "+" + str(self.bondam) + "}[" + str(crit_damage) + "] "
+
+        # get supercritical damage in case needed
+        super_damage = norm_damage + self.maxdam
+        super_damage_string  = "{" + str( self.mindam*(self.trueswd+1) ) + "-"
+        super_damage_string += str(self.maxdam*(self.trueswd+1)) + "+" + str(self.maxdam)
+        super_damage_string += "+" + str(self.bondam) + "}[" + str(super_damage) + "] "
+
+        # figure out +/- for modifer
+        strAdd="+"
+        swapmod= self.mod
+        if self.mod < 0:
+            strAdd= "-"
+            swapmod= -self.mod
+        modSum = self.sum()
+
+        # build output string
+        myStr = " (" + str(modSum) + ")"
+        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
+
+        if self.is_fumble():
+            myStr += " <b><font color=red>Fumble!</font>  See Fumble Chart [" + str(fum_roll) + "]</b>"
+        elif (self.is_supercritical() and self.is_success()):
+            myStr += " <b><font color=green>Super Critical!</font></b> Damage: " + str(super_damage_string) + "<u>No Armor Stops</u>" + str(hit_loc)
+        elif (self.is_critical() and self.is_success()):
+            myStr += " <b><font color=green>Critical!</font></b> Damage: " + str(crit_damage_string) + "<u>No Armor Stops</u>" + str(hit_loc)
+        elif ( self.is_special() and self.is_success() ):
+            myStr += " <i><font color=green>Special!</font></i> Damage: " + str(crit_damage_string) + str(hit_loc)
+        elif (self.is_success() and self.is_ma()):
+            myStr += " <i><font color=green>Special!</font></i> Damage: " + str(crit_damage_string) + str(hit_loc)
+        elif self.is_success():
+            myStr += " <font color=blue>Success!</font> Damage: " + str(norm_damage_string) + str(hit_loc)
+        else:
+            myStr += " <font color=red>Failure!</font>"
+
+        return myStr
+
+#
+#
+#   Sorcery Roll: [1d100.sorcery(90,   10,  5,   4,   3,   2,    1)]
+#                               (sk, mod, pow, cer, int,  acc, mlt)
+#
+# Ceremony: (+1d6% per strike rank spent on ceremony)
+# Intensity: (-3% per point of Intensity)
+# Duration: (-4% per point of Duration)
+# Range: (-5% per point of Range)
+# Multispell: (-10% per each spell over 1)
+# Acceleration: (-5% per point of Acceleration)
+# Hold: (-2% per point in spell Held)
+#
+class rqsorcery(std):
+    
+    def __init__(self,source=[],sk=11,mod=0,pow=0,cer=0,int=0,acc=0,mlt=0):
+        std.__init__(self,source)
+        self.sk  = sk   # sorcery skill
+        self.mod = mod  # additional modifier ( from duration, range, etc )
+        self.pow = pow  # boost pow and additional pow ( from duration, range, etc )
+        self.cer = cer  # ceremony d6
+        self.int = int  # intensity ( -3% )
+        self.acc = acc  # accelerate ( -5% )
+        self.mlt = mlt  # multispell ( -10% )
+
+    
+    def is_success(self):
+        return (((self.sum() <= (self.sk + self.mod)) or (self.sum() <= 5)) and (self.sum() <= 95))
+
+    
+    def is_special(self):
+        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/5  ) ) ) )
+
+    
+    def is_critical(self):
+        return ( (  self.sum() <= int( floor( ( self.sk + self.mod  )/20 ) ) ) )
+
+    
+    def is_fumble(self):
+        if ( self.sk >= 100 ):
+            fum = 0
+        else:
+            fum = (100 - self.sk )
+        final_fum = ( 100 - int( floor( fum/20  ) ) )
+        return (  self.sum() >= final_fum )
+
+    
+    def __str__(self):
+
+        # get fumble roll result in case needed
+        fum_roll = random.randint(2,12)
+        if fum_roll == 12 :
+            fum_string = "<br /><font color=purple>Caster temporarily forgets spell. Make an INTx5 roll each day to remember.</font>"
+        if fum_roll == 11 :
+            fum_string = "<br /><font color=purple>Caster temporarily forgets spell. Make an INTx5 roll each hour to remember.  </font>"
+        if fum_roll == 10 :
+            fum_string = "<br /><font color=purple>Spell produces reverse of the intended effect.  </font>"
+        if fum_roll == 9 :
+            fum_string = "<br /><font color=purple>Caster is Stunned. Roll INTx3 to recover at SR 10 each round.  </font>"
+        if fum_roll == 8 :
+            fum_string = "<br /><font color=purple>Caster takes 2D6 Damage to THP  </font>"
+        if fum_roll == 7 :
+            fum_string = "<br /><font color=purple>Spell produces reverse of the intended effect at 2x Intensity.  </font>"
+        if fum_roll == 6 :
+            fum_string = "<br /><font color=purple>Spell is cast on companions (if harmful) or on random nearby foes (if beneficial)  </font>"
+        if fum_roll == 5 :
+            fum_string = "<br /><font color=purple>Caster takes 1d6 Damage to Head  </font>"
+        if fum_roll == 4 :
+            fum_string = "<br /><font color=purple>Spell is cast on caster (if harmful) or on random nearby foe (if beneficial)  </font>"
+        if fum_roll == 3 :
+            fum_string = "<br /><font color=purple>Caster takes 1d6 Damage to THP  </font>"
+        if fum_roll == 2 :
+            fum_string = "<br /><font color=purple>Caster takes 1 point of Damage to Head  </font>"
+
+        # roll ceremony
+        ceremony_roll = random.randint( self.cer, (self.cer*6) )
+
+        # subtract manipulations
+        extra_mod = self.mod
+        self.mod += ceremony_roll - self.int*3 - self.acc*5 - self.mlt*10
+
+        # add up power cost
+        extra_pow = self.pow
+        self.pow += self.int + self.mlt + self.acc
+        special_pow = int( floor( ( self.pow )/2  ) )
+
+        # figure out +/- for modifer
+        strAdd="+"
+        swapmod= self.mod
+        if self.mod < 0:
+            strAdd= "-"
+            swapmod= -self.mod
+        modSum = self.sum()
+
+        # build output string
+        myStr = " (" + str(modSum) + ")"
+        myStr += " vs [" + str(self.sk) + strAdd + str(swapmod) + "]"
+
+        if self.is_fumble():
+            myStr += " <b><font color=red>Fumble!</font>  POW Cost: [" + str(self.pow) + "],</b> " + fum_string
+        elif self.is_critical():
+            myStr += " <b><font color=green>Critical!</font></b> POW Cost: [1] "
+        elif self.is_special():
+            myStr += " <i><font color=green>Special!</font></i> POW Cost: [" + str(special_pow) + "] "
+        elif self.is_success():
+            myStr += " <font color=blue>Success!</font> POW Cost: [" + str(self.pow) + "] "
+        else:
+            myStr += " <font color=red>Failure!</font> POW Cost: [1]"
+
+        # print spell details
+        myStr += "<br /> --- Other Modifiers:["    + str( extra_mod     ) + "], "
+        myStr += "Extra POW:[" + str( extra_pow     ) + "], "
+        myStr += "Ceremony:[+"          + str( ceremony_roll ) + "%], "
+        myStr += "Intensity(-3):["      + str( self.int      ) + "], "
+        myStr += "Accelerate(-5):["     + str( self.acc      ) + "], "
+        myStr += "Multispell(-10):["    + str( self.mlt      ) + "] ---"
+
+        return myStr
--- a/orpg/dieroller/savage.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/savage.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,533 +1,533 @@
-# (at your option) any later version.
-# # This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: savage.py
-# Authors: Rich Finder
-#        : Alexandre Major
-# Maintainer:
-# Version: 0.2
-#
-# Description: Savage Worlds die roller
-# Permission was granted by Pinnacle to reprint the result descriptions from their tables on Apr 20, 2006 by Simon Lucas
-#
-
-from die import *
-import string
-from random import *
-__version__ = "$Id: savage.py,v 1.2 2007/05/06 16:42:55 digitalxero Exp $"
-
-# Savage, as in Savage Worlds
-class sw(std):
-    #def __init__(self,source=[], wnd=1, loc="rnd", chmod=0):
-    
-    def __init__(self,source=[],fmod=0):
-        std.__init__(self,source)
-
-# these methods return new die objects for specific options
-
-    
-    def fright(self,fearmod=0):
-        return fright(self,fearmod=0)
-
-    
-    def kob(self,wnd,loc):
-        return kob(self,wnd=1,loc="rnd")
-
-    
-    def ooc(self):
-        return ooc(self)
-
-    
-    def ract(self,chmod=0):
-        return ract(self,chmod=0)
-
-    
-    def vcrit(self):
-        return vcrit(self)
-
-    
-    def fortune(self):
-        return fortune(self)
-
-    
-    def freak(self):
-        return freak(self)
-
-    
-    def swdhelps(self):
-        return swdhelps(self)
-
-
-class fright(std):
-    #-----------------The Fright Table
-    #  Rolls on the Fright - which is a 1d20 roll modified by the fear level of a monster.  This function automatically generates
-    #  The appropriate random number and then adds the fear modifier to the rol and displays the result of the roll with the effect
-    #  of that roll.
-    #  Usage:  [fright()]
-    #          [fright(6)] - if the fear modifier of the monster was 6
-    #-----------------
-    
-    def __init__(self,fmod=0):
-        global fear
-        std.__init__(self)
-        fear=fmod
-
-    #def sum(self):
-
-    
-    def __str__(self):
-        global fear
-        iroll = randint(1,20)
-        froll = iroll + fear
-        if froll >= 1 and froll <=4:
-            fresult = "Adrenaline Rush"
-            fdescription = "The hero's \"fight\" response takes over.  He adds +2 to all Trait and damage rolls on his next action."
-        elif froll >= 5 and froll <=8:
-            fresult = "Shaken"
-            fdescription = "The character is Shaken."
-        elif froll >=9 and froll <=12:
-            fresult = "Pankicked"
-            fdescription = "The character immediately moves his full Pace plus running die away from the danger and is Shaken."
-        elif froll >=13 and froll <=16:
-            fresult = "Minor Phobia"
-            fdescription = "The character gains a Minor Phobia Hindrance somehow associated with the trauma."
-        elif froll >=17 and froll <=18:
-            fresult = "Major Phobia"
-            fdescription = "The character gains a Major Phobia Hindrance."
-        elif froll >=19 and froll <= 20:
-            fresult = "The Mark of Fear"
-            fdescription = "The hero is Shaken and also suffers some cosmetic, physical alteration -- a white streak forms in the hero's hair, his eyes twitch constantly, or some other minor physical alteration.  This reduces his Charisma by 1."
-        else:
-            fresult = "Heart Attack"
-            fdescription = "The hero is so overwhelmed with fear that his heart stutters.  He becomes Incapacitated and must make a Vigor roll at -2.  If Successful, he's Shaken and can't attempt to recover for 1d4 rounds.  If he fails, he dies in 2d6 rounds.  A Healing roll at -4 saves the victim's life, but he remains Incapacitated."
-        myStr = "[" + str(iroll) + "+"+str(fear)+"="+str(froll)+"] ==> " + fresult +":  "+ fdescription
-        return myStr
-
-class kob(std):
-    #-------------------The Knockout Blow Table
-    #  This table used when a character has sustained more than 3 wounds.  The number wounds taken that sends a character to the
-    #  Knockout Blow Table is what gets sent with the kob command - not the total number of wounds the character currently has.
-    #  For example - a character has 2 wounds and is hit takes 2 more wounds, this will result in a total of 4 wounds, but the
-    #  number that gets sent to the kob roll is 2, because that is the number of wounds sustained that sent the character to the kob
-    #  table.
-    #
-    #  It is also important to note that if a called shot to particular area was made, that information should be sent with the "roll"
-    #  as well, because the KOB Table may need to determine some dramatic effects for permanent injuries, etc.  If a hit location was sent
-    #  the function will use that information.
-    #  Valid Hit Locations are:  h (head), g (guts), la (left arm), ra (right arm), rl (right leg), ll (left leg), c (crotch)
-    #  Usage = [kob(3)] - If 3 wounds were received that sent the player to the Knockout Blow Table - no called shot
-    #          [kob(3,"h") - If 3 wounds were received that sent the player to the Knockout Blow Table with a called shot to the head
-    #---------------------
-    global wound, loca
-    
-    def __init__(self, wnd, loc="rnd"):
-        global wound, loca
-        std.__init__(self, wnd)
-        #Need to check to make sure that wnd is a number
-        if (int(wnd)):
-            wound = wnd
-            loca = loc
-        else:
-            mystr = "You need to supply a number for the wound."
-            return mystr
-
-    
-    def __str__(self):
-        global wound, loca
-        itbl = "no"
-        if wound == 1:
-            wtype = "Battered and Bruised"
-            wdescription = "If your hero was previously Incapacitated, this result has no further effect. Otherwise, your hero's had the wind knocked out of him. Make a Spirit roll at the beginning of each round. If the roll is successful, he becomes Shaken and can return to the fight."
-        elif wound == 2:  #Need to roll on the Injury table as well
-            wtype = "Incapacitated"
-            wdescription = "Your hero is beaten badly enough to take him out of this fight. He's Incapacitated and must roll on the Injury Table."
-            itbl = "yes"
-        elif wound == 3:
-            wtype = "Bleeding Out"
-            wdescription = "Your hero is bleeding out and Incapacitated. Roll on the Injury Table and make a Vigor roll at the start of each combat round. A failure means the hero has lost too much blood and becomes mortally Wounded (see below; begin rolling for the Mortal Wound in the next round). With a success, he keeps bleeding and must roll again next round. With a raise, or a successful Healing roll, he stops bleeding and is Incapacitated."
-            itbl = "yes"
-        elif wound < 1:
-            wtype = "No Wounds?"
-            wdescription = "The Number of wounds specified was less than one...why are you consulting this chart?"
-        else:
-            wtype = "Mortal Wound"
-            wdescription = "Your hero has suffered a life-threatening wound and will not recover without aid. He is Incapacitated and must roll on the Injury Table. He must also make a Vigor roll at the start of each round. If the roll is failed, he passes on. A Healing roll stabilizes the victim but leaves him Incapacitated."
-            itbl = "yes"
-
-        if itbl == "yes":
-            #Determine if a Hit location was specified already
-            if loca.lower() == "h":
-                iroll = 11
-            elif loca.lower() == "g":
-                iroll = 5
-            elif loca.lower() == "ra":
-                iroll = 3
-                aroll = 2
-            elif loca.lower() == "la":
-                iroll = 3
-                aroll = 1
-            elif loca.lower() == "rl":
-                iroll = 10
-                lroll = 2
-            elif loca.lower() == "ll":
-                iroll = 10
-                lroll = 1
-            elif loca.lower() == "c":
-                iroll = 2
-            else:  #none of the above were provided...wo will need to determine randomly
-                iroll = randint(2,12)
-            #resolve the injury table stuff...
-            if iroll == 2:
-                iloc = "Unmentionables"
-                idescription = "The hero suffers an embarrassing and painful wound to the groin."
-            elif iroll == 3 or iroll == 4:
-                if loca != "ra" and loca != "la":  #  If a hit location was not specified (or not recognized) already, determine randomly
-                    aroll = randint(1,2)
-                if aroll == 1:
-                    warm = "Left"
-                else:
-                    warm = "Right"
-                iloc = warm + " Arm"
-                idescription = "The arm is rendered useless."
-            elif iroll >= 5 and iroll <= 9:  #will need to make another random roll
-                iloc = "Guts"
-                idescription = "Your hero catches one somewhere between the crotch and the chin."
-                groll = randint(1,6)
-                if groll == 1 or groll == 2:
-                    #idescription += " <b>Broken (" + str(groll) + ")</b> His Agility is reduced by a die type (min dr)."
-                    idescription += " <b>Broken (" + str(groll) + ")</b> His Agility is reduced by a die type (min d4)."
-                elif groll == 3 or groll == 4:
-                    idescription += " <b>Battered (" + str(groll) + ")</b> His Vigor is reduced by a die type (min d4)."
-                else:
-                    idescription += " <b>Busted (" + str(groll) + ")</b> His Strength is reduced by a die type (min d4)."
-            elif iroll == 10:
-                if loca != "ll" and loca != "rl":  #  If a hit location was not specified (or not recognized) already, determine randomly
-                    lroll = randint(1,2)
-                if lroll == 1:
-                    wleg = "Left"
-                else:
-                    wleg = "Right"
-                iloc = wleg + " Leg"
-                idescription = "The character's leg is crushed, broken, or mangled. His Pace is reduced by 1."
-            else:  #Will need to make another random roll for this one.
-                iloc = "Head"
-                idescription = "Your hero has suffered a grievous injury to his head."
-                hroll = randint(1,6)  #determine how the head is impacted by the wound
-                if hroll == 1 or hroll ==2:
-                    idescription += "<b>Hideous Scar (" + str(hroll) + ")</b>Your hero now has the Ugly Hindrance."
-                elif hroll == 3 or hroll == 4:
-                    idescription += "<b>Blinded (" + str(hroll) + ")</b> One or both of your hero's eyes was damaged. He gains the Bad Eyes Hindrance."
-                else:
-                    idescription += "<b>Brain Damage (" + str(hroll) + ")</b> Your hero suffers massive trauma to the head. His Smarts is reduced one die type (min d4)."
-            idescription += " Make a Vigor roll applying any wound modifiers. If the Vigor roll is failed, the injury is permanent regardless of healing. If the roll is successful, the effect goes away when all wounds are healed."
-            if iroll == 2:
-                idescription +=" If the injury is permanent, reproduction is out of the question without miracle surgery or magic."
-            if loca != "h" and loca != "g" and loca != "c" and loca != "rl" and loca != "ll" and loca != "ra" and loca != "la":
-                idescription +="<br><br><b>***If the attack that caused the Injury was directed at a specific body part, use that location instead of rolling randomly.***</b>"
-            myStr = "[" + wtype + "] ==>" + wdescription + "<br><br><b>Injury Table Result ("+ str(iroll) +"): </b> [" + iloc + "] ==> " + idescription
-        else:
-            myStr = "[" + wtype + "] ==>" + wdescription
-        return myStr
-
-class ract(std):
-    #----------------------The Reaction Table
-    #  This is used to randomly determine the general mood of NPCs toward the player characters.  This simulates a 2d6 roll
-    #  and displays the reaction.  This roll can be modified by the Charisma of the player(s).
-    #  Usage:  [ract()] - No Charisma modifier
-    #          [ract(2)] - A +2 Charisma modifier
-    #          [ract(-2)] - A -2 Charisma modifier
-    #----------------------
-    global charisma
-    
-    def __init__(self,chmod=0):
-        global charisma
-        std.__init__(self)
-        charisma = chmod
-
-    
-    def __str__(self):
-        global charisma
-        r1roll = randint(2,12)
-        rroll = r1roll + charisma
-        if rroll == 2:
-            reaction = "Hostile"
-            rdescription = "The NPC is openly hostile and does his best to stand in the hero's way. He won't help without an overwhelming reward or payment of some kind."
-        elif rroll >=3 and rroll <=4:
-            reaction = "Unfriendly"
-            rdescription = "The NPC is openly hostile and does his best to stand in the hero's way. He won't help without an overwhelming reward or payment of some kind."
-        elif rroll >=5 and rroll <=9:
-            reaction = "Neutral"
-            rdescription = "The NPC has no particular attitude, and will help for little reward if the task at hand is very easy. If the task is difficult, he'll require substantial payment of some kind."
-        elif rroll >=10 and rroll <=11:
-            reaction = "Friendly"
-            rdescription = "The NPC will go out of his way for the hero. He'll likely do easy tasks for free (or very little), and is willing to do more dangerous tasks for fair pay or other favors."
-        else:
-            reaction = "Helpful"
-            rdescription = "The NPC is anxious to help the hero, and will probably do so for little or no pay depending on the nature of the task."
-        #myStr = "[" + reaction + "(" + str(r1roll) + "+Charisma Mods("+str(charisma)+")="+str(rroll)+")] ==> " + rdescription
-        myStr = "["+str(r1roll)+"+"+str(charisma)+"(charisma modifier)="+str(rroll)+"] ==> "+reaction+":  "+rdescription
-        return myStr
-
-class ooc(std):
-    #--------------------The Out of Control Vehicle Table
-    #  This table is used when a vehicle is injured during combat and must determine what happens to the vehicle.  This is a 2d6
-    #  roll and displays the results of the roll.  This will also display altitude information for flying vehicles.
-    #  Usage:  [ooc()]
-    #--------------------
-    
-    def __init__(self):
-        std.__init__(self)
-
-    
-    def __str__(self):
-        ooroll = randint(2,12)
-        oodescripton = "Something"
-        if ooroll == 2:
-            ooeffect = "Roll Over"
-            rroll = randint(1,6)
-            oodescription = "The vehicle performs a Slip and rolls over "+ str(rroll)+ " time"
-            if rroll < 2:
-                oodescription +="s"
-            oodescription += " in that direction. Roll collision damage for the vehicle and everyone inside. Any exterior-mounted weapons or accessories are ruined."
-        elif ooroll == 3 or ooroll == 4:
-            ooeffect = "Spin"
-            sroll = randint(1,6)
-            froll = randint(1,12)
-            oodescription = "Move the vehicle "+str(sroll)+"\" in the direction of the maneuver, or "+str(sroll)+"\" away from a damaging blow. At the end of the Spin,the vehicle is facing is "+str(froll)+" o'clock."
-        elif ooroll >= 5 and ooroll <= 9:
-            ooeffect = "Skid"
-            sroll = randint(1,4)
-            oodescription = "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
-        elif ooroll == 10 or ooroll == 11:
-            ooeffect = "Slip"
-            sroll = randint(1,6)
-            oodescription = "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
-        else:
-            ooeffect = "Flip"
-            froll = randint(1,4)
-            oodescription = "The vehicle flips end over end "+str(froll)+" times. Move it forward that many increments of its own length. Roll collision damage for the vehicle, its passengers, and anything it hits. "
-            shroll = randint(1,2)
-            if shroll == 1:
-                oodescription += "<br><br><b>Note:</b> If the vehicle is slow and/or heavy (such as a tank) it Slips instead: "
-                sroll = randint(1,6)
-                oodescription += "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
-            else:
-                oodescription += "<br><br><b>Note (GM's discretion):</b> If the vehicle is slow and/or heavy (such as a tank) it Skids instead: "
-                sroll = randint(1,4)
-                oodescription += "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
-
-        oodescription += "<br><br>For flying vehicles conducting combat in the air, the vehicle"
-        altchange = randint(2,12)
-        if altchange == 2:
-            dwn = randint(2,20)
-            oodescription += " loses "+str(dwn)+"\" of altitude."
-        elif altchange == 3 or altchange == 4:
-            dwn = randint(1,10)
-            oodescription += " loses "+str(dwn)+"\" of altitude."
-        elif altchange >= 5 and altchange <= 9:
-            oodescription += " has no change in altitude."
-        else:
-            altup = randint(1,10)
-            oodescription += " gains "+str(altup)+"\" of altitude."
-        myStr = "[" + ooeffect + "(" + str(ooroll) + ")] ==> " + oodescription
-        return myStr
-
-class vcrit(std):
-    #----------------The Critical Hit Vehicle Table
-    #  This table generates a 2d6 roll to determine the Critical Hit results every time a vehicle takes a wound.  There are no
-    #  modifiers to this roll
-    #  Usage [vcrit()]
-    #----------------
-    
-    def __init__(self):
-        std.__init__(self)
-
-    
-    def __str__(self):
-        chitroll = randint(2,12)
-        if chitroll == 2:
-            cheffect = "Scratch and Dent"
-            chdescription = "The attack merely scratches the paint. There's no permanent damage."
-        elif chitroll == 3:
-            cheffect = "Engine"
-            chdescription = "The engine is hit. Oil leaks, pistons misfire, etc. Acceleration is halved (round down). This does not affect deceleration, however."
-        elif chitroll == 4:
-            cheffect = "Locomotion"
-            chdescription = "The wheels, tracks, or whatever have been hit. Halve the vehicle's Top Speed immediately. If the vehicle is pulled by animals, the shot hits one of them instead."
-        elif chitroll == 5:  #Need to make an additional roll to see what direction the vehicle can turn...
-            cheffect = "Controls"
-            troll = randint(1,2)
-            if troll == 1:
-                aturn = "left"
-            else:
-                aturn = "right"
-            chdescription = "The control system is hit. Until a Repair roll is made, the vehicle can only perform turns to the "+str(aturn)+". This may prohibit certain maneuvers as well."
-        elif chitroll >= 6 and chitroll <=8:
-            cheffect = "Chassis"
-            chdescription = "The vehicle suffers a hit in the body with no special effects."
-        elif chitroll == 9 or chitroll == 10:
-            cheffect = "Crew"
-            chdescription = "A random crew member is hit. The damage from the attack is rerolled. If the character is inside the vehicle, subtract the vehicle's Armor from the damage. Damage caused by an explosion affects all passengers in the vehicle."
-        elif chitroll == 11:
-            cheffect = "Weapon"
-            chdescription = "A random weapon on the side of the vehicle that was hit is destroyed and may no longer be used. If there is no weapon, this is a Chassis hit instead (The vehicle suffers a hit in the body with no special effects)."
-        else:
-            cheffect = "Wrecked"
-            chdescription = "The vehicle is wrecked and automatically goes Out of Control.<br><br><b>[Out of Control]</b> ==>"+str(ooc())
-        myStr = "["+cheffect+" ("+str(chitroll)+")] ==> "+chdescription
-        return myStr
-
-    def ooc(self):
-        return vcritooc(self)
-
-class swdhelps(std):
-    #Display help information for this die roller - it will list all the available commands, and how to use them
-    
-    def __init__(self):
-        std.__init__(self)
-
-    
-    def __str__(self):
-        myStr = "<table border='1' valign='top'>\
-        <tr>\
-            <td colspan='3'>This chart will show you the various commands you can use and what is required, etc.  The <i><b>italicized text</b></i> are optional variables.  Any text that is not italicized and is within parentheses is required.  About the only roll that has a required element is the Knockout Blow roll (kob).</td>\
-        </tr>\
-        <tr>\
-            <td align='center'><b>Die Command</b></td><td align='center' width='55%'><b>Description</b></td><td align='center'width='30%'><b>Example</b></td>\
-        </tr>\
-        <tr>\
-            <td><b>[fright(<i>monster's fear modifier</i>)]</b></td><td>Rolls on the <b>Fright Table</b>.  This command generates a number between 1 and 20 and displays the corresponding entry from the Fright Table.</td><td>[fright()]<br>[fright(6)]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[kob(#ofWounds,<i>hitLocation</i>)]</b></td><td>Rolls on the <b>Knockout Blow Table</b> as well as the <b>Injury Table</b> if necessary.  The number of wounds must be specified, however, the location only needs to be specified if a particular body part was targeted.  If a hit location was targeted, then the following codes should be used:<br>\
-                <ul>\
-                    <li>h = head</li>\
-                    <li>g = guts/other vital areas</li>\
-                    <li>c = crotch/groin</li>\
-                    <li>la = left arm</li>\
-                    <li>ra = right arm</li>\
-                    <li>ll = left leg</li>\
-                    <li>rl = right leg</li>\
-                </ul><br>If no hit location is specified, the hit location will be determined when the roll on the Injury Table is necessary.  When specifiying a hit locations, the code must be entered within double quotes.</td><td><b>3 wounds, no called shot</b><br>[kob(3)]<br><b>2 wounds to the head</b><br>[kob(2,\"h\")]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[ract(<i>Charisma Mods</i>)]</b></td><td>Rolls on the <b>Reaction Table</b>.  Will generate the initial reaction to the PCs.  If the Charisma modifiers are supplied, they will be taken into account as well.  Remember that this table is generally only consulted when the reaction of the NPC is comlpetely unknown to the GM.</td><td><b>Reaction no Charisma Mods</b><br>[ract()]<br><b>Reaction with +2 Charisma Mods</b><br>[ract(2)]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[vcrit()]</b></td><td>Rolls on the <b>Critical Hit Table</b> for vehicles.  If a roll on the Out of Control Chart is necessary, it will automatically roll on that table as well.</td><td>[vcrit()]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[ooc()]</b></td><td>Rolls on the <b>Out of Controll Table</b> for vehicles.  This roll will automatically determine any directions/movement rolls as well.</td><td>[ooc()]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[fortune()]</b></td><td>Rolls on the <b>Fortune Table</b> for the Showdown Skirmish rules.  This roll will automatically roll on the <b>Freak Event Table</b> if necessary</td><td>[fortune()]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[freak()]</b></td><td>Rolls on the <b>Freak Event Table</b>.</td><td>[freak()]</td>\
-        </tr>\
-        <tr>\
-            <td><b>[swdhelps()]</b></td><td>Displays this help list.</td><td>[swdhelps()]</td>\
-        </tr>\
-        </table>"
-        return myStr
-
-class fortune(std):
-    
-    def __init___(self):
-        std.__init__(self)
-
-    
-    def __str__(self):
-        forroll = randint(2,12)
-        if forroll == 2 or forroll == 12: #Need to roll on Freak Event Table
-            fortune = "Freak Event!"
-            fdescription = "Roll on the Freak Event Table.<br><br><b>[Freak Event Table]</b> ==> "+str(freak())
-        elif forroll == 3:
-            fortune = "Twist of Fate"
-            fdescription = "Take a benny from your opponent. If he does not have one, he must immediately remove any one Extra from play."
-        elif forroll == 4:
-            fortune = "The Quick and the Dead"
-            fdescription = "Swap one of your opponent's cards for any one of yours."
-        elif forroll == 5:
-            fortune = "Rally"
-            fdescription = "Pick any one unit on the board with Shaken figures. All those figures recover automatically."
-        elif forroll >= 6 and forroll <= 8:
-            fortune = "Hand of Fate"
-            fdescription = "Gain one extra benny."
-        elif forroll == 9:
-            fortune = "Close Call"
-            fdescription = "Any one of your opponent's units stumbles, becomes confused, or is otherwise disrupted. All its members suffer -2 to their trait rolls this round."
-        elif forroll == 10:
-            fortune = "Teamwork"
-            fdescription = "Pick any one other unit within 12\" of this one. Discard its Action Card. It acts on the Joker along with this unit, and gains the usual bonuses as well."
-        else:
-            fortune = "Out of Ammo"
-            fdescription = "Pick any one enemy unit. It's out of ammo or Power Points (your choice). If this result cannot be applied, you gain a benny instead."
-        myStr = "["+fortune+" ("+str(forroll)+")] ==>"+fdescription
-        return myStr
-
-    
-    def freak(self):
-        return fortunefreak(self)
-
-class freak(std):
-    
-    def __init__(self):
-        std.__init__(self)
-
-    
-    def __str__(self):
-        feroll = randint(1,10)
-        if feroll == 1:
-            fevent = "Storm"
-            fedescription = "A sudden storm rolls in. Rain begins to pour and visibility is limited to 12\". All attack rolls are at -1, and black powder weapons don't work at all. The round after this event, all streams become impassable, even at fords. Only bridges remain."
-        elif feroll == 2:
-            fevent = "Fire!"
-            fedescription = "Fire breaks out on the board! Roll randomly among each occupied building, patch of trees, or other flammable terrain type. If none of these are occupied, roll randomly among all flammable terrain pieces. The entire building or forest catches fire this round and causes 2d6 damage to everything within. The fire continues for the rest of the game--unless a storm comes, which quenches it immediately.<br><br>At the beginning of each turn thereafter, roll 1d6 for each flammable structure within 4\" (adjacent buildings, another patch of forest, etc.). On a 4-6, that structure catches fire as well. Check to see if these new fires spread in the following rounds."
-        elif feroll == 3:
-            fevent = "Blood Ties"
-            fedescription = "One of the Wild Cards on the other side is related or has some other special bond with one of your heroes (a Wild Card of your choice). For the rest of the battle, these two won't attack each other directly unless there are no other targets on the board."
-        elif feroll == 4:
-            fevent = "Death of a Hero"
-            inspireroll = randint(1,2)
-            if inspireroll == 1:
-                fedescription ="The next time one of your Wild Cards dies, his noble sacrifice triggers new resolve in his companions.  When your next Wild Card is Incapacitated the rest of your force is inspired by his legacy and adds +1 to all their rolls until another of your Wild Cards is killed."
-            else:
-                fedescription = "The next time one of your Wild Cards dies, his noble sacrifice triggers bone-chilling dread in his companions. When your next Wild Card is Incapacitated the rest of your force is filled with dread. They subtract -1 from all their rolls for the rest of the game until an <i>enemy</i> Wild Card is slain."
-        elif feroll == 5:
-            fevent = "Fickle Fate"
-            fedescription = "Fate favors the underdog. The side with the fewest bennies draws until it has the same number as their foe. Place these in the common pool."
-        elif feroll == 6:
-            fevent = "Back from the Dead"
-            fedescription = "One of your dead was just knocked unconscious. He returns in the spot where he fell. If this is a Wild Card, he returns with but a single wound."
-        elif feroll == 7:
-            fevent = "Bitter Cold/Heat"
-            fedescription = "The weather heats up or cools down, depending on your environment. All troops become tired or bogged down and reduce their running rolls by half for the rest of the game."
-        elif feroll == 8:
-            fevent = "Battle Tested"
-            fedescription = "Any one of your units improves any one skill or attribute a die type immediately."
-        elif feroll == 9:
-            fevent = "The Fog"
-            fedescription = "Dense fog, mist, or smoke rolls drifts over the battlefield. Place two connected Large Burst Templates at the center of one randomly determined board edge. The fog drifts 2d6\" each round in a random direction (roll a d12 and read it like a clock facing). The fog \"bounces\" if it hits an edge in a random direction (so that it never leaves the field)."
-        else:
-            fevent = "Reinforcements"
-            fedescription = "A group of your most common currently-fielded troop type arrives on the field of battle! Place these troops in your deployment area. They act on the Joker this round and are dealt in normally hereafter."
-        myStr = "["+fevent+"("+str(feroll)+")] ==> "+fedescription
-        return myStr
-
-class rdm(std):  #If I get the time and the inspiration - I may try to incorporate a Random Table roller...  I need to think about this one.
-    
-    def __init__(self):
-        std.__init__(self)
-
-    
-    def __str__(self):
-        return myStr
+# (at your option) any later version.
+# # This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: savage.py
+# Authors: Rich Finder
+#        : Alexandre Major
+# Maintainer:
+# Version: 0.2
+#
+# Description: Savage Worlds die roller
+# Permission was granted by Pinnacle to reprint the result descriptions from their tables on Apr 20, 2006 by Simon Lucas
+#
+
+from die import *
+import string
+from random import *
+__version__ = "$Id: savage.py,v 1.2 2007/05/06 16:42:55 digitalxero Exp $"
+
+# Savage, as in Savage Worlds
+class sw(std):
+    #def __init__(self,source=[], wnd=1, loc="rnd", chmod=0):
+    
+    def __init__(self,source=[],fmod=0):
+        std.__init__(self,source)
+
+# these methods return new die objects for specific options
+
+    
+    def fright(self,fearmod=0):
+        return fright(self,fearmod=0)
+
+    
+    def kob(self,wnd,loc):
+        return kob(self,wnd=1,loc="rnd")
+
+    
+    def ooc(self):
+        return ooc(self)
+
+    
+    def ract(self,chmod=0):
+        return ract(self,chmod=0)
+
+    
+    def vcrit(self):
+        return vcrit(self)
+
+    
+    def fortune(self):
+        return fortune(self)
+
+    
+    def freak(self):
+        return freak(self)
+
+    
+    def swdhelps(self):
+        return swdhelps(self)
+
+
+class fright(std):
+    #-----------------The Fright Table
+    #  Rolls on the Fright - which is a 1d20 roll modified by the fear level of a monster.  This function automatically generates
+    #  The appropriate random number and then adds the fear modifier to the rol and displays the result of the roll with the effect
+    #  of that roll.
+    #  Usage:  [fright()]
+    #          [fright(6)] - if the fear modifier of the monster was 6
+    #-----------------
+    
+    def __init__(self,fmod=0):
+        global fear
+        std.__init__(self)
+        fear=fmod
+
+    #def sum(self):
+
+    
+    def __str__(self):
+        global fear
+        iroll = randint(1,20)
+        froll = iroll + fear
+        if froll >= 1 and froll <=4:
+            fresult = "Adrenaline Rush"
+            fdescription = "The hero's \"fight\" response takes over.  He adds +2 to all Trait and damage rolls on his next action."
+        elif froll >= 5 and froll <=8:
+            fresult = "Shaken"
+            fdescription = "The character is Shaken."
+        elif froll >=9 and froll <=12:
+            fresult = "Pankicked"
+            fdescription = "The character immediately moves his full Pace plus running die away from the danger and is Shaken."
+        elif froll >=13 and froll <=16:
+            fresult = "Minor Phobia"
+            fdescription = "The character gains a Minor Phobia Hindrance somehow associated with the trauma."
+        elif froll >=17 and froll <=18:
+            fresult = "Major Phobia"
+            fdescription = "The character gains a Major Phobia Hindrance."
+        elif froll >=19 and froll <= 20:
+            fresult = "The Mark of Fear"
+            fdescription = "The hero is Shaken and also suffers some cosmetic, physical alteration -- a white streak forms in the hero's hair, his eyes twitch constantly, or some other minor physical alteration.  This reduces his Charisma by 1."
+        else:
+            fresult = "Heart Attack"
+            fdescription = "The hero is so overwhelmed with fear that his heart stutters.  He becomes Incapacitated and must make a Vigor roll at -2.  If Successful, he's Shaken and can't attempt to recover for 1d4 rounds.  If he fails, he dies in 2d6 rounds.  A Healing roll at -4 saves the victim's life, but he remains Incapacitated."
+        myStr = "[" + str(iroll) + "+"+str(fear)+"="+str(froll)+"] ==> " + fresult +":  "+ fdescription
+        return myStr
+
+class kob(std):
+    #-------------------The Knockout Blow Table
+    #  This table used when a character has sustained more than 3 wounds.  The number wounds taken that sends a character to the
+    #  Knockout Blow Table is what gets sent with the kob command - not the total number of wounds the character currently has.
+    #  For example - a character has 2 wounds and is hit takes 2 more wounds, this will result in a total of 4 wounds, but the
+    #  number that gets sent to the kob roll is 2, because that is the number of wounds sustained that sent the character to the kob
+    #  table.
+    #
+    #  It is also important to note that if a called shot to particular area was made, that information should be sent with the "roll"
+    #  as well, because the KOB Table may need to determine some dramatic effects for permanent injuries, etc.  If a hit location was sent
+    #  the function will use that information.
+    #  Valid Hit Locations are:  h (head), g (guts), la (left arm), ra (right arm), rl (right leg), ll (left leg), c (crotch)
+    #  Usage = [kob(3)] - If 3 wounds were received that sent the player to the Knockout Blow Table - no called shot
+    #          [kob(3,"h") - If 3 wounds were received that sent the player to the Knockout Blow Table with a called shot to the head
+    #---------------------
+    global wound, loca
+    
+    def __init__(self, wnd, loc="rnd"):
+        global wound, loca
+        std.__init__(self, wnd)
+        #Need to check to make sure that wnd is a number
+        if (int(wnd)):
+            wound = wnd
+            loca = loc
+        else:
+            mystr = "You need to supply a number for the wound."
+            return mystr
+
+    
+    def __str__(self):
+        global wound, loca
+        itbl = "no"
+        if wound == 1:
+            wtype = "Battered and Bruised"
+            wdescription = "If your hero was previously Incapacitated, this result has no further effect. Otherwise, your hero's had the wind knocked out of him. Make a Spirit roll at the beginning of each round. If the roll is successful, he becomes Shaken and can return to the fight."
+        elif wound == 2:  #Need to roll on the Injury table as well
+            wtype = "Incapacitated"
+            wdescription = "Your hero is beaten badly enough to take him out of this fight. He's Incapacitated and must roll on the Injury Table."
+            itbl = "yes"
+        elif wound == 3:
+            wtype = "Bleeding Out"
+            wdescription = "Your hero is bleeding out and Incapacitated. Roll on the Injury Table and make a Vigor roll at the start of each combat round. A failure means the hero has lost too much blood and becomes mortally Wounded (see below; begin rolling for the Mortal Wound in the next round). With a success, he keeps bleeding and must roll again next round. With a raise, or a successful Healing roll, he stops bleeding and is Incapacitated."
+            itbl = "yes"
+        elif wound < 1:
+            wtype = "No Wounds?"
+            wdescription = "The Number of wounds specified was less than one...why are you consulting this chart?"
+        else:
+            wtype = "Mortal Wound"
+            wdescription = "Your hero has suffered a life-threatening wound and will not recover without aid. He is Incapacitated and must roll on the Injury Table. He must also make a Vigor roll at the start of each round. If the roll is failed, he passes on. A Healing roll stabilizes the victim but leaves him Incapacitated."
+            itbl = "yes"
+
+        if itbl == "yes":
+            #Determine if a Hit location was specified already
+            if loca.lower() == "h":
+                iroll = 11
+            elif loca.lower() == "g":
+                iroll = 5
+            elif loca.lower() == "ra":
+                iroll = 3
+                aroll = 2
+            elif loca.lower() == "la":
+                iroll = 3
+                aroll = 1
+            elif loca.lower() == "rl":
+                iroll = 10
+                lroll = 2
+            elif loca.lower() == "ll":
+                iroll = 10
+                lroll = 1
+            elif loca.lower() == "c":
+                iroll = 2
+            else:  #none of the above were provided...wo will need to determine randomly
+                iroll = randint(2,12)
+            #resolve the injury table stuff...
+            if iroll == 2:
+                iloc = "Unmentionables"
+                idescription = "The hero suffers an embarrassing and painful wound to the groin."
+            elif iroll == 3 or iroll == 4:
+                if loca != "ra" and loca != "la":  #  If a hit location was not specified (or not recognized) already, determine randomly
+                    aroll = randint(1,2)
+                if aroll == 1:
+                    warm = "Left"
+                else:
+                    warm = "Right"
+                iloc = warm + " Arm"
+                idescription = "The arm is rendered useless."
+            elif iroll >= 5 and iroll <= 9:  #will need to make another random roll
+                iloc = "Guts"
+                idescription = "Your hero catches one somewhere between the crotch and the chin."
+                groll = randint(1,6)
+                if groll == 1 or groll == 2:
+                    #idescription += " <b>Broken (" + str(groll) + ")</b> His Agility is reduced by a die type (min dr)."
+                    idescription += " <b>Broken (" + str(groll) + ")</b> His Agility is reduced by a die type (min d4)."
+                elif groll == 3 or groll == 4:
+                    idescription += " <b>Battered (" + str(groll) + ")</b> His Vigor is reduced by a die type (min d4)."
+                else:
+                    idescription += " <b>Busted (" + str(groll) + ")</b> His Strength is reduced by a die type (min d4)."
+            elif iroll == 10:
+                if loca != "ll" and loca != "rl":  #  If a hit location was not specified (or not recognized) already, determine randomly
+                    lroll = randint(1,2)
+                if lroll == 1:
+                    wleg = "Left"
+                else:
+                    wleg = "Right"
+                iloc = wleg + " Leg"
+                idescription = "The character's leg is crushed, broken, or mangled. His Pace is reduced by 1."
+            else:  #Will need to make another random roll for this one.
+                iloc = "Head"
+                idescription = "Your hero has suffered a grievous injury to his head."
+                hroll = randint(1,6)  #determine how the head is impacted by the wound
+                if hroll == 1 or hroll ==2:
+                    idescription += "<b>Hideous Scar (" + str(hroll) + ")</b>Your hero now has the Ugly Hindrance."
+                elif hroll == 3 or hroll == 4:
+                    idescription += "<b>Blinded (" + str(hroll) + ")</b> One or both of your hero's eyes was damaged. He gains the Bad Eyes Hindrance."
+                else:
+                    idescription += "<b>Brain Damage (" + str(hroll) + ")</b> Your hero suffers massive trauma to the head. His Smarts is reduced one die type (min d4)."
+            idescription += " Make a Vigor roll applying any wound modifiers. If the Vigor roll is failed, the injury is permanent regardless of healing. If the roll is successful, the effect goes away when all wounds are healed."
+            if iroll == 2:
+                idescription +=" If the injury is permanent, reproduction is out of the question without miracle surgery or magic."
+            if loca != "h" and loca != "g" and loca != "c" and loca != "rl" and loca != "ll" and loca != "ra" and loca != "la":
+                idescription +="<br><br><b>***If the attack that caused the Injury was directed at a specific body part, use that location instead of rolling randomly.***</b>"
+            myStr = "[" + wtype + "] ==>" + wdescription + "<br><br><b>Injury Table Result ("+ str(iroll) +"): </b> [" + iloc + "] ==> " + idescription
+        else:
+            myStr = "[" + wtype + "] ==>" + wdescription
+        return myStr
+
+class ract(std):
+    #----------------------The Reaction Table
+    #  This is used to randomly determine the general mood of NPCs toward the player characters.  This simulates a 2d6 roll
+    #  and displays the reaction.  This roll can be modified by the Charisma of the player(s).
+    #  Usage:  [ract()] - No Charisma modifier
+    #          [ract(2)] - A +2 Charisma modifier
+    #          [ract(-2)] - A -2 Charisma modifier
+    #----------------------
+    global charisma
+    
+    def __init__(self,chmod=0):
+        global charisma
+        std.__init__(self)
+        charisma = chmod
+
+    
+    def __str__(self):
+        global charisma
+        r1roll = randint(2,12)
+        rroll = r1roll + charisma
+        if rroll == 2:
+            reaction = "Hostile"
+            rdescription = "The NPC is openly hostile and does his best to stand in the hero's way. He won't help without an overwhelming reward or payment of some kind."
+        elif rroll >=3 and rroll <=4:
+            reaction = "Unfriendly"
+            rdescription = "The NPC is openly hostile and does his best to stand in the hero's way. He won't help without an overwhelming reward or payment of some kind."
+        elif rroll >=5 and rroll <=9:
+            reaction = "Neutral"
+            rdescription = "The NPC has no particular attitude, and will help for little reward if the task at hand is very easy. If the task is difficult, he'll require substantial payment of some kind."
+        elif rroll >=10 and rroll <=11:
+            reaction = "Friendly"
+            rdescription = "The NPC will go out of his way for the hero. He'll likely do easy tasks for free (or very little), and is willing to do more dangerous tasks for fair pay or other favors."
+        else:
+            reaction = "Helpful"
+            rdescription = "The NPC is anxious to help the hero, and will probably do so for little or no pay depending on the nature of the task."
+        #myStr = "[" + reaction + "(" + str(r1roll) + "+Charisma Mods("+str(charisma)+")="+str(rroll)+")] ==> " + rdescription
+        myStr = "["+str(r1roll)+"+"+str(charisma)+"(charisma modifier)="+str(rroll)+"] ==> "+reaction+":  "+rdescription
+        return myStr
+
+class ooc(std):
+    #--------------------The Out of Control Vehicle Table
+    #  This table is used when a vehicle is injured during combat and must determine what happens to the vehicle.  This is a 2d6
+    #  roll and displays the results of the roll.  This will also display altitude information for flying vehicles.
+    #  Usage:  [ooc()]
+    #--------------------
+    
+    def __init__(self):
+        std.__init__(self)
+
+    
+    def __str__(self):
+        ooroll = randint(2,12)
+        oodescripton = "Something"
+        if ooroll == 2:
+            ooeffect = "Roll Over"
+            rroll = randint(1,6)
+            oodescription = "The vehicle performs a Slip and rolls over "+ str(rroll)+ " time"
+            if rroll < 2:
+                oodescription +="s"
+            oodescription += " in that direction. Roll collision damage for the vehicle and everyone inside. Any exterior-mounted weapons or accessories are ruined."
+        elif ooroll == 3 or ooroll == 4:
+            ooeffect = "Spin"
+            sroll = randint(1,6)
+            froll = randint(1,12)
+            oodescription = "Move the vehicle "+str(sroll)+"\" in the direction of the maneuver, or "+str(sroll)+"\" away from a damaging blow. At the end of the Spin,the vehicle is facing is "+str(froll)+" o'clock."
+        elif ooroll >= 5 and ooroll <= 9:
+            ooeffect = "Skid"
+            sroll = randint(1,4)
+            oodescription = "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
+        elif ooroll == 10 or ooroll == 11:
+            ooeffect = "Slip"
+            sroll = randint(1,6)
+            oodescription = "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
+        else:
+            ooeffect = "Flip"
+            froll = randint(1,4)
+            oodescription = "The vehicle flips end over end "+str(froll)+" times. Move it forward that many increments of its own length. Roll collision damage for the vehicle, its passengers, and anything it hits. "
+            shroll = randint(1,2)
+            if shroll == 1:
+                oodescription += "<br><br><b>Note:</b> If the vehicle is slow and/or heavy (such as a tank) it Slips instead: "
+                sroll = randint(1,6)
+                oodescription += "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
+            else:
+                oodescription += "<br><br><b>Note (GM's discretion):</b> If the vehicle is slow and/or heavy (such as a tank) it Skids instead: "
+                sroll = randint(1,4)
+                oodescription += "Move the vehicle "+str(sroll)+"\" left or right (in the direction of a failed maneuver, or away from a damaging attack)."
+
+        oodescription += "<br><br>For flying vehicles conducting combat in the air, the vehicle"
+        altchange = randint(2,12)
+        if altchange == 2:
+            dwn = randint(2,20)
+            oodescription += " loses "+str(dwn)+"\" of altitude."
+        elif altchange == 3 or altchange == 4:
+            dwn = randint(1,10)
+            oodescription += " loses "+str(dwn)+"\" of altitude."
+        elif altchange >= 5 and altchange <= 9:
+            oodescription += " has no change in altitude."
+        else:
+            altup = randint(1,10)
+            oodescription += " gains "+str(altup)+"\" of altitude."
+        myStr = "[" + ooeffect + "(" + str(ooroll) + ")] ==> " + oodescription
+        return myStr
+
+class vcrit(std):
+    #----------------The Critical Hit Vehicle Table
+    #  This table generates a 2d6 roll to determine the Critical Hit results every time a vehicle takes a wound.  There are no
+    #  modifiers to this roll
+    #  Usage [vcrit()]
+    #----------------
+    
+    def __init__(self):
+        std.__init__(self)
+
+    
+    def __str__(self):
+        chitroll = randint(2,12)
+        if chitroll == 2:
+            cheffect = "Scratch and Dent"
+            chdescription = "The attack merely scratches the paint. There's no permanent damage."
+        elif chitroll == 3:
+            cheffect = "Engine"
+            chdescription = "The engine is hit. Oil leaks, pistons misfire, etc. Acceleration is halved (round down). This does not affect deceleration, however."
+        elif chitroll == 4:
+            cheffect = "Locomotion"
+            chdescription = "The wheels, tracks, or whatever have been hit. Halve the vehicle's Top Speed immediately. If the vehicle is pulled by animals, the shot hits one of them instead."
+        elif chitroll == 5:  #Need to make an additional roll to see what direction the vehicle can turn...
+            cheffect = "Controls"
+            troll = randint(1,2)
+            if troll == 1:
+                aturn = "left"
+            else:
+                aturn = "right"
+            chdescription = "The control system is hit. Until a Repair roll is made, the vehicle can only perform turns to the "+str(aturn)+". This may prohibit certain maneuvers as well."
+        elif chitroll >= 6 and chitroll <=8:
+            cheffect = "Chassis"
+            chdescription = "The vehicle suffers a hit in the body with no special effects."
+        elif chitroll == 9 or chitroll == 10:
+            cheffect = "Crew"
+            chdescription = "A random crew member is hit. The damage from the attack is rerolled. If the character is inside the vehicle, subtract the vehicle's Armor from the damage. Damage caused by an explosion affects all passengers in the vehicle."
+        elif chitroll == 11:
+            cheffect = "Weapon"
+            chdescription = "A random weapon on the side of the vehicle that was hit is destroyed and may no longer be used. If there is no weapon, this is a Chassis hit instead (The vehicle suffers a hit in the body with no special effects)."
+        else:
+            cheffect = "Wrecked"
+            chdescription = "The vehicle is wrecked and automatically goes Out of Control.<br><br><b>[Out of Control]</b> ==>"+str(ooc())
+        myStr = "["+cheffect+" ("+str(chitroll)+")] ==> "+chdescription
+        return myStr
+
+    def ooc(self):
+        return vcritooc(self)
+
+class swdhelps(std):
+    #Display help information for this die roller - it will list all the available commands, and how to use them
+    
+    def __init__(self):
+        std.__init__(self)
+
+    
+    def __str__(self):
+        myStr = "<table border='1' valign='top'>\
+        <tr>\
+            <td colspan='3'>This chart will show you the various commands you can use and what is required, etc.  The <i><b>italicized text</b></i> are optional variables.  Any text that is not italicized and is within parentheses is required.  About the only roll that has a required element is the Knockout Blow roll (kob).</td>\
+        </tr>\
+        <tr>\
+            <td align='center'><b>Die Command</b></td><td align='center' width='55%'><b>Description</b></td><td align='center'width='30%'><b>Example</b></td>\
+        </tr>\
+        <tr>\
+            <td><b>[fright(<i>monster's fear modifier</i>)]</b></td><td>Rolls on the <b>Fright Table</b>.  This command generates a number between 1 and 20 and displays the corresponding entry from the Fright Table.</td><td>[fright()]<br>[fright(6)]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[kob(#ofWounds,<i>hitLocation</i>)]</b></td><td>Rolls on the <b>Knockout Blow Table</b> as well as the <b>Injury Table</b> if necessary.  The number of wounds must be specified, however, the location only needs to be specified if a particular body part was targeted.  If a hit location was targeted, then the following codes should be used:<br>\
+                <ul>\
+                    <li>h = head</li>\
+                    <li>g = guts/other vital areas</li>\
+                    <li>c = crotch/groin</li>\
+                    <li>la = left arm</li>\
+                    <li>ra = right arm</li>\
+                    <li>ll = left leg</li>\
+                    <li>rl = right leg</li>\
+                </ul><br>If no hit location is specified, the hit location will be determined when the roll on the Injury Table is necessary.  When specifiying a hit locations, the code must be entered within double quotes.</td><td><b>3 wounds, no called shot</b><br>[kob(3)]<br><b>2 wounds to the head</b><br>[kob(2,\"h\")]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[ract(<i>Charisma Mods</i>)]</b></td><td>Rolls on the <b>Reaction Table</b>.  Will generate the initial reaction to the PCs.  If the Charisma modifiers are supplied, they will be taken into account as well.  Remember that this table is generally only consulted when the reaction of the NPC is comlpetely unknown to the GM.</td><td><b>Reaction no Charisma Mods</b><br>[ract()]<br><b>Reaction with +2 Charisma Mods</b><br>[ract(2)]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[vcrit()]</b></td><td>Rolls on the <b>Critical Hit Table</b> for vehicles.  If a roll on the Out of Control Chart is necessary, it will automatically roll on that table as well.</td><td>[vcrit()]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[ooc()]</b></td><td>Rolls on the <b>Out of Controll Table</b> for vehicles.  This roll will automatically determine any directions/movement rolls as well.</td><td>[ooc()]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[fortune()]</b></td><td>Rolls on the <b>Fortune Table</b> for the Showdown Skirmish rules.  This roll will automatically roll on the <b>Freak Event Table</b> if necessary</td><td>[fortune()]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[freak()]</b></td><td>Rolls on the <b>Freak Event Table</b>.</td><td>[freak()]</td>\
+        </tr>\
+        <tr>\
+            <td><b>[swdhelps()]</b></td><td>Displays this help list.</td><td>[swdhelps()]</td>\
+        </tr>\
+        </table>"
+        return myStr
+
+class fortune(std):
+    
+    def __init___(self):
+        std.__init__(self)
+
+    
+    def __str__(self):
+        forroll = randint(2,12)
+        if forroll == 2 or forroll == 12: #Need to roll on Freak Event Table
+            fortune = "Freak Event!"
+            fdescription = "Roll on the Freak Event Table.<br><br><b>[Freak Event Table]</b> ==> "+str(freak())
+        elif forroll == 3:
+            fortune = "Twist of Fate"
+            fdescription = "Take a benny from your opponent. If he does not have one, he must immediately remove any one Extra from play."
+        elif forroll == 4:
+            fortune = "The Quick and the Dead"
+            fdescription = "Swap one of your opponent's cards for any one of yours."
+        elif forroll == 5:
+            fortune = "Rally"
+            fdescription = "Pick any one unit on the board with Shaken figures. All those figures recover automatically."
+        elif forroll >= 6 and forroll <= 8:
+            fortune = "Hand of Fate"
+            fdescription = "Gain one extra benny."
+        elif forroll == 9:
+            fortune = "Close Call"
+            fdescription = "Any one of your opponent's units stumbles, becomes confused, or is otherwise disrupted. All its members suffer -2 to their trait rolls this round."
+        elif forroll == 10:
+            fortune = "Teamwork"
+            fdescription = "Pick any one other unit within 12\" of this one. Discard its Action Card. It acts on the Joker along with this unit, and gains the usual bonuses as well."
+        else:
+            fortune = "Out of Ammo"
+            fdescription = "Pick any one enemy unit. It's out of ammo or Power Points (your choice). If this result cannot be applied, you gain a benny instead."
+        myStr = "["+fortune+" ("+str(forroll)+")] ==>"+fdescription
+        return myStr
+
+    
+    def freak(self):
+        return fortunefreak(self)
+
+class freak(std):
+    
+    def __init__(self):
+        std.__init__(self)
+
+    
+    def __str__(self):
+        feroll = randint(1,10)
+        if feroll == 1:
+            fevent = "Storm"
+            fedescription = "A sudden storm rolls in. Rain begins to pour and visibility is limited to 12\". All attack rolls are at -1, and black powder weapons don't work at all. The round after this event, all streams become impassable, even at fords. Only bridges remain."
+        elif feroll == 2:
+            fevent = "Fire!"
+            fedescription = "Fire breaks out on the board! Roll randomly among each occupied building, patch of trees, or other flammable terrain type. If none of these are occupied, roll randomly among all flammable terrain pieces. The entire building or forest catches fire this round and causes 2d6 damage to everything within. The fire continues for the rest of the game--unless a storm comes, which quenches it immediately.<br><br>At the beginning of each turn thereafter, roll 1d6 for each flammable structure within 4\" (adjacent buildings, another patch of forest, etc.). On a 4-6, that structure catches fire as well. Check to see if these new fires spread in the following rounds."
+        elif feroll == 3:
+            fevent = "Blood Ties"
+            fedescription = "One of the Wild Cards on the other side is related or has some other special bond with one of your heroes (a Wild Card of your choice). For the rest of the battle, these two won't attack each other directly unless there are no other targets on the board."
+        elif feroll == 4:
+            fevent = "Death of a Hero"
+            inspireroll = randint(1,2)
+            if inspireroll == 1:
+                fedescription ="The next time one of your Wild Cards dies, his noble sacrifice triggers new resolve in his companions.  When your next Wild Card is Incapacitated the rest of your force is inspired by his legacy and adds +1 to all their rolls until another of your Wild Cards is killed."
+            else:
+                fedescription = "The next time one of your Wild Cards dies, his noble sacrifice triggers bone-chilling dread in his companions. When your next Wild Card is Incapacitated the rest of your force is filled with dread. They subtract -1 from all their rolls for the rest of the game until an <i>enemy</i> Wild Card is slain."
+        elif feroll == 5:
+            fevent = "Fickle Fate"
+            fedescription = "Fate favors the underdog. The side with the fewest bennies draws until it has the same number as their foe. Place these in the common pool."
+        elif feroll == 6:
+            fevent = "Back from the Dead"
+            fedescription = "One of your dead was just knocked unconscious. He returns in the spot where he fell. If this is a Wild Card, he returns with but a single wound."
+        elif feroll == 7:
+            fevent = "Bitter Cold/Heat"
+            fedescription = "The weather heats up or cools down, depending on your environment. All troops become tired or bogged down and reduce their running rolls by half for the rest of the game."
+        elif feroll == 8:
+            fevent = "Battle Tested"
+            fedescription = "Any one of your units improves any one skill or attribute a die type immediately."
+        elif feroll == 9:
+            fevent = "The Fog"
+            fedescription = "Dense fog, mist, or smoke rolls drifts over the battlefield. Place two connected Large Burst Templates at the center of one randomly determined board edge. The fog drifts 2d6\" each round in a random direction (roll a d12 and read it like a clock facing). The fog \"bounces\" if it hits an edge in a random direction (so that it never leaves the field)."
+        else:
+            fevent = "Reinforcements"
+            fedescription = "A group of your most common currently-fielded troop type arrives on the field of battle! Place these troops in your deployment area. They act on the Joker this round and are dealt in normally hereafter."
+        myStr = "["+fevent+"("+str(feroll)+")] ==> "+fedescription
+        return myStr
+
+class rdm(std):  #If I get the time and the inspiration - I may try to incorporate a Random Table roller...  I need to think about this one.
+    
+    def __init__(self):
+        std.__init__(self)
+
+    
+    def __str__(self):
+        return myStr
--- a/orpg/dieroller/shadowrun.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/shadowrun.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,151 +1,151 @@
-## a vs die roller as used by WOD games
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: shadowrun.py
-# Author: Michael Edwards (AKA akoman)
-# Maintainer:
-# Version: 1.0
-#
-# Description: A modified form of the World of Darkness die roller to
-#              conform to ShadowRun rules-sets. Thanks to the ORPG team
-#              for the original die rollers.
-#              Thanks to tdb30_ for letting me think out loud with him.
-#         I take my hint from the HERO dieroller: It creates for wildly variant options
-#         Further, .vs and .open do not work together in any logical way. One method of
-#         chaining them results in a [Bad Dice Format] and the other results in a standard
-#         output from calling .open()
-
-#         vs is a classic 'comparison' method function, with one difference. It uses a
-#           c&p'ed .open(int) from die.py but makes sure that once the target has been exceeded
-#           then it stops rerolling. The overhead from additional boolean checking is probably
-#           greater than the gains from not over-rolling. The behaviour is in-line with
-#           Shadowrun Third Edition which recommends not rolling once you've exceeded the target
-#         open is an override of .open(int) in die.py. The reason is pretty simple. In die.py open
-#           refers to 'open-ended rolling' whereas in Shadowrun it refers to an 'Open Test' where
-#           the objective is to find the highest die total out of rolled dice. This is then generally
-#           used as the target in a 'Success Test' (for which .vs functions)
-from die import *
+## a vs die roller as used by WOD games
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: shadowrun.py
+# Author: Michael Edwards (AKA akoman)
+# Maintainer:
+# Version: 1.0
+#
+# Description: A modified form of the World of Darkness die roller to
+#              conform to ShadowRun rules-sets. Thanks to the ORPG team
+#              for the original die rollers.
+#              Thanks to tdb30_ for letting me think out loud with him.
+#         I take my hint from the HERO dieroller: It creates for wildly variant options
+#         Further, .vs and .open do not work together in any logical way. One method of
+#         chaining them results in a [Bad Dice Format] and the other results in a standard
+#         output from calling .open()
+
+#         vs is a classic 'comparison' method function, with one difference. It uses a
+#           c&p'ed .open(int) from die.py but makes sure that once the target has been exceeded
+#           then it stops rerolling. The overhead from additional boolean checking is probably
+#           greater than the gains from not over-rolling. The behaviour is in-line with
+#           Shadowrun Third Edition which recommends not rolling once you've exceeded the target
+#         open is an override of .open(int) in die.py. The reason is pretty simple. In die.py open
+#           refers to 'open-ended rolling' whereas in Shadowrun it refers to an 'Open Test' where
+#           the objective is to find the highest die total out of rolled dice. This is then generally
+#           used as the target in a 'Success Test' (for which .vs functions)
+from die import *
+
+__version__ = "1.0"
+
+class shadowrun(std):
+    
+    def __init__(self,source=[],target=2):
+        std.__init__(self,source)
+
+    
+    def vs(self,target):
+        return srVs(self, target)
+
+    
+    def open(self):
+        return srOpen(self)
+
+class srVs(std):
+    
+    def __init__(self,source=[], target=2):
+        std.__init__(self, source)
+        # In Shadowrun, not target number may be below 2. All defaults are set to two and any
+        # thing lower is scaled up.
+        if target < 2:
+            self.target = 2
+        else:
+            self.target = target
+        # Shadowrun was built to use the d6 but in the interests of experimentation I have
+        # made the dieroller generic enough to use any die type
+        self.openended(self[0].sides)
 
-__version__ = "1.0"
-
-class shadowrun(std):
-    
-    def __init__(self,source=[],target=2):
-        std.__init__(self,source)
-
-    
-    def vs(self,target):
-        return srVs(self, target)
-
-    
-    def open(self):
-        return srOpen(self)
-
-class srVs(std):
-    
-    def __init__(self,source=[], target=2):
-        std.__init__(self, source)
-        # In Shadowrun, not target number may be below 2. All defaults are set to two and any
-        # thing lower is scaled up.
-        if target < 2:
-            self.target = 2
-        else:
-            self.target = target
-        # Shadowrun was built to use the d6 but in the interests of experimentation I have
-        # made the dieroller generic enough to use any die type
-        self.openended(self[0].sides)
-
-    
-    def openended(self,num):
-        if num <= 1:
-            self
-        done = 1
-        for i in range(len(self.data)):
-            if (self.data[i].lastroll() >= num) and (self.data[i] < self.target):
-                self.data[i].extraroll()
-                done = 0
-        if done:
-            return self
-        else:
-            return self.openended(num)
-
-    
-    def __sum__(self):
-        s = 0
-        for r in self.data:
-            if r >= self.target:
-                s += 1
-        return s
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            myStr += "] vs " + str(self.target) + " for a result of (" + str(self.sum()) + ")"
-        else:
-            myStr = "[] = (0)"
-
-        return myStr
-
-class srOpen(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-        self.openended(self[0].sides)
-
-    
-    def openended(self,num):
-        if num <= 1:
-            self
-        done = 1
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() == num:
-                self.data[i].extraroll()
-                done = 0
-        if done:
-            return self
-        else:
-            return self.openended(num)
-
-    
-    def __sum__(self):
-        s = 0
-        for r in self.data:
-            if r > s:
-                s = r
-        return s
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            self.takeHighest(1)
-            myStr += "] for a result of (" + str(self.__sum__().__int__()) + ")"
-        else:
-            myStr = "[] = (0)"
-
-        return myStr
+    
+    def openended(self,num):
+        if num <= 1:
+            self
+        done = 1
+        for i in range(len(self.data)):
+            if (self.data[i].lastroll() >= num) and (self.data[i] < self.target):
+                self.data[i].extraroll()
+                done = 0
+        if done:
+            return self
+        else:
+            return self.openended(num)
+
+    
+    def __sum__(self):
+        s = 0
+        for r in self.data:
+            if r >= self.target:
+                s += 1
+        return s
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            myStr += "] vs " + str(self.target) + " for a result of (" + str(self.sum()) + ")"
+        else:
+            myStr = "[] = (0)"
+
+        return myStr
+
+class srOpen(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+        self.openended(self[0].sides)
+
+    
+    def openended(self,num):
+        if num <= 1:
+            self
+        done = 1
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() == num:
+                self.data[i].extraroll()
+                done = 0
+        if done:
+            return self
+        else:
+            return self.openended(num)
+
+    
+    def __sum__(self):
+        s = 0
+        for r in self.data:
+            if r > s:
+                s = r
+        return s
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            self.takeHighest(1)
+            myStr += "] for a result of (" + str(self.__sum__().__int__()) + ")"
+        else:
+            myStr = "[] = (0)"
+
+        return myStr
--- a/orpg/dieroller/sr4.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/sr4.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,246 +1,246 @@
-## a vs die roller as used by WOD games
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#   openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: sr4.py
-# Author: Veggiesama, ripped straight from Michael Edwards (AKA akoman)
-# Maintainer:
-# Version: 1.1
-#
-# 1.1: Now with glitch and critical glitch detection!
-# 1.1: Cleaned up some of the output to make it simpler.
-#
-# Description: Modified from the original Shadowrun dieroller by akoman,
-#              but altered to follow the new Shadowrun 4th Ed dice system.
-#
-#              SR4 VS
-#              Typing [Xd6.vs(Y)] will roll X dice, checking each die
-#              roll against the MIN_TARGET_NUMBER (default: 5). If it
-#              meets or beats it, it counts as a hit. If the total hits
-#              meet or beat the Y value (threshold), there's a success.
-#
-#              SR4 EDGE VS
-#              Identical to the above function, except it looks like
-#              [Xd6.edge(Y)] and follows the "Rule of Six". That rule
-#              states any roll of 6 is counted as a hit and rerolled
-#              with a potential to score more hits. The "Edge" bonus
-#              dice must be included into X.
-#
-#              SR4 INIT
-#              Typing [Xd6.init(Y)] will roll X dice, checking each
-#              die for a hit. All hits are added to Y (the init attrib
-#              of the player), to give an Init Score for the combat.
-#
-#              SR4 EDGE INIT
-#              Typing [Xd6.initedge(Y)] or [Xd6.edgeinit(Y)] will do
-#              as above, except adding the possibility of Edge dice.
-#
-#              Note about non-traditional uses:
-#              - D6's are not required. This script will work with any
-#                die possible, and the "Rule of Six" will only trigger
-#                on the highest die roll possible. Not throughly tested.
-#              - If you want to alter the minimum target number (ex.
-#                score a hit on a 4, 5, or 6), scroll down and change
-#                the global value MIN_TARGET_NUMBER to your liking.
-
-from die import *
-
-__version__ = "1.1"
-
-MIN_TARGET_NUMBER = 5
-GLITCH_NUMBER = 1
-
-class sr4(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-        self.threshold = None
-        self.init_attrib = None
-
-    
-    def vs(self,threshold=0):
-        return sr4vs(self, threshold)
-
-    
-    def edge(self,threshold=0):
-        return sr4vs(self, threshold, 1)
-
-    
-    def init(self,init_attrib=0):
-        return sr4init(self, init_attrib)
-
-    
-    def initedge(self,init_attrib=0):
-        return sr4init(self, init_attrib, 1)
-    
-    def edgeinit(self,init_attrib=0):
-        return sr4init(self, init_attrib, 1)
-
-    
-    def countEdge(self,num):
-        if num <= 1:
-            self
-        done = 1
-        for i in range(len(self.data)):
-            if (self.data[i].lastroll() >= num):
-               # counts every rerolled 6 as a hit
-               self.hits += 1
-               self.data[i].extraroll()
-               self.total += 1
-               done = 0
-            elif (self.data[i].lastroll() <= GLITCH_NUMBER):
-                self.ones += 1
-            self.total += 1
-        if done:
-            return self
-        else:
-            return self.countEdge(num)
-
-    
-    def countHits(self,num):
-        for i in range(len(self.data)):
-            if (self.data[i].lastroll() >= MIN_TARGET_NUMBER):
-                # (Rule of Six taken into account in countEdge(), not here)
-                self.hits += 1
-            elif (self.data[i].lastroll() <= GLITCH_NUMBER):
-                self.ones += 1
-            self.total += 1
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            self.hits = 0
-            self.ones = 0
-            self.total = 0
-            for i in range(len(self.data)):
-                if (self.data[i].lastroll() >= MIN_TARGET_NUMBER):
-                    self.hits += 1
-                elif (self.data[i].lastroll() <= GLITCH_NUMBER):
-                    self.ones += 1
-                self.total += 1
-            firstpass = 0
-            myStr = "["
-            for a in self.data[0:]:
-                if firstpass != 0:
-                    myStr += ","
-                firstpass = 1
-                if a >= MIN_TARGET_NUMBER:
-                    myStr += "<B>" + str(a) + "</B>"
-                elif a <= GLITCH_NUMBER:
-                    myStr += "<i>" + str(a) + "</i>"
-                else:
-                    myStr += str(a)
-            myStr += "] " + CheckIfGlitch(self.ones, self.hits, self.total)
-            myStr += "Hits: (" + str(self.hits) + ")"
-        else:
-            myStr = "[] = (0)"
-        return myStr
-
-class sr4init(sr4):
-    
-    def __init__(self,source=[],init_attrib=1,edge=0):
-        std.__init__(self,source)
-        if init_attrib < 2:
-            self.init_attrib = 2
-        else:
-            self.init_attrib = init_attrib
-        self.dicesides = self[0].sides
-        self.hits = 0
-        self.ones = 0
-        self.total = 0
-        if edge:
-            self.countEdge(self.dicesides)
-        self.countHits(self.dicesides)
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            firstpass = 0
-            myStr = "["
-            for a in self.data[0:]:
-                if firstpass != 0:
-                    myStr += ","
-                firstpass = 1
-                if a >= MIN_TARGET_NUMBER:
-                    myStr += "<B>" + str(a) + "</B>"
-                elif a <= GLITCH_NUMBER:
-                    myStr += "<i>" + str(a) + "</i>"
-                else:
-                    myStr += str(a)
-            myStr += "] " + CheckIfGlitch(self.ones, self.hits, self.total)
-            init_score = str(self.init_attrib + self.hits)
-            myStr += "InitScore: " + str(self.init_attrib) + "+"
-            myStr += str(self.hits) + " = (" + init_score + ")"
-        else:
-            myStr = "[] = (0)"
-        return myStr
-
-class sr4vs(sr4):
-    
-    def __init__(self,source=[], threshold=1, edge=0):
-        std.__init__(self, source)
-        if threshold < 0:
-            self.threshold = 0
-        else:
-            self.threshold = threshold
-        self.dicesides = self[0].sides
-        self.hits = 0
-        self.ones = 0
-        self.total = 0
-        if edge:
-            self.countEdge(self.dicesides)
-        self.countHits(self.dicesides)
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            firstpass = 0
-            myStr = "["
-            for a in self.data[0:]:
-                if firstpass != 0:
-                    myStr += ","
-                firstpass = 1
-                if a >= MIN_TARGET_NUMBER:
-                    myStr += "<B>" + str(a) + "</B>"
-                elif a <= GLITCH_NUMBER:
-                    myStr += "<i>" + str(a) + "</i>"
-                else:
-                    myStr += str(a)
-            #myStr += "] Threshold=" + str(self.threshold)
-            myStr += "] vs " + str(self.threshold) + " "
-            myStr += CheckIfGlitch(self.ones, self.hits, self.total)
-            if self.hits >= self.threshold:
-                myStr += "*SUCCESS* "
-            else:
-                myStr += "*FAILURE* "
-            myStr += "Hits: (" + str(self.hits) + ")"
-        else:
-            myStr = "[] = (0)"
-        return myStr
-
-
-def CheckIfGlitch(ones, hits, total_dice):
-    if (ones * 2) >= total_dice:
-        if hits >= 1:
-            return "*GLITCH* "
-        else:
-            return "*CRITICAL GLITCH* "
-    else:
-        return ""
+## a vs die roller as used by WOD games
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#   openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: sr4.py
+# Author: Veggiesama, ripped straight from Michael Edwards (AKA akoman)
+# Maintainer:
+# Version: 1.1
+#
+# 1.1: Now with glitch and critical glitch detection!
+# 1.1: Cleaned up some of the output to make it simpler.
+#
+# Description: Modified from the original Shadowrun dieroller by akoman,
+#              but altered to follow the new Shadowrun 4th Ed dice system.
+#
+#              SR4 VS
+#              Typing [Xd6.vs(Y)] will roll X dice, checking each die
+#              roll against the MIN_TARGET_NUMBER (default: 5). If it
+#              meets or beats it, it counts as a hit. If the total hits
+#              meet or beat the Y value (threshold), there's a success.
+#
+#              SR4 EDGE VS
+#              Identical to the above function, except it looks like
+#              [Xd6.edge(Y)] and follows the "Rule of Six". That rule
+#              states any roll of 6 is counted as a hit and rerolled
+#              with a potential to score more hits. The "Edge" bonus
+#              dice must be included into X.
+#
+#              SR4 INIT
+#              Typing [Xd6.init(Y)] will roll X dice, checking each
+#              die for a hit. All hits are added to Y (the init attrib
+#              of the player), to give an Init Score for the combat.
+#
+#              SR4 EDGE INIT
+#              Typing [Xd6.initedge(Y)] or [Xd6.edgeinit(Y)] will do
+#              as above, except adding the possibility of Edge dice.
+#
+#              Note about non-traditional uses:
+#              - D6's are not required. This script will work with any
+#                die possible, and the "Rule of Six" will only trigger
+#                on the highest die roll possible. Not throughly tested.
+#              - If you want to alter the minimum target number (ex.
+#                score a hit on a 4, 5, or 6), scroll down and change
+#                the global value MIN_TARGET_NUMBER to your liking.
+
+from die import *
+
+__version__ = "1.1"
+
+MIN_TARGET_NUMBER = 5
+GLITCH_NUMBER = 1
+
+class sr4(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+        self.threshold = None
+        self.init_attrib = None
+
+    
+    def vs(self,threshold=0):
+        return sr4vs(self, threshold)
+
+    
+    def edge(self,threshold=0):
+        return sr4vs(self, threshold, 1)
+
+    
+    def init(self,init_attrib=0):
+        return sr4init(self, init_attrib)
+
+    
+    def initedge(self,init_attrib=0):
+        return sr4init(self, init_attrib, 1)
+    
+    def edgeinit(self,init_attrib=0):
+        return sr4init(self, init_attrib, 1)
+
+    
+    def countEdge(self,num):
+        if num <= 1:
+            self
+        done = 1
+        for i in range(len(self.data)):
+            if (self.data[i].lastroll() >= num):
+               # counts every rerolled 6 as a hit
+               self.hits += 1
+               self.data[i].extraroll()
+               self.total += 1
+               done = 0
+            elif (self.data[i].lastroll() <= GLITCH_NUMBER):
+                self.ones += 1
+            self.total += 1
+        if done:
+            return self
+        else:
+            return self.countEdge(num)
+
+    
+    def countHits(self,num):
+        for i in range(len(self.data)):
+            if (self.data[i].lastroll() >= MIN_TARGET_NUMBER):
+                # (Rule of Six taken into account in countEdge(), not here)
+                self.hits += 1
+            elif (self.data[i].lastroll() <= GLITCH_NUMBER):
+                self.ones += 1
+            self.total += 1
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            self.hits = 0
+            self.ones = 0
+            self.total = 0
+            for i in range(len(self.data)):
+                if (self.data[i].lastroll() >= MIN_TARGET_NUMBER):
+                    self.hits += 1
+                elif (self.data[i].lastroll() <= GLITCH_NUMBER):
+                    self.ones += 1
+                self.total += 1
+            firstpass = 0
+            myStr = "["
+            for a in self.data[0:]:
+                if firstpass != 0:
+                    myStr += ","
+                firstpass = 1
+                if a >= MIN_TARGET_NUMBER:
+                    myStr += "<B>" + str(a) + "</B>"
+                elif a <= GLITCH_NUMBER:
+                    myStr += "<i>" + str(a) + "</i>"
+                else:
+                    myStr += str(a)
+            myStr += "] " + CheckIfGlitch(self.ones, self.hits, self.total)
+            myStr += "Hits: (" + str(self.hits) + ")"
+        else:
+            myStr = "[] = (0)"
+        return myStr
+
+class sr4init(sr4):
+    
+    def __init__(self,source=[],init_attrib=1,edge=0):
+        std.__init__(self,source)
+        if init_attrib < 2:
+            self.init_attrib = 2
+        else:
+            self.init_attrib = init_attrib
+        self.dicesides = self[0].sides
+        self.hits = 0
+        self.ones = 0
+        self.total = 0
+        if edge:
+            self.countEdge(self.dicesides)
+        self.countHits(self.dicesides)
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            firstpass = 0
+            myStr = "["
+            for a in self.data[0:]:
+                if firstpass != 0:
+                    myStr += ","
+                firstpass = 1
+                if a >= MIN_TARGET_NUMBER:
+                    myStr += "<B>" + str(a) + "</B>"
+                elif a <= GLITCH_NUMBER:
+                    myStr += "<i>" + str(a) + "</i>"
+                else:
+                    myStr += str(a)
+            myStr += "] " + CheckIfGlitch(self.ones, self.hits, self.total)
+            init_score = str(self.init_attrib + self.hits)
+            myStr += "InitScore: " + str(self.init_attrib) + "+"
+            myStr += str(self.hits) + " = (" + init_score + ")"
+        else:
+            myStr = "[] = (0)"
+        return myStr
+
+class sr4vs(sr4):
+    
+    def __init__(self,source=[], threshold=1, edge=0):
+        std.__init__(self, source)
+        if threshold < 0:
+            self.threshold = 0
+        else:
+            self.threshold = threshold
+        self.dicesides = self[0].sides
+        self.hits = 0
+        self.ones = 0
+        self.total = 0
+        if edge:
+            self.countEdge(self.dicesides)
+        self.countHits(self.dicesides)
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            firstpass = 0
+            myStr = "["
+            for a in self.data[0:]:
+                if firstpass != 0:
+                    myStr += ","
+                firstpass = 1
+                if a >= MIN_TARGET_NUMBER:
+                    myStr += "<B>" + str(a) + "</B>"
+                elif a <= GLITCH_NUMBER:
+                    myStr += "<i>" + str(a) + "</i>"
+                else:
+                    myStr += str(a)
+            #myStr += "] Threshold=" + str(self.threshold)
+            myStr += "] vs " + str(self.threshold) + " "
+            myStr += CheckIfGlitch(self.ones, self.hits, self.total)
+            if self.hits >= self.threshold:
+                myStr += "*SUCCESS* "
+            else:
+                myStr += "*FAILURE* "
+            myStr += "Hits: (" + str(self.hits) + ")"
+        else:
+            myStr = "[] = (0)"
+        return myStr
+
+
+def CheckIfGlitch(ones, hits, total_dice):
+    if (ones * 2) >= total_dice:
+        if hits >= 1:
+            return "*GLITCH* "
+        else:
+            return "*CRITICAL GLITCH* "
+    else:
+        return ""
--- a/orpg/dieroller/srex.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/srex.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,205 +1,205 @@
-## a vs die roller as used by WOD games
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: srex.py
-# Original Author: Michael Edwards (AKA akoman)
-# Maintainer:
-# Original Version: 1.0
-#
-# Description: A modified form of the World of Darkness die roller to
-#              conform to ShadowRun rules-sets. Thanks to the ORPG team
-#              for the original die rollers.
-#              Thanks to tdb30_ for letting me think out loud with him.
-#         I take my hint from the HERO dieroller: It creates for wildly variant options
-#         Further, .vs and .open do not work together in any logical way. One method of
-#         chaining them results in a [Bad Dice Format] and the other results in a standard
-#         output from calling .open()
-
-#         vs is a classic 'comparison' method function, with one difference. It uses a
-#           c&p'ed .open(int) from die.py but makes sure that once the target has been exceeded
-#           then it stops rerolling. The overhead from additional boolean checking is probably
-#           greater than the gains from not over-rolling. The behaviour is in-line with
-#           Shadowrun Third Edition which recommends not rolling once you've exceeded the target
-#         open is an override of .open(int) in die.py. The reason is pretty simple. In die.py open
-#           refers to 'open-ended rolling' whereas in Shadowrun it refers to an 'Open Test' where
-#           the objective is to find the highest die total out of rolled dice. This is then generally
-#           used as the target in a 'Success Test' (for which .vs functions)
-
-# Modified by: Darloth
-# Mod Version: 1.1
-# Modified Desc:
-#       I've altered the vs call to make it report successes against every target number (tn)
-#       in a specified (default 3) range, with the original as median.
-#       This reduces rerolling if the TN was calculated incorrectly, and is also very useful
-#       when people are rolling against multiple TNs, which is the case with most area-effect spells.
-#       To aid in picking the specified TN out from the others, it will be in bold.
-#       vswide is a version which can be used with no arguments, or can be used to get a very wide range, by
-#       directly specifying the upper bound (Which is limited to 30)
-
-from die import *
-
-__version__ = "1.1"
-
-class srex(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-    
-    def vs(self,actualtarget=4,tnrange=3):        #reports all tns around specified, max distance of range
-        return srVs(self,actualtarget,(actualtarget-tnrange),(actualtarget+tnrange))
-
-    
-    def vswide(self,actualtarget=4,maxtarget=12):    #wide simply means it reports TNs from 2 to a specified max.
-        return srVs(self,actualtarget,2,maxtarget)
-
-    
-    def open(self):         #unchanged from standard shadowrun open.
-        return srOpen(self)
-
-class srVs(std):
-    
-    def __init__(self,source=[],actualtarget=4,mintn=2,maxtn=12):
-        std.__init__(self, source)
-        if actualtarget > 30:
-            actualtarget = 30
-        if mintn > 30:
-            mintn = 30
-        if maxtn > 30:
-            maxtn = 30
-        # In Shadowrun, not target number may be below 2. Any
-        # thing lower is scaled up.
-        if actualtarget < 2:
-            self.target = 2
-        else:
-            self.target = actualtarget
-        #if the target number is higher than max (Mainly for wide rolls) then increase max to tn
-        if actualtarget > maxtn:
-            maxtn = actualtarget
-        #store minimum for later use as well, also in result printing section.
-        if mintn < 2:
-            self.mintn = 2
-        else:
-            self.mintn = mintn
-        self.maxtn = maxtn #store for later use in printing results. (Yeah, these comments are now disordered)
-
-        # Shadowrun was built to use the d6 but in the interests of experimentation I have
-        # made the dieroller generic enough to use any die type
-        self.openended(self[0].sides)
-
-    
-    def openended(self,num):
-        if num <= 1:
-            self
-        done = 1
-
-        #reroll dice if they hit the highest number, until they are greater than the max TN (recursive)
-        for i in range(len(self.data)):
-            if (self.data[i].lastroll() >= num) and (self.data[i] < self.maxtn):
-                self.data[i].extraroll()
-                done = 0
-        if done:
-            return self
-        else:
-            return self.openended(num)
-
-    #count successes, by looping through each die, and checking it against the currently set TN
-    
-    def __sum__(self):
-        s = 0
-        for r in self.data:
-            if r >= self.target:
-                s += 1
-        return s
-
-    #a modified sum, but this one takes a target argument, and is there because otherwise it is difficult to loop through
-    #tns counting successes against each one without changing target, which is rather dangerous as the original TN could
-    #easily be lost.
-    
-    def xsum(self,curtarget):
-        s = 0
-        for r in self.data:
-            if r >= curtarget:
-                s += 1
-        return s
-
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            myStr += "] Results: "
-            #cycle through from mintn to maxtn, summing successes for each separate TN
-            for targ in range(self.mintn,self.maxtn+1):
-                if targ == self.target:
-                    myStr += "<b>"
-                myStr += "(" + str(self.xsum(targ)) + "&nbsp;vs&nbsp;" + str(targ) + ") "
-                if targ == self.target:
-                    myStr += "</b>"
-        else:
-            myStr = "[] = (0)"
-
-        return myStr
-
-class srOpen(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-        self.openended(self[0].sides)
-
-    
-    def openended(self,num):
-        if num <= 1:
-            self
-        done = 1
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() == num:
-                self.data[i].extraroll()
-                done = 0
-        if done:
-            return self
-        else:
-            return self.openended(num)
-
-    
-    def __sum__(self):
-        s = 0
-        for r in self.data:
-            if r > s:
-                s = r
-        return s
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            self.takeHighest(1)
-            myStr += "] for a result of (" + str(self.__sum__().__int__()) + ")"
-        else:
-            myStr = "[] = (0)"
-
-        return myStr
+## a vs die roller as used by WOD games
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: srex.py
+# Original Author: Michael Edwards (AKA akoman)
+# Maintainer:
+# Original Version: 1.0
+#
+# Description: A modified form of the World of Darkness die roller to
+#              conform to ShadowRun rules-sets. Thanks to the ORPG team
+#              for the original die rollers.
+#              Thanks to tdb30_ for letting me think out loud with him.
+#         I take my hint from the HERO dieroller: It creates for wildly variant options
+#         Further, .vs and .open do not work together in any logical way. One method of
+#         chaining them results in a [Bad Dice Format] and the other results in a standard
+#         output from calling .open()
+
+#         vs is a classic 'comparison' method function, with one difference. It uses a
+#           c&p'ed .open(int) from die.py but makes sure that once the target has been exceeded
+#           then it stops rerolling. The overhead from additional boolean checking is probably
+#           greater than the gains from not over-rolling. The behaviour is in-line with
+#           Shadowrun Third Edition which recommends not rolling once you've exceeded the target
+#         open is an override of .open(int) in die.py. The reason is pretty simple. In die.py open
+#           refers to 'open-ended rolling' whereas in Shadowrun it refers to an 'Open Test' where
+#           the objective is to find the highest die total out of rolled dice. This is then generally
+#           used as the target in a 'Success Test' (for which .vs functions)
+
+# Modified by: Darloth
+# Mod Version: 1.1
+# Modified Desc:
+#       I've altered the vs call to make it report successes against every target number (tn)
+#       in a specified (default 3) range, with the original as median.
+#       This reduces rerolling if the TN was calculated incorrectly, and is also very useful
+#       when people are rolling against multiple TNs, which is the case with most area-effect spells.
+#       To aid in picking the specified TN out from the others, it will be in bold.
+#       vswide is a version which can be used with no arguments, or can be used to get a very wide range, by
+#       directly specifying the upper bound (Which is limited to 30)
+
+from die import *
+
+__version__ = "1.1"
+
+class srex(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+    
+    def vs(self,actualtarget=4,tnrange=3):        #reports all tns around specified, max distance of range
+        return srVs(self,actualtarget,(actualtarget-tnrange),(actualtarget+tnrange))
+
+    
+    def vswide(self,actualtarget=4,maxtarget=12):    #wide simply means it reports TNs from 2 to a specified max.
+        return srVs(self,actualtarget,2,maxtarget)
+
+    
+    def open(self):         #unchanged from standard shadowrun open.
+        return srOpen(self)
+
+class srVs(std):
+    
+    def __init__(self,source=[],actualtarget=4,mintn=2,maxtn=12):
+        std.__init__(self, source)
+        if actualtarget > 30:
+            actualtarget = 30
+        if mintn > 30:
+            mintn = 30
+        if maxtn > 30:
+            maxtn = 30
+        # In Shadowrun, not target number may be below 2. Any
+        # thing lower is scaled up.
+        if actualtarget < 2:
+            self.target = 2
+        else:
+            self.target = actualtarget
+        #if the target number is higher than max (Mainly for wide rolls) then increase max to tn
+        if actualtarget > maxtn:
+            maxtn = actualtarget
+        #store minimum for later use as well, also in result printing section.
+        if mintn < 2:
+            self.mintn = 2
+        else:
+            self.mintn = mintn
+        self.maxtn = maxtn #store for later use in printing results. (Yeah, these comments are now disordered)
+
+        # Shadowrun was built to use the d6 but in the interests of experimentation I have
+        # made the dieroller generic enough to use any die type
+        self.openended(self[0].sides)
+
+    
+    def openended(self,num):
+        if num <= 1:
+            self
+        done = 1
+
+        #reroll dice if they hit the highest number, until they are greater than the max TN (recursive)
+        for i in range(len(self.data)):
+            if (self.data[i].lastroll() >= num) and (self.data[i] < self.maxtn):
+                self.data[i].extraroll()
+                done = 0
+        if done:
+            return self
+        else:
+            return self.openended(num)
+
+    #count successes, by looping through each die, and checking it against the currently set TN
+    
+    def __sum__(self):
+        s = 0
+        for r in self.data:
+            if r >= self.target:
+                s += 1
+        return s
+
+    #a modified sum, but this one takes a target argument, and is there because otherwise it is difficult to loop through
+    #tns counting successes against each one without changing target, which is rather dangerous as the original TN could
+    #easily be lost.
+    
+    def xsum(self,curtarget):
+        s = 0
+        for r in self.data:
+            if r >= curtarget:
+                s += 1
+        return s
+
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            myStr += "] Results: "
+            #cycle through from mintn to maxtn, summing successes for each separate TN
+            for targ in range(self.mintn,self.maxtn+1):
+                if targ == self.target:
+                    myStr += "<b>"
+                myStr += "(" + str(self.xsum(targ)) + "&nbsp;vs&nbsp;" + str(targ) + ") "
+                if targ == self.target:
+                    myStr += "</b>"
+        else:
+            myStr = "[] = (0)"
+
+        return myStr
+
+class srOpen(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+        self.openended(self[0].sides)
+
+    
+    def openended(self,num):
+        if num <= 1:
+            self
+        done = 1
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() == num:
+                self.data[i].extraroll()
+                done = 0
+        if done:
+            return self
+        else:
+            return self.openended(num)
+
+    
+    def __sum__(self):
+        s = 0
+        for r in self.data:
+            if r > s:
+                s = r
+        return s
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            self.takeHighest(1)
+            myStr += "] for a result of (" + str(self.__sum__().__int__()) + ")"
+        else:
+            myStr = "[] = (0)"
+
+        return myStr
--- a/orpg/dieroller/trinity.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/trinity.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,88 +1,88 @@
-## a vs die roller as used by WOD games
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: trinity.py
-# Author: Jacob Matthew, Talisan Creations
-# Maintainer:
-# Version:
-#   $Id: trinity.py,v 1.2 2007/05/05 05:30:10 digitalxero Exp $
-#
-# Description: Aeon Trinity die roller
-# Modified from the WoD dieroller "$Id: trinity.py,v 1.2 2007/05/05 05:30:10 digitalxero Exp $"
-# Targetthr is the Threshhold target
-# for compatibility with Mage die rolls.
-# Threshhold addition by robert t childers
-# Threshhold functionality removed, some tags remain in code.
-from die import *
-
-__version__ = "$Id: trinity.py,v 1.2 2007/05/05 05:30:10 digitalxero Exp $"
-
-
-class trinity(std):
-    
-    def __init__(self,source=[],target=7,targetthr=0):
-        std.__init__(self,source)
-        self.target = target
-        self.targetthr = targetthr
-
-    
-    def vs(self,target):
-        self.target = target
-        return self
-
-    
-    def thr(self,targetthr):
-        self.targetthr = targetthr
-        return self
-
-    
-    def sum(self):
-        rolls = []
-        s = 0
-        b = 0
-        for a in self.data:
-            rolls.extend(a.gethistory())
-        for r in rolls:
-            if r >= self.target:
-                s += 1
-            elif r == 1:
-                b -= 1
-        if s == 0:
-            return b
-        else:
-            return s
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            if self.sum() < 0:
-                myStr += "] result of a (" + str(self.sum()) + ") botch"
-            elif self.sum() == 0:
-                myStr += "] result of a failure"
-            else:
-                myStr += "] result of (" + str(self.sum()) + ") success"
-
-
-        return myStr
+## a vs die roller as used by WOD games
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: trinity.py
+# Author: Jacob Matthew, Talisan Creations
+# Maintainer:
+# Version:
+#   $Id: trinity.py,v 1.2 2007/05/05 05:30:10 digitalxero Exp $
+#
+# Description: Aeon Trinity die roller
+# Modified from the WoD dieroller "$Id: trinity.py,v 1.2 2007/05/05 05:30:10 digitalxero Exp $"
+# Targetthr is the Threshhold target
+# for compatibility with Mage die rolls.
+# Threshhold addition by robert t childers
+# Threshhold functionality removed, some tags remain in code.
+from die import *
+
+__version__ = "$Id: trinity.py,v 1.2 2007/05/05 05:30:10 digitalxero Exp $"
+
+
+class trinity(std):
+    
+    def __init__(self,source=[],target=7,targetthr=0):
+        std.__init__(self,source)
+        self.target = target
+        self.targetthr = targetthr
+
+    
+    def vs(self,target):
+        self.target = target
+        return self
+
+    
+    def thr(self,targetthr):
+        self.targetthr = targetthr
+        return self
+
+    
+    def sum(self):
+        rolls = []
+        s = 0
+        b = 0
+        for a in self.data:
+            rolls.extend(a.gethistory())
+        for r in rolls:
+            if r >= self.target:
+                s += 1
+            elif r == 1:
+                b -= 1
+        if s == 0:
+            return b
+        else:
+            return s
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            if self.sum() < 0:
+                myStr += "] result of a (" + str(self.sum()) + ") botch"
+            elif self.sum() == 0:
+                myStr += "] result of a failure"
+            else:
+                myStr += "] result of (" + str(self.sum()) + ") success"
+
+
+        return myStr
--- a/orpg/dieroller/utils.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/utils.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,99 +1,99 @@
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: dieroller/utils.py
-# Author: OpenRPG Team
-# Maintainer:
-# Version:
-#   $Id: utils.py,v 1.22 2007/05/05 05:30:10 digitalxero Exp $
-#
-# Description: Classes to help manage the die roller
-#
-
-__version__ = "$Id: utils.py,v 1.22 2007/05/05 05:30:10 digitalxero Exp $"
-
-from die import *
-from wod import *
-from d20 import *
-from hero import *
-from shadowrun import *
-from sr4 import *
-from hackmaster import *
-from wodex import *
-from srex import *
-from gurps import *
-from runequest import *
-from savage import *
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: dieroller/utils.py
+# Author: OpenRPG Team
+# Maintainer:
+# Version:
+#   $Id: utils.py,v 1.22 2007/05/05 05:30:10 digitalxero Exp $
+#
+# Description: Classes to help manage the die roller
+#
+
+__version__ = "$Id: utils.py,v 1.22 2007/05/05 05:30:10 digitalxero Exp $"
+
+from die import *
+from wod import *
+from d20 import *
+from hero import *
+from shadowrun import *
+from sr4 import *
+from hackmaster import *
+from wodex import *
+from srex import *
+from gurps import *
+from runequest import *
+from savage import *
 from trinity import *
-import re
-
-rollers = ['std','wod','d20','hero','shadowrun', 'sr4','hackmaster','srex','wodex', 'gurps', 'runequest', 'sw', 'trinity']
-
-class roller_manager:
-    
-    def __init__(self,roller_class="d20"):
-        try: self.setRoller(roller_class)
-        except: self.roller_class = "std"
-
-    
-    def setRoller(self,roller_class):
-        try:
-            rollers.index(roller_class)
-            self.roller_class = roller_class
-        except: raise Exception, "Invalid die roller!"
-
-    
-    def getRoller(self):
-        return self.roller_class
-
-    
-    def listRollers(self):
-        return rollers
-
-    
-    def stdDieToDClass(self,match):
-        s = match.group(0)
-        (num,sides) = s.split('d')
-
-        if sides.strip().upper() == 'F': sides = "'f'"
-        try:
-            if int(num) > 100 or int(sides) > 10000:
-                return None
-        except: pass
-        return "(" + num.strip() + "**" + self.roller_class + "(" + sides.strip() + "))"
-
-    #  Use this to convert ndm-style (3d6) dice to d_base format
-    
-    def convertTheDieString(self,s):
-        reg = re.compile("(?:\d+|\([0-9\*/\-\+]+\))\s*[a-zA-Z]+\s*[\dFf]+")
-        (result, num_matches) = reg.subn(self.stdDieToDClass, s)
-        if num_matches == 0 or result is None:
-            try:
-                s2 = self.roller_class + "(0)." + s
-                test = eval(s2)
-                return s2
-            except: pass
-        return result
-
-    
-    def proccessRoll(self,s):
+import re
+
+rollers = ['std','wod','d20','hero','shadowrun', 'sr4','hackmaster','srex','wodex', 'gurps', 'runequest', 'sw', 'trinity']
+
+class roller_manager:
+    
+    def __init__(self,roller_class="d20"):
+        try: self.setRoller(roller_class)
+        except: self.roller_class = "std"
+
+    
+    def setRoller(self,roller_class):
+        try:
+            rollers.index(roller_class)
+            self.roller_class = roller_class
+        except: raise Exception, "Invalid die roller!"
+
+    
+    def getRoller(self):
+        return self.roller_class
+
+    
+    def listRollers(self):
+        return rollers
+
+    
+    def stdDieToDClass(self,match):
+        s = match.group(0)
+        (num,sides) = s.split('d')
+
+        if sides.strip().upper() == 'F': sides = "'f'"
+        try:
+            if int(num) > 100 or int(sides) > 10000:
+                return None
+        except: pass
+        return "(" + num.strip() + "**" + self.roller_class + "(" + sides.strip() + "))"
+
+    #  Use this to convert ndm-style (3d6) dice to d_base format
+    
+    def convertTheDieString(self,s):
+        reg = re.compile("(?:\d+|\([0-9\*/\-\+]+\))\s*[a-zA-Z]+\s*[\dFf]+")
+        (result, num_matches) = reg.subn(self.stdDieToDClass, s)
+        if num_matches == 0 or result is None:
+            try:
+                s2 = self.roller_class + "(0)." + s
+                test = eval(s2)
+                return s2
+            except: pass
+        return result
+
+    
+    def proccessRoll(self,s):
         return str(eval(self.convertTheDieString(s)))
 
 DiceManager = roller_manager
--- a/orpg/dieroller/wod.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/wod.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,92 +1,92 @@
-## a vs die roller as used by WOD games
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: wod.py
-# Author: OpenRPG Dev Team
-# Maintainer:
-# Version:
-#   $Id: wod.py,v 1.14 2007/05/09 19:57:00 digitalxero Exp $
-#
-# Description: WOD die roller
-#
-# Targetthr is the Threshhold target
-# for compatibility with Mage die rolls.
-# Threshhold addition by robert t childers
-from die import *
-
-__version__ = "$Id: wod.py,v 1.14 2007/05/09 19:57:00 digitalxero Exp $"
-
-
-class wod(std):
-    
-    def __init__(self,source=[],target=0,targetthr=0):
-        std.__init__(self,source)
-        self.target = target
-        self.targetthr = targetthr
-
-    
-    def vs(self,target):
-        self.target = target
-        return self
-
-    
-    def thr(self,targetthr):
-        self.targetthr = targetthr
-        return self
-
-    
-    def sum(self):
-        rolls = []
-        s = 0
-        s1 = self.targetthr
-        botch = 0
-        for a in self.data:
-            rolls.extend(a.gethistory())
-        for r in rolls:
-            if r >= self.target or r == 10:
-                s += 1
-                if s1 >0:
-                    s1 -= 1
-                    s -= 1
-                else:
-                    botch = 1
-            elif r == 1:
-                s -= 1
-            if botch == 1 and s < 0:
-                s = 0
-        return s
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            if self.sum() < 0:
-                myStr += "] vs " +str(self.target)+" result of a botch"
-            elif self.sum() == 0:
-                myStr += "] vs " +str(self.target)+" result of a failure"
-            else:
-                myStr += "] vs " +str(self.target)+" result of (" + str(self.sum()) + ")"
-
-
-        return myStr
+## a vs die roller as used by WOD games
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: wod.py
+# Author: OpenRPG Dev Team
+# Maintainer:
+# Version:
+#   $Id: wod.py,v 1.14 2007/05/09 19:57:00 digitalxero Exp $
+#
+# Description: WOD die roller
+#
+# Targetthr is the Threshhold target
+# for compatibility with Mage die rolls.
+# Threshhold addition by robert t childers
+from die import *
+
+__version__ = "$Id: wod.py,v 1.14 2007/05/09 19:57:00 digitalxero Exp $"
+
+
+class wod(std):
+    
+    def __init__(self,source=[],target=0,targetthr=0):
+        std.__init__(self,source)
+        self.target = target
+        self.targetthr = targetthr
+
+    
+    def vs(self,target):
+        self.target = target
+        return self
+
+    
+    def thr(self,targetthr):
+        self.targetthr = targetthr
+        return self
+
+    
+    def sum(self):
+        rolls = []
+        s = 0
+        s1 = self.targetthr
+        botch = 0
+        for a in self.data:
+            rolls.extend(a.gethistory())
+        for r in rolls:
+            if r >= self.target or r == 10:
+                s += 1
+                if s1 >0:
+                    s1 -= 1
+                    s -= 1
+                else:
+                    botch = 1
+            elif r == 1:
+                s -= 1
+            if botch == 1 and s < 0:
+                s = 0
+        return s
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            if self.sum() < 0:
+                myStr += "] vs " +str(self.target)+" result of a botch"
+            elif self.sum() == 0:
+                myStr += "] vs " +str(self.target)+" result of a failure"
+            else:
+                myStr += "] vs " +str(self.target)+" result of (" + str(self.sum()) + ")"
+
+
+        return myStr
--- a/orpg/dieroller/wodex.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dieroller/wodex.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,306 +1,306 @@
-## a vs die roller as used by WOD games
-#!/usr/bin/env python
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#       openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: wodex.py
-# Original Author: Darloth
-# Maintainer:
-# Original Version: 1.0
-#
-# Description: A modified form of the World of Darkness die roller to
-#              conform to ShadowRun rules-sets, then modified back to the WoD for
-#              the new WoD system. Thanks to the ORPG team
-#              for the original die rollers.
-#              Much thanks to whoever wrote the original shadowrun roller (akoman I believe)
-
-
-from die import *
-
-__version__ = "$Id: wodex.py,v 1.9 2007/05/06 16:42:55 digitalxero Exp $"
-
-class wodex(std):
-    
-    def __init__(self,source=[]):
-        std.__init__(self,source)
-
-    
-    def vs(self,actualtarget=6):
-        return oldwodVs(self,actualtarget,(6))
-
-    
-    def wod(self,actualtarget=8):
-        return newwodVs(self,actualtarget,(8))
-
-    
-    def exalt(self, actualtarget=7):
-        return exaltVs(self, actualtarget)
-
-    
-    def exaltDmg(self, actualtarget=7):
-        return exaltDmg(self, actualtarget)
-
-    
-    def vswide(self,actualtarget=6,maxtarget=10):    #wide simply means it reports TNs from 2 to a specified max.
-        return oldwodVs(self,actualtarget,2,maxtarget)
-
-class oldwodVs(std):
-    
-    def __init__(self,source=[],actualtarget=6,mintn=2,maxtn=10):
-        std.__init__(self, source)
-        if actualtarget > 10:
-            actualtarget = 10
-        if mintn > 10:
-            mintn = 10
-        if maxtn > 10:
-            maxtn = 10
-        if actualtarget < 2:
-            self.target = 2
-        else:
-            self.target = actualtarget
-        #if the target number is higher than max (Mainly for wide rolls) then increase max to tn
-        if actualtarget > maxtn:
-            maxtn = actualtarget
-        if actualtarget < mintn:
-            mintn = actualtarget
-        #store minimum for later use as well, also in result printing section.
-        if mintn < 2:
-            self.mintn = 2
-        else:
-            self.mintn = mintn
-        self.maxtn = maxtn #store for later use in printing results. (Yeah, these comments are now disordered)
-
-        # WoD etc uses d10 but i've left it so it can roll anything openended
-        # self.openended(self[0].sides)
-
-    #count successes, by looping through each die, and checking it against the currently set TN
-    #1's subtract successes.
-    
-    def __sum__(self):
-        s = 0
-        for r in self.data:
-            if r >= self.target:
-                s += 1
-            elif r == 1:
-                s -= 1
-        return s
-
-    #a modified sum, but this one takes a target argument, and is there because otherwise it is difficult to loop through
-    #tns counting successes against each one without changing target, which is rather dangerous as the original TN could
-    #easily be lost. 1s subtract successes from everything.
-    
-    def xsum(self,curtarget):
-        s = 0
-        for r in self.data:
-            if r >= curtarget:
-                s += 1
-            elif r == 1:
-                s -= 1
-        return s
-
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            myStr += "] Results: "
-            #cycle through from mintn to maxtn, summing successes for each separate TN
-            for targ in range(self.mintn,self.maxtn+1):
-                if (targ == self.target):
-                    myStr += "<b>"
-                myStr += "(" + str(self.xsum(targ)) + "&nbsp;vs&nbsp;" + str(targ) + ") "
-                if (targ == self.target):
-                    myStr += "</b>"
-        else:
-            myStr = "[] = (0)"
-
-        return myStr
-
-class newwodVs(std):
-    
-    def __init__(self,source=[],actualtarget=8,mintn=8,maxtn=8):
-        std.__init__(self, source)
-        if actualtarget > 30:
-            actualtarget = 30
-        if mintn > 10:
-            mintn = 10
-        if maxtn > 10:
-            maxtn = 10
-        if actualtarget < 2:
-            self.target = 2
-        else:
-            self.target = actualtarget
-        #if the target number is higher than max (Mainly for wide rolls) then increase max to tn
-        if actualtarget > maxtn:
-            maxtn = actualtarget
-        if actualtarget < mintn:
-            mintn = actualtarget
-        #store minimum for later use as well, also in result printing section.
-        if mintn < 2:
-            self.mintn = 2
-        else:
-            self.mintn = mintn
-        self.maxtn = maxtn #store for later use in printing results. (Yeah, these comments are now disordered)
-
-        # WoD etc uses d10 but i've left it so it can roll anything openended
-        # self.openended(self[0].sides)
-
-    #a modified sum, but this one takes a target argument, and is there because otherwise it is difficult to loop through
-    #tns counting successes against each one without changing target, which is rather dangerous as the original TN could
-    #easily be lost. 1s subtract successes from original but not re-rolls.
-    
-    def xsum(self,curtarget,subones=1):
-        s = 0
-        done = 1
-        for r in self.data:
-            if r >= curtarget:
-                s += 1
-            elif ((r == 1) and (subones == 1)):
-                s -= 1
-        if r == 10:
-            done = 0
-            subones = 0
-            self.append(di(10))
-        if done == 1:
-            return s
-        else:
-            return self.xsum(0)
-
-    
-    def openended(self,num):
-        if num <= 1:
-            self
-        done = 1
-        for i in range(len(self.data)):
-            if self.data[i].lastroll() == num:
-                self.data[i].extraroll()
-                done = 0
-        if done:
-            return self
-        else:
-            return self.openended(num)
-
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = "[" + str(self.data[0])
-            for a in self.data[1:]:
-                myStr += ","
-                myStr += str(a)
-            myStr += "] Results: "
-            #cycle through from mintn to maxtn, summing successes for each separate TN
-            for targ in range(self.mintn,self.maxtn+1):
-                if (targ == self.target):
-                    myStr += "<b>"
-                myStr += "(" + str(self.xsum(targ)) + "&nbsp;vs&nbsp;" + str(targ) + ") "
-                if (targ == self.target):
-                    myStr += "</b>"
-        else:
-            myStr = "[] = (0)"
-
-        return myStr
-
-class exaltVs(std):
-    
-    def __init__(self, source=[], actualtarget=7):
-        std.__init__(self, source)
-
-        if actualtarget > 10:
-            actualtarget = 10
-
-        if actualtarget < 2:
-            self.target = 2
-        else:
-            self.target = actualtarget
-
-
-    
-    def xsum(self, target):
-        s = 0
-
-        for r in self.data:
-            if r >= target:
-                s += 1
-            if r == 10:
-                s += 1
-
-        return s
-
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = str(self.data)
-            myStr += " Results: "
-
-            succ = self.xsum(self.target)
-            if succ == 0 and 1 in self.data:
-                myStr += 'BOTCH!'
-            elif succ == 0:
-                myStr += str(succ) + " Failure"
-            elif succ == 1:
-                myStr += str(succ) + " Success"
-            else:
-                myStr += str(succ) + " Successes"
-
-            return myStr
-
-class exaltDmg(std):
-    
-    def __init__(self, source=[], actualtarget=7):
-        std.__init__(self, source)
-        if actualtarget > 10:
-            actualtarget = 10
-
-        if actualtarget < 2:
-            self.target = 2
-        else:
-            self.target = actualtarget
-
-    
-    def xsum(self, target):
-        s = 0
-
-        for r in self.data:
-            if r >= target:
-                s += 1
-        return s
-
-    
-    def __str__(self):
-        if len(self.data) > 0:
-            myStr = str(self.data)
-            myStr += " Results: "
-
-            succ = self.xsum(self.target)
-
-            if succ == 0 and 1 in self.data:
-                myStr += 'BOTCH!'
-            elif succ == 0:
-                myStr += str(succ) + " Failure"
-            elif succ == 1:
-                myStr += str(succ) + " Success"
-            else:
-                myStr += str(succ) + " Successes"
-
-            return myStr
+## a vs die roller as used by WOD games
+#!/usr/bin/env python
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#       openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: wodex.py
+# Original Author: Darloth
+# Maintainer:
+# Original Version: 1.0
+#
+# Description: A modified form of the World of Darkness die roller to
+#              conform to ShadowRun rules-sets, then modified back to the WoD for
+#              the new WoD system. Thanks to the ORPG team
+#              for the original die rollers.
+#              Much thanks to whoever wrote the original shadowrun roller (akoman I believe)
+
+
+from die import *
+
+__version__ = "$Id: wodex.py,v 1.9 2007/05/06 16:42:55 digitalxero Exp $"
+
+class wodex(std):
+    
+    def __init__(self,source=[]):
+        std.__init__(self,source)
+
+    
+    def vs(self,actualtarget=6):
+        return oldwodVs(self,actualtarget,(6))
+
+    
+    def wod(self,actualtarget=8):
+        return newwodVs(self,actualtarget,(8))
+
+    
+    def exalt(self, actualtarget=7):
+        return exaltVs(self, actualtarget)
+
+    
+    def exaltDmg(self, actualtarget=7):
+        return exaltDmg(self, actualtarget)
+
+    
+    def vswide(self,actualtarget=6,maxtarget=10):    #wide simply means it reports TNs from 2 to a specified max.
+        return oldwodVs(self,actualtarget,2,maxtarget)
+
+class oldwodVs(std):
+    
+    def __init__(self,source=[],actualtarget=6,mintn=2,maxtn=10):
+        std.__init__(self, source)
+        if actualtarget > 10:
+            actualtarget = 10
+        if mintn > 10:
+            mintn = 10
+        if maxtn > 10:
+            maxtn = 10
+        if actualtarget < 2:
+            self.target = 2
+        else:
+            self.target = actualtarget
+        #if the target number is higher than max (Mainly for wide rolls) then increase max to tn
+        if actualtarget > maxtn:
+            maxtn = actualtarget
+        if actualtarget < mintn:
+            mintn = actualtarget
+        #store minimum for later use as well, also in result printing section.
+        if mintn < 2:
+            self.mintn = 2
+        else:
+            self.mintn = mintn
+        self.maxtn = maxtn #store for later use in printing results. (Yeah, these comments are now disordered)
+
+        # WoD etc uses d10 but i've left it so it can roll anything openended
+        # self.openended(self[0].sides)
+
+    #count successes, by looping through each die, and checking it against the currently set TN
+    #1's subtract successes.
+    
+    def __sum__(self):
+        s = 0
+        for r in self.data:
+            if r >= self.target:
+                s += 1
+            elif r == 1:
+                s -= 1
+        return s
+
+    #a modified sum, but this one takes a target argument, and is there because otherwise it is difficult to loop through
+    #tns counting successes against each one without changing target, which is rather dangerous as the original TN could
+    #easily be lost. 1s subtract successes from everything.
+    
+    def xsum(self,curtarget):
+        s = 0
+        for r in self.data:
+            if r >= curtarget:
+                s += 1
+            elif r == 1:
+                s -= 1
+        return s
+
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            myStr += "] Results: "
+            #cycle through from mintn to maxtn, summing successes for each separate TN
+            for targ in range(self.mintn,self.maxtn+1):
+                if (targ == self.target):
+                    myStr += "<b>"
+                myStr += "(" + str(self.xsum(targ)) + "&nbsp;vs&nbsp;" + str(targ) + ") "
+                if (targ == self.target):
+                    myStr += "</b>"
+        else:
+            myStr = "[] = (0)"
+
+        return myStr
+
+class newwodVs(std):
+    
+    def __init__(self,source=[],actualtarget=8,mintn=8,maxtn=8):
+        std.__init__(self, source)
+        if actualtarget > 30:
+            actualtarget = 30
+        if mintn > 10:
+            mintn = 10
+        if maxtn > 10:
+            maxtn = 10
+        if actualtarget < 2:
+            self.target = 2
+        else:
+            self.target = actualtarget
+        #if the target number is higher than max (Mainly for wide rolls) then increase max to tn
+        if actualtarget > maxtn:
+            maxtn = actualtarget
+        if actualtarget < mintn:
+            mintn = actualtarget
+        #store minimum for later use as well, also in result printing section.
+        if mintn < 2:
+            self.mintn = 2
+        else:
+            self.mintn = mintn
+        self.maxtn = maxtn #store for later use in printing results. (Yeah, these comments are now disordered)
+
+        # WoD etc uses d10 but i've left it so it can roll anything openended
+        # self.openended(self[0].sides)
+
+    #a modified sum, but this one takes a target argument, and is there because otherwise it is difficult to loop through
+    #tns counting successes against each one without changing target, which is rather dangerous as the original TN could
+    #easily be lost. 1s subtract successes from original but not re-rolls.
+    
+    def xsum(self,curtarget,subones=1):
+        s = 0
+        done = 1
+        for r in self.data:
+            if r >= curtarget:
+                s += 1
+            elif ((r == 1) and (subones == 1)):
+                s -= 1
+        if r == 10:
+            done = 0
+            subones = 0
+            self.append(di(10))
+        if done == 1:
+            return s
+        else:
+            return self.xsum(0)
+
+    
+    def openended(self,num):
+        if num <= 1:
+            self
+        done = 1
+        for i in range(len(self.data)):
+            if self.data[i].lastroll() == num:
+                self.data[i].extraroll()
+                done = 0
+        if done:
+            return self
+        else:
+            return self.openended(num)
+
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = "[" + str(self.data[0])
+            for a in self.data[1:]:
+                myStr += ","
+                myStr += str(a)
+            myStr += "] Results: "
+            #cycle through from mintn to maxtn, summing successes for each separate TN
+            for targ in range(self.mintn,self.maxtn+1):
+                if (targ == self.target):
+                    myStr += "<b>"
+                myStr += "(" + str(self.xsum(targ)) + "&nbsp;vs&nbsp;" + str(targ) + ") "
+                if (targ == self.target):
+                    myStr += "</b>"
+        else:
+            myStr = "[] = (0)"
+
+        return myStr
+
+class exaltVs(std):
+    
+    def __init__(self, source=[], actualtarget=7):
+        std.__init__(self, source)
+
+        if actualtarget > 10:
+            actualtarget = 10
+
+        if actualtarget < 2:
+            self.target = 2
+        else:
+            self.target = actualtarget
+
+
+    
+    def xsum(self, target):
+        s = 0
+
+        for r in self.data:
+            if r >= target:
+                s += 1
+            if r == 10:
+                s += 1
+
+        return s
+
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = str(self.data)
+            myStr += " Results: "
+
+            succ = self.xsum(self.target)
+            if succ == 0 and 1 in self.data:
+                myStr += 'BOTCH!'
+            elif succ == 0:
+                myStr += str(succ) + " Failure"
+            elif succ == 1:
+                myStr += str(succ) + " Success"
+            else:
+                myStr += str(succ) + " Successes"
+
+            return myStr
+
+class exaltDmg(std):
+    
+    def __init__(self, source=[], actualtarget=7):
+        std.__init__(self, source)
+        if actualtarget > 10:
+            actualtarget = 10
+
+        if actualtarget < 2:
+            self.target = 2
+        else:
+            self.target = actualtarget
+
+    
+    def xsum(self, target):
+        s = 0
+
+        for r in self.data:
+            if r >= target:
+                s += 1
+        return s
+
+    
+    def __str__(self):
+        if len(self.data) > 0:
+            myStr = str(self.data)
+            myStr += " Results: "
+
+            succ = self.xsum(self.target)
+
+            if succ == 0 and 1 in self.data:
+                myStr += 'BOTCH!'
+            elif succ == 0:
+                myStr += str(succ) + " Failure"
+            elif succ == 1:
+                myStr += str(succ) + " Success"
+            else:
+                myStr += str(succ) + " Successes"
+
+            return myStr
--- a/orpg/dirpath/__init__.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dirpath/__init__.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,45 +1,45 @@
-# Old dirpath.py replaced with new dirpath 'package/module' to allow dynamic
-# checking on directory structure at dirpath import without requiring alteration
-# of almost every openrpg1 python file
-#
-# This module is functionally identical to the dirpath.py file it replaces.
-# All directory locations are now handled by the load_paths() function
-# in the dirpath_tools.py file  -- Snowdog 3-8-05
-
-# CHANGE LOG
-# -----------------------------
-# * Reworked path verification process to attempt to fall back on the
-#   current working directory if approot fails to verify before
+# Old dirpath.py replaced with new dirpath 'package/module' to allow dynamic
+# checking on directory structure at dirpath import without requiring alteration
+# of almost every openrpg1 python file
+#
+# This module is functionally identical to the dirpath.py file it replaces.
+# All directory locations are now handled by the load_paths() function
+# in the dirpath_tools.py file  -- Snowdog 3-8-05
+
+# CHANGE LOG
+# -----------------------------
+# * Reworked path verification process to attempt to fall back on the
+#   current working directory if approot fails to verify before
 #   asking the user to locate the root directory -- Snowdog 12-20-05
 # -----------------------------
 # * Removed reference to approot. It was a superflous creation that carried an object
 #   that dirpath_tools already creates. It wasted system resources by creating a files
-#   and by referencing a file to fill an object that was already created. -- SirEbral 07-19-09
-
-import sys
-import os
-from dirpath_tools import *
-
-root_dir = None
-
-t = __file__.split(os.sep)
-if len(t) > 2:
-    root_dir = os.sep.join(t[:-3])
-else:
-    root_dir = os.getcwd()   #default ORPG root dir
-
-dir_struct = {}
-
-if not verify_home_path(root_dir):
-    root_dir = os.getcwd()
-    if not verify_home_path(root_dir):
-        root_dir = get_user_located_root()
-        while not verify_home_path(root_dir):
-            root_dir = get_user_located_root()
-
-#switch backslashes to forward slashes just for display on screen only (avoids issues with escaped characters)
-clean = str(root_dir)
-clean = str.replace(clean,'\\','/')
-print "Rooting OpenRPG at: " + clean
-
+#   and by referencing a file to fill an object that was already created. -- SirEbral 07-19-09
+
+import sys
+import os
+from dirpath_tools import *
+
+root_dir = None
+
+t = __file__.split(os.sep)
+if len(t) > 2:
+    root_dir = os.sep.join(t[:-3])
+else:
+    root_dir = os.getcwd()   #default ORPG root dir
+
+dir_struct = {}
+
+if not verify_home_path(root_dir):
+    root_dir = os.getcwd()
+    if not verify_home_path(root_dir):
+        root_dir = get_user_located_root()
+        while not verify_home_path(root_dir):
+            root_dir = get_user_located_root()
+
+#switch backslashes to forward slashes just for display on screen only (avoids issues with escaped characters)
+clean = str(root_dir)
+clean = str.replace(clean,'\\','/')
+print "Rooting OpenRPG at: " + clean
+
 load_paths(dir_struct, root_dir)
--- a/orpg/dirpath/dirpath_tools.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/dirpath/dirpath_tools.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,119 +1,119 @@
-import sys
-import os
-import errno
-from orpg.orpg_wx import *
-
-if WXLOADED:
-    class tmpApp(wx.App):
-        def OnInit(self):
-            return True
-
-#-------------------------------------------------------
-# void load_paths( dir_struct_reference )
-# moved structure loading from dirpath.py by Snowdog 3-8-05
-#-------------------------------------------------------
-def load_paths(dir_struct, root_dir):
-    dir_struct["home"] = root_dir + os.sep
-    dir_struct["core"] = dir_struct["home"] + "orpg"+ os.sep
-    dir_struct["data"] = dir_struct["home"] + "data"+ os.sep
-    dir_struct["d20"] = dir_struct["data"] + "d20" + os.sep
-    dir_struct["dnd3e"] = dir_struct["data"] + "dnd3e" + os.sep
-    dir_struct["dnd35"] = dir_struct["data"] + "dnd35" + os.sep
-    dir_struct["SWd20"] = dir_struct["data"] + "SWd20" + os.sep
-    dir_struct["icon"] = dir_struct["home"] + "images" + os.sep
-    dir_struct["template"] = dir_struct["core"] + "templates" + os.sep
-    dir_struct["plugins"] = dir_struct["home"] + "plugins" + os.sep
-    dir_struct["nodes"] = dir_struct["template"] + "nodes" + os.sep
-    dir_struct["rollers"] = dir_struct["core"] + "dieroller" + os.sep + "rollers" + os.sep
-
-    _userbase_dir = dir_struct["home"]
-    _user_dir = dir_struct["home"] + "myfiles" + os.sep
-
-    try:
-        os.makedirs(_user_dir)
-        os.makedirs(_user_dir + "runlogs" + os.sep);
-        os.makedirs(_user_dir + "logs" + os.sep);
-        os.makedirs(_user_dir + "webfiles" + os.sep);
-    except OSError, e:
-        if e.errno != errno.EEXIST: raise
-
-    dir_struct["user"] = _user_dir
-    dir_struct["logs"] = dir_struct["user"] + "logs" + os.sep
-
-#-------------------------------------------------------
-# int verify_home_path( directory_name )
-# added by Snowdog 3-8-05
-# updated with bailout code. Snowdog 7-25-05
-#-------------------------------------------------------
-def verify_home_path( path ):
-    """checks for key ORPG files in the openrpg tree
-       and askes for user intervention if their is a problem"""
-    try:
-        #verify that the root dir (as supplied) exists
-        if not verify_file(path): return 0
+import sys
+import os
+import errno
+from orpg.orpg_wx import *
+
+if WXLOADED:
+    class tmpApp(wx.App):
+        def OnInit(self):
+            return True
+
+#-------------------------------------------------------
+# void load_paths( dir_struct_reference )
+# moved structure loading from dirpath.py by Snowdog 3-8-05
+#-------------------------------------------------------
+def load_paths(dir_struct, root_dir):
+    dir_struct["home"] = root_dir + os.sep
+    dir_struct["core"] = dir_struct["home"] + "orpg"+ os.sep
+    dir_struct["data"] = dir_struct["home"] + "data"+ os.sep
+    dir_struct["d20"] = dir_struct["data"] + "d20" + os.sep
+    dir_struct["dnd3e"] = dir_struct["data"] + "dnd3e" + os.sep
+    dir_struct["dnd35"] = dir_struct["data"] + "dnd35" + os.sep
+    dir_struct["SWd20"] = dir_struct["data"] + "SWd20" + os.sep
+    dir_struct["icon"] = dir_struct["home"] + "images" + os.sep
+    dir_struct["template"] = dir_struct["core"] + "templates" + os.sep
+    dir_struct["plugins"] = dir_struct["home"] + "plugins" + os.sep
+    dir_struct["nodes"] = dir_struct["template"] + "nodes" + os.sep
+    dir_struct["rollers"] = dir_struct["core"] + "dieroller" + os.sep + "rollers" + os.sep
+
+    _userbase_dir = dir_struct["home"]
+    _user_dir = dir_struct["home"] + "myfiles" + os.sep
+
+    try:
+        os.makedirs(_user_dir)
+        os.makedirs(_user_dir + "runlogs" + os.sep);
+        os.makedirs(_user_dir + "logs" + os.sep);
+        os.makedirs(_user_dir + "webfiles" + os.sep);
+    except OSError, e:
+        if e.errno != errno.EEXIST: raise
+
+    dir_struct["user"] = _user_dir
+    dir_struct["logs"] = dir_struct["user"] + "logs" + os.sep
+
+#-------------------------------------------------------
+# int verify_home_path( directory_name )
+# added by Snowdog 3-8-05
+# updated with bailout code. Snowdog 7-25-05
+#-------------------------------------------------------
+def verify_home_path( path ):
+    """checks for key ORPG files in the openrpg tree
+       and askes for user intervention if their is a problem"""
+    try:
+        #verify that the root dir (as supplied) exists
+        if not verify_file(path): return 0
 
-        #These checks require that 'path' have a separator at the end.
-        #Check and temporarily add one if needed
-        if (path[(len(path)-len(os.sep)):] != os.sep):
-            path = path + os.sep
-        # These files should always exist at the root orpg dir
-        check_files = ["orpg","data","images"]
-        for n in range(len(check_files)):
-            if not verify_file(path + check_files[n]): return 0
-    except:
-        # an error occured while verifying the directory structure
-        # bail out with error signal
-        return 0
-
-    #all files and directories exist.
-    return 1
-
-#-------------------------------------------------------
-# int verify_file( absolute_path )
-# added by Snowdog 3-8-05
-#-------------------------------------------------------
-def verify_file(abs_path):
-    """Returns True if file or directory exists"""
-    try:
-        os.stat(abs_path)
-        return 1
-    except OSError:
-        #this exception signifies the file or dir doesn't exist
-        return 0
-
-
-#-------------------------------------------------------
-# pathname get_user_help()
-# added by Snowdog 3-8-05
-# bug fix (SF #1242456) and updated with bailout code. Snowdog 7-25-05
+        #These checks require that 'path' have a separator at the end.
+        #Check and temporarily add one if needed
+        if (path[(len(path)-len(os.sep)):] != os.sep):
+            path = path + os.sep
+        # These files should always exist at the root orpg dir
+        check_files = ["orpg","data","images"]
+        for n in range(len(check_files)):
+            if not verify_file(path + check_files[n]): return 0
+    except:
+        # an error occured while verifying the directory structure
+        # bail out with error signal
+        return 0
+
+    #all files and directories exist.
+    return 1
+
+#-------------------------------------------------------
+# int verify_file( absolute_path )
+# added by Snowdog 3-8-05
+#-------------------------------------------------------
+def verify_file(abs_path):
+    """Returns True if file or directory exists"""
+    try:
+        os.stat(abs_path)
+        return 1
+    except OSError:
+        #this exception signifies the file or dir doesn't exist
+        return 0
+
+
 #-------------------------------------------------------
-## This can be removed in the future. TaS '09
-def get_user_located_root():
-    """Notify the user of directory problems
-    and show directory selection dialog """
-
-    if WXLOADED:
-        app = tmpApp(0)
-        app.MainLoop()
+# pathname get_user_help()
+# added by Snowdog 3-8-05
+# bug fix (SF #1242456) and updated with bailout code. Snowdog 7-25-05
+#-------------------------------------------------------
+## This can be removed in the future. TaS '09
+def get_user_located_root():
+    """Notify the user of directory problems
+    and show directory selection dialog """
+
+    if WXLOADED:
+        app = tmpApp(0)
+        app.MainLoop()
 
-        dir = None
-        try:
-            msg = "OpenRPG cannot locate critical files.\nPlease locate the /System/ directory in the following window"
-            alert= wx.MessageDialog(None,msg,"Warning",wx.OK|wx.ICON_ERROR)
-            alert.Show()
-            if alert.ShowModal() == wx.OK:
-                alert.Destroy()
-            dlg = wx.DirDialog(None, "Locate the System directory:",style=wx.DD_DEFAULT_STYLE)
-            if dlg.ShowModal() == wx.ID_OK:
-                dir = dlg.GetPath()
-            dlg.Destroy()
-            app.Destroy()
-            return dir
-        except Exception, e:
-            print e
-            print "OpenRPG encountered a problem while attempting to load file dialog to locate the OpenRPG root directory."
-            print "please delete the files ./openrpg/orpg/dirpath/aproot.py and ./openrpg/orpg/dirpath/aproot.pyc and try again."
-    else:
-        dir = raw_input("Enter the full path to your openrpg folder:  ")
-        return dir
+        dir = None
+        try:
+            msg = "OpenRPG cannot locate critical files.\nPlease locate the /System/ directory in the following window"
+            alert= wx.MessageDialog(None,msg,"Warning",wx.OK|wx.ICON_ERROR)
+            alert.Show()
+            if alert.ShowModal() == wx.OK:
+                alert.Destroy()
+            dlg = wx.DirDialog(None, "Locate the System directory:",style=wx.DD_DEFAULT_STYLE)
+            if dlg.ShowModal() == wx.ID_OK:
+                dir = dlg.GetPath()
+            dlg.Destroy()
+            app.Destroy()
+            return dir
+        except Exception, e:
+            print e
+            print "OpenRPG encountered a problem while attempting to load file dialog to locate the OpenRPG root directory."
+            print "please delete the files ./openrpg/orpg/dirpath/aproot.py and ./openrpg/orpg/dirpath/aproot.pyc and try again."
+    else:
+        dir = raw_input("Enter the full path to your openrpg folder:  ")
+        return dir
 
--- a/orpg/gametree/__init__.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/__init__.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,1 +1,1 @@
-__all__ = ['nodehandlers']
+__all__ = ['nodehandlers']
--- a/orpg/gametree/gametree.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/gametree.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,480 +1,480 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: gametree.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: gametree.py,v 1.68 2007/12/07 20:39:48 digitalxero Exp $
-#
-# Description: The file contains code fore the game tree shell
-#
-
-from __future__ import with_statement
-
-__version__ = "$Id: gametree.py,v 1.68 2007/12/07 20:39:48 digitalxero Exp $"
-
-from orpg.orpg_wx import *
-from orpg.orpg_windows import *
-from orpg.orpgCore import component
-from orpg.dirpath import dir_struct
-from nodehandlers import core
-import string, urllib, time, os
-
-from orpg.orpg_xml import xml
-from orpg.tools.validate import validate
-from orpg.tools.orpg_log import logger, debug
-from orpg.tools.orpg_settings import settings
-from orpg.gametree.nodehandlers import containers, forms, dnd3e, dnd35, chatmacro
-from orpg.gametree.nodehandlers import map_miniature_nodehandler
-from orpg.gametree.nodehandlers import minilib, rpg_grid, d20, StarWarsd20, voxchat
-
-from gametree_version import GAMETREE_VERSION
-
-from xml.etree.ElementTree import ElementTree, Element, parse
-from xml.etree.ElementTree import fromstring, tostring, XML, iselement
-from xml.parsers.expat import ExpatError
-
-STD_MENU_DELETE = wx.NewId()
-STD_MENU_DESIGN = wx.NewId()
-STD_MENU_USE = wx.NewId()
-STD_MENU_PP = wx.NewId()
-STD_MENU_RENAME = wx.NewId()
-STD_MENU_SEND = wx.NewId()
-STD_MENU_SAVE = wx.NewId()
-STD_MENU_ICON = wx.NewId()
-STD_MENU_CLONE = wx.NewId()
-STD_MENU_ABOUT = wx.NewId()
-STD_MENU_HTML = wx.NewId()
-STD_MENU_EMAIL = wx.NewId()
-STD_MENU_CHAT = wx.NewId()
-STD_MENU_WHISPER = wx.NewId()
-STD_MENU_WIZARD = wx.NewId()
-STD_MENU_NODE_SUBMENU = wx.NewId()
-STD_MENU_NODE_USEFUL = wx.NewId()
-STD_MENU_NODE_USELESS = wx.NewId()
-STD_MENU_NODE_INDIFFERENT = wx.NewId()
-STD_MENU_MAP = wx.NewId()
-TOP_IFILE = wx.NewId()
-TOP_INSERT_URL = wx.NewId()
-TOP_NEW_TREE = wx.NewId()
-TOP_SAVE_TREE = wx.NewId()
-TOP_SAVE_TREE_AS = wx.NewId()
-TOP_TREE_PROP = wx.NewId()
-TOP_FEATURES = wx.NewId()
-
-class game_tree(wx.TreeCtrl):
-    
-    def __init__(self, parent, id):
-        wx.TreeCtrl.__init__(self,parent,id,  wx.DefaultPosition, 
-                wx.DefaultSize,style=wx.TR_EDIT_LABELS | wx.TR_HAS_BUTTONS)
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: gametree.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: gametree.py,v 1.68 2007/12/07 20:39:48 digitalxero Exp $
+#
+# Description: The file contains code fore the game tree shell
+#
+
+from __future__ import with_statement
+
+__version__ = "$Id: gametree.py,v 1.68 2007/12/07 20:39:48 digitalxero Exp $"
+
+from orpg.orpg_wx import *
+from orpg.orpg_windows import *
+from orpg.orpgCore import component
+from orpg.dirpath import dir_struct
+from nodehandlers import core
+import string, urllib, time, os
+
+from orpg.orpg_xml import xml
+from orpg.tools.validate import validate
+from orpg.tools.orpg_log import logger, debug
+from orpg.tools.orpg_settings import settings
+from orpg.gametree.nodehandlers import containers, forms, dnd3e, dnd35, chatmacro
+from orpg.gametree.nodehandlers import map_miniature_nodehandler
+from orpg.gametree.nodehandlers import minilib, rpg_grid, d20, StarWarsd20, voxchat
+
+from gametree_version import GAMETREE_VERSION
+
+from xml.etree.ElementTree import ElementTree, Element, parse
+from xml.etree.ElementTree import fromstring, tostring, XML, iselement
+from xml.parsers.expat import ExpatError
+
+STD_MENU_DELETE = wx.NewId()
+STD_MENU_DESIGN = wx.NewId()
+STD_MENU_USE = wx.NewId()
+STD_MENU_PP = wx.NewId()
+STD_MENU_RENAME = wx.NewId()
+STD_MENU_SEND = wx.NewId()
+STD_MENU_SAVE = wx.NewId()
+STD_MENU_ICON = wx.NewId()
+STD_MENU_CLONE = wx.NewId()
+STD_MENU_ABOUT = wx.NewId()
+STD_MENU_HTML = wx.NewId()
+STD_MENU_EMAIL = wx.NewId()
+STD_MENU_CHAT = wx.NewId()
+STD_MENU_WHISPER = wx.NewId()
+STD_MENU_WIZARD = wx.NewId()
+STD_MENU_NODE_SUBMENU = wx.NewId()
+STD_MENU_NODE_USEFUL = wx.NewId()
+STD_MENU_NODE_USELESS = wx.NewId()
+STD_MENU_NODE_INDIFFERENT = wx.NewId()
+STD_MENU_MAP = wx.NewId()
+TOP_IFILE = wx.NewId()
+TOP_INSERT_URL = wx.NewId()
+TOP_NEW_TREE = wx.NewId()
+TOP_SAVE_TREE = wx.NewId()
+TOP_SAVE_TREE_AS = wx.NewId()
+TOP_TREE_PROP = wx.NewId()
+TOP_FEATURES = wx.NewId()
+
+class game_tree(wx.TreeCtrl):
+    
+    def __init__(self, parent, id):
+        wx.TreeCtrl.__init__(self,parent,id,  wx.DefaultPosition, 
+                wx.DefaultSize,style=wx.TR_EDIT_LABELS | wx.TR_HAS_BUTTONS)
         self.chat = component.get('chat')
-        self.session = component.get('session')
-        self.mainframe = component.get('frame')
-        self.build_img_list()
-        self.build_std_menu()
-        self.nodehandlers = {}
-        self.nodes = {}
-        self.init_nodehandlers()
-        self.Bind(wx.EVT_LEFT_DCLICK, self.on_ldclick)
-        self.Bind(wx.EVT_RIGHT_DOWN, self.on_rclick)
-        self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.on_drag, id=id)
-        self.Bind(wx.EVT_LEFT_UP, self.on_left_up)
-        self.Bind(wx.EVT_LEFT_DOWN, self.on_left_down)
-        self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.on_label_change, id=self.GetId())
-        self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.on_label_begin, id=self.GetId())
-        self.Bind(wx.EVT_CHAR, self.on_char)
-        self.Bind(wx.EVT_KEY_UP, self.on_key_up)
-        self.id = 1
-        self.dragging = False
-        self.last_save_dir = dir_struct["user"]
-        self.tree_map = {}
-
-        #Create tree from default if it does not exist
-        validate.config_file("tree.xml","default_tree.xml")
-        component.add("tree", self)
-
-        #build tree
-        self.root = self.AddRoot("Game Tree", self.icons['gear'])
-        self.was_labeling = 0
-        self.rename_flag = 0
-        self.image_cache = {}
-        logger.debug("Exit game_tree")
-    
-    def add_nodehandler(self, nodehandler, nodeclass):
-        if not self.nodehandlers.has_key(nodehandler): self.nodehandlers[nodehandler] = nodeclass
-        else: logger.debug("Nodehandler for " + nodehandler + " already exists!")
-    
-    def remove_nodehandler(self, nodehandler):
-        if self.nodehandlers.has_key(nodehandler): del self.nodehandlers[nodehandler]
-        else: logger.debug("No nodehandler for " + nodehandler + " exists!")
-
-    def init_nodehandlers(self):
-        self.add_nodehandler('group_handler', containers.group_handler)
-        self.add_nodehandler('tabber_handler', containers.tabber_handler)
-        self.add_nodehandler('splitter_handler', containers.splitter_handler)
-        self.add_nodehandler('form_handler', forms.form_handler)
-        self.add_nodehandler('textctrl_handler', forms.textctrl_handler)
-        self.add_nodehandler('listbox_handler', forms.listbox_handler)
-        self.add_nodehandler('link_handler', forms.link_handler)
-        self.add_nodehandler('webimg_handler', forms.webimg_handler)
-        self.add_nodehandler('dnd3echar_handler', dnd3e.dnd3echar_handler)
-        self.add_nodehandler('dnd35char_handler', dnd35.dnd35char_handler)
-        self.add_nodehandler('macro_handler', chatmacro.macro_handler)
-        self.add_nodehandler('map_miniature_handler', map_miniature_nodehandler.map_miniature_handler)
-        self.add_nodehandler('minilib_handler', minilib.minilib_handler)
-        self.add_nodehandler('mini_handler', minilib.mini_handler)
-        self.add_nodehandler('rpg_grid_handler', rpg_grid.rpg_grid_handler)
-        self.add_nodehandler('d20char_handler', d20.d20char_handler)
-        self.add_nodehandler('SWd20char_handler', StarWarsd20.SWd20char_handler)
-        self.add_nodehandler('voxchat_handler', voxchat.voxchat_handler)
-        self.add_nodehandler('file_loader', core.file_loader)
-        self.add_nodehandler('node_loader', core.node_loader)
-        self.add_nodehandler('url_loader', core.url_loader)
-        self.add_nodehandler('min_map', core.min_map)
-    
-    def on_key_up(self, evt):
-        key_code = evt.GetKeyCode()
-        if self.dragging and (key_code == wx.WXK_SHIFT):
-            curSelection = self.GetSelection()
-            cur = wx.StockCursor(wx.CURSOR_ARROW)
-            self.SetCursor(cur)
-            self.dragging = False
-            obj = self.GetPyData(curSelection)
-            self.SelectItem(curSelection)
-            if(isinstance(obj,core.node_handler)):
-                obj.on_drop(evt)
-                self.drag_obj = None
-        evt.Skip()
-    
-    def on_char(self, evt):
-        key_code = evt.GetKeyCode()
-        curSelection = self.GetSelection()  #  Get the current selection
-        if evt.ShiftDown() and ((key_code == wx.WXK_UP) or (key_code == wx.WXK_DOWN)) and not self.dragging:
-            curSelection = self.GetSelection()
-            obj = self.GetPyData(curSelection)
-            self.SelectItem(curSelection)
-            if(isinstance(obj,core.node_handler)):
-                self.dragging = True
-                cur = wx.StockCursor(wx.CURSOR_HAND)
-                self.SetCursor(cur)
-                self.drag_obj = obj
-        elif key_code == wx.WXK_LEFT: self.Collapse(curSelection)
-        elif key_code == wx.WXK_DELETE:                          #  Handle the delete key
-            if curSelection:
-                nextSelect = self.GetItemParent(curSelection)
-                self.on_del(evt)
+        self.session = component.get('session')
+        self.mainframe = component.get('frame')
+        self.build_img_list()
+        self.build_std_menu()
+        self.nodehandlers = {}
+        self.nodes = {}
+        self.init_nodehandlers()
+        self.Bind(wx.EVT_LEFT_DCLICK, self.on_ldclick)
+        self.Bind(wx.EVT_RIGHT_DOWN, self.on_rclick)
+        self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.on_drag, id=id)
+        self.Bind(wx.EVT_LEFT_UP, self.on_left_up)
+        self.Bind(wx.EVT_LEFT_DOWN, self.on_left_down)
+        self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.on_label_change, id=self.GetId())
+        self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.on_label_begin, id=self.GetId())
+        self.Bind(wx.EVT_CHAR, self.on_char)
+        self.Bind(wx.EVT_KEY_UP, self.on_key_up)
+        self.id = 1
+        self.dragging = False
+        self.last_save_dir = dir_struct["user"]
+        self.tree_map = {}
+
+        #Create tree from default if it does not exist
+        validate.config_file("tree.xml","default_tree.xml")
+        component.add("tree", self)
+
+        #build tree
+        self.root = self.AddRoot("Game Tree", self.icons['gear'])
+        self.was_labeling = 0
+        self.rename_flag = 0
+        self.image_cache = {}
+        logger.debug("Exit game_tree")
+    
+    def add_nodehandler(self, nodehandler, nodeclass):
+        if not self.nodehandlers.has_key(nodehandler): self.nodehandlers[nodehandler] = nodeclass
+        else: logger.debug("Nodehandler for " + nodehandler + " already exists!")
+    
+    def remove_nodehandler(self, nodehandler):
+        if self.nodehandlers.has_key(nodehandler): del self.nodehandlers[nodehandler]
+        else: logger.debug("No nodehandler for " + nodehandler + " exists!")
+
+    def init_nodehandlers(self):
+        self.add_nodehandler('group_handler', containers.group_handler)
+        self.add_nodehandler('tabber_handler', containers.tabber_handler)
+        self.add_nodehandler('splitter_handler', containers.splitter_handler)
+        self.add_nodehandler('form_handler', forms.form_handler)
+        self.add_nodehandler('textctrl_handler', forms.textctrl_handler)
+        self.add_nodehandler('listbox_handler', forms.listbox_handler)
+        self.add_nodehandler('link_handler', forms.link_handler)
+        self.add_nodehandler('webimg_handler', forms.webimg_handler)
+        self.add_nodehandler('dnd3echar_handler', dnd3e.dnd3echar_handler)
+        self.add_nodehandler('dnd35char_handler', dnd35.dnd35char_handler)
+        self.add_nodehandler('macro_handler', chatmacro.macro_handler)
+        self.add_nodehandler('map_miniature_handler', map_miniature_nodehandler.map_miniature_handler)
+        self.add_nodehandler('minilib_handler', minilib.minilib_handler)
+        self.add_nodehandler('mini_handler', minilib.mini_handler)
+        self.add_nodehandler('rpg_grid_handler', rpg_grid.rpg_grid_handler)
+        self.add_nodehandler('d20char_handler', d20.d20char_handler)
+        self.add_nodehandler('SWd20char_handler', StarWarsd20.SWd20char_handler)
+        self.add_nodehandler('voxchat_handler', voxchat.voxchat_handler)
+        self.add_nodehandler('file_loader', core.file_loader)
+        self.add_nodehandler('node_loader', core.node_loader)
+        self.add_nodehandler('url_loader', core.url_loader)
+        self.add_nodehandler('min_map', core.min_map)
+    
+    def on_key_up(self, evt):
+        key_code = evt.GetKeyCode()
+        if self.dragging and (key_code == wx.WXK_SHIFT):
+            curSelection = self.GetSelection()
+            cur = wx.StockCursor(wx.CURSOR_ARROW)
+            self.SetCursor(cur)
+            self.dragging = False
+            obj = self.GetPyData(curSelection)
+            self.SelectItem(curSelection)
+            if(isinstance(obj,core.node_handler)):
+                obj.on_drop(evt)
+                self.drag_obj = None
+        evt.Skip()
+    
+    def on_char(self, evt):
+        key_code = evt.GetKeyCode()
+        curSelection = self.GetSelection()  #  Get the current selection
+        if evt.ShiftDown() and ((key_code == wx.WXK_UP) or (key_code == wx.WXK_DOWN)) and not self.dragging:
+            curSelection = self.GetSelection()
+            obj = self.GetPyData(curSelection)
+            self.SelectItem(curSelection)
+            if(isinstance(obj,core.node_handler)):
+                self.dragging = True
+                cur = wx.StockCursor(wx.CURSOR_HAND)
+                self.SetCursor(cur)
+                self.drag_obj = obj
+        elif key_code == wx.WXK_LEFT: self.Collapse(curSelection)
+        elif key_code == wx.WXK_DELETE:                          #  Handle the delete key
+            if curSelection:
+                nextSelect = self.GetItemParent(curSelection)
+                self.on_del(evt)
                 try: 
-                    if self.GetItemText(nextSelect) != "": self.SelectItem(nextSelect)
-                except: pass
-        elif key_code == wx.WXK_F2:
-            self.rename_flag = 1
-            self.EditLabel(curSelection)
-        evt.Skip()
-   
-    def locate_valid_tree(self, error, msg): ## --Snowdog 3/05
-        """prompts the user to locate a new tree file or create a new one"""
-        response = wx.MessageDialog(self, msg, error, wx.YES|wx.NO|wx.ICON_ERROR)
-        if response == wx.YES:
-            file = None
-            dlg = wx.FileDialog(self, "Locate Gametree file", dir_struct["user"],
-                                filename[ ((filename.rfind(os.sep))+len(os.sep)):],
-                                "Gametree (*.xml)|*.xml|All files (*.*)|*.*",
-                                wx.OPEN | wx.CHANGE_DIR)
-            if dlg.ShowModal() == wx.ID_OK: file = dlg.GetPath()
-            dlg.Destroy()
-            if not file: self.load_tree(error=1)
-            else: self.load_tree(file)
-            return
-        else:
-            validate.config_file("tree.xml","default_tree.xml")
-            self.load_tree(error=1)
-            return
-
-    
-    def load_tree(self, filename=dir_struct["user"]+'tree.xml', error=0):
-        settings.change("gametree", filename)
-        if not os.path.exists(filename):
-            emsg = "Gametree Missing!\n"+filename+" cannot be found.\n\n"\
-                 "Would you like to locate it?\n"\
-                 "(Selecting 'No' will cause a new default gametree to be generated)"
-            self.locate_valid_tree("Gametree Error", emsg)
-            return
-        try:
-            tree = parse(filename)
-            self.xml_root = tree.getroot()
-        except:
-            self.xml_root = None
-
-        if not self.xml_root:
-            os.rename(filename,filename+".corrupt")
-            emsg = "Your gametree is being regenerated.\n\n"\
-                 "To salvage a recent version of your gametree\n"\
-                 "exit OpenRPG and copy the lastgood.xml file in\n"\
-                 "your myfiles directory to "+filename+ "\n"\
-                 "in your myfiles directory.\n\n"\
-                 "lastgood.xml WILL BE OVERWRITTEN NEXT TIME YOU RUN OPENRPG.\n\n"\
-                 "Would you like to select a different gametree file to use?\n"\
-                 "(Selecting 'No' will cause a new default gametree to be generated)"
-            self.locate_valid_tree("Corrupt Gametree!", emsg)
-            return
-
-        if self.xml_root.tag != "gametree":
-            emsg = filename+" does not appear to be a valid gametree file.\n\n"\
-                 "Would you like to select a different gametree file to use?\n"\
-                 "(Selecting 'No' will cause a new default gametree to be generated)"
-            self.locate_valid_tree("Invalid Gametree!", emsg)
-            return
-        try:
-            # version = self.xml_root.get("version")
-            # see if we should load the gametree
-            loadfeatures = int(settings.get_setting("LoadGameTreeFeatures"))
-            if loadfeatures:
-                features_tree = parse(orpg.dirpath.dir_struct["template"]+"feature.xml")
-                self.xml_root.append(features_tree.getroot())
-                settings.change("LoadGameTreeFeatures","0")
-
-            ## load tree
-            logger.debug("Features loaded (if required)")
-            self.CollapseAndReset(self.root)
-            logger.note("Parsing Gametree Nodes ", True)
-            for xml_child in self.xml_root:
-                logger.note('.', True)
-                self.load_xml(xml_child,self.root)
-            logger.note("done", True)
-
-            self.Expand(self.root)
-            self.SetPyData(self.root,self.xml_root)
-            if error != 1:
-                with open(filename, "rb") as infile:
-                    with open(dir_struct["user"]+"lastgood.xml", "wb") as outfile:
-                        outfile.write(infile.read())
-            else: logger.info("Not overwriting lastgood.xml file.", True)
-
-        except Exception, e:
-            logger.exception(traceback.format_exc())
-            wx.MessageBox("Corrupt Tree!\nYour game tree is being regenerated. To\nsalvage a recent version of your gametree\nexit OpenRPG and copy the lastgood.xml\nfile in your myfiles directory\nto "+filename+ "\nin your myfiles directory.\nlastgood.xml WILL BE OVERWRITTEN NEXT TIME YOU RUN OPENRPG.")
-            os.rename(filename,filename+".corrupt")
-            validate.config_file("tree.xml","default_tree.xml")
-            self.load_tree(error=1)
-    
-    def build_std_menu(self, obj=None):
-        # build useful menu
-        useful_menu = wx.Menu()
-        useful_menu.Append(STD_MENU_NODE_USEFUL,"Use&ful")
-        useful_menu.Append(STD_MENU_NODE_USELESS,"Use&less")
-        useful_menu.Append(STD_MENU_NODE_INDIFFERENT,"&Indifferent")
-
-        # build standard menu
-        self.std_menu = wx.Menu()
-        self.std_menu.SetTitle("game tree")
-        self.std_menu.Append(STD_MENU_USE,"&Use")
-        self.std_menu.Append(STD_MENU_DESIGN,"&Design")
-        self.std_menu.Append(STD_MENU_PP,"&Pretty Print")
-        self.std_menu.AppendSeparator()
-        self.std_menu.Append(STD_MENU_SEND,"Send To Player")
-        self.std_menu.Append(STD_MENU_MAP,"Send To Map")
-        self.std_menu.Append(STD_MENU_CHAT,"Send To Chat")
-        self.std_menu.Append(STD_MENU_WHISPER,"Whisper To Player")
-        self.std_menu.AppendSeparator()
-        self.std_menu.Append(STD_MENU_ICON,"Change &Icon")
-        self.std_menu.Append(STD_MENU_DELETE,"D&elete")
-        self.std_menu.Append(STD_MENU_CLONE,"&Clone")
-        self.std_menu.AppendMenu(STD_MENU_NODE_SUBMENU,"Node &Usefulness",useful_menu)
-        self.std_menu.AppendSeparator()
-        self.std_menu.Append(STD_MENU_SAVE,"&Save Node")
-        self.std_menu.Append(STD_MENU_HTML,"E&xport as HTML")
-        self.std_menu.AppendSeparator()
-        self.std_menu.Append(STD_MENU_ABOUT,"&About")
-        self.Bind(wx.EVT_MENU, self.on_send_to, id=STD_MENU_SEND)
-        self.Bind(wx.EVT_MENU, self.indifferent, id=STD_MENU_NODE_INDIFFERENT)
-        self.Bind(wx.EVT_MENU, self.useful, id=STD_MENU_NODE_USEFUL)
-        self.Bind(wx.EVT_MENU, self.useless, id=STD_MENU_NODE_USELESS)
-        self.Bind(wx.EVT_MENU, self.on_del, id=STD_MENU_DELETE)
-        self.Bind(wx.EVT_MENU, self.on_send_to_map, id=STD_MENU_MAP)
-        self.Bind(wx.EVT_MENU, self.on_node_design, id=STD_MENU_DESIGN)
-        self.Bind(wx.EVT_MENU, self.on_node_use, id=STD_MENU_USE)
-        self.Bind(wx.EVT_MENU, self.on_node_pp, id=STD_MENU_PP)
-        self.Bind(wx.EVT_MENU, self.on_save, id=STD_MENU_SAVE)
-        self.Bind(wx.EVT_MENU, self.on_icon, id=STD_MENU_ICON)
-        self.Bind(wx.EVT_MENU, self.on_clone, id=STD_MENU_CLONE)
-        self.Bind(wx.EVT_MENU, self.on_about, id=STD_MENU_ABOUT)
-        self.Bind(wx.EVT_MENU, self.on_send_to_chat, id=STD_MENU_CHAT)
-        self.Bind(wx.EVT_MENU, self.on_whisper_to, id=STD_MENU_WHISPER)
-        self.Bind(wx.EVT_MENU, self.on_export_html, id=STD_MENU_HTML)
-        self.top_menu = wx.Menu()
-        self.top_menu.SetTitle("game tree")
-        self.top_menu.Append(TOP_IFILE,"&Insert File")
-        self.top_menu.Append(TOP_INSERT_URL,"Insert &URL")
-        self.top_menu.Append(TOP_FEATURES, "Insert &Features Node")
-        self.top_menu.Append(TOP_NEW_TREE, "&Load New Tree")
-        self.top_menu.Append(TOP_SAVE_TREE,"&Save Tree")
-        self.top_menu.Append(TOP_SAVE_TREE_AS,"Save Tree &As...")
-        self.top_menu.Append(TOP_TREE_PROP,"&Tree Properties")
-        self.Bind(wx.EVT_MENU, self.on_insert_file, id=TOP_IFILE)
-        self.Bind(wx.EVT_MENU, self.on_insert_url, id=TOP_INSERT_URL)
-        self.Bind(wx.EVT_MENU, self.on_save_tree_as, id=TOP_SAVE_TREE_AS)
-        self.Bind(wx.EVT_MENU, self.on_save_tree, id=TOP_SAVE_TREE)
-        self.Bind(wx.EVT_MENU, self.on_load_new_tree, id=TOP_NEW_TREE)
-        self.Bind(wx.EVT_MENU, self.on_tree_prop, id=TOP_TREE_PROP)
-        self.Bind(wx.EVT_MENU, self.on_insert_features, id=TOP_FEATURES)
-
-    def do_std_menu(self, evt, obj):
-        try: self.std_menu.Enable(STD_MENU_MAP, obj.checkToMapMenu())
-        except: self.std_menu.Enable(STD_MENU_MAP, obj.map_aware())
-        self.std_menu.Enable(STD_MENU_CLONE, obj.can_clone())
-        self.PopupMenu(self.std_menu)
-
-    def strip_html(self, player):
-        ret_string = ""
-        x = 0
-        in_tag = 0
-        for x in xrange(len(player[0])) :
-            if player[0][x] == "<" or player[0][x] == ">" or in_tag == 1 :
-                if player[0][x] == "<" : in_tag = 1
-                elif player[0][x] == ">" : in_tag = 0
-                else: pass
-            else: ret_string = ret_string + player[0][x]
-        logger.debug(ret_string)
-        return ret_string
-
+                    if self.GetItemText(nextSelect) != "": self.SelectItem(nextSelect)
+                except: pass
+        elif key_code == wx.WXK_F2:
+            self.rename_flag = 1
+            self.EditLabel(curSelection)
+        evt.Skip()
+   
+    def locate_valid_tree(self, error, msg): ## --Snowdog 3/05
+        """prompts the user to locate a new tree file or create a new one"""
+        response = wx.MessageDialog(self, msg, error, wx.YES|wx.NO|wx.ICON_ERROR)
+        if response == wx.YES:
+            file = None
+            dlg = wx.FileDialog(self, "Locate Gametree file", dir_struct["user"],
+                                filename[ ((filename.rfind(os.sep))+len(os.sep)):],
+                                "Gametree (*.xml)|*.xml|All files (*.*)|*.*",
+                                wx.OPEN | wx.CHANGE_DIR)
+            if dlg.ShowModal() == wx.ID_OK: file = dlg.GetPath()
+            dlg.Destroy()
+            if not file: self.load_tree(error=1)
+            else: self.load_tree(file)
+            return
+        else:
+            validate.config_file("tree.xml","default_tree.xml")
+            self.load_tree(error=1)
+            return
+
+    
+    def load_tree(self, filename=dir_struct["user"]+'tree.xml', error=0):
+        settings.change("gametree", filename)
+        if not os.path.exists(filename):
+            emsg = "Gametree Missing!\n"+filename+" cannot be found.\n\n"\
+                 "Would you like to locate it?\n"\
+                 "(Selecting 'No' will cause a new default gametree to be generated)"
+            self.locate_valid_tree("Gametree Error", emsg)
+            return
+        try:
+            tree = parse(filename)
+            self.xml_root = tree.getroot()
+        except:
+            self.xml_root = None
+
+        if not self.xml_root:
+            os.rename(filename,filename+".corrupt")
+            emsg = "Your gametree is being regenerated.\n\n"\
+                 "To salvage a recent version of your gametree\n"\
+                 "exit OpenRPG and copy the lastgood.xml file in\n"\
+                 "your myfiles directory to "+filename+ "\n"\
+                 "in your myfiles directory.\n\n"\
+                 "lastgood.xml WILL BE OVERWRITTEN NEXT TIME YOU RUN OPENRPG.\n\n"\
+                 "Would you like to select a different gametree file to use?\n"\
+                 "(Selecting 'No' will cause a new default gametree to be generated)"
+            self.locate_valid_tree("Corrupt Gametree!", emsg)
+            return
+
+        if self.xml_root.tag != "gametree":
+            emsg = filename+" does not appear to be a valid gametree file.\n\n"\
+                 "Would you like to select a different gametree file to use?\n"\
+                 "(Selecting 'No' will cause a new default gametree to be generated)"
+            self.locate_valid_tree("Invalid Gametree!", emsg)
+            return
+        try:
+            # version = self.xml_root.get("version")
+            # see if we should load the gametree
+            loadfeatures = int(settings.get_setting("LoadGameTreeFeatures"))
+            if loadfeatures:
+                features_tree = parse(orpg.dirpath.dir_struct["template"]+"feature.xml")
+                self.xml_root.append(features_tree.getroot())
+                settings.change("LoadGameTreeFeatures","0")
+
+            ## load tree
+            logger.debug("Features loaded (if required)")
+            self.CollapseAndReset(self.root)
+            logger.note("Parsing Gametree Nodes ", True)
+            for xml_child in self.xml_root:
+                logger.note('.', True)
+                self.load_xml(xml_child,self.root)
+            logger.note("done", True)
+
+            self.Expand(self.root)
+            self.SetPyData(self.root,self.xml_root)
+            if error != 1:
+                with open(filename, "rb") as infile:
+                    with open(dir_struct["user"]+"lastgood.xml", "wb") as outfile:
+                        outfile.write(infile.read())
+            else: logger.info("Not overwriting lastgood.xml file.", True)
+
+        except Exception, e:
+            logger.exception(traceback.format_exc())
+            wx.MessageBox("Corrupt Tree!\nYour game tree is being regenerated. To\nsalvage a recent version of your gametree\nexit OpenRPG and copy the lastgood.xml\nfile in your myfiles directory\nto "+filename+ "\nin your myfiles directory.\nlastgood.xml WILL BE OVERWRITTEN NEXT TIME YOU RUN OPENRPG.")
+            os.rename(filename,filename+".corrupt")
+            validate.config_file("tree.xml","default_tree.xml")
+            self.load_tree(error=1)
+    
+    def build_std_menu(self, obj=None):
+        # build useful menu
+        useful_menu = wx.Menu()
+        useful_menu.Append(STD_MENU_NODE_USEFUL,"Use&ful")
+        useful_menu.Append(STD_MENU_NODE_USELESS,"Use&less")
+        useful_menu.Append(STD_MENU_NODE_INDIFFERENT,"&Indifferent")
+
+        # build standard menu
+        self.std_menu = wx.Menu()
+        self.std_menu.SetTitle("game tree")
+        self.std_menu.Append(STD_MENU_USE,"&Use")
+        self.std_menu.Append(STD_MENU_DESIGN,"&Design")
+        self.std_menu.Append(STD_MENU_PP,"&Pretty Print")
+        self.std_menu.AppendSeparator()
+        self.std_menu.Append(STD_MENU_SEND,"Send To Player")
+        self.std_menu.Append(STD_MENU_MAP,"Send To Map")
+        self.std_menu.Append(STD_MENU_CHAT,"Send To Chat")
+        self.std_menu.Append(STD_MENU_WHISPER,"Whisper To Player")
+        self.std_menu.AppendSeparator()
+        self.std_menu.Append(STD_MENU_ICON,"Change &Icon")
+        self.std_menu.Append(STD_MENU_DELETE,"D&elete")
+        self.std_menu.Append(STD_MENU_CLONE,"&Clone")
+        self.std_menu.AppendMenu(STD_MENU_NODE_SUBMENU,"Node &Usefulness",useful_menu)
+        self.std_menu.AppendSeparator()
+        self.std_menu.Append(STD_MENU_SAVE,"&Save Node")
+        self.std_menu.Append(STD_MENU_HTML,"E&xport as HTML")
+        self.std_menu.AppendSeparator()
+        self.std_menu.Append(STD_MENU_ABOUT,"&About")
+        self.Bind(wx.EVT_MENU, self.on_send_to, id=STD_MENU_SEND)
+        self.Bind(wx.EVT_MENU, self.indifferent, id=STD_MENU_NODE_INDIFFERENT)
+        self.Bind(wx.EVT_MENU, self.useful, id=STD_MENU_NODE_USEFUL)
+        self.Bind(wx.EVT_MENU, self.useless, id=STD_MENU_NODE_USELESS)
+        self.Bind(wx.EVT_MENU, self.on_del, id=STD_MENU_DELETE)
+        self.Bind(wx.EVT_MENU, self.on_send_to_map, id=STD_MENU_MAP)
+        self.Bind(wx.EVT_MENU, self.on_node_design, id=STD_MENU_DESIGN)
+        self.Bind(wx.EVT_MENU, self.on_node_use, id=STD_MENU_USE)
+        self.Bind(wx.EVT_MENU, self.on_node_pp, id=STD_MENU_PP)
+        self.Bind(wx.EVT_MENU, self.on_save, id=STD_MENU_SAVE)
+        self.Bind(wx.EVT_MENU, self.on_icon, id=STD_MENU_ICON)
+        self.Bind(wx.EVT_MENU, self.on_clone, id=STD_MENU_CLONE)
+        self.Bind(wx.EVT_MENU, self.on_about, id=STD_MENU_ABOUT)
+        self.Bind(wx.EVT_MENU, self.on_send_to_chat, id=STD_MENU_CHAT)
+        self.Bind(wx.EVT_MENU, self.on_whisper_to, id=STD_MENU_WHISPER)
+        self.Bind(wx.EVT_MENU, self.on_export_html, id=STD_MENU_HTML)
+        self.top_menu = wx.Menu()
+        self.top_menu.SetTitle("game tree")
+        self.top_menu.Append(TOP_IFILE,"&Insert File")
+        self.top_menu.Append(TOP_INSERT_URL,"Insert &URL")
+        self.top_menu.Append(TOP_FEATURES, "Insert &Features Node")
+        self.top_menu.Append(TOP_NEW_TREE, "&Load New Tree")
+        self.top_menu.Append(TOP_SAVE_TREE,"&Save Tree")
+        self.top_menu.Append(TOP_SAVE_TREE_AS,"Save Tree &As...")
+        self.top_menu.Append(TOP_TREE_PROP,"&Tree Properties")
+        self.Bind(wx.EVT_MENU, self.on_insert_file, id=TOP_IFILE)
+        self.Bind(wx.EVT_MENU, self.on_insert_url, id=TOP_INSERT_URL)
+        self.Bind(wx.EVT_MENU, self.on_save_tree_as, id=TOP_SAVE_TREE_AS)
+        self.Bind(wx.EVT_MENU, self.on_save_tree, id=TOP_SAVE_TREE)
+        self.Bind(wx.EVT_MENU, self.on_load_new_tree, id=TOP_NEW_TREE)
+        self.Bind(wx.EVT_MENU, self.on_tree_prop, id=TOP_TREE_PROP)
+        self.Bind(wx.EVT_MENU, self.on_insert_features, id=TOP_FEATURES)
+
+    def do_std_menu(self, evt, obj):
+        try: self.std_menu.Enable(STD_MENU_MAP, obj.checkToMapMenu())
+        except: self.std_menu.Enable(STD_MENU_MAP, obj.map_aware())
+        self.std_menu.Enable(STD_MENU_CLONE, obj.can_clone())
+        self.PopupMenu(self.std_menu)
+
+    def strip_html(self, player):
+        ret_string = ""
+        x = 0
+        in_tag = 0
+        for x in xrange(len(player[0])) :
+            if player[0][x] == "<" or player[0][x] == ">" or in_tag == 1 :
+                if player[0][x] == "<" : in_tag = 1
+                elif player[0][x] == ">" : in_tag = 0
+                else: pass
+            else: ret_string = ret_string + player[0][x]
+        logger.debug(ret_string)
+        return ret_string
+
     def on_receive_data(self, data):
-        self.insert_xml(data)
-    
-    def on_send_to_chat(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.on_send_to_chat(evt)
-    
-    def on_whisper_to(self, evt):
-        players = self.session.get_players()
-        opts = []
-        myid = self.session.get_id()
-        me = None
-        for p in players:
-            if p[2] != myid: opts.append("("+p[2]+") " + self.strip_html(p))
-            else: me = p
-        if len(opts): players.remove(me)
-        if len(opts):
-            dlg = orpgMultiCheckBoxDlg( self.GetParent(),opts,"Select Players:","Whisper To",[] )
-            if dlg.ShowModal() == wx.ID_OK:
-                item = self.GetSelection()
-                obj = self.GetPyData(item)
-                selections = dlg.get_selections()
-                if len(selections) == len(opts): self.chat.ParsePost(obj.tohtml(),True,True)
-                else:
-                    player_ids = []
-                    for s in selections: player_ids.append(players[s][2])
-                    self.chat.whisper_to_players(obj.tohtml(),player_ids)
-
-    def on_export_html(self, evt):
-        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","HTML (*.html)|*.html",wx.SAVE)
-        if f.ShowModal() == wx.ID_OK:
-            item = self.GetSelection()
-            obj = self.GetPyData(item)
-            type = f.GetFilterIndex()
-            with open(f.GetPath(),"w") as f:
-                data = "<html><head><title>"+obj.xml.get("name")+"</title></head>"
-                data += "<body bgcolor='#FFFFFF' >"+obj.tohtml()+"</body></html>"
-                for tag in ("</tr>","</td>","</th>","</table>","</html>","</body>"): data = data.replace(tag,tag+"\n")
-                f.write(data)
-            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
-        f.Destroy()
-        os.chdir(dir_struct["home"])
-
-    def indifferent(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.usefulness("indifferent")
-
-    def useful(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.usefulness("useful")
-
-    def useless(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.usefulness("useless")
-
-    def on_email(self,evt):
-        pass
-
-    def on_send_to(self, evt):
-        players = self.session.get_players()
-        opts = []
-        myid = self.session.get_id()
-        me = None
-        for p in players:
-            if p[2] != myid: opts.append("("+p[2]+") " + self.strip_html(p))
-            else: me = p
-        if len(opts):
-            players.remove(me)
-            dlg = orpgMultiCheckBoxDlg( None, opts, "Select Players:", "Send To", [] )
-            if dlg.ShowModal() == wx.ID_OK:
-                item = self.GetSelection()
-                obj = self.GetPyData(item)
-                xmldata = "<tree>" + tostring(obj.xml) + "</tree>"
-                selections = dlg.get_selections()
-                if len(selections) == len(opts): self.session.send(xmldata)
-                else:
-                    for s in selections: self.session.send(xmldata,players[s][2])
-            dlg.Destroy()
-
-    def on_icon(self, evt):
-        icons = self.icons.keys()
-        icons.sort()
-        dlg = wx.SingleChoiceDialog(self,"Choose Icon?","Change Icon",icons)
-        if dlg.ShowModal() == wx.ID_OK:
-            key = dlg.GetStringSelection()
-            item = self.GetSelection()
-            obj = self.GetPyData(item)
-            obj.change_icon(key)
-        dlg.Destroy()
-
-    def on_wizard(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        name = "New " + obj.xml_root.get("name")
-        icon = obj.xml_root.get("icon")
-        xml_data = "<nodehandler name='"+name+"' icon='" + icon + "' module='core' class='node_loader' >"
-        xml_data += xml.toxml(obj)
-        xml_data += "</nodehandler>"
-        self.insert_xml(xml_data)
-        logger.debug(xml_data)
-
-    def on_clone(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        if obj.can_clone():
-            parent_node = self.GetItemParent(item)
-            prev_sib = self.GetPrevSibling(item)
-            if not prev_sib.IsOk(): prev_sib = parent_node
-            clone_xml = XML(tostring(obj.xml))
-            if parent_node == self.root: parent_xml = self.GetPyData(parent_node)
-            else: parent_xml = self.GetPyData(parent_node).xml
-            for i in range(len(parent_xml)):
+        self.insert_xml(data)
+    
+    def on_send_to_chat(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.on_send_to_chat(evt)
+    
+    def on_whisper_to(self, evt):
+        players = self.session.get_players()
+        opts = []
+        myid = self.session.get_id()
+        me = None
+        for p in players:
+            if p[2] != myid: opts.append("("+p[2]+") " + self.strip_html(p))
+            else: me = p
+        if len(opts): players.remove(me)
+        if len(opts):
+            dlg = orpgMultiCheckBoxDlg( self.GetParent(),opts,"Select Players:","Whisper To",[] )
+            if dlg.ShowModal() == wx.ID_OK:
+                item = self.GetSelection()
+                obj = self.GetPyData(item)
+                selections = dlg.get_selections()
+                if len(selections) == len(opts): self.chat.ParsePost(obj.tohtml(),True,True)
+                else:
+                    player_ids = []
+                    for s in selections: player_ids.append(players[s][2])
+                    self.chat.whisper_to_players(obj.tohtml(),player_ids)
+
+    def on_export_html(self, evt):
+        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","HTML (*.html)|*.html",wx.SAVE)
+        if f.ShowModal() == wx.ID_OK:
+            item = self.GetSelection()
+            obj = self.GetPyData(item)
+            type = f.GetFilterIndex()
+            with open(f.GetPath(),"w") as f:
+                data = "<html><head><title>"+obj.xml.get("name")+"</title></head>"
+                data += "<body bgcolor='#FFFFFF' >"+obj.tohtml()+"</body></html>"
+                for tag in ("</tr>","</td>","</th>","</table>","</html>","</body>"): data = data.replace(tag,tag+"\n")
+                f.write(data)
+            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
+        f.Destroy()
+        os.chdir(dir_struct["home"])
+
+    def indifferent(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.usefulness("indifferent")
+
+    def useful(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.usefulness("useful")
+
+    def useless(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.usefulness("useless")
+
+    def on_email(self,evt):
+        pass
+
+    def on_send_to(self, evt):
+        players = self.session.get_players()
+        opts = []
+        myid = self.session.get_id()
+        me = None
+        for p in players:
+            if p[2] != myid: opts.append("("+p[2]+") " + self.strip_html(p))
+            else: me = p
+        if len(opts):
+            players.remove(me)
+            dlg = orpgMultiCheckBoxDlg( None, opts, "Select Players:", "Send To", [] )
+            if dlg.ShowModal() == wx.ID_OK:
+                item = self.GetSelection()
+                obj = self.GetPyData(item)
+                xmldata = "<tree>" + tostring(obj.xml) + "</tree>"
+                selections = dlg.get_selections()
+                if len(selections) == len(opts): self.session.send(xmldata)
+                else:
+                    for s in selections: self.session.send(xmldata,players[s][2])
+            dlg.Destroy()
+
+    def on_icon(self, evt):
+        icons = self.icons.keys()
+        icons.sort()
+        dlg = wx.SingleChoiceDialog(self,"Choose Icon?","Change Icon",icons)
+        if dlg.ShowModal() == wx.ID_OK:
+            key = dlg.GetStringSelection()
+            item = self.GetSelection()
+            obj = self.GetPyData(item)
+            obj.change_icon(key)
+        dlg.Destroy()
+
+    def on_wizard(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        name = "New " + obj.xml_root.get("name")
+        icon = obj.xml_root.get("icon")
+        xml_data = "<nodehandler name='"+name+"' icon='" + icon + "' module='core' class='node_loader' >"
+        xml_data += xml.toxml(obj)
+        xml_data += "</nodehandler>"
+        self.insert_xml(xml_data)
+        logger.debug(xml_data)
+
+    def on_clone(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        if obj.can_clone():
+            parent_node = self.GetItemParent(item)
+            prev_sib = self.GetPrevSibling(item)
+            if not prev_sib.IsOk(): prev_sib = parent_node
+            clone_xml = XML(tostring(obj.xml))
+            if parent_node == self.root: parent_xml = self.GetPyData(parent_node)
+            else: parent_xml = self.GetPyData(parent_node).xml
+            for i in range(len(parent_xml)):
                 if parent_xml[i] is obj.xml:
                     name = self.clone_renaming(parent_xml, parent_xml[i].get('name'))
                     clone_xml.set('name', name)
-                    parent_xml.insert(i, clone_xml)
-                    break
+                    parent_xml.insert(i, clone_xml)
+                    break
             self.load_xml(clone_xml, parent_node, prev_sib)
 
     def clone_renaming(self, node, name):
@@ -493,403 +493,403 @@
             name = name+str(append_d)
         for n in node_list:
             if n.get('name') == name: name = self.clone_renaming(parent, name)
-        return name
-
-    def on_save(self, evt):
-        """save node to a xml file"""
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.on_save(evt)
-        os.chdir(dir_struct["home"])
-
-    def on_save_tree_as(self, evt):
-        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","*.xml",wx.SAVE)
-        if f.ShowModal() == wx.ID_OK:
-            self.save_tree(f.GetPath())
-            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
-        f.Destroy()
-        os.chdir(dir_struct["home"])
-
-    def on_save_tree(self, evt=None):
-        filename = settings.get_setting("gametree")
-        self.save_tree(filename)
-
-    def save_tree(self, filename=dir_struct["user"]+'tree.xml'):
-        self.xml_root.set("version", GAMETREE_VERSION)
+        return name
+
+    def on_save(self, evt):
+        """save node to a xml file"""
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.on_save(evt)
+        os.chdir(dir_struct["home"])
+
+    def on_save_tree_as(self, evt):
+        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","*.xml",wx.SAVE)
+        if f.ShowModal() == wx.ID_OK:
+            self.save_tree(f.GetPath())
+            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
+        f.Destroy()
+        os.chdir(dir_struct["home"])
+
+    def on_save_tree(self, evt=None):
+        filename = settings.get_setting("gametree")
+        self.save_tree(filename)
+
+    def save_tree(self, filename=dir_struct["user"]+'tree.xml'):
+        self.xml_root.set("version", GAMETREE_VERSION)
         settings.change("gametree", filename)
-        ElementTree(self.xml_root).write(filename)
-
-    def on_load_new_tree(self, evt):
-        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","*.xml",wx.OPEN)
-        if f.ShowModal() == wx.ID_OK:
-            self.load_tree(f.GetPath())
-            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
-        f.Destroy()
-        os.chdir(dir_struct["home"])
-
-    def on_insert_file(self, evt):
-        """loads xml file into the tree"""
-        if self.last_save_dir == ".":
-            self.last_save_dir = dir_struct["user"]
-        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","*.xml",wx.OPEN)
-        if f.ShowModal() == wx.ID_OK:
-            self.insert_xml(open(f.GetPath(),"r").read())
-            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
-        f.Destroy()
-        os.chdir(dir_struct["home"])
-
-    def on_insert_url(self, evt):
-        """loads xml url into the tree"""
-        dlg = wx.TextEntryDialog(self,"URL?","Insert URL", "http://")
-        if dlg.ShowModal() == wx.ID_OK:
-            path = dlg.GetValue()
-            file = urllib.urlopen(path)
-            self.insert_xml(file.read())
-        dlg.Destroy()
-
-    def on_insert_features(self, evt):
-        self.insert_xml(open(dir_struct["template"]+"feature.xml","r").read())
-
-    def on_tree_prop(self, evt):
-        dlg = gametree_prop_dlg(self, settings)
-        if dlg.ShowModal() == wx.ID_OK: pass
-        dlg.Destroy()
-
-    def on_node_design(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.on_design(evt)
-
-    def on_node_use(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.on_use(evt)
-
-    def on_node_pp(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        obj.on_html_view(evt)
-
-    def on_del(self, evt):
-        status_value = "none"
-        try:
-            item = self.GetSelection()
-            if item:
-                handler = self.GetPyData(item)
-                status_value = handler.xml.get('status')
-                name = handler.xml.get('name')
-                parent_item = self.GetItemParent(item)
-                while parent_item.IsOk() and status_value!="useful" and status_value!="useless":
-                    try:
-                        parent_handler = self.GetPyData(parent_item)
-                        status_value = parent_handler.get('status')
-                        name = parent_handler.get('name')
-                        if status_value == "useless": break
-                        elif status_value == "useful": break
-                    except: status_value = "none"
-                    parent_item = self.GetItemParent(parent_item)
-                if status_value == "useful":
-                    dlg = wx.MessageDialog(self, `name` + "  And everything beneath it are considered useful.  \n\nAre you sure you want to delete this item?",'Important Item',wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-                    if dlg.ShowModal() == wx.ID_YES: handler.delete()
-                else: handler.delete()
-        except:
-            if self.GetSelection() == self.GetRootItem(): msg = wx.MessageDialog(None,"You can't delete the root item.","Delete Error",wx.OK)
-            else: msg = wx.MessageDialog(None,"Unknown error deleting node.","Delete Error",wx.OK)
-            msg.ShowModal()
-            msg.Destroy()
-
-    def on_about(self, evt):
-        item = self.GetSelection()
+        ElementTree(self.xml_root).write(filename)
+
+    def on_load_new_tree(self, evt):
+        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","*.xml",wx.OPEN)
+        if f.ShowModal() == wx.ID_OK:
+            self.load_tree(f.GetPath())
+            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
+        f.Destroy()
+        os.chdir(dir_struct["home"])
+
+    def on_insert_file(self, evt):
+        """loads xml file into the tree"""
+        if self.last_save_dir == ".":
+            self.last_save_dir = dir_struct["user"]
+        f = wx.FileDialog(self,"Select a file", self.last_save_dir,"","*.xml",wx.OPEN)
+        if f.ShowModal() == wx.ID_OK:
+            self.insert_xml(open(f.GetPath(),"r").read())
+            self.last_save_dir, throwaway = os.path.split( f.GetPath() )
+        f.Destroy()
+        os.chdir(dir_struct["home"])
+
+    def on_insert_url(self, evt):
+        """loads xml url into the tree"""
+        dlg = wx.TextEntryDialog(self,"URL?","Insert URL", "http://")
+        if dlg.ShowModal() == wx.ID_OK:
+            path = dlg.GetValue()
+            file = urllib.urlopen(path)
+            self.insert_xml(file.read())
+        dlg.Destroy()
+
+    def on_insert_features(self, evt):
+        self.insert_xml(open(dir_struct["template"]+"feature.xml","r").read())
+
+    def on_tree_prop(self, evt):
+        dlg = gametree_prop_dlg(self, settings)
+        if dlg.ShowModal() == wx.ID_OK: pass
+        dlg.Destroy()
+
+    def on_node_design(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.on_design(evt)
+
+    def on_node_use(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        obj.on_use(evt)
+
+    def on_node_pp(self, evt):
+        item = self.GetSelection()
         obj = self.GetPyData(item)
-        text = str(obj.about())
+        obj.on_html_view(evt)
+
+    def on_del(self, evt):
+        status_value = "none"
+        try:
+            item = self.GetSelection()
+            if item:
+                handler = self.GetPyData(item)
+                status_value = handler.xml.get('status')
+                name = handler.xml.get('name')
+                parent_item = self.GetItemParent(item)
+                while parent_item.IsOk() and status_value!="useful" and status_value!="useless":
+                    try:
+                        parent_handler = self.GetPyData(parent_item)
+                        status_value = parent_handler.get('status')
+                        name = parent_handler.get('name')
+                        if status_value == "useless": break
+                        elif status_value == "useful": break
+                    except: status_value = "none"
+                    parent_item = self.GetItemParent(parent_item)
+                if status_value == "useful":
+                    dlg = wx.MessageDialog(self, `name` + "  And everything beneath it are considered useful.  \n\nAre you sure you want to delete this item?",'Important Item',wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+                    if dlg.ShowModal() == wx.ID_YES: handler.delete()
+                else: handler.delete()
+        except:
+            if self.GetSelection() == self.GetRootItem(): msg = wx.MessageDialog(None,"You can't delete the root item.","Delete Error",wx.OK)
+            else: msg = wx.MessageDialog(None,"Unknown error deleting node.","Delete Error",wx.OK)
+            msg.ShowModal()
+            msg.Destroy()
+
+    def on_about(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        text = str(obj.about())
         #about = MyAboutBox(self, obj.about())
-        wx.MessageBox(text, 'About')#.ShowModal()
-        #about.ShowModal()
-        #about.Destroy()
-    
-    def on_send_to_map(self, evt):
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        if hasattr(obj,"on_send_to_map"): obj.on_send_to_map(evt)
-    
-    def insert_xml(self, txt):
-        #Updated to allow safe merging of gametree files
-        #without leaving an unusable and undeletable node.
-        #                               -- Snowdog 8/03
-        if not txt:
-            wx.MessageBox("Import Failed: Invalid or missing node data")
-            logger.general("Import Failed: Invalid or missing node data")
-            return
-        try: new_xml = XML(txt)
-        except ExpatError:
-            wx.MessageBox("Error Importing Node or Tree")
-            logger.general("Error Importing Node or Tree")
+        wx.MessageBox(text, 'About')#.ShowModal()
+        #about.ShowModal()
+        #about.Destroy()
+    
+    def on_send_to_map(self, evt):
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        if hasattr(obj,"on_send_to_map"): obj.on_send_to_map(evt)
+    
+    def insert_xml(self, txt):
+        #Updated to allow safe merging of gametree files
+        #without leaving an unusable and undeletable node.
+        #                               -- Snowdog 8/03
+        if not txt:
+            wx.MessageBox("Import Failed: Invalid or missing node data")
+            logger.general("Import Failed: Invalid or missing node data")
             return
-        if new_xml.tag == "gametree":
-            for xml_child in new_xml: self.load_xml(xml_child, self.root)
-            return
+        try: new_xml = XML(txt)
+        except ExpatError:
+            wx.MessageBox("Error Importing Node or Tree")
+            logger.general("Error Importing Node or Tree")
+            return
+        if new_xml.tag == "gametree":
+            for xml_child in new_xml: self.load_xml(xml_child, self.root)
+            return
         if new_xml.tag == "tree":
-            self.xml_root.append(new_xml.find('nodehandler'))
-            for xml_child in new_xml: self.load_xml(xml_child, self.root)
+            self.xml_root.append(new_xml.find('nodehandler'))
+            for xml_child in new_xml: self.load_xml(xml_child, self.root)
             return
-        self.xml_root.append(new_xml)
-        self.load_xml(new_xml, self.root, self.root)
-    
-    def build_img_list(self):
-        """make image list"""
-        helper = img_helper()
-        self.icons = { }
-        self._imageList= wx.ImageList(16,16,False)
-        icons_xml = parse(orpg.dirpath.dir_struct["icon"]+"icons.xml")
-        for icon in icons_xml.getroot():
-            key = icon.get("name")
-            path = orpg.dirpath.dir_struct["icon"] + icon.get("file")
-            img = helper.load_file(path)
-            self.icons[key] = self._imageList.Add(img)
-        self.SetImageList(self._imageList)
-
-    def get_tree_map(self, parent):
-        ## Could be a little cleaner ##
-        family_tree = []
-        test = parent
-        while test != self.root:
-            parent = self.GetItemText(test)
-            test = self.GetItemParent(test)
-            family_tree.append(parent)
-        return family_tree
-    
+        self.xml_root.append(new_xml)
+        self.load_xml(new_xml, self.root, self.root)
+    
+    def build_img_list(self):
+        """make image list"""
+        helper = img_helper()
+        self.icons = { }
+        self._imageList= wx.ImageList(16,16,False)
+        icons_xml = parse(orpg.dirpath.dir_struct["icon"]+"icons.xml")
+        for icon in icons_xml.getroot():
+            key = icon.get("name")
+            path = orpg.dirpath.dir_struct["icon"] + icon.get("file")
+            img = helper.load_file(path)
+            self.icons[key] = self._imageList.Add(img)
+        self.SetImageList(self._imageList)
+
+    def get_tree_map(self, parent):
+        ## Could be a little cleaner ##
+        family_tree = []
+        test = parent
+        while test != self.root:
+            parent = self.GetItemText(test)
+            test = self.GetItemParent(test)
+            family_tree.append(parent)
+        return family_tree
+    
     def load_xml(self, xml_element, parent_node, prev_node=None):
         if parent_node == self.root:
             self.tree_map[xml_element.get('name')] = {}
             self.tree_map[xml_element.get('name')]['node'] = xml_element
-        if parent_node != self.root:
-            ## Loading XML seems to lag on Grids and Images need a cache for load speed ##
-            family_tree = self.get_tree_map(parent_node)
-            family_tree.reverse()
-            map_str = '' #'!@'
-            for member in family_tree: map_str += member +'::'
-            map_str = map_str[:len(map_str)-2] #+'@!'
-            xml_element.set('map', map_str)
-
-        #add the first tree node
-        i = 0
-        name = xml_element.get("name")
-        icon = xml_element.get("icon")
-        if self.icons.has_key(icon): i = self.icons[icon]
-
-        if prev_node:
-            if prev_node == parent_node: new_tree_node = self.PrependItem(parent_node, name, i, i)
-            else: new_tree_node = self.InsertItem(parent_node, prev_node, name, i, i)
-        else: new_tree_node = self.AppendItem(parent_node, name, i, i)
-
-        logger.debug("Node Added to tree")
-        #create a nodehandler or continue loading xml into tree
-        if xml_element.tag == "nodehandler":
-            try:
-                py_class = xml_element.get("class")
-                logger.debug("nodehandler class: " + py_class)
-                if not self.nodehandlers.has_key(py_class): raise Exception("Unknown Nodehandler for " + py_class)
-                self.nodes[self.id] = self.nodehandlers[py_class](xml_element, new_tree_node)
-                self.SetPyData(new_tree_node, self.nodes[self.id])
-                logger.debug("Node Data set")
-                bmp = self.nodes[self.id].get_scaled_bitmap(16,16)
-                if bmp: self.cached_load_of_image(bmp,new_tree_node,)
-                logger.debug("Node Icon loaded")
-                self.id = self.id + 1
-            except Exception, er:
-                logger.exception(traceback.format_exc())
-                # was deleted -- should we delete non-nodehandler nodes then?
-                #self.Delete(new_tree_node)
-                #parent = xml_dom._get_parentNode()
-                #parent.removeChild(xml_dom)
-        return new_tree_node
-    
-    def cached_load_of_image(self, bmp_in, new_tree_node):
-        image_list = self.GetImageList()
-        img = wx.ImageFromBitmap(bmp_in)
-        img_data = img.GetData()
-        image_index = None
-        for key in self.image_cache.keys():
-            if self.image_cache[key] == str(img_data):
-                image_index = key
-                break
-        if image_index is None:
-            image_index = image_list.Add(bmp_in)
-            self.image_cache[image_index] = img_data
-        self.SetItemImage(new_tree_node,image_index)
-        self.SetItemImage(new_tree_node,image_index, wx.TreeItemIcon_Selected)
-        return image_index
-
-    def on_rclick(self, evt):
-        pt = evt.GetPosition()
-        (item, flag) = self.HitTest(pt)
-        if item.IsOk():
-            obj = self.GetPyData(item)
-            self.SelectItem(item)
-            if(isinstance(obj,core.node_handler)): obj.on_rclick(evt)
-            else: self.PopupMenu(self.top_menu)
-        else: self.PopupMenu(self.top_menu,pt)
-    
-    def on_ldclick(self, evt):
-        self.rename_flag = 0
-        pt = evt.GetPosition()
-        (item, flag) = self.HitTest(pt)
-        if item.IsOk():
-            obj = self.GetPyData(item)
-            self.SelectItem(item)
-            if(isinstance(obj,core.node_handler)):
-                if not obj.on_ldclick(evt):
-                    action = settings.get_setting("treedclick")
-                    if action == "use": obj.on_use(evt)
-                    elif action == "design": obj.on_design(evt)
-                    elif action == "print": obj.on_html_view(evt)
-                    elif action == "chat": self.on_send_to_chat(evt)
-    
-    def on_left_down(self, evt):
-        pt = evt.GetPosition()
-        (item, flag) = self.HitTest(pt)
-        if item.IsOk() and self.was_labeling:
-            self.SelectItem(item)
-            self.rename_flag = 0
-            self.was_labeling = 0
-        elif (flag & wx.TREE_HITTEST_ONITEMLABEL) == wx.TREE_HITTEST_ONITEMLABEL and self.IsSelected(item):
-            #  this next if tests to ensure that the mouse up occurred over a label, and not the icon
-            self.rename_flag = 1
-        else: self.SelectItem(item)
-        evt.Skip()
-    
-    def on_left_up(self, evt):
-        if self.dragging:
-            cur = wx.StockCursor(wx.CURSOR_ARROW)
-            self.SetCursor(cur)
-            self.dragging = False
-            pt = evt.GetPosition()
-            (item, flag) = self.HitTest(pt)
-            if item.IsOk():
-                obj = self.GetPyData(item)
-                self.SelectItem(item)
-                if(isinstance(obj,core.node_handler)):
-                    obj.on_drop(evt)
-                    self.drag_obj = None
-
-    def traverse(self, root, function, data=None, recurse=True):
-        child, cookie = self.GetFirstChild(root)
-        while child.IsOk():
-            function(child, data)
-            if recurse: self.traverse(child, function, data)
-            child, cookie = self.GetNextChild(root, cookie)
-    
-    def on_label_change(self, evt):
-        item = evt.GetItem()
-        txt = evt.GetLabel()
-        self.was_labeling = 0
-        self.rename_flag = 0
-        if txt != "":
-            obj = self.GetPyData(item)
-            obj.xml_root.setAttribute('name',txt)
-        else: evt.Veto()
-    
-    def on_label_begin(self, evt):
-        if not self.rename_flag: evt.Veto()
-        else:
-            self.was_labeling = 1
-            item = evt.GetItem()
-            if item == self.GetRootItem(): evt.Veto()
-    
-    def on_drag(self, evt):
-        self.rename_flag = 0
-        item = self.GetSelection()
-        obj = self.GetPyData(item)
-        self.SelectItem(item)
-        if(isinstance(obj,core.node_handler) and obj.drag):
-            self.dragging = True
-            cur = wx.StockCursor(wx.CURSOR_HAND)
-            self.SetCursor(cur)
-            self.drag_obj = obj
-    
-    def is_parent_node(self, node, compare_node):
-        parent_node = self.GetItemParent(node)
-        if compare_node == parent_node:
-            logger.debug("parent node")
-            return 1
-        elif parent_node == self.root:
-            logger.debug("not parent")
-            return 0
-        else: return self.is_parent_node(parent_node, compare_node)
-
-CTRL_TREE_FILE = wx.NewId()
-CTRL_YES = wx.NewId()
-CTRL_NO = wx.NewId()
-CTRL_USE = wx.NewId()
-CTRL_DESIGN = wx.NewId()
-CTRL_CHAT = wx.NewId()
-CTRL_PRINT = wx.NewId()
-
-class gametree_prop_dlg(wx.Dialog):
-    
-    def __init__(self, parent, settings):
-        wx.Dialog.__init__(self, parent, wx.ID_ANY, "Game Tree Properties")
-
-        #sizers
-        sizers = {}
-        sizers['but'] = wx.BoxSizer(wx.HORIZONTAL)
-        sizers['main'] = wx.BoxSizer(wx.VERTICAL)
-
-        #box sizers
-        box_sizers = {}
-        box_sizers["save"] = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Save On Exit"), wx.HORIZONTAL)
-        box_sizers["file"] = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Tree File"), wx.HORIZONTAL)
-        box_sizers["dclick"] = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Double Click Action"), wx.HORIZONTAL)
-        self.ctrls = {  CTRL_TREE_FILE : FileBrowseButtonWithHistory(self, wx.ID_ANY,  labelText="" ) ,
-                        CTRL_YES : wx.RadioButton(self, CTRL_YES, "Yes", style=wx.RB_GROUP),
-                        CTRL_NO : wx.RadioButton(self, CTRL_NO, "No"),
-                        CTRL_USE : wx.RadioButton(self, CTRL_USE, "Use", style=wx.RB_GROUP),
-                        CTRL_DESIGN : wx.RadioButton(self, CTRL_DESIGN, "Desgin"),
-                        CTRL_CHAT : wx.RadioButton(self, CTRL_CHAT, "Chat"),
-                        CTRL_PRINT : wx.RadioButton(self, CTRL_PRINT, "Pretty Print")
-                        }
-        self.ctrls[CTRL_TREE_FILE].SetValue(settings.get_setting("gametree"))
-        opt = settings.get_setting("SaveGameTreeOnExit")
-        self.ctrls[CTRL_YES].SetValue(opt=="1")
-        self.ctrls[CTRL_NO].SetValue(opt=="0")
-        opt = settings.get_setting("treedclick")
-        self.ctrls[CTRL_DESIGN].SetValue(opt=="design")
-        self.ctrls[CTRL_USE].SetValue(opt=="use")
-        self.ctrls[CTRL_CHAT].SetValue(opt=="chat")
-        self.ctrls[CTRL_PRINT].SetValue(opt=="print")
-        box_sizers['save'].Add(self.ctrls[CTRL_YES],0, wx.EXPAND)
-        box_sizers['save'].Add(wx.Size(10,10))
-        box_sizers['save'].Add(self.ctrls[CTRL_NO],0, wx.EXPAND)
-        box_sizers['file'].Add(self.ctrls[CTRL_TREE_FILE], 0, wx.EXPAND)
-        box_sizers['dclick'].Add(self.ctrls[CTRL_USE],0, wx.EXPAND)
-        box_sizers['dclick'].Add(wx.Size(10,10))
-        box_sizers['dclick'].Add(self.ctrls[CTRL_DESIGN],0, wx.EXPAND)
-        box_sizers['dclick'].Add(wx.Size(10,10))
-        box_sizers['dclick'].Add(self.ctrls[CTRL_CHAT],0, wx.EXPAND)
-        box_sizers['dclick'].Add(wx.Size(10,10))
-        box_sizers['dclick'].Add(self.ctrls[CTRL_PRINT],0, wx.EXPAND)
-
-        # buttons
-        sizers['but'].Add(wx.Button(self, wx.ID_OK, "Apply"), 1, wx.EXPAND)
-        sizers['but'].Add(wx.Size(10,10))
-        sizers['but'].Add(wx.Button(self, wx.ID_CANCEL, "Cancel"), 1, wx.EXPAND)
-        sizers['main'].Add(box_sizers['save'], 1, wx.EXPAND)
-        sizers['main'].Add(box_sizers['file'], 1, wx.EXPAND)
-        sizers['main'].Add(box_sizers['dclick'], 1, wx.EXPAND)
-        sizers['main'].Add(sizers['but'], 0, wx.EXPAND|wx.ALIGN_BOTTOM )
-
-        #sizers['main'].SetDimension(10,10,csize[0]-20,csize[1]-20)
-        self.SetSizer(sizers['main'])
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_BUTTON, self.on_ok, id=wx.ID_OK)
-
-    
-    def on_ok(self,evt):
-        settings.change("gametree",self.ctrls[CTRL_TREE_FILE].GetValue())
-        settings.change("SaveGameTreeOnExit",str(self.ctrls[CTRL_YES].GetValue()))
-        if self.ctrls[CTRL_USE].GetValue(): settings.change("treedclick","use")
-        elif self.ctrls[CTRL_DESIGN].GetValue(): settings.change("treedclick","design")
-        elif self.ctrls[CTRL_PRINT].GetValue(): settings.change("treedclick","print")
-        elif self.ctrls[CTRL_CHAT].GetValue(): settings.change("treedclick","chat")
-        self.EndModal(wx.ID_OK)
+        if parent_node != self.root:
+            ## Loading XML seems to lag on Grids and Images need a cache for load speed ##
+            family_tree = self.get_tree_map(parent_node)
+            family_tree.reverse()
+            map_str = '' #'!@'
+            for member in family_tree: map_str += member +'::'
+            map_str = map_str[:len(map_str)-2] #+'@!'
+            xml_element.set('map', map_str)
+
+        #add the first tree node
+        i = 0
+        name = xml_element.get("name")
+        icon = xml_element.get("icon")
+        if self.icons.has_key(icon): i = self.icons[icon]
+
+        if prev_node:
+            if prev_node == parent_node: new_tree_node = self.PrependItem(parent_node, name, i, i)
+            else: new_tree_node = self.InsertItem(parent_node, prev_node, name, i, i)
+        else: new_tree_node = self.AppendItem(parent_node, name, i, i)
+
+        logger.debug("Node Added to tree")
+        #create a nodehandler or continue loading xml into tree
+        if xml_element.tag == "nodehandler":
+            try:
+                py_class = xml_element.get("class")
+                logger.debug("nodehandler class: " + py_class)
+                if not self.nodehandlers.has_key(py_class): raise Exception("Unknown Nodehandler for " + py_class)
+                self.nodes[self.id] = self.nodehandlers[py_class](xml_element, new_tree_node)
+                self.SetPyData(new_tree_node, self.nodes[self.id])
+                logger.debug("Node Data set")
+                bmp = self.nodes[self.id].get_scaled_bitmap(16,16)
+                if bmp: self.cached_load_of_image(bmp,new_tree_node,)
+                logger.debug("Node Icon loaded")
+                self.id = self.id + 1
+            except Exception, er:
+                logger.exception(traceback.format_exc())
+                # was deleted -- should we delete non-nodehandler nodes then?
+                #self.Delete(new_tree_node)
+                #parent = xml_dom._get_parentNode()
+                #parent.removeChild(xml_dom)
+        return new_tree_node
+    
+    def cached_load_of_image(self, bmp_in, new_tree_node):
+        image_list = self.GetImageList()
+        img = wx.ImageFromBitmap(bmp_in)
+        img_data = img.GetData()
+        image_index = None
+        for key in self.image_cache.keys():
+            if self.image_cache[key] == str(img_data):
+                image_index = key
+                break
+        if image_index is None:
+            image_index = image_list.Add(bmp_in)
+            self.image_cache[image_index] = img_data
+        self.SetItemImage(new_tree_node,image_index)
+        self.SetItemImage(new_tree_node,image_index, wx.TreeItemIcon_Selected)
+        return image_index
+
+    def on_rclick(self, evt):
+        pt = evt.GetPosition()
+        (item, flag) = self.HitTest(pt)
+        if item.IsOk():
+            obj = self.GetPyData(item)
+            self.SelectItem(item)
+            if(isinstance(obj,core.node_handler)): obj.on_rclick(evt)
+            else: self.PopupMenu(self.top_menu)
+        else: self.PopupMenu(self.top_menu,pt)
+    
+    def on_ldclick(self, evt):
+        self.rename_flag = 0
+        pt = evt.GetPosition()
+        (item, flag) = self.HitTest(pt)
+        if item.IsOk():
+            obj = self.GetPyData(item)
+            self.SelectItem(item)
+            if(isinstance(obj,core.node_handler)):
+                if not obj.on_ldclick(evt):
+                    action = settings.get_setting("treedclick")
+                    if action == "use": obj.on_use(evt)
+                    elif action == "design": obj.on_design(evt)
+                    elif action == "print": obj.on_html_view(evt)
+                    elif action == "chat": self.on_send_to_chat(evt)
+    
+    def on_left_down(self, evt):
+        pt = evt.GetPosition()
+        (item, flag) = self.HitTest(pt)
+        if item.IsOk() and self.was_labeling:
+            self.SelectItem(item)
+            self.rename_flag = 0
+            self.was_labeling = 0
+        elif (flag & wx.TREE_HITTEST_ONITEMLABEL) == wx.TREE_HITTEST_ONITEMLABEL and self.IsSelected(item):
+            #  this next if tests to ensure that the mouse up occurred over a label, and not the icon
+            self.rename_flag = 1
+        else: self.SelectItem(item)
+        evt.Skip()
+    
+    def on_left_up(self, evt):
+        if self.dragging:
+            cur = wx.StockCursor(wx.CURSOR_ARROW)
+            self.SetCursor(cur)
+            self.dragging = False
+            pt = evt.GetPosition()
+            (item, flag) = self.HitTest(pt)
+            if item.IsOk():
+                obj = self.GetPyData(item)
+                self.SelectItem(item)
+                if(isinstance(obj,core.node_handler)):
+                    obj.on_drop(evt)
+                    self.drag_obj = None
+
+    def traverse(self, root, function, data=None, recurse=True):
+        child, cookie = self.GetFirstChild(root)
+        while child.IsOk():
+            function(child, data)
+            if recurse: self.traverse(child, function, data)
+            child, cookie = self.GetNextChild(root, cookie)
+    
+    def on_label_change(self, evt):
+        item = evt.GetItem()
+        txt = evt.GetLabel()
+        self.was_labeling = 0
+        self.rename_flag = 0
+        if txt != "":
+            obj = self.GetPyData(item)
+            obj.xml_root.setAttribute('name',txt)
+        else: evt.Veto()
+    
+    def on_label_begin(self, evt):
+        if not self.rename_flag: evt.Veto()
+        else:
+            self.was_labeling = 1
+            item = evt.GetItem()
+            if item == self.GetRootItem(): evt.Veto()
+    
+    def on_drag(self, evt):
+        self.rename_flag = 0
+        item = self.GetSelection()
+        obj = self.GetPyData(item)
+        self.SelectItem(item)
+        if(isinstance(obj,core.node_handler) and obj.drag):
+            self.dragging = True
+            cur = wx.StockCursor(wx.CURSOR_HAND)
+            self.SetCursor(cur)
+            self.drag_obj = obj
+    
+    def is_parent_node(self, node, compare_node):
+        parent_node = self.GetItemParent(node)
+        if compare_node == parent_node:
+            logger.debug("parent node")
+            return 1
+        elif parent_node == self.root:
+            logger.debug("not parent")
+            return 0
+        else: return self.is_parent_node(parent_node, compare_node)
+
+CTRL_TREE_FILE = wx.NewId()
+CTRL_YES = wx.NewId()
+CTRL_NO = wx.NewId()
+CTRL_USE = wx.NewId()
+CTRL_DESIGN = wx.NewId()
+CTRL_CHAT = wx.NewId()
+CTRL_PRINT = wx.NewId()
+
+class gametree_prop_dlg(wx.Dialog):
+    
+    def __init__(self, parent, settings):
+        wx.Dialog.__init__(self, parent, wx.ID_ANY, "Game Tree Properties")
+
+        #sizers
+        sizers = {}
+        sizers['but'] = wx.BoxSizer(wx.HORIZONTAL)
+        sizers['main'] = wx.BoxSizer(wx.VERTICAL)
+
+        #box sizers
+        box_sizers = {}
+        box_sizers["save"] = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Save On Exit"), wx.HORIZONTAL)
+        box_sizers["file"] = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Tree File"), wx.HORIZONTAL)
+        box_sizers["dclick"] = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Double Click Action"), wx.HORIZONTAL)
+        self.ctrls = {  CTRL_TREE_FILE : FileBrowseButtonWithHistory(self, wx.ID_ANY,  labelText="" ) ,
+                        CTRL_YES : wx.RadioButton(self, CTRL_YES, "Yes", style=wx.RB_GROUP),
+                        CTRL_NO : wx.RadioButton(self, CTRL_NO, "No"),
+                        CTRL_USE : wx.RadioButton(self, CTRL_USE, "Use", style=wx.RB_GROUP),
+                        CTRL_DESIGN : wx.RadioButton(self, CTRL_DESIGN, "Desgin"),
+                        CTRL_CHAT : wx.RadioButton(self, CTRL_CHAT, "Chat"),
+                        CTRL_PRINT : wx.RadioButton(self, CTRL_PRINT, "Pretty Print")
+                        }
+        self.ctrls[CTRL_TREE_FILE].SetValue(settings.get_setting("gametree"))
+        opt = settings.get_setting("SaveGameTreeOnExit")
+        self.ctrls[CTRL_YES].SetValue(opt=="1")
+        self.ctrls[CTRL_NO].SetValue(opt=="0")
+        opt = settings.get_setting("treedclick")
+        self.ctrls[CTRL_DESIGN].SetValue(opt=="design")
+        self.ctrls[CTRL_USE].SetValue(opt=="use")
+        self.ctrls[CTRL_CHAT].SetValue(opt=="chat")
+        self.ctrls[CTRL_PRINT].SetValue(opt=="print")
+        box_sizers['save'].Add(self.ctrls[CTRL_YES],0, wx.EXPAND)
+        box_sizers['save'].Add(wx.Size(10,10))
+        box_sizers['save'].Add(self.ctrls[CTRL_NO],0, wx.EXPAND)
+        box_sizers['file'].Add(self.ctrls[CTRL_TREE_FILE], 0, wx.EXPAND)
+        box_sizers['dclick'].Add(self.ctrls[CTRL_USE],0, wx.EXPAND)
+        box_sizers['dclick'].Add(wx.Size(10,10))
+        box_sizers['dclick'].Add(self.ctrls[CTRL_DESIGN],0, wx.EXPAND)
+        box_sizers['dclick'].Add(wx.Size(10,10))
+        box_sizers['dclick'].Add(self.ctrls[CTRL_CHAT],0, wx.EXPAND)
+        box_sizers['dclick'].Add(wx.Size(10,10))
+        box_sizers['dclick'].Add(self.ctrls[CTRL_PRINT],0, wx.EXPAND)
+
+        # buttons
+        sizers['but'].Add(wx.Button(self, wx.ID_OK, "Apply"), 1, wx.EXPAND)
+        sizers['but'].Add(wx.Size(10,10))
+        sizers['but'].Add(wx.Button(self, wx.ID_CANCEL, "Cancel"), 1, wx.EXPAND)
+        sizers['main'].Add(box_sizers['save'], 1, wx.EXPAND)
+        sizers['main'].Add(box_sizers['file'], 1, wx.EXPAND)
+        sizers['main'].Add(box_sizers['dclick'], 1, wx.EXPAND)
+        sizers['main'].Add(sizers['but'], 0, wx.EXPAND|wx.ALIGN_BOTTOM )
+
+        #sizers['main'].SetDimension(10,10,csize[0]-20,csize[1]-20)
+        self.SetSizer(sizers['main'])
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_BUTTON, self.on_ok, id=wx.ID_OK)
+
+    
+    def on_ok(self,evt):
+        settings.change("gametree",self.ctrls[CTRL_TREE_FILE].GetValue())
+        settings.change("SaveGameTreeOnExit",str(self.ctrls[CTRL_YES].GetValue()))
+        if self.ctrls[CTRL_USE].GetValue(): settings.change("treedclick","use")
+        elif self.ctrls[CTRL_DESIGN].GetValue(): settings.change("treedclick","design")
+        elif self.ctrls[CTRL_PRINT].GetValue(): settings.change("treedclick","print")
+        elif self.ctrls[CTRL_CHAT].GetValue(): settings.change("treedclick","chat")
+        self.EndModal(wx.ID_OK)
--- a/orpg/gametree/gametree_version.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/gametree_version.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,3 +1,3 @@
-### this file holds the gametree version ###
-
-GAMETREE_VERSION = "1.0"
+### this file holds the gametree version ###
+
+GAMETREE_VERSION = "1.0"
--- a/orpg/gametree/nodehandlers/__init__.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/__init__.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,1 +1,1 @@
-__all__ = ['core']
+__all__ = ['core']
--- a/orpg/gametree/nodehandlers/chatmacro.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/chatmacro.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,102 +1,102 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: chatmacro.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: chatmacro.py,v 1.15 2006/11/15 12:11:23 digitalxero Exp $
-#
-# Description: The file contains code for the form based nodehanlers
-#
-
-__version__ = "$Id: chatmacro.py,v 1.15 2006/11/15 12:11:23 digitalxero Exp $"
-
-from core import *
-
-##########################
-## text node handler
-##########################
-class macro_handler(node_handler):
-    """ A nodehandler for text blocks. Will open text in a text frame
-        <nodehandler name='?' module='chatmacro' class='macro_handler'>
-            <text>some text here</text>
-        </nodehandler >
-    """
-    def __init__(self,xml_dom,tree_node):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.text_elem = self.master_dom.getElementsByTagName('text')[0]
-        self.text = component.get('xml').safe_get_text_node(self.text_elem)
-
-    def set_text(self,txt):
-        self.text._set_nodeValue(txt)
-
-    def on_use(self,evt):
-        txt = self.text._get_nodeValue()
-        actionlist = txt.split("\n")
-        for line in actionlist:
-            if(line != ""):
-                if line[0] != "/": ## it's not a slash command
-                    action = self.chat.ParsePost(line, True, True)
-                else:
-                    action = line
-                    self.chat.chat_cmds.docmd(action)
-        return 1
-
-    def get_design_panel(self,parent):
-        return macro_edit_panel(parent,self)
-
-    def tohtml(self):
-        title = self.master_dom.getAttribute("name")
-        txt = self.text._get_nodeValue()
-        txt = string.replace(txt,'\n',"<br />")
-        return "<P><b>"+title+":</b><br />"+txt
-
-P_TITLE = wx.NewId()
-P_BODY = wx.NewId()
-B_CHAT = wx.NewId()
-
-class macro_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Chat Macro"), wx.VERTICAL)
-        self.text = {}
-        self.text[P_TITLE] = wx.TextCtrl(self, P_TITLE, handler.master_dom.getAttribute('name'))
-        self.text[P_BODY] = wx.TextCtrl(self, P_BODY, handler.text._get_nodeValue(), style=wx.TE_MULTILINE)
-        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
-        sizer.Add(wx.StaticText(self, -1, "Text Body:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_BODY], 1, wx.EXPAND)
-        sizer.Add(wx.Button(self, B_CHAT, "Send To Chat"),0,wx.EXPAND)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_BODY)
-        self.Bind(wx.EVT_BUTTON, self.handler.on_use, id=B_CHAT)
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        txt = self.text[id].GetValue()
-        if txt == "": return
-        if id == P_TITLE:
-            self.handler.master_dom.setAttribute('name',txt)
-            self.handler.rename(txt)
-        elif id == P_BODY: self.handler.set_text(txt)
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: chatmacro.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: chatmacro.py,v 1.15 2006/11/15 12:11:23 digitalxero Exp $
+#
+# Description: The file contains code for the form based nodehanlers
+#
+
+__version__ = "$Id: chatmacro.py,v 1.15 2006/11/15 12:11:23 digitalxero Exp $"
+
+from core import *
+
+##########################
+## text node handler
+##########################
+class macro_handler(node_handler):
+    """ A nodehandler for text blocks. Will open text in a text frame
+        <nodehandler name='?' module='chatmacro' class='macro_handler'>
+            <text>some text here</text>
+        </nodehandler >
+    """
+    def __init__(self,xml_dom,tree_node):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.text_elem = self.master_dom.getElementsByTagName('text')[0]
+        self.text = component.get('xml').safe_get_text_node(self.text_elem)
+
+    def set_text(self,txt):
+        self.text._set_nodeValue(txt)
+
+    def on_use(self,evt):
+        txt = self.text._get_nodeValue()
+        actionlist = txt.split("\n")
+        for line in actionlist:
+            if(line != ""):
+                if line[0] != "/": ## it's not a slash command
+                    action = self.chat.ParsePost(line, True, True)
+                else:
+                    action = line
+                    self.chat.chat_cmds.docmd(action)
+        return 1
+
+    def get_design_panel(self,parent):
+        return macro_edit_panel(parent,self)
+
+    def tohtml(self):
+        title = self.master_dom.getAttribute("name")
+        txt = self.text._get_nodeValue()
+        txt = string.replace(txt,'\n',"<br />")
+        return "<P><b>"+title+":</b><br />"+txt
+
+P_TITLE = wx.NewId()
+P_BODY = wx.NewId()
+B_CHAT = wx.NewId()
+
+class macro_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Chat Macro"), wx.VERTICAL)
+        self.text = {}
+        self.text[P_TITLE] = wx.TextCtrl(self, P_TITLE, handler.master_dom.getAttribute('name'))
+        self.text[P_BODY] = wx.TextCtrl(self, P_BODY, handler.text._get_nodeValue(), style=wx.TE_MULTILINE)
+        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
+        sizer.Add(wx.StaticText(self, -1, "Text Body:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_BODY], 1, wx.EXPAND)
+        sizer.Add(wx.Button(self, B_CHAT, "Send To Chat"),0,wx.EXPAND)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_BODY)
+        self.Bind(wx.EVT_BUTTON, self.handler.on_use, id=B_CHAT)
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        txt = self.text[id].GetValue()
+        if txt == "": return
+        if id == P_TITLE:
+            self.handler.master_dom.setAttribute('name',txt)
+            self.handler.rename(txt)
+        elif id == P_BODY: self.handler.set_text(txt)
--- a/orpg/gametree/nodehandlers/containers.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/containers.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,346 +1,346 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: containers.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: containers.py,v 1.43 2007/08/08 19:17:17 digitalxero Exp $
-#
-# Description: The file contains code for the container nodehandlers
-#
-
-
-from core import *
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: containers.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: containers.py,v 1.43 2007/08/08 19:17:17 digitalxero Exp $
+#
+# Description: The file contains code for the container nodehandlers
+#
+
+
+from core import *
 from wx.lib.splitter import MultiSplitterWindow
 from orpg.tools.orpg_log import logger
-from orpg.orpgCore import component
-
-##########################
-##  base container
-##########################
-
-class container_handler(node_handler):
-    """ should not be used! only a base class!
-    <nodehandler name='?'  module='core' class='container_handler'  />
-    """
-    def __init__(self, xml, tree_node):
-        node_handler.__init__(self, xml, tree_node)
-        self.load_children()
-
-    def load_children(self):
-        for child_xml in self.xml: self.tree.load_xml(child_xml,self.mytree_node)
-
-    def check_map_aware(self, treenode, evt):
-        node = self.tree.GetPyData(treenode)
-        if hasattr(node,"map_aware") and node.map_aware(): node.on_send_to_map(evt)
-
-    def on_send_to_map(self, evt):
-        self.tree.traverse(self.mytree_node, self.check_map_aware, evt) 
-
-    def checkChildToMap(self, treenode, evt):
-        node = self.tree.GetPyData(treenode)
-        if hasattr(node,"map_aware") and node.map_aware(): self.mapcheck = True
-
-    def checkToMapMenu(self):
-        self.mapcheck = False
-        self.tree.traverse(self.mytree_node, self.checkChildToMap)
-        return self.mapcheck
-
-    def on_drop(self,evt):
-        drag_obj = self.tree.drag_obj
-        if drag_obj == self or self.tree.is_parent_node(self.mytree_node,drag_obj.mytree_node): return
-        opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL)
-        if opt == wx.YES:
-            drop_xml = self.tree.drag_obj.delete()
-            self.xml.insert(0, drop_xml)
-            self.tree.load_xml(drop_xml, self.mytree_node)
-            self.tree.Expand(self.mytree_node)
-        elif opt == wx.NO: node_handler.on_drop(self,evt)
-
-    def gen_html(self, treenode, evt):
-        node = self.tree.GetPyData(treenode)
-        self.html_str += "<p>" + node.tohtml()
-        
-    def tohtml(self):
-        self.html_str = "<table border='1' ><tr><td>"
-        self.html_str += "<b>"+self.xml.get("name") + "</b>"
-        self.html_str += "</td></tr>\n"
-        self.html_str += "<tr><td>"
-        self.tree.traverse(self.mytree_node, self.gen_html, recurse=False)
-        self.html_str += "</td></tr></table>"
-        return self.html_str
-
-    def get_size_constraint(self):
-        return 2
-
-
-##########################
-## group node handler
-##########################
-class group_handler(container_handler):
-    """ group nodehandler to be used as a placeholder for other nodehandlers.
-        This handler will continue parsing child xml data.
-        <nodehandler name='?'  module='core' class='group_handler'  />
-    """
-    def __init__(self, xml, tree_node):
-        container_handler.__init__(self, xml, tree_node)
-
-    def load_children(self):
-        self.atts = None
-        for child_xml in self.xml:
-            if child_xml.get == "group_atts": #having the group attributes as a child is bad!
-                self.xml.remove(child_xml)
-            elif child_xml: self.tree.load_xml(child_xml, self.mytree_node)
-        if not self.xml.get('cols'): self.xml.set('cols', '1')
-        if not self.xml.get('border'): self.xml.set('border', '1')
-
-    def get_design_panel(self,parent):
-        return group_edit_panel(parent,self)
-
-    def on_use(self,evt):
-        return
-
-    def gen_html(self, treenode, evt):
-        node = self.tree.GetPyData(treenode)
-        if self.i  not in self.tdatas: self.tdatas[self.i] = ''
-        self.tdatas[self.i] += "<P>" + node.tohtml()
-        self.i += 1
-        if self.i >= self.cols: self.i = 0
-
-    def tohtml(self):
-        cols = self.xml.get("cols")
-        border = self.xml.get("border")
-        self.html_str = "<table border='"+border+"' ><tr><td colspan='"+cols+"'>"
-        self.html_str += "<font size=4>"+self.xml.get("name") + "</font>"
-        self.html_str += "</td></tr>\n<tr>"
-        self.cols = int(cols)
-        self.i = 0
-        self.tdatas = {}
-        self.tree.traverse(self.mytree_node, self.gen_html, recurse=False)
-        for td in self.tdatas: self.html_str += "<td valign='top' >" + self.tdatas[td] + "</td>\n";
-        self.html_str += "</tr></table>"
-        return self.html_str
-
-GROUP_COLS = wx.NewId()
-GROUP_BOR = wx.NewId()
-
-class group_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
+from orpg.orpgCore import component
+
+##########################
+##  base container
+##########################
+
+class container_handler(node_handler):
+    """ should not be used! only a base class!
+    <nodehandler name='?'  module='core' class='container_handler'  />
+    """
+    def __init__(self, xml, tree_node):
+        node_handler.__init__(self, xml, tree_node)
+        self.load_children()
+
+    def load_children(self):
+        for child_xml in self.xml: self.tree.load_xml(child_xml,self.mytree_node)
+
+    def check_map_aware(self, treenode, evt):
+        node = self.tree.GetPyData(treenode)
+        if hasattr(node,"map_aware") and node.map_aware(): node.on_send_to_map(evt)
+
+    def on_send_to_map(self, evt):
+        self.tree.traverse(self.mytree_node, self.check_map_aware, evt) 
+
+    def checkChildToMap(self, treenode, evt):
+        node = self.tree.GetPyData(treenode)
+        if hasattr(node,"map_aware") and node.map_aware(): self.mapcheck = True
+
+    def checkToMapMenu(self):
+        self.mapcheck = False
+        self.tree.traverse(self.mytree_node, self.checkChildToMap)
+        return self.mapcheck
+
+    def on_drop(self,evt):
+        drag_obj = self.tree.drag_obj
+        if drag_obj == self or self.tree.is_parent_node(self.mytree_node,drag_obj.mytree_node): return
+        opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL)
+        if opt == wx.YES:
+            drop_xml = self.tree.drag_obj.delete()
+            self.xml.insert(0, drop_xml)
+            self.tree.load_xml(drop_xml, self.mytree_node)
+            self.tree.Expand(self.mytree_node)
+        elif opt == wx.NO: node_handler.on_drop(self,evt)
+
+    def gen_html(self, treenode, evt):
+        node = self.tree.GetPyData(treenode)
+        self.html_str += "<p>" + node.tohtml()
+        
+    def tohtml(self):
+        self.html_str = "<table border='1' ><tr><td>"
+        self.html_str += "<b>"+self.xml.get("name") + "</b>"
+        self.html_str += "</td></tr>\n"
+        self.html_str += "<tr><td>"
+        self.tree.traverse(self.mytree_node, self.gen_html, recurse=False)
+        self.html_str += "</td></tr></table>"
+        return self.html_str
+
+    def get_size_constraint(self):
+        return 2
+
+
+##########################
+## group node handler
+##########################
+class group_handler(container_handler):
+    """ group nodehandler to be used as a placeholder for other nodehandlers.
+        This handler will continue parsing child xml data.
+        <nodehandler name='?'  module='core' class='group_handler'  />
+    """
+    def __init__(self, xml, tree_node):
+        container_handler.__init__(self, xml, tree_node)
+
+    def load_children(self):
+        self.atts = None
+        for child_xml in self.xml:
+            if child_xml.get == "group_atts": #having the group attributes as a child is bad!
+                self.xml.remove(child_xml)
+            elif child_xml: self.tree.load_xml(child_xml, self.mytree_node)
+        if not self.xml.get('cols'): self.xml.set('cols', '1')
+        if not self.xml.get('border'): self.xml.set('border', '1')
+
+    def get_design_panel(self,parent):
+        return group_edit_panel(parent,self)
+
+    def on_use(self,evt):
+        return
+
+    def gen_html(self, treenode, evt):
+        node = self.tree.GetPyData(treenode)
+        if self.i  not in self.tdatas: self.tdatas[self.i] = ''
+        self.tdatas[self.i] += "<P>" + node.tohtml()
+        self.i += 1
+        if self.i >= self.cols: self.i = 0
+
+    def tohtml(self):
+        cols = self.xml.get("cols")
+        border = self.xml.get("border")
+        self.html_str = "<table border='"+border+"' ><tr><td colspan='"+cols+"'>"
+        self.html_str += "<font size=4>"+self.xml.get("name") + "</font>"
+        self.html_str += "</td></tr>\n<tr>"
+        self.cols = int(cols)
+        self.i = 0
+        self.tdatas = {}
+        self.tree.traverse(self.mytree_node, self.gen_html, recurse=False)
+        for td in self.tdatas: self.html_str += "<td valign='top' >" + self.tdatas[td] + "</td>\n";
+        self.html_str += "</tr></table>"
+        return self.html_str
+
+GROUP_COLS = wx.NewId()
+GROUP_BOR = wx.NewId()
+
+class group_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
         self.handler = handler
         self.outline = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Group"), wx.VERTICAL)
-
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        self.text = {P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')) }
-        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-
-        radio_c = wx.RadioBox(self, GROUP_COLS, "Columns", choices=["1","2","3","4"])
-        cols = handler.xml.get("cols")
-        if cols != "": radio_c.SetSelection(int(cols)-1)
-
-        radio_b = wx.RadioBox(self, GROUP_BOR, "Border", choices=["no","yes"])
-        border = handler.xml.get("border")
-        if border != "": radio_b.SetSelection(int(border))
-
-        sizer.Add(radio_c, 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
+
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        self.text = {P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')) }
+        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+
+        radio_c = wx.RadioBox(self, GROUP_COLS, "Columns", choices=["1","2","3","4"])
+        cols = handler.xml.get("cols")
+        if cols != "": radio_c.SetSelection(int(cols)-1)
+
+        radio_b = wx.RadioBox(self, GROUP_BOR, "Border", choices=["no","yes"])
+        border = handler.xml.get("border")
+        if border != "": radio_b.SetSelection(int(border))
+
+        sizer.Add(radio_c, 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
         sizer.Add(radio_b, 0, wx.EXPAND)
 
-        self.outline.Add(sizer, 0)
-        self.sizer = self.outline
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        parent.SetSize(self.GetBestSize())
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-        self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GROUP_BOR)
-        self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GROUP_COLS)
-
-    def on_radio_box(self,evt):
-        id = evt.GetId()
-        index = evt.GetInt()
-        if id == GROUP_COLS: self.handler.xml.set("cols",str(index+1))
-        elif id == GROUP_BOR: self.handler.xml.set("border",str(index))
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == P_TITLE:
-            txt = self.text[id].GetValue()
-            if txt != "":
-                self.handler.xml.set('name',txt)
-                self.handler.rename(txt)
-
-
-
-##########################
-## tabber node handler
-##########################
-class tabber_handler(container_handler):
-    """ <nodehandler name='?'  module='containers' class='tabber_handler'  />"""
-
-    def __init__(self, xml, tree_node):
-        container_handler.__init__(self, xml, tree_node)
-
-    def get_design_panel(self,parent):
-        return tabbed_edit_panel(parent, self)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent, self, 1)
-
-
-class tabbed_panel(orpgTabberWnd):
-    def __init__(self, parent, handler, mode):
-        orpgTabberWnd.__init__(self, parent, style=FNB.FNB_NO_X_BUTTON)
-        self.handler = handler
-        self.parent = parent
-        handler.tree.traverse(handler.mytree_node, self.pick_panel, mode, False)
-        parent.SetSize(self.GetBestSize())
-
-    def pick_panel(self, treenode, mode):
-        node = self.handler.tree.GetPyData(treenode)
-        if mode == 1: panel = node.get_design_panel(self)
-        else: panel = node.get_use_panel(self)
+        self.outline.Add(sizer, 0)
+        self.sizer = self.outline
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        parent.SetSize(self.GetBestSize())
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+        self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GROUP_BOR)
+        self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GROUP_COLS)
+
+    def on_radio_box(self,evt):
+        id = evt.GetId()
+        index = evt.GetInt()
+        if id == GROUP_COLS: self.handler.xml.set("cols",str(index+1))
+        elif id == GROUP_BOR: self.handler.xml.set("border",str(index))
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == P_TITLE:
+            txt = self.text[id].GetValue()
+            if txt != "":
+                self.handler.xml.set('name',txt)
+                self.handler.rename(txt)
+
+
+
+##########################
+## tabber node handler
+##########################
+class tabber_handler(container_handler):
+    """ <nodehandler name='?'  module='containers' class='tabber_handler'  />"""
+
+    def __init__(self, xml, tree_node):
+        container_handler.__init__(self, xml, tree_node)
+
+    def get_design_panel(self,parent):
+        return tabbed_edit_panel(parent, self)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent, self, 1)
+
+
+class tabbed_panel(orpgTabberWnd):
+    def __init__(self, parent, handler, mode):
+        orpgTabberWnd.__init__(self, parent, style=FNB.FNB_NO_X_BUTTON)
+        self.handler = handler
+        self.parent = parent
+        handler.tree.traverse(handler.mytree_node, self.pick_panel, mode, False)
+        parent.SetSize(self.GetBestSize())
+
+    def pick_panel(self, treenode, mode):
+        node = self.handler.tree.GetPyData(treenode)
+        if mode == 1: panel = node.get_design_panel(self)
+        else: panel = node.get_use_panel(self)
         name = node.xml.get("name")
         if name == None: ## Fixes broken 3e Inventory child
             if node.xml.tag == 'inventory':
                 node.xml.set('name', 'Inventory')
                 name = "Inventory"
                 logger.info('A corrective action was take to a 3e PC Sheet', True)
-                component.get('frame').TraipseSuiteWarn('item')
+                component.get('frame').TraipseSuiteWarn('item')
         if panel: self.AddPage(panel, name, False)
 
-class tabbed_edit_panel(orpgTabberWnd):
-    def __init__(self, parent, handler):
-        orpgTabberWnd.__init__(self, parent, style=FNB.FNB_NO_X_BUTTON)
-        self.handler = handler
+class tabbed_edit_panel(orpgTabberWnd):
+    def __init__(self, parent, handler):
+        orpgTabberWnd.__init__(self, parent, style=FNB.FNB_NO_X_BUTTON)
+        self.handler = handler
         self.parent = parent
         main_sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Tabber"), wx.VERTICAL)
         self.title = wx.TextCtrl(self, 1, handler.xml.get('name'))
-        main_sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        main_sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
         main_sizer.Add(self.title, 0, wx.EXPAND)
         self.SetSizer(main_sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
+        self.SetAutoLayout(True)
+        self.Fit()
         self.Bind(wx.EVT_TEXT, self.on_text, id=1)
 
-    def on_text(self,evt):
-        txt = self.title.GetValue()
-        if txt != "":
-            self.handler.xml.set('name',txt)
-            self.handler.rename(txt)
-
-
-#################################
-## Splitter container
-#################################
-
-class splitter_handler(container_handler):
-    """ <nodehandler name='?'  module='containers' class='splitter_handler'  />"""
-
-    def __init__(self,xml,tree_node):
-        container_handler.__init__(self,xml,tree_node)
-
-    def load_children(self):
-        self.atts = None
-        for child_xml in self.xml:
-            if child_xml.tag == "splitter_atts": self.xml.remove(child_xml) #Same here!
-            elif child_xml: self.tree.load_xml(child_xml,self.mytree_node)
-        if not self.xml.get('horizontal'): self.xml.set('horizontal', '0')
-
-    def get_design_panel(self,parent):
-        return self.build_splitter_wnd(parent, 1)
-
-    def get_use_panel(self,parent):
-        return self.build_splitter_wnd(parent, 2)
-
-    def on_drop(self,evt):
-        drag_obj = self.tree.drag_obj
-        container_handler.on_drop(self,evt)
-
-    def build_splitter_wnd(self, parent, mode):
-        self.split = self.xml.get("horizontal")
-        self.pane = splitter_panel(parent, self)
+    def on_text(self,evt):
+        txt = self.title.GetValue()
+        if txt != "":
+            self.handler.xml.set('name',txt)
+            self.handler.rename(txt)
+
+
+#################################
+## Splitter container
+#################################
+
+class splitter_handler(container_handler):
+    """ <nodehandler name='?'  module='containers' class='splitter_handler'  />"""
+
+    def __init__(self,xml,tree_node):
+        container_handler.__init__(self,xml,tree_node)
+
+    def load_children(self):
+        self.atts = None
+        for child_xml in self.xml:
+            if child_xml.tag == "splitter_atts": self.xml.remove(child_xml) #Same here!
+            elif child_xml: self.tree.load_xml(child_xml,self.mytree_node)
+        if not self.xml.get('horizontal'): self.xml.set('horizontal', '0')
+
+    def get_design_panel(self,parent):
+        return self.build_splitter_wnd(parent, 1)
+
+    def get_use_panel(self,parent):
+        return self.build_splitter_wnd(parent, 2)
+
+    def on_drop(self,evt):
+        drag_obj = self.tree.drag_obj
+        container_handler.on_drop(self,evt)
+
+    def build_splitter_wnd(self, parent, mode):
+        self.split = self.xml.get("horizontal")
+        self.pane = splitter_panel(parent, self)
         self.splitter = MultiSplitterWindow(self.pane, -1, 
-                        style=wx.SP_LIVE_UPDATE|wx.SP_3DSASH|wx.SP_NO_XP_THEME)
-        if self.split == '1': self.splitter.SetOrientation(wx.VERTICAL)
-        else: self.splitter.SetOrientation(wx.HORIZONTAL)
-        self.bestSizex = -1
-        self.bestSizey = -1
-        self.tree.traverse(self.mytree_node, self.doSplit, mode, False) 
-        self.pane.sizer.Add(self.splitter, 1, wx.EXPAND)
-        if mode != 1: self.pane.hozCheck.Hide()
-        self.pane.SetSize((self.bestSizex, self.bestSizey))
-        self.pane.Layout()
-        parent.SetSize(self.pane.GetSize())
-        return self.pane
-
-    def doSplit(self, treenode, mode):
-        node = self.tree.GetPyData(treenode)
-        if mode == 1: tmp = node.get_design_panel(self.splitter)
-        else: tmp = node.get_use_panel(self.splitter)
-        if self.split == '1':
-            sash = tmp.GetBestSize()[1]+1
-            self.bestSizey += sash+11
-            if self.bestSizex < tmp.GetBestSize()[0]: self.bestSizex = tmp.GetBestSize()[0]+10
-        else:
-            sash = tmp.GetBestSize()[0]+1
-            self.bestSizex += sash
-            if self.bestSizey < tmp.GetBestSize()[1]: self.bestSizey = tmp.GetBestSize()[1]+31
-        self.splitter.AppendWindow(tmp, sash)
-    def get_size_constraint(self):
-        return 1
-
-class splitter_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.VERTICAL)
+                        style=wx.SP_LIVE_UPDATE|wx.SP_3DSASH|wx.SP_NO_XP_THEME)
+        if self.split == '1': self.splitter.SetOrientation(wx.VERTICAL)
+        else: self.splitter.SetOrientation(wx.HORIZONTAL)
+        self.bestSizex = -1
+        self.bestSizey = -1
+        self.tree.traverse(self.mytree_node, self.doSplit, mode, False) 
+        self.pane.sizer.Add(self.splitter, 1, wx.EXPAND)
+        if mode != 1: self.pane.hozCheck.Hide()
+        self.pane.SetSize((self.bestSizex, self.bestSizey))
+        self.pane.Layout()
+        parent.SetSize(self.pane.GetSize())
+        return self.pane
+
+    def doSplit(self, treenode, mode):
+        node = self.tree.GetPyData(treenode)
+        if mode == 1: tmp = node.get_design_panel(self.splitter)
+        else: tmp = node.get_use_panel(self.splitter)
+        if self.split == '1':
+            sash = tmp.GetBestSize()[1]+1
+            self.bestSizey += sash+11
+            if self.bestSizex < tmp.GetBestSize()[0]: self.bestSizex = tmp.GetBestSize()[0]+10
+        else:
+            sash = tmp.GetBestSize()[0]+1
+            self.bestSizex += sash
+            if self.bestSizey < tmp.GetBestSize()[1]: self.bestSizey = tmp.GetBestSize()[1]+31
+        self.splitter.AppendWindow(tmp, sash)
+    def get_size_constraint(self):
+        return 1
+
+class splitter_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.VERTICAL)
         self.title = wx.TextCtrl(self, 1, handler.xml.get('name'))
-
-        self.hozCheck = wx.CheckBox(self, -1, "Horizontal Split")
-        hoz = self.handler.xml.get("horizontal")
-
-        if hoz == '1': self.hozCheck.SetValue(True)
-        else: self.hozCheck.SetValue(False)
+
+        self.hozCheck = wx.CheckBox(self, -1, "Horizontal Split")
+        hoz = self.handler.xml.get("horizontal")
+
+        if hoz == '1': self.hozCheck.SetValue(True)
+        else: self.hozCheck.SetValue(False)
 
         sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.title, 0)
-        sizer.Add(self.hozCheck, 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,0))
-
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=1)
-        self.Bind(wx.EVT_CHECKBOX, self.on_check_box, id=self.hozCheck.GetId())
-
-    def on_check_box(self,evt):
-        state = self.hozCheck.GetValue()
-        if state: self.handler.xml.set("horizontal", "1")
+        sizer.Add(self.title, 0)
+        sizer.Add(self.hozCheck, 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,0))
+
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=1)
+        self.Bind(wx.EVT_CHECKBOX, self.on_check_box, id=self.hozCheck.GetId())
+
+    def on_check_box(self,evt):
+        state = self.hozCheck.GetValue()
+        if state: self.handler.xml.set("horizontal", "1")
         else: self.handler.xml.set("horizontal", "0")
 
-    def on_text(self,evt):
-        txt = self.title.GetValue()
-        if txt != "":
-            self.handler.xml.set('name',txt)
+    def on_text(self,evt):
+        txt = self.title.GetValue()
+        if txt != "":
+            self.handler.xml.set('name',txt)
             self.handler.rename(txt)
-
+
--- a/orpg/gametree/nodehandlers/core.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/core.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,235 +1,235 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: core.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: core.py,v 1.49 2007/12/07 20:39:48 digitalxero Exp $
-#
-# Description: The file contains code for the core nodehanlers
-#
-
-__version__ = "$Id: core.py,v 1.49 2007/12/07 20:39:48 digitalxero Exp $"
-
-from nodehandler_version import NODEHANDLER_VERSION
-
-try:
-    from orpg.orpg_windows import *
-    from orpg.dirpath import dir_struct
-    from orpg.orpgCore import component
-    import webbrowser, os
-    from orpg.mapper import map
-    from wx import DisplaySize
-except:
-    import wx
-
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: core.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: core.py,v 1.49 2007/12/07 20:39:48 digitalxero Exp $
+#
+# Description: The file contains code for the core nodehanlers
+#
+
+__version__ = "$Id: core.py,v 1.49 2007/12/07 20:39:48 digitalxero Exp $"
+
+from nodehandler_version import NODEHANDLER_VERSION
+
+try:
+    from orpg.orpg_windows import *
+    from orpg.dirpath import dir_struct
+    from orpg.orpgCore import component
+    import webbrowser, os
+    from orpg.mapper import map
+    from wx import DisplaySize
+except:
+    import wx
+
 from xml.etree.ElementTree import ElementTree, Element, tostring, XML
-from orpg.tools.orpg_log import debug
-
-#html defaults
-TH_BG = "#E9E9E9"
-##########################
-## base node handler
-##########################
-class node_handler:
-    """ Base nodehandler with virtual functions and standard implmentations """
-    def __init__(self,xml,tree_node):
-        self.xml = xml
-        self.mytree_node = tree_node
-        self.tree = open_rpg.get_component('tree')
-        self.frame = open_rpg.get_component('frame')
-        self.chat = open_rpg.get_component('chat')
-        self.drag = True
-        self.myeditor = None # designing
-        self.myviewer = None # prett print
-        self.mywindow = None # using
-        # call version hook
-        self.on_version(self.xml.get("version"))
-        # set to current version
-        self.xml.set("version",NODEHANDLER_VERSION)
-        # null events
-        self.frame_size = None
-        self.frame_pos  = None
-        try:
-            frame = self.xml.get("frame")
-            if len(frame):
-                (sx,sy,px,py) = [int(value) for value in frame.split(',')]
-                self.frame_size = (sx, sy)
-                (maxx, maxy) = DisplaySize()
-                if px < maxx-80 and py < maxy-50: self.frame_pos  = (px, py) #if it's off screen ignore the saved pos
-        except: pass
-
-    def on_version(self,old_version):
-        ## added version control code here or implement a new on_version in your derived class.
-        ## always call the base class on_version !
-        pass
-
-    def on_rclick(self,evt):
-        self.tree.do_std_menu(evt,self)
-
-    def on_ldclick(self,evt):
-        return 0
-
-    def usefulness(self,text):
-        if text=="useful": self.xml.set('status',"useful")
-        elif text=="useless": self.xml.set('status',"useless")
-        elif text=="indifferent": self.xml.set('status',"indifferent")
-
-    def on_design(self,evt):
-        try:
-            self.myeditor.Show()
-            self.myeditor.Raise()
-        except:
-            del self.myeditor
-            if self.create_designframe():
-                self.myeditor.Show()
-                self.myeditor.Raise()
-            else: return
-        wx.CallAfter(self.myeditor.Layout)
-
-    def create_designframe(self):
-        title = self.xml.get('name') + " Editor"
-        self.myeditor = wx.Frame(None, -1, title)
-        self.myeditor.Freeze()
-        if wx.Platform == '__WXMSW__':
-            icon = wx.Icon(orpg.dirpath.dir_struct["icon"] + 'grid.ico', wx.BITMAP_TYPE_ICO)
-            self.myeditor.SetIcon(icon)
-            del icon
-
-        self.myeditor.panel = self.get_design_panel(self.myeditor)
-        if self.myeditor.panel == None:
-            self.myeditor.Destroy()
-            return False
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.myeditor.panel, 1, wx.EXPAND)
-
-        self.myeditor.SetSizer(sizer)
-        self.myeditor.SetAutoLayout(True)
-
-        (x, y) = self.myeditor.GetSize()
-        if x < 400: x = 400
-        if y < 400: y = 400
-
-        self.myeditor.SetSize((x, y))
-        self.myeditor.Layout()
-        self.myeditor.Thaw()
-        return True
-
-    def on_use(self,evt):
-        try:
-            self.mywindow.Show()
-            self.mywindow.Raise()
-        except:
-            del self.mywindow
-            if self.create_useframe():
-                self.mywindow.SetSize(self.frame_size)
-                if self.frame_pos: self.mywindow.SetPosition(self.frame_pos)
-                self.mywindow.Show()
-                self.mywindow.Raise()
-            else: return
-        wx.CallAfter(self.mywindow.Layout)
-
-    def create_useframe(self):
-        caption = self.xml.get('name', '')
-        self.mywindow = wx.Frame(None, -1, caption)
-        self.mywindow.Freeze()
-        if wx.Platform == '__WXMSW__':
-            icon = wx.Icon(orpg.dirpath.dir_struct["icon"] + 'note.ico', wx.BITMAP_TYPE_ICO)
-            self.mywindow.SetIcon(icon)
-            del icon
-        self.mywindow.panel = self.get_use_panel(self.mywindow)
-        if self.mywindow.panel == None:
-            self.mywindow.Destroy()
-            return False
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.mywindow.panel, 2, wx.EXPAND)
-
-        self.mywindow.SetSizer(sizer)
-        self.mywindow.SetAutoLayout(True)
-
-        if self.frame_size is None:
-            self.frame_size = self.mywindow.GetSize()
-            if self.frame_size.x < 400: self.frame_size.x = 400
-            if self.frame_size.y < 400: self.frame_size.y = 400
-
-        self.mywindow.Layout()
-        self.mywindow.Thaw()
-        self.mywindow.Bind(wx.EVT_CLOSE, self.close_useframe)
-        return True
-
-    def close_useframe(self, evt):
-        self.frame_size = self.mywindow.GetSize()
-        self.frame_pos  = self.mywindow.GetPosition()
-        frame_values = str(self.frame_size.x)+','+str(self.frame_size.y)+','+str(self.frame_pos.x)+','+str(self.frame_pos.y)
-        self.xml.set("frame", frame_values)
-        self.mywindow.Destroy()
-
-
-    def on_html_view(self,evt):
-        try: self.myviewer.Raise()
-        except:
-            caption = self.xml.get('name')
-            self.myviewer = wx.Frame(None, -1, caption)
-            if wx.Platform == '__WXMSW__':
-                icon = wx.Icon(orpg.dirpath.dir_struct["icon"] + 'grid.ico', wx.BITMAP_TYPE_ICO)
-                self.myviewer.SetIcon(icon)
-                del icon
-            self.myviewer.panel = self.get_html_panel(self.myviewer)
-            self.myviewer.Show()
-
-    def map_aware(self):
-        return 0
-
-    def can_clone(self):
-        return 1;
-
-    def on_del(self,evt):
-        print "on del"
-
-    def on_new_data(self,xml):
-        pass
-
-    def get_scaled_bitmap(self,x,y):
-        return None
-
-    def on_send_to_map(self,evt):
-        pass
-
-    def on_send_to_chat(self,evt):
-        self.chat.ParsePost(self.tohtml(),True,True)
-
-    def on_drop(self, evt):
+from orpg.tools.orpg_log import debug
+
+#html defaults
+TH_BG = "#E9E9E9"
+##########################
+## base node handler
+##########################
+class node_handler:
+    """ Base nodehandler with virtual functions and standard implmentations """
+    def __init__(self,xml,tree_node):
+        self.xml = xml
+        self.mytree_node = tree_node
+        self.tree = open_rpg.get_component('tree')
+        self.frame = open_rpg.get_component('frame')
+        self.chat = open_rpg.get_component('chat')
+        self.drag = True
+        self.myeditor = None # designing
+        self.myviewer = None # prett print
+        self.mywindow = None # using
+        # call version hook
+        self.on_version(self.xml.get("version"))
+        # set to current version
+        self.xml.set("version",NODEHANDLER_VERSION)
+        # null events
+        self.frame_size = None
+        self.frame_pos  = None
+        try:
+            frame = self.xml.get("frame")
+            if len(frame):
+                (sx,sy,px,py) = [int(value) for value in frame.split(',')]
+                self.frame_size = (sx, sy)
+                (maxx, maxy) = DisplaySize()
+                if px < maxx-80 and py < maxy-50: self.frame_pos  = (px, py) #if it's off screen ignore the saved pos
+        except: pass
+
+    def on_version(self,old_version):
+        ## added version control code here or implement a new on_version in your derived class.
+        ## always call the base class on_version !
+        pass
+
+    def on_rclick(self,evt):
+        self.tree.do_std_menu(evt,self)
+
+    def on_ldclick(self,evt):
+        return 0
+
+    def usefulness(self,text):
+        if text=="useful": self.xml.set('status',"useful")
+        elif text=="useless": self.xml.set('status',"useless")
+        elif text=="indifferent": self.xml.set('status',"indifferent")
+
+    def on_design(self,evt):
+        try:
+            self.myeditor.Show()
+            self.myeditor.Raise()
+        except:
+            del self.myeditor
+            if self.create_designframe():
+                self.myeditor.Show()
+                self.myeditor.Raise()
+            else: return
+        wx.CallAfter(self.myeditor.Layout)
+
+    def create_designframe(self):
+        title = self.xml.get('name') + " Editor"
+        self.myeditor = wx.Frame(None, -1, title)
+        self.myeditor.Freeze()
+        if wx.Platform == '__WXMSW__':
+            icon = wx.Icon(orpg.dirpath.dir_struct["icon"] + 'grid.ico', wx.BITMAP_TYPE_ICO)
+            self.myeditor.SetIcon(icon)
+            del icon
+
+        self.myeditor.panel = self.get_design_panel(self.myeditor)
+        if self.myeditor.panel == None:
+            self.myeditor.Destroy()
+            return False
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.myeditor.panel, 1, wx.EXPAND)
+
+        self.myeditor.SetSizer(sizer)
+        self.myeditor.SetAutoLayout(True)
+
+        (x, y) = self.myeditor.GetSize()
+        if x < 400: x = 400
+        if y < 400: y = 400
+
+        self.myeditor.SetSize((x, y))
+        self.myeditor.Layout()
+        self.myeditor.Thaw()
+        return True
+
+    def on_use(self,evt):
+        try:
+            self.mywindow.Show()
+            self.mywindow.Raise()
+        except:
+            del self.mywindow
+            if self.create_useframe():
+                self.mywindow.SetSize(self.frame_size)
+                if self.frame_pos: self.mywindow.SetPosition(self.frame_pos)
+                self.mywindow.Show()
+                self.mywindow.Raise()
+            else: return
+        wx.CallAfter(self.mywindow.Layout)
+
+    def create_useframe(self):
+        caption = self.xml.get('name', '')
+        self.mywindow = wx.Frame(None, -1, caption)
+        self.mywindow.Freeze()
+        if wx.Platform == '__WXMSW__':
+            icon = wx.Icon(orpg.dirpath.dir_struct["icon"] + 'note.ico', wx.BITMAP_TYPE_ICO)
+            self.mywindow.SetIcon(icon)
+            del icon
+        self.mywindow.panel = self.get_use_panel(self.mywindow)
+        if self.mywindow.panel == None:
+            self.mywindow.Destroy()
+            return False
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.mywindow.panel, 2, wx.EXPAND)
+
+        self.mywindow.SetSizer(sizer)
+        self.mywindow.SetAutoLayout(True)
+
+        if self.frame_size is None:
+            self.frame_size = self.mywindow.GetSize()
+            if self.frame_size.x < 400: self.frame_size.x = 400
+            if self.frame_size.y < 400: self.frame_size.y = 400
+
+        self.mywindow.Layout()
+        self.mywindow.Thaw()
+        self.mywindow.Bind(wx.EVT_CLOSE, self.close_useframe)
+        return True
+
+    def close_useframe(self, evt):
+        self.frame_size = self.mywindow.GetSize()
+        self.frame_pos  = self.mywindow.GetPosition()
+        frame_values = str(self.frame_size.x)+','+str(self.frame_size.y)+','+str(self.frame_pos.x)+','+str(self.frame_pos.y)
+        self.xml.set("frame", frame_values)
+        self.mywindow.Destroy()
+
+
+    def on_html_view(self,evt):
+        try: self.myviewer.Raise()
+        except:
+            caption = self.xml.get('name')
+            self.myviewer = wx.Frame(None, -1, caption)
+            if wx.Platform == '__WXMSW__':
+                icon = wx.Icon(orpg.dirpath.dir_struct["icon"] + 'grid.ico', wx.BITMAP_TYPE_ICO)
+                self.myviewer.SetIcon(icon)
+                del icon
+            self.myviewer.panel = self.get_html_panel(self.myviewer)
+            self.myviewer.Show()
+
+    def map_aware(self):
+        return 0
+
+    def can_clone(self):
+        return 1;
+
+    def on_del(self,evt):
+        print "on del"
+
+    def on_new_data(self,xml):
+        pass
+
+    def get_scaled_bitmap(self,x,y):
+        return None
+
+    def on_send_to_map(self,evt):
+        pass
+
+    def on_send_to_chat(self,evt):
+        self.chat.ParsePost(self.tohtml(),True,True)
+
+    def on_drop(self, evt):
         drag_obj = self.tree.drag_obj
-        if drag_obj == self or self.tree.is_parent_node(self.mytree_node, drag_obj.mytree_node):
-            return
-        drop_xml = self.tree.drag_obj.delete()
-        parent_node = self.tree.GetItemParent(self.mytree_node)
-        prev_sib = self.tree.GetPrevSibling(self.mytree_node)
-        if parent_node == self.tree.root: parent_xml = self.tree.GetPyData(parent_node)
-        else: parent_xml = self.tree.GetPyData(parent_node).xml
-        for i in range(len(parent_xml)):
-            if parent_xml[i] is self.xml:
-                parent_xml.insert(i, drop_xml)
-                break
-        if not prev_sib.IsOk():
-            prev_sib = parent_node
+        if drag_obj == self or self.tree.is_parent_node(self.mytree_node, drag_obj.mytree_node):
+            return
+        drop_xml = self.tree.drag_obj.delete()
+        parent_node = self.tree.GetItemParent(self.mytree_node)
+        prev_sib = self.tree.GetPrevSibling(self.mytree_node)
+        if parent_node == self.tree.root: parent_xml = self.tree.GetPyData(parent_node)
+        else: parent_xml = self.tree.GetPyData(parent_node).xml
+        for i in range(len(parent_xml)):
+            if parent_xml[i] is self.xml:
+                parent_xml.insert(i, drop_xml)
+                break
+        if not prev_sib.IsOk():
+            prev_sib = parent_node
         self.tree.load_xml(drop_xml, parent_node, prev_sib)
 
     def get_tree(self):
@@ -239,214 +239,214 @@
             test = self.tree.GetItemParent(test)
             parent = self.tree.GetItemText(test)
             family.append(parent)
-        return family
-
-    def toxml(self,pretty=0):
-        return tostring(self.xml) #toxml(self.master_dom,pretty)
-
-    def tohtml(self):
-        return self.xml.get("name")
-
-    def delete(self):
-        """ removes the tree_node and xml_node, and returns the removed xml_node """
-        parent_node = self.tree.GetItemParent(self.mytree_node)
-        if parent_node == self.tree.root: parent_xml = self.tree.GetPyData(parent_node)
-        else: parent_xml = self.tree.GetPyData(parent_node).xml
-        parent_xml.remove(self.xml)
-        self.tree.Delete(self.mytree_node)
-        return self.xml
-
-    def rename(self,name):
-        if len(name):
-            self.tree.SetItemText(self.mytree_node,name)
-            self.xml.set('name', name)
-
-    def change_icon(self,icon):
-        self.xml.set("icon",icon)
-        self.tree.SetItemImage(self.mytree_node, self.tree.icons[icon])
-        self.tree.SetItemImage(self.mytree_node, self.tree.icons[icon], wx.TreeItemIcon_Selected)
-        self.tree.Refresh()
-
-    def on_save(self,evt):
-        f = wx.FileDialog(self.tree,"Select a file", orpg.dirpath.dir_struct["user"],"","XML files (*.xml)|*.xml",wx.SAVE)
-        if f.ShowModal() == wx.ID_OK: ElementTree(self.xml).write(f.GetPath())
-        f.Destroy()
-
-    def get_design_panel(self,parent):
-        return None
-
-    def get_use_panel(self,parent):
-        return None
-
-    def get_html_panel(self,parent):
-        html_str = "<html><body bgcolor=\"#FFFFFF\" >"+self.tohtml()+"</body></html>"
-        wnd = wx.html.HtmlWindow(parent,-1)
-        html_str = self.chat.ParseDice(html_str)
-        wnd.SetPage(html_str)
-        return wnd
-
-    def get_size_constraint(self):
-        return 0
-
-    def about(self):
-        """html_str = "<b>"+ self.xml.get('class')
-        html_str += " Applet</b><br />by Chris Davis<br />chris@rpgarchive.com"
+        return family
+
+    def toxml(self,pretty=0):
+        return tostring(self.xml) #toxml(self.master_dom,pretty)
+
+    def tohtml(self):
+        return self.xml.get("name")
+
+    def delete(self):
+        """ removes the tree_node and xml_node, and returns the removed xml_node """
+        parent_node = self.tree.GetItemParent(self.mytree_node)
+        if parent_node == self.tree.root: parent_xml = self.tree.GetPyData(parent_node)
+        else: parent_xml = self.tree.GetPyData(parent_node).xml
+        parent_xml.remove(self.xml)
+        self.tree.Delete(self.mytree_node)
+        return self.xml
+
+    def rename(self,name):
+        if len(name):
+            self.tree.SetItemText(self.mytree_node,name)
+            self.xml.set('name', name)
+
+    def change_icon(self,icon):
+        self.xml.set("icon",icon)
+        self.tree.SetItemImage(self.mytree_node, self.tree.icons[icon])
+        self.tree.SetItemImage(self.mytree_node, self.tree.icons[icon], wx.TreeItemIcon_Selected)
+        self.tree.Refresh()
+
+    def on_save(self,evt):
+        f = wx.FileDialog(self.tree,"Select a file", orpg.dirpath.dir_struct["user"],"","XML files (*.xml)|*.xml",wx.SAVE)
+        if f.ShowModal() == wx.ID_OK: ElementTree(self.xml).write(f.GetPath())
+        f.Destroy()
+
+    def get_design_panel(self,parent):
+        return None
+
+    def get_use_panel(self,parent):
+        return None
+
+    def get_html_panel(self,parent):
+        html_str = "<html><body bgcolor=\"#FFFFFF\" >"+self.tohtml()+"</body></html>"
+        wnd = wx.html.HtmlWindow(parent,-1)
+        html_str = self.chat.ParseDice(html_str)
+        wnd.SetPage(html_str)
+        return wnd
+
+    def get_size_constraint(self):
+        return 0
+
+    def about(self):
+        """html_str = "<b>"+ self.xml.get('class')
+        html_str += " Applet</b><br />by Chris Davis<br />chris@rpgarchive.com"
         return html_str"""
         text = self.xml.get('class') + ' Applet\n'
         text += 'by Chris Davis chris@rpgarchive.com'
         return text
 
     def get_value(self):
-        return None
-
-P_TITLE = 10
+        return None
+
+P_TITLE = 10
 P_BODY = 20
-
-class text_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        self.text = {   P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')),
-                        P_BODY : html_text_edit(self,P_BODY,handler.text,self.on_text)
-                      }
-        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
-        sizer.Add(wx.StaticText(self, -1, "Text Body:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_BODY], 1, wx.EXPAND)
-        self.sizer = sizer
-        self.outline = wx.StaticBox(self,-1,"Text Block")
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == P_TITLE:
-            txt = self.text[id].GetValue()
-            #  The following block strips out 8-bit characters
-            u_txt = ""
-            bad_txt_found = 0
-            for c in txt:
-                if ord(c) < 128: u_txt += c
-                else: bad_txt_found = 1
-            if bad_txt_found:
-                wx.MessageBox("Some non 7-bit ASCII characters found and stripped","Warning!")
-            txt = u_txt
-            if txt != "":
-                self.handler.xml.set('name',txt)
-                self.handler.rename(txt)
-        elif id == P_BODY:
-            txt = self.text[id].get_text()
-            u_txt = ""
-            bad_txt_found = 0
-            for c in txt:
-                if ord(c) < 128: u_txt += c
-                else: bad_txt_found = 1
-            if bad_txt_found:
-                wx.MessageBox("Some non 7-bit ASCII characters found and stripped","Warning!")
-            txt = u_txt
-            self.handler.text._set_nodeValue(txt)
-
-
-
-##########################
-## node loader
-##########################
-class node_loader(node_handler):
-    """ clones childe node and insert it at top of tree
-        <nodehandler name='?'  module='core' class='node_loader'  />
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        title = self.xml.get('name')
-        new_xml = XML(tostring(self.xml[0]))
-        self.tree.root_xml.insert(0, new_xml)
-        tree_node = self.tree.load_xml(new_xml,self.tree.root,self.tree.root)
-        return 1
-
-##########################
-## file loader
-##########################
-
-class file_loader(node_handler):
-    """ loads file and insert into game tree
-        <nodehandler name='?'  module='core' class='file_loader'  >
-        <file name="file_name.xml" />
-        </nodehandler>
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.file_node = self.xml[0]
-        self.frame = open_rpg.get_component('frame')
-
-    def on_ldclick(self,evt):
-        file_name = self.file_node.get("name")
-        self.tree.insert_xml(open(orpg.dirpath.dir_struct["nodes"] + file_name,"r").read())
-        return 1
-
-    def on_design(self,evt):
-        tlist = ['Title','File Name']
-        vlist = [self.xml.get("name"),
-                  self.file_node.get("name")]
-        dlg = orpgMultiTextEntry(self.tree.GetParent(),tlist,vlist,"File Loader Edit")
-        if dlg.ShowModal() == wx.ID_OK:
-            vlist = dlg.get_values()
-            self.file_node.set('name', vlist[1])
-            self.xml.set('name', vlist[0])
-            self.tree.SetItemText(self.mytree_node,vlist[0])
-        dlg.Destroy()
-
-##########################
-## URL loader
-##########################
-
-class url_loader(node_handler):
-    """ loads file from url and insert into game tree
-        <nodehandler name='?'  module='core' class='url_loader'  >
-        <file name="http://file_name.xml" />
-        </nodehandler>
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.file_node = self.xml[0]
-        self.frame = open_rpg.get_component('frame')
-
-    def on_ldclick(self,evt):
-        file_name = self.file_node.get("url")
-        file = urllib.urlopen(file_name)
-        self.tree.insert_xml(file.read())
-        return 1
-
-    def on_design(self,evt):
-        tlist = ['Title','URL']
-        print "design filename",self.xml.get('name')
-        vlist = [self.xml.get("name"),
-                 self.file_node.get("url")]
-        dlg = orpgMultiTextEntry(self.tree.GetParent(),tlist,vlist,"File Loader Edit")
-        if dlg.ShowModal() == wx.ID_OK:
-            vlist = dlg.get_values()
-            self.file_node.set('url', vlist[1])
-            self.xml.set('name', vlist[0])
-            self.tree.SetItemText(self.mytree_node,vlist[0])
-        dlg.Destroy()
-
-
-##########################
-## minature map loader
-##########################
-class min_map(node_handler):
-    """ clones childe node and insert it at top of tree
-        <nodehandler name='?'  module='core' class='min_map'  />
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.map = open_rpg.get_component('map')
-        self.mapdata = self.xml[0]
-
-    def on_ldclick(self,evt):
-        self.map.new_data(tostring(self.mapdata))
-        return 1
+
+class text_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        self.text = {   P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')),
+                        P_BODY : html_text_edit(self,P_BODY,handler.text,self.on_text)
+                      }
+        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
+        sizer.Add(wx.StaticText(self, -1, "Text Body:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_BODY], 1, wx.EXPAND)
+        self.sizer = sizer
+        self.outline = wx.StaticBox(self,-1,"Text Block")
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == P_TITLE:
+            txt = self.text[id].GetValue()
+            #  The following block strips out 8-bit characters
+            u_txt = ""
+            bad_txt_found = 0
+            for c in txt:
+                if ord(c) < 128: u_txt += c
+                else: bad_txt_found = 1
+            if bad_txt_found:
+                wx.MessageBox("Some non 7-bit ASCII characters found and stripped","Warning!")
+            txt = u_txt
+            if txt != "":
+                self.handler.xml.set('name',txt)
+                self.handler.rename(txt)
+        elif id == P_BODY:
+            txt = self.text[id].get_text()
+            u_txt = ""
+            bad_txt_found = 0
+            for c in txt:
+                if ord(c) < 128: u_txt += c
+                else: bad_txt_found = 1
+            if bad_txt_found:
+                wx.MessageBox("Some non 7-bit ASCII characters found and stripped","Warning!")
+            txt = u_txt
+            self.handler.text._set_nodeValue(txt)
+
+
+
+##########################
+## node loader
+##########################
+class node_loader(node_handler):
+    """ clones childe node and insert it at top of tree
+        <nodehandler name='?'  module='core' class='node_loader'  />
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        title = self.xml.get('name')
+        new_xml = XML(tostring(self.xml[0]))
+        self.tree.root_xml.insert(0, new_xml)
+        tree_node = self.tree.load_xml(new_xml,self.tree.root,self.tree.root)
+        return 1
+
+##########################
+## file loader
+##########################
+
+class file_loader(node_handler):
+    """ loads file and insert into game tree
+        <nodehandler name='?'  module='core' class='file_loader'  >
+        <file name="file_name.xml" />
+        </nodehandler>
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.file_node = self.xml[0]
+        self.frame = open_rpg.get_component('frame')
+
+    def on_ldclick(self,evt):
+        file_name = self.file_node.get("name")
+        self.tree.insert_xml(open(orpg.dirpath.dir_struct["nodes"] + file_name,"r").read())
+        return 1
+
+    def on_design(self,evt):
+        tlist = ['Title','File Name']
+        vlist = [self.xml.get("name"),
+                  self.file_node.get("name")]
+        dlg = orpgMultiTextEntry(self.tree.GetParent(),tlist,vlist,"File Loader Edit")
+        if dlg.ShowModal() == wx.ID_OK:
+            vlist = dlg.get_values()
+            self.file_node.set('name', vlist[1])
+            self.xml.set('name', vlist[0])
+            self.tree.SetItemText(self.mytree_node,vlist[0])
+        dlg.Destroy()
+
+##########################
+## URL loader
+##########################
+
+class url_loader(node_handler):
+    """ loads file from url and insert into game tree
+        <nodehandler name='?'  module='core' class='url_loader'  >
+        <file name="http://file_name.xml" />
+        </nodehandler>
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.file_node = self.xml[0]
+        self.frame = open_rpg.get_component('frame')
+
+    def on_ldclick(self,evt):
+        file_name = self.file_node.get("url")
+        file = urllib.urlopen(file_name)
+        self.tree.insert_xml(file.read())
+        return 1
+
+    def on_design(self,evt):
+        tlist = ['Title','URL']
+        print "design filename",self.xml.get('name')
+        vlist = [self.xml.get("name"),
+                 self.file_node.get("url")]
+        dlg = orpgMultiTextEntry(self.tree.GetParent(),tlist,vlist,"File Loader Edit")
+        if dlg.ShowModal() == wx.ID_OK:
+            vlist = dlg.get_values()
+            self.file_node.set('url', vlist[1])
+            self.xml.set('name', vlist[0])
+            self.tree.SetItemText(self.mytree_node,vlist[0])
+        dlg.Destroy()
+
+
+##########################
+## minature map loader
+##########################
+class min_map(node_handler):
+    """ clones childe node and insert it at top of tree
+        <nodehandler name='?'  module='core' class='min_map'  />
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.map = open_rpg.get_component('map')
+        self.mapdata = self.xml[0]
+
+    def on_ldclick(self,evt):
+        self.map.new_data(tostring(self.mapdata))
+        return 1
--- a/orpg/gametree/nodehandlers/d20.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/d20.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2194 +1,2194 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: d20.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: d20.py,v 1.30 2007/05/22 00:50:57 digitalxero Exp $
-#
-# Description: The file contains code for the d20 nodehanlers
-#
-
-__version__ = "$Id: d20.py,v 1.30 2007/05/22 00:50:57 digitalxero Exp $"
-
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: d20.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: d20.py,v 1.30 2007/05/22 00:50:57 digitalxero Exp $
+#
+# Description: The file contains code for the d20 nodehanlers
+#
+
+__version__ = "$Id: d20.py,v 1.30 2007/05/22 00:50:57 digitalxero Exp $"
+
 from core import *
-from containers import *
-import re
-from xml.etree.ElementTree import ElementTree, Element, iselement
+from containers import *
+import re
+from xml.etree.ElementTree import ElementTree, Element, iselement
 from xml.etree.ElementTree import fromstring, tostring, parse, XML
-from orpg.tools.orpg_log import debug
-
-D20_EXPORT = wx.NewId()
-############################
-## d20 character node handler
-############################
-## Spells code - added by Dragonstar
-##Powers, Divine spells, inventory, howto, power points by Digitalxero
-##The whole look and easy of use redone by Digitalxero
-class container_handler(node_handler):
-    """ should not be used! only a base class!
-    <nodehandler name='?'  module='core' class='container_handler'  />
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.load_children()
-
-    def load_children(self):
-        children = self.xml.getchildren()
-        for c in children:
-            self.tree.load_xml(c,self.mytree_node)
-
-    def on_drop(self,evt):
-        drag_obj = self.tree.drag_obj
-        if drag_obj == self: return
-        opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL)
-        if opt == wx.YES:
-            xml = self.tree.drag_obj.delete()
-            xml = self.xml.append(xml,None)
-            self.tree.load_xml(xml, self.mytree_node)
-            self.tree.Expand(self.mytree_node)
-        elif opt == wx.NO: node_handler.on_drop(self,evt)
-
-    def tohtml(self):
-        cookie = 0
-        html_str = "<table border=\"1\" ><tr><td>"
-        html_str += "<b>"+self.xml.get("name") + "</b>"
-        html_str += "</td></tr>\n"
-        html_str += "<tr><td>"
-        max = tree.GetChildrenCount(handler.mytree_node,0)
+from orpg.tools.orpg_log import debug
+
+D20_EXPORT = wx.NewId()
+############################
+## d20 character node handler
+############################
+## Spells code - added by Dragonstar
+##Powers, Divine spells, inventory, howto, power points by Digitalxero
+##The whole look and easy of use redone by Digitalxero
+class container_handler(node_handler):
+    """ should not be used! only a base class!
+    <nodehandler name='?'  module='core' class='container_handler'  />
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.load_children()
+
+    def load_children(self):
+        children = self.xml.getchildren()
+        for c in children:
+            self.tree.load_xml(c,self.mytree_node)
+
+    def on_drop(self,evt):
+        drag_obj = self.tree.drag_obj
+        if drag_obj == self: return
+        opt = wx.MessageBox("Add node as child?","Container Node",wx.YES_NO|wx.CANCEL)
+        if opt == wx.YES:
+            xml = self.tree.drag_obj.delete()
+            xml = self.xml.append(xml,None)
+            self.tree.load_xml(xml, self.mytree_node)
+            self.tree.Expand(self.mytree_node)
+        elif opt == wx.NO: node_handler.on_drop(self,evt)
+
+    def tohtml(self):
+        cookie = 0
+        html_str = "<table border=\"1\" ><tr><td>"
+        html_str += "<b>"+self.xml.get("name") + "</b>"
+        html_str += "</td></tr>\n"
+        html_str += "<tr><td>"
+        max = tree.GetChildrenCount(handler.mytree_node,0)
         try: (child,cookie)=self.tree.GetFirstChild(self.mytree_node,cookie)
-        # If this happens we probably have a newer version of wxPython
-        except: (child,cookie)=self.tree.GetFirstChild(self.mytree_node)
-        obj = self.tree.GetPyData(child)
-        for m in range(max):
-            html_str += "<p>" + obj.tohtml()
-            if m < max-1:
-                child = self.tree.GetNextSibling(child)
-                if child.IsOk(): obj = self.tree.GetPyData(child)
-        html_str += "</td></tr></table>"
-        return html_str
-
-    def get_size_constraint(self):
-        return 1
-
-    def get_char_name( self ):
-        return self.child_handlers['general'].get_char_name()
-
-    def set_char_pp(self,attr,evl):
-        return self.child_handlers['pp'].set_char_pp(attr,evl)
-
-    def get_char_pp( self, attr ):
-        return self.child_handlers['pp'].get_char_pp(attr)
-
-    def get_char_lvl( self, attr ):
-        return self.child_handlers['classes'].get_char_lvl(attr)
-
-
-class d20char_handler(node_handler):
-    """ Node handler for a d20 charactor
-        <nodehandler name='?'  module='d20' class='d20char_handler2'  />
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('howtouse','HowTO use this tool',d20howto,'note')
-        self.new_child_handler('general','General Information',d20general,'gear')
-        self.new_child_handler('inventory','Money and Inventory',d20inventory,'money')
-        self.new_child_handler('abilities','Abilities Scores',d20ability,'gear')
-        self.new_child_handler('classes','Classes',d20classes,'knight')
-        self.new_child_handler('saves','Saves',d20saves,'skull')
-        self.new_child_handler('skills','Skills',d20skill,'book')
-        self.new_child_handler('feats','Feats',d20feats,'book')
-        self.new_child_handler('spells','Spells',d20spells,'book')
-        self.new_child_handler('divine','Divine Spells',d20divine,'book')
-        self.new_child_handler('powers','Powers',d20powers,'questionhead')
-        self.new_child_handler('hp','Hit Points',d20hp,'gear')
-        self.new_child_handler('pp','Power Points',d20pp,'gear')
-        self.new_child_handler('attacks','Attacks',d20attacks,'spears')
-        self.new_child_handler('ac','Armor',d20armor,'spears')
-        self.myeditor = None
-
-    def on_version(self,old_version):
-        node_handler.on_version(self,old_version)
-        if old_version == "":
-            data = parse(orpg.dirpath.dir_struct["nodes"]+"d20character.xml").getroot()
-            for tag in ("howtouse","inventory","powers","divine","pp"):
-                self.xml.append(data.find(tag))
-
-            ## add new atts
-            melee_attack = self.xml.find('melee')
-            melee_attack.set("second","0")
-            melee_attack.set("third","0")
-            melee_attack.set("forth","0")
-            melee_attack.set("fifth","0")
-            melee_attack.set("sixth","0")
-            range_attack = self.xml.find('ranged')
-            range_attack.set("second","0")
-            range_attack.set("third","0")
-            range_attack.set("forth","0")
-            range_attack.set("fifth","0")
-            range_attack.set("sixth","0")
-
-            gen_list = self.xml.find('general')
-
+        # If this happens we probably have a newer version of wxPython
+        except: (child,cookie)=self.tree.GetFirstChild(self.mytree_node)
+        obj = self.tree.GetPyData(child)
+        for m in range(max):
+            html_str += "<p>" + obj.tohtml()
+            if m < max-1:
+                child = self.tree.GetNextSibling(child)
+                if child.IsOk(): obj = self.tree.GetPyData(child)
+        html_str += "</td></tr></table>"
+        return html_str
+
+    def get_size_constraint(self):
+        return 1
+
+    def get_char_name( self ):
+        return self.child_handlers['general'].get_char_name()
+
+    def set_char_pp(self,attr,evl):
+        return self.child_handlers['pp'].set_char_pp(attr,evl)
+
+    def get_char_pp( self, attr ):
+        return self.child_handlers['pp'].get_char_pp(attr)
+
+    def get_char_lvl( self, attr ):
+        return self.child_handlers['classes'].get_char_lvl(attr)
+
+
+class d20char_handler(node_handler):
+    """ Node handler for a d20 charactor
+        <nodehandler name='?'  module='d20' class='d20char_handler2'  />
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('howtouse','HowTO use this tool',d20howto,'note')
+        self.new_child_handler('general','General Information',d20general,'gear')
+        self.new_child_handler('inventory','Money and Inventory',d20inventory,'money')
+        self.new_child_handler('abilities','Abilities Scores',d20ability,'gear')
+        self.new_child_handler('classes','Classes',d20classes,'knight')
+        self.new_child_handler('saves','Saves',d20saves,'skull')
+        self.new_child_handler('skills','Skills',d20skill,'book')
+        self.new_child_handler('feats','Feats',d20feats,'book')
+        self.new_child_handler('spells','Spells',d20spells,'book')
+        self.new_child_handler('divine','Divine Spells',d20divine,'book')
+        self.new_child_handler('powers','Powers',d20powers,'questionhead')
+        self.new_child_handler('hp','Hit Points',d20hp,'gear')
+        self.new_child_handler('pp','Power Points',d20pp,'gear')
+        self.new_child_handler('attacks','Attacks',d20attacks,'spears')
+        self.new_child_handler('ac','Armor',d20armor,'spears')
+        self.myeditor = None
+
+    def on_version(self,old_version):
+        node_handler.on_version(self,old_version)
+        if old_version == "":
+            data = parse(orpg.dirpath.dir_struct["nodes"]+"d20character.xml").getroot()
+            for tag in ("howtouse","inventory","powers","divine","pp"):
+                self.xml.append(data.find(tag))
+
+            ## add new atts
+            melee_attack = self.xml.find('melee')
+            melee_attack.set("second","0")
+            melee_attack.set("third","0")
+            melee_attack.set("forth","0")
+            melee_attack.set("fifth","0")
+            melee_attack.set("sixth","0")
+            range_attack = self.xml.find('ranged')
+            range_attack.set("second","0")
+            range_attack.set("third","0")
+            range_attack.set("forth","0")
+            range_attack.set("fifth","0")
+            range_attack.set("sixth","0")
+
+            gen_list = self.xml.find('general')
+
             for tag in ("currentxp","xptolevel"): gen_list.append(data.find(tag))
-        print old_version
-
-
-    def get_char_name( self ):
-        return self.child_handlers['general'].get_char_name()
-
-    def set_char_pp(self,attr,evl):
-        return self.child_handlers['pp'].set_char_pp(attr,evl)
-
-    def get_char_pp( self, attr ):
-        return self.child_handlers['pp'].get_char_pp(attr)
-
-    def get_char_lvl( self, attr ):
-        return self.child_handlers['classes'].get_char_lvl(attr)
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(self.xml.find(tag),new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-    def tohtml(self):
-        html_str = "<table><tr><td colspan=2 >"+self.child_handlers['general'].tohtml()+"</td></tr>"
-        html_str += "<tr><td width='50%' valign=top >"+self.child_handlers['abilities'].tohtml()
-        html_str += "<P>" + self.child_handlers['saves'].tohtml()
-        html_str += "<P>" + self.child_handlers['attacks'].tohtml()
-        html_str += "<P>" + self.child_handlers['ac'].tohtml()
-        html_str += "<P>" + self.child_handlers['feats'].tohtml()
-        html_str += "<P>" + self.child_handlers['spells'].tohtml()
-        html_str += "<P>" + self.child_handlers['divine'].tohtml()
-        html_str += "<P>" + self.child_handlers['powers'].tohtml()
-        html_str += "<P>" + self.child_handlers['inventory'].tohtml() +"</td>"
-        html_str += "<td width='50%' valign=top >"+self.child_handlers['classes'].tohtml()
-        html_str += "<P>" + self.child_handlers['hp'].tohtml()
-        html_str += "<P>" + self.child_handlers['pp'].tohtml()
-        html_str += "<P>" + self.child_handlers['skills'].tohtml() +"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-    def about(self):
-        """html_str = "<img src='" + orpg.dirpath.dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>"
-        html_str += "<br />by Chris Davis<br />chris@rpgarchive.com"
+        print old_version
+
+
+    def get_char_name( self ):
+        return self.child_handlers['general'].get_char_name()
+
+    def set_char_pp(self,attr,evl):
+        return self.child_handlers['pp'].set_char_pp(attr,evl)
+
+    def get_char_pp( self, attr ):
+        return self.child_handlers['pp'].get_char_pp(attr)
+
+    def get_char_lvl( self, attr ):
+        return self.child_handlers['classes'].get_char_lvl(attr)
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(self.xml.find(tag),new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+    def tohtml(self):
+        html_str = "<table><tr><td colspan=2 >"+self.child_handlers['general'].tohtml()+"</td></tr>"
+        html_str += "<tr><td width='50%' valign=top >"+self.child_handlers['abilities'].tohtml()
+        html_str += "<P>" + self.child_handlers['saves'].tohtml()
+        html_str += "<P>" + self.child_handlers['attacks'].tohtml()
+        html_str += "<P>" + self.child_handlers['ac'].tohtml()
+        html_str += "<P>" + self.child_handlers['feats'].tohtml()
+        html_str += "<P>" + self.child_handlers['spells'].tohtml()
+        html_str += "<P>" + self.child_handlers['divine'].tohtml()
+        html_str += "<P>" + self.child_handlers['powers'].tohtml()
+        html_str += "<P>" + self.child_handlers['inventory'].tohtml() +"</td>"
+        html_str += "<td width='50%' valign=top >"+self.child_handlers['classes'].tohtml()
+        html_str += "<P>" + self.child_handlers['hp'].tohtml()
+        html_str += "<P>" + self.child_handlers['pp'].tohtml()
+        html_str += "<P>" + self.child_handlers['skills'].tohtml() +"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+    def about(self):
+        """html_str = "<img src='" + orpg.dirpath.dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>"
+        html_str += "<br />by Chris Davis<br />chris@rpgarchive.com"
         return html_str"""
         text = 'd20 Character Tool 0.7 beta\n'
         text += 'by Chris Davis chris@rpgarchive.com'
-        return text
-
-    def get_char_name( self ):
-        return self.child_handlers['general'].get_char_name()
-    def get_armor_class( self ):
-        return self.child_handlers['ac'].get_armor_class()
-    def get_max_hp( self ):
-        return self.child_handlers['hp'].get_max_hp()
-    def get_current_hp( self ):
-        return self.child_handlers['hp'].get_current_hp()
-
-    def set_char_pp(self,attr,evl):
-        return self.child_handlers['pp'].set_char_pp(attr,evl)
-
-    def get_char_pp( self, attr ):
-        return self.child_handlers['pp'].get_char_pp(attr)
-
-    def get_char_lvl( self, attr ):
-        return self.child_handlers['classes'].get_char_lvl(attr)
-
+        return text
+
+    def get_char_name( self ):
+        return self.child_handlers['general'].get_char_name()
+    def get_armor_class( self ):
+        return self.child_handlers['ac'].get_armor_class()
+    def get_max_hp( self ):
+        return self.child_handlers['hp'].get_max_hp()
+    def get_current_hp( self ):
+        return self.child_handlers['hp'].get_current_hp()
+
+    def set_char_pp(self,attr,evl):
+        return self.child_handlers['pp'].set_char_pp(attr,evl)
+
+    def get_char_pp( self, attr ):
+        return self.child_handlers['pp'].get_char_pp(attr)
+
+    def get_char_lvl( self, attr ):
+        return self.child_handlers['classes'].get_char_lvl(attr)
+
 """ Removed to use the supplied Tabbed Panel
-class tabbed_panel(wx.Notebook):
-    def __init__(self, parent, handler, mode):
-        wx.Notebook.__init__(self, parent, -1, size=(1200,800))
-        self.handler = handler
-        self.parent = parent
-        tree = self.handler.tree
-        max = tree.GetChildrenCount(handler.mytree_node)
-        cookie = 0
-
+class tabbed_panel(wx.Notebook):
+    def __init__(self, parent, handler, mode):
+        wx.Notebook.__init__(self, parent, -1, size=(1200,800))
+        self.handler = handler
+        self.parent = parent
+        tree = self.handler.tree
+        max = tree.GetChildrenCount(handler.mytree_node)
+        cookie = 0
+
         try: (child,cookie)=tree.GetFirstChild(handler.mytree_node,cookie)
-        # If this happens we probably have a newer version of wxPython
-        except: (child,cookie)=tree.GetFirstChild(handler.mytree_node)
-        if not child.IsOk(): return
-        obj = tree.GetPyData(child)
-        for m in range(max):
-            if mode == 1: panel = obj.get_design_panel(self)
-            else: panel = obj.get_use_panel(self)
-            name = obj.xml.get("name")
-            if panel: self.AddPage(panel,name)
-            if m < max-1:
-                child = tree.GetNextSibling(child)
-                if child.IsOk(): obj = tree.GetPyData(child)
-                else: break
-
-    def about(self):
-        html_str = "<img src='" + orpg.dirpath.dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>"
-        html_str += "<br />by Chris Davis<br />chris@rpgarchive.com"
-        return html_str
-
-    def get_char_name( self ):
-        return self.child_handlers['general'].get_char_name()
-
-    def set_char_pp(self,attr,evl):
-        return self.child_handlers['pp'].set_char_pp(attr,evl)
-
-    def get_char_pp( self, attr ):
-        return self.child_handlers['pp'].get_char_pp(attr)
-
-    def get_char_lvl( self, attr ):
-        return self.child_handlers['classes'].get_char_lvl(attr)
-"""
-class d20_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        node_handler.__init__(self,xml,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-        if self.myeditor == None or self.myeditor.destroyed:
-            title = self.xml.get('name') + " Editor"
-            self.myeditor = wx.Frame(self.frame, -1, title)
-            if wx.Platform == '__WXMSW__':
-                icon = wx.Icon(orpg.dirpath.dir_struct["icon"]+'grid.ico', wx.BITMAP_TYPE_ICO)
-                self.myeditor.SetIcon(icon)
-                del icon
-            wnd = self.get_design_panel(self.myeditor)
-            self.myeditor.panel = wnd
-            self.wnd = wnd
-            self.myeditor.Show(1)
-        else:
-            self.myeditor.Raise()
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-
-class d20skill(d20_char_child):
-    """ Node Handler for skill.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        tree = self.tree
-        icons = self.tree.icons
-        self.skills={}
-        for n in self.xml.findall('skill'):
-            name = n.get('name')
-            self.skills[name] = n
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-
-    def get_mod(self,name):
-        skill = self.skills[name]
-        stat = skill.get('stat')
-        ac = int(skill.get('armorcheck'))
-        if ac:
-            ac = self.char_hander.child_handlers['ac'].get_check_pen()
-        stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat)
-        rank = int(skill.get('rank'))
-        misc = int(skill.get('misc'))
-        total = stat_mod + rank + misc + ac
-        return total
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node: d20_char_child.on_ldclick(self,evt)
-        else:
-            skill = self.skills[name];
-            untrained = skill.get('untrained');
-            rank = skill.get('rank');
-            if untrained == "0" and rank == "0": txt = '%s Skill Check: Untrained' % (name)
-            else:
-                mod = self.get_mod(name)
-                if mod >= 0: mod1 = "+"
-                else: mod1 = ""
-                txt = '%s Skill Check: [1d20%s%s]' % (name, mod1, mod)
-            chat = self.chat
-            chat.ParsePost(txt,True,True)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,skill_grid,"Skills")
-        wnd.title = "Skills (edit)"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Skill</th><th>Key</th>
-                    <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>"""
-        for n in self.xml.findall('skill'):
-            name = n.get('name')
-            stat = n.get('stat')
-            rank = n.get('rank')
-            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
-            stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat))
-            misc = n.get('misc')
-            mod = str(self.get_mod(name))
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str = html_str + "<td>"+stat_mod+"</td><td>"+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-
-class d20ability(d20_char_child):
-    """ Node Handler for ability.   This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        self.abilities = {}
-        tree = self.tree
-        icons = tree.icons
-        for n in self.xml.findall('stat'):
-            name = n.get('abbr')
-            self.abilities[name] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if item == self.mytree_node:
-            d20_char_child.on_ldclick( self, evt )
-        else:
-            mod = self.get_mod( name )
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
-            chat.ParsePost( txt, True, True )
-
-    def get_mod(self,abbr):
-        score = int(self.abilities[abbr].get('base'))
-        mod = (score - 10) / 2
-        return mod
-
-    def set_score(self,abbr,score):
-        if score >= 0:
-            self.abilities[abbr].set("base",str(score))
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,abil_grid,"Abilities")
-        wnd.title = "Abilities (edit)"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th>
-                    <th>Base</th><th>Modifier</th></tr>""" 
-        for n in self.xml.findall('stat'):
-            name = n.get('name')
-            abbr = n.get('abbr')
-            base = n.get('base')
-            mod = str(self.get_mod(abbr))
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-
-class d20saves(d20_char_child):
-    """ Node Handler for saves.   This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        tree = self.tree
-        icons = self.tree.icons
-        self.saves={}
-        for n in self.xml.findall('save'):
-            name = n.get('name')
-            self.saves[name] = n
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-
-    def get_mod(self,name):
-        save = self.saves[name]
-        stat = save.get('stat')
-        stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat)
-        base = int(save.get('base'))
-        miscmod = int(save.get('miscmod'))
-        magmod = int(save.get('magmod'))
-        total = stat_mod + base + miscmod + magmod
-        return total
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node:
-            d20_char_child.on_ldclick(self,evt)
-
-        else:
-            mod = self.get_mod(name)
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
-            chat.ParsePost( txt, True, True )
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,save_grid,"Saves")
-        wnd.title = "Saves"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Save</th>
-                    <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th>
-                    <th>Misc</th><th>Total</th></tr>"""
-        for n in self.xml.findall('save'):
-            name = n.get('name')
-            stat = n.get('stat')
-            base = n.get('base')
-            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
-            stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat))
-            mag = n.get('magmod')
-            misc = n.get('miscmod')
-            mod = str(self.get_mod(name))
-            if mod >= 0:  mod1 = "+"
-            else: mod1 = ""
-            html_str = html_str + "<td>"+stat_mod+"</td><td>"+mag+"</td>"
-            html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-
-class d20general(d20_char_child):
-    """ Node Handler for general information.   This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,gen_grid,"General Information")
-        wnd.title = "General Info"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
-        for n in self.xml:
-            html_str += "<B>"+n.tag.capitalize() +":</B> "
-            html_str += n.text + ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def on_name_change(self,name):
-        self.char_hander.rename(name)
-
-    def get_char_name( self ):
-        return self.xml.find( 'name' ).text
-
-
-class d20classes(d20_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,class_panel,"Classes")
-        wnd.title = "Classes"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
-        for n in self.xml: html_str += n.get('name') + " ("+n.get('level')+"), "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        for n in self.xml.findall('class'):
-            lvl = n.get('level')
-            type = n.get('name')
-            if attr == "level": return lvl
-            elif attr == "class": return type
-
-
-class d20feats(d20_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,feat_panel,"Feats")
-        wnd.title = "Feats"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
-        for n in self.xml: html_str += n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-
-class d20spells(d20_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        for n in self.xml.findall( 'spell' ):
-            name = n.get('name')
-            self.spells[ name ] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if item == self.mytree_node:
-            d20_char_child.on_ldclick( self, evt )
-        else:
-            level = self.spells[ name ].get( 'level' )
-            descr = self.spells[ name ].get( 'desc' )
-            use = self.spells[ name ].get( 'used' )
-            memrz = self.spells[ name ].get( 'memrz' )
-            cname = self.char_hander.get_char_name()
-            use += '+1'
-            left = eval( '%s - ( %s )' % ( memrz, use ) )
-            if left < 0:
-                txt = '%s Tried to cast %s but has used all of them for today, "Please rest so I can cast more."' % ( cname, name )
-                self.chat.ParsePost( txt, True, False )
-            else:
-                txt = '%s casts %s ( level %s, "%s" )' % ( cname, name, level, descr )
-                self.chat.ParsePost( txt, True, False )
-                s = ''
-                if left != 1: s = 's'
-                txt = '%s can cast %s %d more time%s' % ( cname, name, left, s )
-                self.chat.ParsePost( txt, False, False )
-                self.spells[ name ].set( 'used', `eval( use )` )
-
-    def refresh_spells(self):
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        for n in self.xml.findall('spell'):
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-            self.spells[name]=n
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,spell_panel,"Spells")
-        wnd.title = "Spells"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Arcane Spells</th></tr><tr><td><br />"
-        for n in self.xml: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        return self.char_hander.get_char_lvl(attr)
-
-class d20divine(d20_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        for n in self.xml.findall( 'gift' ):
-            name = n.get('name')
-            self.spells[ name ] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['flask'], icons['flask'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if item == self.mytree_node:
-            d20_char_child.on_ldclick( self, evt )
-        else:
-            level = self.spells[ name ].get( 'level' )
-            descr = self.spells[ name ].get( 'desc' )
-            use = self.spells[ name ].get( 'used' )
-            memrz = self.spells[ name ].get( 'memrz' )
-            cname = self.char_hander.get_char_name()
-            use += '+1'
-            left = eval( '%s - ( %s )' % ( memrz, use ) )
-            if left < 0:
-                txt = '%s Tried to cast %s but has used all of them for today, "Please rest so I can cast more."' % ( cname, name )
-                self.chat.ParsePost( txt, True, False )
-            else:
-                txt = '%s casts %s ( level %s, "%s" )' % ( cname, name, level, descr )
-                self.chat.ParsePost( txt, True, False )
-                s = ''
-                if left != 1: s = 's'
-                txt = '%s can cast %s %d more time%s' % ( cname, name, left, s )
-                self.chat.ParsePost( txt, False, False )
-                self.spells[ name ].set( 'used', `eval( use )` )
-
-    def refresh_spells(self):
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        for n in self.xml.findall('gift'):
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['flask'],icons['flask'])
-            tree.SetPyData(new_tree_node,self)
-            self.spells[name]=n
-            
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,divine_panel,"Spells")
-        wnd.title = "Spells"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Divine Spells</th></tr><tr><td><br />"
-        for n in self.xml: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        return self.char_hander.get_char_lvl(attr)
-
-class d20powers(d20_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        #cpp = self.xml.findall( 'pp' ).get('current1')
-        self.powers = {}
-        tree = self.tree
-        icons = self.tree.icons
-        for n in self.xml.findall( 'power' ):
-            name = n.get('name')
-            self.powers[ name ] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if item == self.mytree_node:
-            d20_char_child.on_ldclick( self, evt )
-        else:
-            level = self.powers[ name ].get( 'level' )
-            descr = self.powers[ name ].get( 'desc' )
-            use = self.powers[ name ].get( 'used' )
-            points = self.powers[ name ].get( 'point' )
-            cpp = self.char_hander.get_char_pp('current1')
-            fre = self.char_hander.get_char_pp('free')
-            cname = self.char_hander.get_char_name()
-            if level == "0" and fre != "0":
-                left = eval('%s - ( %s )' % ( fre, points ))
-                numcast = eval('%s / %s' % (left, points))
-                if left < 0:
-                    txt = '%s doesnt have enough PowerPoints to use %s' % ( cname, name )
-                    self.chat.ParsePost( txt, True, False )
-                else:
-                    txt = '%s uses %s as a Free Talent ( level %s, "%s" )' % ( cname, name, level, descr )
-                    self.chat.ParsePost( txt, True, False )
-                    s = ''
-                    if left != 1: s = 's'
-                    txt = '%s can use %s %d more time%s' % ( cname, name, numcast, s )
-                    self.chat.ParsePost( txt, False, False )
-                    self.char_hander.set_char_pp('free', left)
-            else:
-                left = eval('%s - ( %s )' % ( cpp, points ))
-                numcast = eval('%s / %s' % (left, points))
-                if left < 0:
-                    txt = '%s doesnt have enough PowerPoints to use %s' % ( cname, name )
-                    self.chat.ParsePost( txt, True, False )
-                else:
-                    txt = '%s uses %s ( level %s, "%s" )' % ( cname, name, level, descr )
-                    self.chat.ParsePost( txt, True, False )
-                    s = ''
-                    if left != 1: s = 's'
-                    txt = '%s can use %s %d more time%s' % ( cname, name, numcast, s )
-                    txt += ' - And has %d more Powerpoints left' % (left)
-                    self.chat.ParsePost( txt, False, False )
-                    self.char_hander.set_char_pp('current1', left)
-
-    def refresh_powers(self):
-        self.powers = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        for n in self.xml.findall('power'):
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['questionhead'],icons['questionhead'])
-            tree.SetPyData(new_tree_node,self)
-            self.powers[name]=n
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,power_panel,"Powers")
-        wnd.title = "Powers"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Powers</th></tr><tr><td><br />"
-        for n in self.xml: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        return self.char_hander.get_char_lvl(attr)
-
-    def set_char_pp(self,attr,evl):
-        return self.char_hander.set_char_pp(attr,evl)
-
-    def get_char_pp( self, attr ):
-        return self.char_hander.get_char_pp(attr)
-
-class d20howto(d20_char_child):
-    """ Node Handler for hit points.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,howto_panel,"How To")
-        wnd.title = "How To"
-        return wnd
-
-class d20inventory(d20_char_child):
-    """ Node Handler for general information.   This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,inventory_grid,"Inventory")
-        wnd.title = "General Info"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
-        for n in self.xml:
-            html_str += "<B>"+n.tag.capitalize() +":</B> "
-            html_str += n.text + "<br />"
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def on_name_change(self,name):
-        self.char_hander.rename(name)
-
-    def get_char_name( self ):
-        return self.xml.find( 'name' ).text
-
-
-class d20hp(d20_char_child):
-    """ Node Handler for hit points.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,hp_panel,"Hit Points")
-        wnd.title = "Hit Points"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=4>Hit Points</th></tr>"
-        html_str += "<tr><th>Max:</th><td>"+self.xml.get('max')+"</td>"
-        html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-    def get_max_hp( self ):
-        try: return eval( self.xml.get( 'max' ) )
-        except: return 0
-    def get_current_hp( self ):
-        try: return eval( self.xml.get( 'current' ) )
-        except: return 0
-
-class d20pp(d20_char_child):
-    """ Node Handler for power points.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,pp_panel,"Power Points")
-        wnd.title = "Power Points"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=8>Power Points</th></tr>"
-        html_str += "<tr><th>Max:</th><td>"+self.xml.get('max1')+"</td>"
-        html_str += "<th>Current:</th><td>"+self.xml.get('current1')+"</td>"
-        html_str += "<th>Current Talents/day:</th><td>"+self.xml.get('free')+"</td>"
-        html_str += "<th>Max Talents/day:</th><td>"+self.xml.get('maxfree')+"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-    def get_char_pp( self, attr ):
-        pp = self.xml.get(attr)
-        return pp
-
-    def set_char_pp( self, attr, evl ):
-        pp = self.xml.set(attr, evl)
-        return pp
-
-class d20attacks(d20_char_child):
-    """ Node Handler for attacks.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-        node_list = self.xml.findall('melee')
-        self.melee = node_list[0]
-        node_list = self.xml.findall('ranged')
-        self.ranged = node_list[0]
-        self.refresh_weapons()
-
-    def refresh_weapons(self):
-        self.weapons = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('weapon')
-        for n in node_list:
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['sword'],icons['sword'])
-            tree.SetPyData(new_tree_node,self)
-            self.weapons[name]=n
-
-    def get_attack_data(self):
-        temp = self.melee
-        base = int(temp.get('base'))
-        base2 = int(temp.get('second'))
-        base3 = int(temp.get('third'))
-        base4 = int(temp.get('forth'))
-        base5 = int(temp.get('fifth'))
-        base6 = int(temp.get('sixth'))
-        misc = int(temp.get('misc'))
-        return (base, base2, base3, base4, base5, base6, misc)
-
-    # Replace any 'S' and 'D' in an attack modifier and damage modifier with the
-    # strength bonus or dexterity bonus respectively.
-    def process_mod_codes( self, attack, damage ):
-        str_mod = self.char_hander.child_handlers['abilities'].get_mod( 'Str' )
-        dex_mod = self.char_hander.child_handlers['abilities'].get_mod( 'Dex' )
-        str_re = re.compile('S')
-        dex_re = re.compile('D')
-        attack = str_re.sub( str( str_mod ), attack )
-        attack = dex_re.sub( str( dex_mod ), attack )
-        damage = str_re.sub( str( str_mod ), damage );
-        damage = dex_re.sub( str( dex_mod ), damage );
-        return (attack, damage)
-
-    # Decompose a damage string (e.g. longsword +1 sneak attack "1d8+S+1+1d6")
-    # into it's 4 seperate components <n>d<s>+<mods>+<extra dice>
-    def decompose_damage( self, damage ):
-        m = re.match( r"(?P<n>\d+)d(?P<s>\d+)(?P<mods>(\s*(\+|-|/|\*)\s*(\d+|D|S)*)*)(?P<extra>(\s*(\+|-)\s*\d+d\d+)?)\s*$", damage )
-        return (int(m.group('n')), int(m.group('s')), m.group('mods'), m.group('extra'))
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node:
-            d20_char_child.on_ldclick(self,evt)
-            #self.frame.add_panel(self.get_design_panel(self.frame.note))
-        else:
-            # Weapon/attack specific attack modifier (e.g. "S+1" for a longsword+1).
-            attack_mod_str = self.weapons[name].get('mod')
-
-            # Weapon/attack specific damage (e.g. "1d8+S+1" for a longsword+1).
-            damage_str = self.weapons[name].get('damage')
-            (num_damage_dice, damage_die, damage_mods, extra_damage) = self.decompose_damage( damage_str )
-
-            # Replace any 'S' and 'D' in attack_mod_str and damage_str with the
-            # strength bonus or dexterity bonus respectively.
-            (attack_mod_str, damage_mods) = self.process_mod_codes( attack_mod_str, damage_mods )
-
-            # Base attack bonuses for up to six attacks.
-            bab_attributes = ['base', 'second', 'third', 'forth', 'fifth', 'sixth']
-            bab = []
-            for b in bab_attributes: bab.append( int(self.melee.get( b )) )
-
-            # Misc. attack modifier to be applied to *all* attacks.
-            misc_mod = int(self.melee.get( 'misc' ));
-
-            # Attack modifier (except BAB)
-            attack_mod = misc_mod + eval( attack_mod_str )
-
-            # Total damage mod (except extra dice)
-            if damage_mods != '': damage_mod = eval( damage_mods )
-            else: damage_mod = 0
-
-            # Determine critical hit range and multiplier.
-            critical_str = self.weapons[name].get( 'critical' )
-            m = re.match( r"(((?P<min>\d+)-)?\d+/)?x(?P<mult>\d+)", critical_str )
-            crit_min = m.group( 'min' )
-            crit_mult = m.group( 'mult' )
-            if crit_min == None: crit_min = 20
-            else: crit_min = int( crit_min )
-            if crit_mult == None: crit_mult = 2
-            else: crit_mult = int( crit_mult )
-
-            # Simple matter to output all the attack/damage lines to the chat buffer.
-            for i in range( 0, len( bab ) ):
-                if bab[i] > 0 or i == 0:
-                    attack_roll_str = '[1d20%+d]' % (bab[i] + attack_mod)
-                    attack_roll_parsed = self.chat.ParseDice( attack_roll_str )
-                    damage_roll_str = '[%dd%d%+d%s]' % (num_damage_dice, damage_die, damage_mod, extra_damage)
-                    damage_roll_parsed = self.chat.ParseDice( damage_roll_str )
-                    txt = '%s (%s): %s ===> Damage: %s' \
-                          % (name, bab_attributes[i], attack_roll_parsed, damage_roll_parsed)
-                    self.chat.Post( txt, True, True )
-
-                    # Check for a critical hit
-                    d20_roll = int(re.match( r".*\[(\d+),.*", attack_roll_parsed ).group(1));
-                    dmg = damage_str
-                    if d20_roll >= crit_min:
-                        for j in range(1,crit_mult): dmg += '+%s' % damage_str
-                        txt = 'Critical hit? [1d20%+d] ===> Damage: [%dd%d%+d%s]' \
-                              % (bab[i] + attack_mod, crit_mult*num_damage_dice, \
-                                 damage_die, crit_mult*damage_mod, extra_damage)
-                        self.chat.ParsePost( txt, True, True )
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,attack_panel,"Attacks")
-        wnd.title = "Attacks"
-        return wnd
-
-    def get_char_lvl( self, attr ):
-        return self.char_hander.get_char_lvl(attr)
-
-    def tohtml(self):
-        babs = self.get_attack_data()
-        html_str = "<table width=100% border=1 ><tr ALIGN='center'><th BGCOLOR=#E9E9E9>Base Attack Bonus</th>"
-        html_str += '<td>%+d' % babs[0]
-        for i in range(1,6):
-            if babs[i] > 0: html_str += '/%+d' % babs[i]
-        html_str += "</td></tr><tr ALIGN='center' ><th BGCOLOR=#E9E9E9>Misc. Attack Bonus</th>"
-        html_str += '<td>%+d</td></tr></table>' % babs[6]
-
-        n_list = self.xml.findall('weapon')
-        for n in n_list:
-            (attack_mod, damage_mod) = self.process_mod_codes( n.get( 'mod' ), \
-                                                               n.get( 'damage' ) )
-            attack_mod = eval( attack_mod )
-            html_str += """<P><table width=100% border=1><tr BGCOLOR=#E9E9E9><th colspan=3>Weapon</th>
-                    <th>Attack</th><th >Damage</th></tr>""" \
-                      + "<tr ALIGN='center'><td colspan=3>" \
-                      + n.get('name') + "</td><td>"
-            html_str += '%+d</td><td>%s</td></tr>' % (attack_mod, damage_mod)
-            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Critical</th><th>Range</th><th>Weight</th>
-                        <th>Type</th><th>Size</th></tr>""" \
-                      + "<tr ALIGN='center'><td>" \
-                      + n.get( 'critical' ) + "</td><td>" \
-                      + n.get( 'range' ) + "</td><td>" \
-                      + n.get( 'weight' )+"</td><td>" \
-                      + n.get( 'type' ) + "</td><td>" \
-                      + n.get( 'size' ) + "</td></tr></table>"
-        return html_str
-
-class d20armor(d20_char_child):
-    """ Node Handler for ac.  This handler will be
-        created by d20char_handler.
-    """
-    def __init__(self,xml,tree_node,parent):
-        d20_char_child.__init__(self,xml,tree_node,parent)
-
-    def get_spell_failure(self):
-        return self.get_total('spellfailure')
-
-    def get_total_weight(self):
-        return self.get_total('weight')
-
-    def get_check_pen(self):
-        return self.get_total('checkpenalty')
-
-    def get_armor_class(self):
-        ac_total = 10
-        ac_total += self.get_total('bonus')
-        dex_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex')
-        max_dex = self.get_max_dex()
-        if dex_mod < max_dex: ac_total += dex_mod
-        else: ac_total += max_dex
-        return ac_total
-
-    def get_max_dex(self):
-        armor_list = self.xml.findall('armor')
-        dex = 10
-        for a in armor_list:
-            temp = int(a.get("maxdex"))
-            if temp < dex: dex = temp
-        return dex
-
-    def get_total(self,attr):
-        armor_list = self.xml.findall('armor')
-        total = 0
-        for a in armor_list: total += int(a.get(attr))
-        return total
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,ac_panel,"Armor")
-        wnd.title = "Armor"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>AC</th>
-                    <th>Check Penalty</th><th >Spell Failure</th><th>Max Dex</th><th>Total Weight</th></tr>"""
-        html_str += "<tr ALIGN='center' ><td>"+str(self.get_armor_class())+"</td>"
-        html_str += "<td>"+str(self.get_check_pen())+"</td>"
-        html_str += "<td>"+str(self.get_spell_failure())+"</td>"
-        html_str += "<td>"+str(self.get_max_dex())+"</td>"
-        html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>"
-        for n in self.xml:
-            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=3>Armor</th>
-                    <th>Type</th><th >Bonus</th></tr>"""
-            html_str += "<tr ALIGN='center' ><td  colspan=3>"+n.get('name')+"</td>"
-            html_str += "<td>"+n.get('type')+"</td>"
-            html_str += "<td>"+n.get('bonus')+"</td></tr>"
-            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Check Penalty</th><th>Spell Failure</th>
-                        <th>Max Dex</th><th>Speed</th><th>Weight</th></tr>"""
-            html_str += "<tr ALIGN='center'><td>"+n.get('checkpenalty')+"</td>"
-            html_str += "<td>"+n.get('spellfailure')+"</td>"
-            html_str += "<td>"+n.get('maxdex')+"</td>"
-            html_str += "<td>"+n.get('speed')+"</td>"
-            html_str += "<td>"+n.get('weight')+"</td></tr></table>"
-        return html_str
-
-
-########################
-##  d20 char windows
-########################
-
-class base_panel(wx.Panel):
-    def __init__(self, parent):
-        wx.Panel.__init__(self, parent, -1)
-
-        #self.build_ctrls()
-        self.Bind(wx.EVT_SIZE, self.on_size)
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        #self.splitter.SetDimensions(0,0,s[0],s[1])
-
-class outline_panel(wx.Panel):
-    def __init__(self, parent, handler, wnd, txt,):
-        wx.Panel.__init__(self, parent, -1)
-        self.panel = wnd(self,handler)
-        self.outline = wx.StaticBox(self,-1,txt)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.panel.SetDimensions(20,20,s[0]-40,s[1]-40)
-        self.outline.SetDimensions(5,5,s[0]-10,s[1]-10)
-
-class char_panel(wx.ScrolledWindow):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'TWO')
-        wx.ScrolledWindow.__init__(self, parent, -1,style=wx.VSCROLL | wx.SUNKEN_BORDER  )
-        self.height = 1200
-        self.SetScrollbars(10, 10,80, self.height/10)
-        self.main_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.panels = {}
-        keys = handler.child_handlers.keys()
-        for k in keys: self.panels[k] = handler.child_handlers[k].get_design_panel(self, [k])
-        self.sub_sizer = wx.BoxSizer(wx.VERTICAL)
-        self.sub_sizer2 = wx.BoxSizer(wx.VERTICAL)
-        self.sub_sizer.Add(self.panels['general'], 1, wx.EXPAND)
-        self.sub_sizer.Add(self.panels['abilities'], 1, wx.EXPAND)
-
-        self.sub_sizer.Add(self.panels['attacks'], 2, wx.EXPAND)
-        self.sub_sizer.Add(self.panels['ac'], 1, wx.EXPAND)
-        self.sub_sizer.Add(self.panels['spells'], 1, wx.EXPAND)
-
-        self.sub_sizer2.Add(self.panels['classes'], 2, wx.EXPAND)
-        self.sub_sizer2.Add(self.panels['hp'], 1, wx.EXPAND)
-        self.sub_sizer2.Add(self.panels['pp'], 1, wx.EXPAND)
-        self.sub_sizer2.Add(self.panels['saves'], 2, wx.EXPAND)
-
-        self.sub_sizer2.Add(self.panels['feats'], 2, wx.EXPAND)
-        self.sub_sizer2.Add(self.panels['powers'], 2, wx.EXPAND)
-        self.sub_sizer2.Add(self.panels['skills'], 3, wx.EXPAND)
-
-        self.main_sizer.Add(self.sub_sizer,   1, wx.EXPAND)
-        self.main_sizer.Add(self.sub_sizer2,   1, wx.EXPAND)
-        self.panels['abilities'].panel.char_wnd = self
-        self.SetSizer(self.main_sizer)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-
-
-    def on_size(self,evt):
-        s = self.GetClientSizeTuple()
-        self.SetScrollbars(10, 10,s[0]/10, self.height/10)
-        dc = wx.ClientDC(self)
-        x = dc.DeviceToLogicalX(0)
-        y = dc.DeviceToLogicalY(0)
-        self.main_sizer.SetDimension(x,y,s[0],self.height)
-        evt.Skip()
-
-    def refresh_data(self):
-        self.panels['saves'].panel.refresh_data()
-        self.panels['skills'].panel.refresh_data()
-        self.panels['attacks'].panel.refresh_data()
-        self.panels['powers'].panel.refresh_data()
-        self.panels['spells'].panel.refresh_data()
-
-HOWTO_MAX = wx.NewId()
-
-class howto_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        pname = handler.xml.set("name", 'How To')
-        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
-        self.sizer.AddMany([ (wx.StaticText(self, -1, 
-                              handler.xml.find('howto').text), 
-                              0, wx.ALIGN_CENTER_VERTICAL),
-                            ])
-        self.sizer.AddGrowableCol(1)
-        self.SetSizer(self.sizer)
-
-
-HP_CUR = wx.NewId()
-HP_MAX = wx.NewId()
-
-class hp_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        pname = handler.xml.set("name", 'HitPoints')
-        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
-        self.xml = handler.xml
-        self.sizer.AddMany([ (wx.StaticText(self, -1, "HP Current:"),   0, wx.ALIGN_CENTER_VERTICAL),
-                 (wx.TextCtrl(self, HP_CUR, self.xml.get('current')),   0, wx.EXPAND),
-                 (wx.StaticText(self, -1, "HP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
-                 (wx.TextCtrl(self, HP_MAX, self.xml.get('max')),  0, wx.EXPAND),
-                 ])
-        self.sizer.AddGrowableCol(1)
-        self.SetSizer(self.sizer)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_MAX)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_CUR)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == HP_CUR: self.xml.set('current',evt.GetString())
-        elif id == HP_MAX: self.xml.set('max',evt.GetString())
-
-    def on_size(self,evt):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-PP_CUR = wx.NewId()
-PP_MAX = wx.NewId()
-PP_FRE = wx.NewId()
-PP_MFRE = wx.NewId()
-
-class pp_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        pname = handler.xml.set("name", 'PowerPoints')
-        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
-        self.xml = handler.xml
-
-        self.sizer.AddMany([ (wx.StaticText(self, -1, "PP Current:"),   0, wx.ALIGN_CENTER_VERTICAL),
-                 (wx.TextCtrl(self, PP_CUR, self.xml.get('current1')),   0, wx.EXPAND),
-                 (wx.StaticText(self, -1, "PP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
-                 (wx.TextCtrl(self, PP_MAX, self.xml.get('max1')),  0, wx.EXPAND),
-                 (wx.StaticText(self, -1, "Current Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL),
-                 (wx.TextCtrl(self, PP_FRE, self.xml.get('free')),  0, wx.EXPAND),
-                 (wx.StaticText(self, -1, "Max Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL),
-                 (wx.TextCtrl(self, PP_MFRE, self.xml.get('maxfree')),  0, wx.EXPAND),
-                 ])
-        self.sizer.AddGrowableCol(1)
-        self.SetSizer(self.sizer)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MAX)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_CUR)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_FRE)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MFRE)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == PP_CUR: self.xml.set('current1',evt.GetString())
-        elif id == PP_MAX: self.xml.set('max1',evt.GetString())
-        elif id == PP_FRE: self.xml.set('free',evt.GetString())
-        elif id == PP_MFRE: self.xml.set('maxfree',evt.GetString())
-
-    def on_size(self,evt):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-
-class gen_grid(wx.grid.Grid):
-    """grid for gen info"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'General')
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        n_list = handler.xml[:]
-        self.CreateGrid(len(n_list),2)
-        self.SetRowLabelSize(0)
-        self.SetColLabelSize(0)
-        self.n_list = n_list
-        i = 0
-        for i in range(len(n_list)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        self.n_list[row].text = value
-        if row==0: self.handler.on_name_change(value)
-
-    def refresh_row(self,rowi):
-        self.SetCellValue(rowi,0,self.n_list[rowi].tag)
-        self.SetReadOnly(rowi,0)
-        self.SetCellValue(rowi,1,self.n_list[rowi].text)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols):  self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-class inventory_grid(wx.grid.Grid):
-    """grid for gen info"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Money and Inventory')
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        n_list = handler.xml[:]
-        self.CreateGrid(len(n_list),2)
-        self.SetRowLabelSize(0)
-        self.SetColLabelSize(0)
-        self.n_list = n_list
-        i = 0
-        for i in range(len(n_list)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        self.n_list[row].text = value
-        if row==0: self.handler.on_name_change(value)
-
-    def refresh_row(self,rowi):
-        self.SetCellValue(rowi,0,self.n_list[rowi].tag)
-        self.SetReadOnly(rowi,0)
-        self.SetCellValue(rowi,1,self.n_list[rowi].text)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-class abil_grid(wx.grid.Grid):
-    """grid for abilities"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Stats')
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        stats = handler.xml.findall('stat')
-        self.CreateGrid(len(stats),3)
-        self.SetRowLabelSize(0)
-        col_names = ['Ability','Score','Modifier']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.stats = stats
-        i = 0
-        for i in range(len(stats)): self.refresh_row(i)
-        self.char_wnd = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            self.stats[row].set('base',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-        if self.char_wnd: self.char_wnd.refresh_data()
-
-    def refresh_row(self,rowi):
-        s = self.stats[rowi]
-        name = s.get('name')
-        abbr = s.get('abbr')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        self.SetCellValue(rowi,1,s.get('base'))
-        self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr)))
-        self.SetReadOnly(rowi,2)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()-1): self.refresh_row(r)
-
-
-class save_grid(wx.grid.Grid):
-    """grid for saves"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Saves')
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        saves = handler.xml.findall('save')
-        self.stats = handler.char_hander.child_handlers['abilities']
-        self.CreateGrid(len(saves),7)
-        self.SetRowLabelSize(0)
-        col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.saves = saves
-        i = 0
-        for i in range(len(saves)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col == 2: self.saves[row].set('base',value)
-            elif col == 4: self.saves[row].set('magmod',value)
-            elif col == 4: self.saves[row].set('miscmod',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-
-    def refresh_row(self,rowi):
-        s = self.saves[rowi]
-        name = s.get('name')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        stat = s.get('stat')
-        self.SetCellValue(rowi,1,stat)
-        self.SetReadOnly(rowi,1)
-        self.SetCellValue(rowi,2,s.get('base'))
-        self.SetCellValue(rowi,3,str(self.stats.get_mod(stat)))
-        self.SetReadOnly(rowi,3)
-        self.SetCellValue(rowi,4,s.get('magmod'))
-        self.SetCellValue(rowi,5,s.get('miscmod'))
-        mod = str(self.handler.get_mod(name))
-        self.SetCellValue(rowi,6,mod)
-        self.SetReadOnly(rowi,6)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()): self.refresh_row(r)
-
-
-class skill_grid(wx.grid.Grid):
-    """ panel for skills """
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Skills')
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        skills = handler.xml.findall('skill')
-        self.stats = handler.char_hander.child_handlers['abilities']
-        self.CreateGrid(len(skills),6)
-        self.SetRowLabelSize(0)
-        col_names = ['Skill','Key','Rank','Abil','Misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        rowi = 0
-        self.skills = skills
-        for i in range(len(skills)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col == 2: self.skills[row].set('rank',value)
-            elif col == 4: self.skills[row].set('misc',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-
-    def refresh_row(self,rowi):
-        s = self.skills[rowi]
-        name = s.get('name')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        stat = s.get('stat')
-        self.SetCellValue(rowi,1,stat)
-        self.SetReadOnly(rowi,1)
-        self.SetCellValue(rowi,2,s.get('rank'))
-        self.SetCellValue(rowi,3,str(self.stats.get_mod(stat)))
-        self.SetReadOnly(rowi,3)
-        self.SetCellValue(rowi,4,s.get('misc'))
-        mod = str(self.handler.get_mod(name))
-        self.SetCellValue(rowi,5,mod)
-        self.SetReadOnly(rowi,5)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()): self.refresh_row(r)
-
-
-class feat_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Feats')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Feat"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Feat"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-
-        n_list = handler.xml[:]
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),2,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"Feat")
-        self.grid.SetColLabelValue(1,"Type")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-        self.SetSizer(self.sizer)
-
-    def refresh_row(self,i):
-        feat = self.n_list[i]
-        name = feat.get('name')
-        type = feat.get('type')
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,type)
-        self.grid.SetReadOnly(i,1)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.removeChild(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20feats.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('feat')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('feat')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-
-class spell_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Arcane Spells')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        n_list = handler.xml[:]
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),4,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"No.")
-        self.grid.SetColLabelValue(1,"Lvl")
-        self.grid.SetColLabelValue(2,"Spell")
-        self.grid.SetColLabelValue(3,"Desc")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 0: self.n_list[row].set('memrz',value)
-
-    def refresh_row(self,i):
-        spell = self.n_list[i]
-        memrz = spell.get('memrz')
-        name = spell.get('name')
-        type = spell.get('desc')
-        level = spell.get('level')
-        self.grid.SetCellValue(i,0,memrz)
-        self.grid.SetCellValue(i,2,name)
-        self.grid.SetReadOnly(i,2)
-        self.grid.SetCellValue(i,3,type)
-        self.grid.SetReadOnly(i,3)
-        self.grid.SetCellValue(i,1,level)
-        self.grid.SetReadOnly(i,1)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.removeChild(self.n_list[i])
-                self.handler.refresh_spells()
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20spells.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('spell')
-        opts = []
-        for f in f_list: opts.append("(" + f.get('level') + ")" + f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('spell')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_spells()
-        dlg.Destroy()
-
-    def on_refresh_spells( self, evt ):
-        f_list = self.xml.findall('spell')
-        for spell in f_list: spell.set( 'used', '0' )
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-        self.grid.SetColSize(0,w * 0.10)
-        self.grid.SetColSize(1,w * 0.10)
-        self.grid.SetColSize(2,w * 0.30)
-        self.grid.SetColSize(3,w * 0.50)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-class divine_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Divine Spells')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        n_list = handler.xml[:]
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),4,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"No.")
-        self.grid.SetColLabelValue(1,"Lvl")
-        self.grid.SetColLabelValue(2,"Spell")
-        self.grid.SetColLabelValue(3,"Desc")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 0: self.n_list[row].set('memrz',value)
-
-
-    def refresh_row(self,i):
-        spell = self.n_list[i]
-        memrz = spell.get('memrz')
-        name = spell.get('name')
-        type = spell.get('desc')
-        level = spell.get('level')
-        self.grid.SetCellValue(i,0,memrz)
-        self.grid.SetCellValue(i,2,name)
-        self.grid.SetReadOnly(i,2)
-        self.grid.SetCellValue(i,3,type)
-        self.grid.SetReadOnly(i,3)
-        self.grid.SetCellValue(i,1,level)
-        self.grid.SetReadOnly(i,1)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-                self.handler.refresh_spells()
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20divine.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('gift')
-        opts = []
-        for f in f_list: opts.append("(" + f.get('level') + ")" + f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('gift')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_spells()
-        dlg.Destroy()
-
-    def on_refresh_spells( self, evt ):
-        f_list = self.xml.findall('gift')
-        for spell in f_list: spell.set( 'used', '0' )
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-        self.grid.SetColSize(0,w * 0.10)
-        self.grid.SetColSize(1,w * 0.10)
-        self.grid.SetColSize(2,w * 0.30)
-        self.grid.SetColSize(3,w * 0.50)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-
-class power_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Pionic Powers')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Power"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Power"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 30, "Refresh Powers"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.Bind(wx.EVT_BUTTON, self.on_refresh_powers, id=30)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        n_list = handler.xml[:]
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),5,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"PP")
-        self.grid.SetColLabelValue(1,"Lvl")
-        self.grid.SetColLabelValue(2,"Power")
-        self.grid.SetColLabelValue(3,"Desc")
-        self.grid.SetColLabelValue(4,"Type")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.refresh_data()
-        self.temp_dom = None
-        self.SetSizer(self.sizer)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-
-    def refresh_row(self,i):
-        power = self.n_list[i]
-        point = power.get('point')
-        name = power.get('name')
-        type = power.get('desc')
-        test = power.get('test')
-        level = power.get('level')
-        self.grid.SetCellValue(i,0,point)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,level)
-        self.grid.SetReadOnly(i,1)
-        self.grid.SetCellValue(i,2,name)
-        self.grid.SetReadOnly(i,2)
-        self.grid.SetCellValue(i,3,type)
-        self.grid.SetReadOnly(i,3)
-        self.grid.SetCellValue(i,4,test)
-        self.grid.SetReadOnly(i,4)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.removeChild(self.n_list[i])
-                self.handler.refresh_powers()
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20powers.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('power')
-        opts = []
-        for f in f_list: opts.append("(" + f.get('level') + ") - " + f.get('name') + " - " + f.get('test'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Power','Powers',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('power')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_powers()
-        dlg.Destroy()
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-                self.n_list = self.xml.findall('weapon')
-                self.handler.refresh_weapons()
-
-    def on_refresh_powers( self, evt ):
-        mfre = self.handler.get_char_pp('maxfree')
-        mpp = self.handler.get_char_pp('max1')
-        self.handler.set_char_pp( 'free', mfre )
-        self.handler.set_char_pp( 'current1', mpp )
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-        self.grid.SetColSize(0,w * 0.05)
-        self.grid.SetColSize(1,w * 0.05)
-        self.grid.SetColSize(2,w * 0.30)
-        self.grid.SetColSize(3,w * 0.30)
-        self.grid.SetColSize(4,w * 0.30)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-class attack_grid(wx.grid.Grid):
-    """grid for attacks"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Melee')
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.parent = parent
-        self.handler = handler
-        self.babs = self.handler.melee
-        self.CreateGrid(1,7)
-        self.SetRowLabelSize(0)
-        col_names = ['base','base 2','base 3','base 4','base 5','base 6','misc']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.refresh_data()
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try: int(value)
-        except:
-            value = "0"
-            self.SetCellValue( row, col, value )
-        attribs = ['base','second','third','forth','fifth','sixth','misc']
-        self.babs.set( attribs[col], value )
-        self.parent.refresh_data()
-
-    def refresh_data(self):
-        attack_mods = self.handler.get_attack_data()
-        for i in range(0,7): self.SetCellValue( 0, i, str(attack_mods[i]) )
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/cols
-        for i in range(0,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-class weapon_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Weapons')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Weapon"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Weapon"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        n_list = handler.xml.findall('weapon')
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.handler = handler
-        self.grid.CreateGrid(len(n_list),8,1)
-        self.grid.SetRowLabelSize(0)
-        col_names = ['Name','damage','mod','critical','type','weight','range','size']
-        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
-        self.refresh_data()
-        self.temp_dom = None
-        self.SetSizer(self.sizer)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 0:
-            self.n_list[row].set('name',value)
-            self.handler.refresh_weapons();
-        else: self.n_list[row].set(self.grid.GetColLabelValue(col),value)
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        name = n.get('name')
-        mod = n.get('mod')
-        ran = n.get('range')
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetCellValue(i,1,n.get('damage'))
-        self.grid.SetCellValue(i,2,mod)
-        self.grid.SetCellValue(i,3,n.get('critical'))
-        self.grid.SetCellValue(i,4,n.get('type'))
-        self.grid.SetCellValue(i,5,n.get('weight'))
-        self.grid.SetCellValue(i,6,ran)
-        self.grid.SetCellValue(i,7,n.get('size') )
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-                self.n_list = self.xml.findall('weapon')
-                self.handler.refresh_weapons()
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20weapons.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('weapon')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('weapon')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_weapons()
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols+1)
-        self.grid.SetColSize(0,col_w*2)
-        for i in range(1,cols): self.grid.SetColSize(i,col_w)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-
-class attack_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Melee')
-        wx.Panel.__init__(self, parent, -1)
-
-        self.a_grid = attack_grid(self, handler)
-        self.w_panel = weapon_panel(self, handler)
-        self.sizer = wx.BoxSizer(wx.VERTICAL)
-        self.sizer.Add(self.a_grid, 1, wx.EXPAND)
-        self.sizer.Add(self.w_panel, 2, wx.EXPAND)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.SetSizer(self.sizer)
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-    def refresh_data(self):
-        self.w_panel.refresh_data()
-        self.a_grid.refresh_data()
-
-
-class ac_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Armor')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Armor"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Armor"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.xml = handler.xml
-        n_list = handler.xml[:]
-        self.n_list = n_list
-        col_names = ['Armor','bonus','maxdex','cp','sf','weight','speed','type']
-        self.grid.CreateGrid(len(n_list),len(col_names),1)
-        self.grid.SetRowLabelSize(0)
-        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
-        self.atts =['name','bonus','maxdex','checkpenalty','spellfailure','weight','speed','type']
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-        self.SetSizer(self.sizer)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col >= 1 and col <= 5:
-            try:
-                int(value)
-                self.n_list[row].set(self.atts[col],value)
-            except: self.grid.SetCellValue(row,col,"0")
-        else: self.n_list[row].set(self.atts[col],value)
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        for y in range(len(self.atts)):
-            self.grid.SetCellValue(i,y,n.get(self.atts[y]))
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20armor.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('armor')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('armor')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols+2)
-        self.grid.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.grid.SetColSize(i,col_w)
-
-
-class class_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Class')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, 10, "Remove Class"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, 20, "Add Class"), 1, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-
-        n_list = handler.xml[:]
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),2,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"Class")
-        self.grid.SetColLabelValue(1,"Level")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        try:
-            int(value)
-            self.n_list[row].set('level',value)
-        except: self.grid.SetCellValue(row,col,"1")
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        name = n.get('name')
-        level = n.get('level')
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,level)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20classes.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('class')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(XML(tostring(f_list[i])))
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('class')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        # If this happens we probably have a newer version of wxPython
+        except: (child,cookie)=tree.GetFirstChild(handler.mytree_node)
+        if not child.IsOk(): return
+        obj = tree.GetPyData(child)
+        for m in range(max):
+            if mode == 1: panel = obj.get_design_panel(self)
+            else: panel = obj.get_use_panel(self)
+            name = obj.xml.get("name")
+            if panel: self.AddPage(panel,name)
+            if m < max-1:
+                child = tree.GetNextSibling(child)
+                if child.IsOk(): obj = tree.GetPyData(child)
+                else: break
+
+    def about(self):
+        html_str = "<img src='" + orpg.dirpath.dir_struct["icon"]+'d20_logo.gif' "><br /><b>d20 Character Tool v0.7 beta</b>"
+        html_str += "<br />by Chris Davis<br />chris@rpgarchive.com"
+        return html_str
+
+    def get_char_name( self ):
+        return self.child_handlers['general'].get_char_name()
+
+    def set_char_pp(self,attr,evl):
+        return self.child_handlers['pp'].set_char_pp(attr,evl)
+
+    def get_char_pp( self, attr ):
+        return self.child_handlers['pp'].get_char_pp(attr)
+
+    def get_char_lvl( self, attr ):
+        return self.child_handlers['classes'].get_char_lvl(attr)
+"""
+class d20_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        node_handler.__init__(self,xml,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+        if self.myeditor == None or self.myeditor.destroyed:
+            title = self.xml.get('name') + " Editor"
+            self.myeditor = wx.Frame(self.frame, -1, title)
+            if wx.Platform == '__WXMSW__':
+                icon = wx.Icon(orpg.dirpath.dir_struct["icon"]+'grid.ico', wx.BITMAP_TYPE_ICO)
+                self.myeditor.SetIcon(icon)
+                del icon
+            wnd = self.get_design_panel(self.myeditor)
+            self.myeditor.panel = wnd
+            self.wnd = wnd
+            self.myeditor.Show(1)
+        else:
+            self.myeditor.Raise()
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+
+class d20skill(d20_char_child):
+    """ Node Handler for skill.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        tree = self.tree
+        icons = self.tree.icons
+        self.skills={}
+        for n in self.xml.findall('skill'):
+            name = n.get('name')
+            self.skills[name] = n
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+
+    def get_mod(self,name):
+        skill = self.skills[name]
+        stat = skill.get('stat')
+        ac = int(skill.get('armorcheck'))
+        if ac:
+            ac = self.char_hander.child_handlers['ac'].get_check_pen()
+        stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat)
+        rank = int(skill.get('rank'))
+        misc = int(skill.get('misc'))
+        total = stat_mod + rank + misc + ac
+        return total
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node: d20_char_child.on_ldclick(self,evt)
+        else:
+            skill = self.skills[name];
+            untrained = skill.get('untrained');
+            rank = skill.get('rank');
+            if untrained == "0" and rank == "0": txt = '%s Skill Check: Untrained' % (name)
+            else:
+                mod = self.get_mod(name)
+                if mod >= 0: mod1 = "+"
+                else: mod1 = ""
+                txt = '%s Skill Check: [1d20%s%s]' % (name, mod1, mod)
+            chat = self.chat
+            chat.ParsePost(txt,True,True)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,skill_grid,"Skills")
+        wnd.title = "Skills (edit)"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Skill</th><th>Key</th>
+                    <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>"""
+        for n in self.xml.findall('skill'):
+            name = n.get('name')
+            stat = n.get('stat')
+            rank = n.get('rank')
+            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
+            stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat))
+            misc = n.get('misc')
+            mod = str(self.get_mod(name))
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str = html_str + "<td>"+stat_mod+"</td><td>"+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+
+class d20ability(d20_char_child):
+    """ Node Handler for ability.   This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        self.abilities = {}
+        tree = self.tree
+        icons = tree.icons
+        for n in self.xml.findall('stat'):
+            name = n.get('abbr')
+            self.abilities[name] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if item == self.mytree_node:
+            d20_char_child.on_ldclick( self, evt )
+        else:
+            mod = self.get_mod( name )
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
+            chat.ParsePost( txt, True, True )
+
+    def get_mod(self,abbr):
+        score = int(self.abilities[abbr].get('base'))
+        mod = (score - 10) / 2
+        return mod
+
+    def set_score(self,abbr,score):
+        if score >= 0:
+            self.abilities[abbr].set("base",str(score))
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,abil_grid,"Abilities")
+        wnd.title = "Abilities (edit)"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th>
+                    <th>Base</th><th>Modifier</th></tr>""" 
+        for n in self.xml.findall('stat'):
+            name = n.get('name')
+            abbr = n.get('abbr')
+            base = n.get('base')
+            mod = str(self.get_mod(abbr))
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+
+class d20saves(d20_char_child):
+    """ Node Handler for saves.   This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        tree = self.tree
+        icons = self.tree.icons
+        self.saves={}
+        for n in self.xml.findall('save'):
+            name = n.get('name')
+            self.saves[name] = n
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+
+    def get_mod(self,name):
+        save = self.saves[name]
+        stat = save.get('stat')
+        stat_mod = self.char_hander.child_handlers['abilities'].get_mod(stat)
+        base = int(save.get('base'))
+        miscmod = int(save.get('miscmod'))
+        magmod = int(save.get('magmod'))
+        total = stat_mod + base + miscmod + magmod
+        return total
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node:
+            d20_char_child.on_ldclick(self,evt)
+
+        else:
+            mod = self.get_mod(name)
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
+            chat.ParsePost( txt, True, True )
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,save_grid,"Saves")
+        wnd.title = "Saves"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 ><th width='30%'>Save</th>
+                    <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th>
+                    <th>Misc</th><th>Total</th></tr>"""
+        for n in self.xml.findall('save'):
+            name = n.get('name')
+            stat = n.get('stat')
+            base = n.get('base')
+            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
+            stat_mod = str(self.char_hander.child_handlers['abilities'].get_mod(stat))
+            mag = n.get('magmod')
+            misc = n.get('miscmod')
+            mod = str(self.get_mod(name))
+            if mod >= 0:  mod1 = "+"
+            else: mod1 = ""
+            html_str = html_str + "<td>"+stat_mod+"</td><td>"+mag+"</td>"
+            html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+
+class d20general(d20_char_child):
+    """ Node Handler for general information.   This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,gen_grid,"General Information")
+        wnd.title = "General Info"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
+        for n in self.xml:
+            html_str += "<B>"+n.tag.capitalize() +":</B> "
+            html_str += n.text + ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def on_name_change(self,name):
+        self.char_hander.rename(name)
+
+    def get_char_name( self ):
+        return self.xml.find( 'name' ).text
+
+
+class d20classes(d20_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,class_panel,"Classes")
+        wnd.title = "Classes"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
+        for n in self.xml: html_str += n.get('name') + " ("+n.get('level')+"), "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        for n in self.xml.findall('class'):
+            lvl = n.get('level')
+            type = n.get('name')
+            if attr == "level": return lvl
+            elif attr == "class": return type
+
+
+class d20feats(d20_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,feat_panel,"Feats")
+        wnd.title = "Feats"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
+        for n in self.xml: html_str += n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+
+class d20spells(d20_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        for n in self.xml.findall( 'spell' ):
+            name = n.get('name')
+            self.spells[ name ] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if item == self.mytree_node:
+            d20_char_child.on_ldclick( self, evt )
+        else:
+            level = self.spells[ name ].get( 'level' )
+            descr = self.spells[ name ].get( 'desc' )
+            use = self.spells[ name ].get( 'used' )
+            memrz = self.spells[ name ].get( 'memrz' )
+            cname = self.char_hander.get_char_name()
+            use += '+1'
+            left = eval( '%s - ( %s )' % ( memrz, use ) )
+            if left < 0:
+                txt = '%s Tried to cast %s but has used all of them for today, "Please rest so I can cast more."' % ( cname, name )
+                self.chat.ParsePost( txt, True, False )
+            else:
+                txt = '%s casts %s ( level %s, "%s" )' % ( cname, name, level, descr )
+                self.chat.ParsePost( txt, True, False )
+                s = ''
+                if left != 1: s = 's'
+                txt = '%s can cast %s %d more time%s' % ( cname, name, left, s )
+                self.chat.ParsePost( txt, False, False )
+                self.spells[ name ].set( 'used', `eval( use )` )
+
+    def refresh_spells(self):
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        for n in self.xml.findall('spell'):
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+            self.spells[name]=n
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,spell_panel,"Spells")
+        wnd.title = "Spells"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Arcane Spells</th></tr><tr><td><br />"
+        for n in self.xml: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        return self.char_hander.get_char_lvl(attr)
+
+class d20divine(d20_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        for n in self.xml.findall( 'gift' ):
+            name = n.get('name')
+            self.spells[ name ] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['flask'], icons['flask'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if item == self.mytree_node:
+            d20_char_child.on_ldclick( self, evt )
+        else:
+            level = self.spells[ name ].get( 'level' )
+            descr = self.spells[ name ].get( 'desc' )
+            use = self.spells[ name ].get( 'used' )
+            memrz = self.spells[ name ].get( 'memrz' )
+            cname = self.char_hander.get_char_name()
+            use += '+1'
+            left = eval( '%s - ( %s )' % ( memrz, use ) )
+            if left < 0:
+                txt = '%s Tried to cast %s but has used all of them for today, "Please rest so I can cast more."' % ( cname, name )
+                self.chat.ParsePost( txt, True, False )
+            else:
+                txt = '%s casts %s ( level %s, "%s" )' % ( cname, name, level, descr )
+                self.chat.ParsePost( txt, True, False )
+                s = ''
+                if left != 1: s = 's'
+                txt = '%s can cast %s %d more time%s' % ( cname, name, left, s )
+                self.chat.ParsePost( txt, False, False )
+                self.spells[ name ].set( 'used', `eval( use )` )
+
+    def refresh_spells(self):
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        for n in self.xml.findall('gift'):
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['flask'],icons['flask'])
+            tree.SetPyData(new_tree_node,self)
+            self.spells[name]=n
+            
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,divine_panel,"Spells")
+        wnd.title = "Spells"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Divine Spells</th></tr><tr><td><br />"
+        for n in self.xml: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        return self.char_hander.get_char_lvl(attr)
+
+class d20powers(d20_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        #cpp = self.xml.findall( 'pp' ).get('current1')
+        self.powers = {}
+        tree = self.tree
+        icons = self.tree.icons
+        for n in self.xml.findall( 'power' ):
+            name = n.get('name')
+            self.powers[ name ] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if item == self.mytree_node:
+            d20_char_child.on_ldclick( self, evt )
+        else:
+            level = self.powers[ name ].get( 'level' )
+            descr = self.powers[ name ].get( 'desc' )
+            use = self.powers[ name ].get( 'used' )
+            points = self.powers[ name ].get( 'point' )
+            cpp = self.char_hander.get_char_pp('current1')
+            fre = self.char_hander.get_char_pp('free')
+            cname = self.char_hander.get_char_name()
+            if level == "0" and fre != "0":
+                left = eval('%s - ( %s )' % ( fre, points ))
+                numcast = eval('%s / %s' % (left, points))
+                if left < 0:
+                    txt = '%s doesnt have enough PowerPoints to use %s' % ( cname, name )
+                    self.chat.ParsePost( txt, True, False )
+                else:
+                    txt = '%s uses %s as a Free Talent ( level %s, "%s" )' % ( cname, name, level, descr )
+                    self.chat.ParsePost( txt, True, False )
+                    s = ''
+                    if left != 1: s = 's'
+                    txt = '%s can use %s %d more time%s' % ( cname, name, numcast, s )
+                    self.chat.ParsePost( txt, False, False )
+                    self.char_hander.set_char_pp('free', left)
+            else:
+                left = eval('%s - ( %s )' % ( cpp, points ))
+                numcast = eval('%s / %s' % (left, points))
+                if left < 0:
+                    txt = '%s doesnt have enough PowerPoints to use %s' % ( cname, name )
+                    self.chat.ParsePost( txt, True, False )
+                else:
+                    txt = '%s uses %s ( level %s, "%s" )' % ( cname, name, level, descr )
+                    self.chat.ParsePost( txt, True, False )
+                    s = ''
+                    if left != 1: s = 's'
+                    txt = '%s can use %s %d more time%s' % ( cname, name, numcast, s )
+                    txt += ' - And has %d more Powerpoints left' % (left)
+                    self.chat.ParsePost( txt, False, False )
+                    self.char_hander.set_char_pp('current1', left)
+
+    def refresh_powers(self):
+        self.powers = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        for n in self.xml.findall('power'):
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['questionhead'],icons['questionhead'])
+            tree.SetPyData(new_tree_node,self)
+            self.powers[name]=n
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,power_panel,"Powers")
+        wnd.title = "Powers"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Powers</th></tr><tr><td><br />"
+        for n in self.xml: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        return self.char_hander.get_char_lvl(attr)
+
+    def set_char_pp(self,attr,evl):
+        return self.char_hander.set_char_pp(attr,evl)
+
+    def get_char_pp( self, attr ):
+        return self.char_hander.get_char_pp(attr)
+
+class d20howto(d20_char_child):
+    """ Node Handler for hit points.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,howto_panel,"How To")
+        wnd.title = "How To"
+        return wnd
+
+class d20inventory(d20_char_child):
+    """ Node Handler for general information.   This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,inventory_grid,"Inventory")
+        wnd.title = "General Info"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
+        for n in self.xml:
+            html_str += "<B>"+n.tag.capitalize() +":</B> "
+            html_str += n.text + "<br />"
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def on_name_change(self,name):
+        self.char_hander.rename(name)
+
+    def get_char_name( self ):
+        return self.xml.find( 'name' ).text
+
+
+class d20hp(d20_char_child):
+    """ Node Handler for hit points.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,hp_panel,"Hit Points")
+        wnd.title = "Hit Points"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=4>Hit Points</th></tr>"
+        html_str += "<tr><th>Max:</th><td>"+self.xml.get('max')+"</td>"
+        html_str += "<th>Current:</th><td>"+self.xml.get('current')+"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+    def get_max_hp( self ):
+        try: return eval( self.xml.get( 'max' ) )
+        except: return 0
+    def get_current_hp( self ):
+        try: return eval( self.xml.get( 'current' ) )
+        except: return 0
+
+class d20pp(d20_char_child):
+    """ Node Handler for power points.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,pp_panel,"Power Points")
+        wnd.title = "Power Points"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=8>Power Points</th></tr>"
+        html_str += "<tr><th>Max:</th><td>"+self.xml.get('max1')+"</td>"
+        html_str += "<th>Current:</th><td>"+self.xml.get('current1')+"</td>"
+        html_str += "<th>Current Talents/day:</th><td>"+self.xml.get('free')+"</td>"
+        html_str += "<th>Max Talents/day:</th><td>"+self.xml.get('maxfree')+"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+    def get_char_pp( self, attr ):
+        pp = self.xml.get(attr)
+        return pp
+
+    def set_char_pp( self, attr, evl ):
+        pp = self.xml.set(attr, evl)
+        return pp
+
+class d20attacks(d20_char_child):
+    """ Node Handler for attacks.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+        node_list = self.xml.findall('melee')
+        self.melee = node_list[0]
+        node_list = self.xml.findall('ranged')
+        self.ranged = node_list[0]
+        self.refresh_weapons()
+
+    def refresh_weapons(self):
+        self.weapons = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('weapon')
+        for n in node_list:
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['sword'],icons['sword'])
+            tree.SetPyData(new_tree_node,self)
+            self.weapons[name]=n
+
+    def get_attack_data(self):
+        temp = self.melee
+        base = int(temp.get('base'))
+        base2 = int(temp.get('second'))
+        base3 = int(temp.get('third'))
+        base4 = int(temp.get('forth'))
+        base5 = int(temp.get('fifth'))
+        base6 = int(temp.get('sixth'))
+        misc = int(temp.get('misc'))
+        return (base, base2, base3, base4, base5, base6, misc)
+
+    # Replace any 'S' and 'D' in an attack modifier and damage modifier with the
+    # strength bonus or dexterity bonus respectively.
+    def process_mod_codes( self, attack, damage ):
+        str_mod = self.char_hander.child_handlers['abilities'].get_mod( 'Str' )
+        dex_mod = self.char_hander.child_handlers['abilities'].get_mod( 'Dex' )
+        str_re = re.compile('S')
+        dex_re = re.compile('D')
+        attack = str_re.sub( str( str_mod ), attack )
+        attack = dex_re.sub( str( dex_mod ), attack )
+        damage = str_re.sub( str( str_mod ), damage );
+        damage = dex_re.sub( str( dex_mod ), damage );
+        return (attack, damage)
+
+    # Decompose a damage string (e.g. longsword +1 sneak attack "1d8+S+1+1d6")
+    # into it's 4 seperate components <n>d<s>+<mods>+<extra dice>
+    def decompose_damage( self, damage ):
+        m = re.match( r"(?P<n>\d+)d(?P<s>\d+)(?P<mods>(\s*(\+|-|/|\*)\s*(\d+|D|S)*)*)(?P<extra>(\s*(\+|-)\s*\d+d\d+)?)\s*$", damage )
+        return (int(m.group('n')), int(m.group('s')), m.group('mods'), m.group('extra'))
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node:
+            d20_char_child.on_ldclick(self,evt)
+            #self.frame.add_panel(self.get_design_panel(self.frame.note))
+        else:
+            # Weapon/attack specific attack modifier (e.g. "S+1" for a longsword+1).
+            attack_mod_str = self.weapons[name].get('mod')
+
+            # Weapon/attack specific damage (e.g. "1d8+S+1" for a longsword+1).
+            damage_str = self.weapons[name].get('damage')
+            (num_damage_dice, damage_die, damage_mods, extra_damage) = self.decompose_damage( damage_str )
+
+            # Replace any 'S' and 'D' in attack_mod_str and damage_str with the
+            # strength bonus or dexterity bonus respectively.
+            (attack_mod_str, damage_mods) = self.process_mod_codes( attack_mod_str, damage_mods )
+
+            # Base attack bonuses for up to six attacks.
+            bab_attributes = ['base', 'second', 'third', 'forth', 'fifth', 'sixth']
+            bab = []
+            for b in bab_attributes: bab.append( int(self.melee.get( b )) )
+
+            # Misc. attack modifier to be applied to *all* attacks.
+            misc_mod = int(self.melee.get( 'misc' ));
+
+            # Attack modifier (except BAB)
+            attack_mod = misc_mod + eval( attack_mod_str )
+
+            # Total damage mod (except extra dice)
+            if damage_mods != '': damage_mod = eval( damage_mods )
+            else: damage_mod = 0
+
+            # Determine critical hit range and multiplier.
+            critical_str = self.weapons[name].get( 'critical' )
+            m = re.match( r"(((?P<min>\d+)-)?\d+/)?x(?P<mult>\d+)", critical_str )
+            crit_min = m.group( 'min' )
+            crit_mult = m.group( 'mult' )
+            if crit_min == None: crit_min = 20
+            else: crit_min = int( crit_min )
+            if crit_mult == None: crit_mult = 2
+            else: crit_mult = int( crit_mult )
+
+            # Simple matter to output all the attack/damage lines to the chat buffer.
+            for i in range( 0, len( bab ) ):
+                if bab[i] > 0 or i == 0:
+                    attack_roll_str = '[1d20%+d]' % (bab[i] + attack_mod)
+                    attack_roll_parsed = self.chat.ParseDice( attack_roll_str )
+                    damage_roll_str = '[%dd%d%+d%s]' % (num_damage_dice, damage_die, damage_mod, extra_damage)
+                    damage_roll_parsed = self.chat.ParseDice( damage_roll_str )
+                    txt = '%s (%s): %s ===> Damage: %s' \
+                          % (name, bab_attributes[i], attack_roll_parsed, damage_roll_parsed)
+                    self.chat.Post( txt, True, True )
+
+                    # Check for a critical hit
+                    d20_roll = int(re.match( r".*\[(\d+),.*", attack_roll_parsed ).group(1));
+                    dmg = damage_str
+                    if d20_roll >= crit_min:
+                        for j in range(1,crit_mult): dmg += '+%s' % damage_str
+                        txt = 'Critical hit? [1d20%+d] ===> Damage: [%dd%d%+d%s]' \
+                              % (bab[i] + attack_mod, crit_mult*num_damage_dice, \
+                                 damage_die, crit_mult*damage_mod, extra_damage)
+                        self.chat.ParsePost( txt, True, True )
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,attack_panel,"Attacks")
+        wnd.title = "Attacks"
+        return wnd
+
+    def get_char_lvl( self, attr ):
+        return self.char_hander.get_char_lvl(attr)
+
+    def tohtml(self):
+        babs = self.get_attack_data()
+        html_str = "<table width=100% border=1 ><tr ALIGN='center'><th BGCOLOR=#E9E9E9>Base Attack Bonus</th>"
+        html_str += '<td>%+d' % babs[0]
+        for i in range(1,6):
+            if babs[i] > 0: html_str += '/%+d' % babs[i]
+        html_str += "</td></tr><tr ALIGN='center' ><th BGCOLOR=#E9E9E9>Misc. Attack Bonus</th>"
+        html_str += '<td>%+d</td></tr></table>' % babs[6]
+
+        n_list = self.xml.findall('weapon')
+        for n in n_list:
+            (attack_mod, damage_mod) = self.process_mod_codes( n.get( 'mod' ), \
+                                                               n.get( 'damage' ) )
+            attack_mod = eval( attack_mod )
+            html_str += """<P><table width=100% border=1><tr BGCOLOR=#E9E9E9><th colspan=3>Weapon</th>
+                    <th>Attack</th><th >Damage</th></tr>""" \
+                      + "<tr ALIGN='center'><td colspan=3>" \
+                      + n.get('name') + "</td><td>"
+            html_str += '%+d</td><td>%s</td></tr>' % (attack_mod, damage_mod)
+            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Critical</th><th>Range</th><th>Weight</th>
+                        <th>Type</th><th>Size</th></tr>""" \
+                      + "<tr ALIGN='center'><td>" \
+                      + n.get( 'critical' ) + "</td><td>" \
+                      + n.get( 'range' ) + "</td><td>" \
+                      + n.get( 'weight' )+"</td><td>" \
+                      + n.get( 'type' ) + "</td><td>" \
+                      + n.get( 'size' ) + "</td></tr></table>"
+        return html_str
+
+class d20armor(d20_char_child):
+    """ Node Handler for ac.  This handler will be
+        created by d20char_handler.
+    """
+    def __init__(self,xml,tree_node,parent):
+        d20_char_child.__init__(self,xml,tree_node,parent)
+
+    def get_spell_failure(self):
+        return self.get_total('spellfailure')
+
+    def get_total_weight(self):
+        return self.get_total('weight')
+
+    def get_check_pen(self):
+        return self.get_total('checkpenalty')
+
+    def get_armor_class(self):
+        ac_total = 10
+        ac_total += self.get_total('bonus')
+        dex_mod = self.char_hander.child_handlers['abilities'].get_mod('Dex')
+        max_dex = self.get_max_dex()
+        if dex_mod < max_dex: ac_total += dex_mod
+        else: ac_total += max_dex
+        return ac_total
+
+    def get_max_dex(self):
+        armor_list = self.xml.findall('armor')
+        dex = 10
+        for a in armor_list:
+            temp = int(a.get("maxdex"))
+            if temp < dex: dex = temp
+        return dex
+
+    def get_total(self,attr):
+        armor_list = self.xml.findall('armor')
+        total = 0
+        for a in armor_list: total += int(a.get(attr))
+        return total
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,ac_panel,"Armor")
+        wnd.title = "Armor"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>AC</th>
+                    <th>Check Penalty</th><th >Spell Failure</th><th>Max Dex</th><th>Total Weight</th></tr>"""
+        html_str += "<tr ALIGN='center' ><td>"+str(self.get_armor_class())+"</td>"
+        html_str += "<td>"+str(self.get_check_pen())+"</td>"
+        html_str += "<td>"+str(self.get_spell_failure())+"</td>"
+        html_str += "<td>"+str(self.get_max_dex())+"</td>"
+        html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>"
+        for n in self.xml:
+            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th colspan=3>Armor</th>
+                    <th>Type</th><th >Bonus</th></tr>"""
+            html_str += "<tr ALIGN='center' ><td  colspan=3>"+n.get('name')+"</td>"
+            html_str += "<td>"+n.get('type')+"</td>"
+            html_str += "<td>"+n.get('bonus')+"</td></tr>"
+            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Check Penalty</th><th>Spell Failure</th>
+                        <th>Max Dex</th><th>Speed</th><th>Weight</th></tr>"""
+            html_str += "<tr ALIGN='center'><td>"+n.get('checkpenalty')+"</td>"
+            html_str += "<td>"+n.get('spellfailure')+"</td>"
+            html_str += "<td>"+n.get('maxdex')+"</td>"
+            html_str += "<td>"+n.get('speed')+"</td>"
+            html_str += "<td>"+n.get('weight')+"</td></tr></table>"
+        return html_str
+
+
+########################
+##  d20 char windows
+########################
+
+class base_panel(wx.Panel):
+    def __init__(self, parent):
+        wx.Panel.__init__(self, parent, -1)
+
+        #self.build_ctrls()
+        self.Bind(wx.EVT_SIZE, self.on_size)
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        #self.splitter.SetDimensions(0,0,s[0],s[1])
+
+class outline_panel(wx.Panel):
+    def __init__(self, parent, handler, wnd, txt,):
+        wx.Panel.__init__(self, parent, -1)
+        self.panel = wnd(self,handler)
+        self.outline = wx.StaticBox(self,-1,txt)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.panel.SetDimensions(20,20,s[0]-40,s[1]-40)
+        self.outline.SetDimensions(5,5,s[0]-10,s[1]-10)
+
+class char_panel(wx.ScrolledWindow):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'TWO')
+        wx.ScrolledWindow.__init__(self, parent, -1,style=wx.VSCROLL | wx.SUNKEN_BORDER  )
+        self.height = 1200
+        self.SetScrollbars(10, 10,80, self.height/10)
+        self.main_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.panels = {}
+        keys = handler.child_handlers.keys()
+        for k in keys: self.panels[k] = handler.child_handlers[k].get_design_panel(self, [k])
+        self.sub_sizer = wx.BoxSizer(wx.VERTICAL)
+        self.sub_sizer2 = wx.BoxSizer(wx.VERTICAL)
+        self.sub_sizer.Add(self.panels['general'], 1, wx.EXPAND)
+        self.sub_sizer.Add(self.panels['abilities'], 1, wx.EXPAND)
+
+        self.sub_sizer.Add(self.panels['attacks'], 2, wx.EXPAND)
+        self.sub_sizer.Add(self.panels['ac'], 1, wx.EXPAND)
+        self.sub_sizer.Add(self.panels['spells'], 1, wx.EXPAND)
+
+        self.sub_sizer2.Add(self.panels['classes'], 2, wx.EXPAND)
+        self.sub_sizer2.Add(self.panels['hp'], 1, wx.EXPAND)
+        self.sub_sizer2.Add(self.panels['pp'], 1, wx.EXPAND)
+        self.sub_sizer2.Add(self.panels['saves'], 2, wx.EXPAND)
+
+        self.sub_sizer2.Add(self.panels['feats'], 2, wx.EXPAND)
+        self.sub_sizer2.Add(self.panels['powers'], 2, wx.EXPAND)
+        self.sub_sizer2.Add(self.panels['skills'], 3, wx.EXPAND)
+
+        self.main_sizer.Add(self.sub_sizer,   1, wx.EXPAND)
+        self.main_sizer.Add(self.sub_sizer2,   1, wx.EXPAND)
+        self.panels['abilities'].panel.char_wnd = self
+        self.SetSizer(self.main_sizer)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+
+
+    def on_size(self,evt):
+        s = self.GetClientSizeTuple()
+        self.SetScrollbars(10, 10,s[0]/10, self.height/10)
+        dc = wx.ClientDC(self)
+        x = dc.DeviceToLogicalX(0)
+        y = dc.DeviceToLogicalY(0)
+        self.main_sizer.SetDimension(x,y,s[0],self.height)
+        evt.Skip()
+
+    def refresh_data(self):
+        self.panels['saves'].panel.refresh_data()
+        self.panels['skills'].panel.refresh_data()
+        self.panels['attacks'].panel.refresh_data()
+        self.panels['powers'].panel.refresh_data()
+        self.panels['spells'].panel.refresh_data()
+
+HOWTO_MAX = wx.NewId()
+
+class howto_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        pname = handler.xml.set("name", 'How To')
+        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
+        self.sizer.AddMany([ (wx.StaticText(self, -1, 
+                              handler.xml.find('howto').text), 
+                              0, wx.ALIGN_CENTER_VERTICAL),
+                            ])
+        self.sizer.AddGrowableCol(1)
+        self.SetSizer(self.sizer)
+
+
+HP_CUR = wx.NewId()
+HP_MAX = wx.NewId()
+
+class hp_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        pname = handler.xml.set("name", 'HitPoints')
+        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
+        self.xml = handler.xml
+        self.sizer.AddMany([ (wx.StaticText(self, -1, "HP Current:"),   0, wx.ALIGN_CENTER_VERTICAL),
+                 (wx.TextCtrl(self, HP_CUR, self.xml.get('current')),   0, wx.EXPAND),
+                 (wx.StaticText(self, -1, "HP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
+                 (wx.TextCtrl(self, HP_MAX, self.xml.get('max')),  0, wx.EXPAND),
+                 ])
+        self.sizer.AddGrowableCol(1)
+        self.SetSizer(self.sizer)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_MAX)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_CUR)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == HP_CUR: self.xml.set('current',evt.GetString())
+        elif id == HP_MAX: self.xml.set('max',evt.GetString())
+
+    def on_size(self,evt):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+PP_CUR = wx.NewId()
+PP_MAX = wx.NewId()
+PP_FRE = wx.NewId()
+PP_MFRE = wx.NewId()
+
+class pp_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        pname = handler.xml.set("name", 'PowerPoints')
+        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
+        self.xml = handler.xml
+
+        self.sizer.AddMany([ (wx.StaticText(self, -1, "PP Current:"),   0, wx.ALIGN_CENTER_VERTICAL),
+                 (wx.TextCtrl(self, PP_CUR, self.xml.get('current1')),   0, wx.EXPAND),
+                 (wx.StaticText(self, -1, "PP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
+                 (wx.TextCtrl(self, PP_MAX, self.xml.get('max1')),  0, wx.EXPAND),
+                 (wx.StaticText(self, -1, "Current Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL),
+                 (wx.TextCtrl(self, PP_FRE, self.xml.get('free')),  0, wx.EXPAND),
+                 (wx.StaticText(self, -1, "Max Free Talants per day:"), 0, wx.ALIGN_CENTER_VERTICAL),
+                 (wx.TextCtrl(self, PP_MFRE, self.xml.get('maxfree')),  0, wx.EXPAND),
+                 ])
+        self.sizer.AddGrowableCol(1)
+        self.SetSizer(self.sizer)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MAX)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_CUR)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_FRE)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MFRE)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == PP_CUR: self.xml.set('current1',evt.GetString())
+        elif id == PP_MAX: self.xml.set('max1',evt.GetString())
+        elif id == PP_FRE: self.xml.set('free',evt.GetString())
+        elif id == PP_MFRE: self.xml.set('maxfree',evt.GetString())
+
+    def on_size(self,evt):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+
+class gen_grid(wx.grid.Grid):
+    """grid for gen info"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'General')
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        n_list = handler.xml[:]
+        self.CreateGrid(len(n_list),2)
+        self.SetRowLabelSize(0)
+        self.SetColLabelSize(0)
+        self.n_list = n_list
+        i = 0
+        for i in range(len(n_list)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        self.n_list[row].text = value
+        if row==0: self.handler.on_name_change(value)
+
+    def refresh_row(self,rowi):
+        self.SetCellValue(rowi,0,self.n_list[rowi].tag)
+        self.SetReadOnly(rowi,0)
+        self.SetCellValue(rowi,1,self.n_list[rowi].text)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols):  self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+class inventory_grid(wx.grid.Grid):
+    """grid for gen info"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Money and Inventory')
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        n_list = handler.xml[:]
+        self.CreateGrid(len(n_list),2)
+        self.SetRowLabelSize(0)
+        self.SetColLabelSize(0)
+        self.n_list = n_list
+        i = 0
+        for i in range(len(n_list)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        self.n_list[row].text = value
+        if row==0: self.handler.on_name_change(value)
+
+    def refresh_row(self,rowi):
+        self.SetCellValue(rowi,0,self.n_list[rowi].tag)
+        self.SetReadOnly(rowi,0)
+        self.SetCellValue(rowi,1,self.n_list[rowi].text)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+class abil_grid(wx.grid.Grid):
+    """grid for abilities"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Stats')
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        stats = handler.xml.findall('stat')
+        self.CreateGrid(len(stats),3)
+        self.SetRowLabelSize(0)
+        col_names = ['Ability','Score','Modifier']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.stats = stats
+        i = 0
+        for i in range(len(stats)): self.refresh_row(i)
+        self.char_wnd = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            self.stats[row].set('base',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+        if self.char_wnd: self.char_wnd.refresh_data()
+
+    def refresh_row(self,rowi):
+        s = self.stats[rowi]
+        name = s.get('name')
+        abbr = s.get('abbr')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        self.SetCellValue(rowi,1,s.get('base'))
+        self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr)))
+        self.SetReadOnly(rowi,2)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()-1): self.refresh_row(r)
+
+
+class save_grid(wx.grid.Grid):
+    """grid for saves"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Saves')
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        saves = handler.xml.findall('save')
+        self.stats = handler.char_hander.child_handlers['abilities']
+        self.CreateGrid(len(saves),7)
+        self.SetRowLabelSize(0)
+        col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.saves = saves
+        i = 0
+        for i in range(len(saves)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col == 2: self.saves[row].set('base',value)
+            elif col == 4: self.saves[row].set('magmod',value)
+            elif col == 4: self.saves[row].set('miscmod',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+
+    def refresh_row(self,rowi):
+        s = self.saves[rowi]
+        name = s.get('name')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        stat = s.get('stat')
+        self.SetCellValue(rowi,1,stat)
+        self.SetReadOnly(rowi,1)
+        self.SetCellValue(rowi,2,s.get('base'))
+        self.SetCellValue(rowi,3,str(self.stats.get_mod(stat)))
+        self.SetReadOnly(rowi,3)
+        self.SetCellValue(rowi,4,s.get('magmod'))
+        self.SetCellValue(rowi,5,s.get('miscmod'))
+        mod = str(self.handler.get_mod(name))
+        self.SetCellValue(rowi,6,mod)
+        self.SetReadOnly(rowi,6)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()): self.refresh_row(r)
+
+
+class skill_grid(wx.grid.Grid):
+    """ panel for skills """
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Skills')
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        skills = handler.xml.findall('skill')
+        self.stats = handler.char_hander.child_handlers['abilities']
+        self.CreateGrid(len(skills),6)
+        self.SetRowLabelSize(0)
+        col_names = ['Skill','Key','Rank','Abil','Misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        rowi = 0
+        self.skills = skills
+        for i in range(len(skills)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col == 2: self.skills[row].set('rank',value)
+            elif col == 4: self.skills[row].set('misc',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+
+    def refresh_row(self,rowi):
+        s = self.skills[rowi]
+        name = s.get('name')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        stat = s.get('stat')
+        self.SetCellValue(rowi,1,stat)
+        self.SetReadOnly(rowi,1)
+        self.SetCellValue(rowi,2,s.get('rank'))
+        self.SetCellValue(rowi,3,str(self.stats.get_mod(stat)))
+        self.SetReadOnly(rowi,3)
+        self.SetCellValue(rowi,4,s.get('misc'))
+        mod = str(self.handler.get_mod(name))
+        self.SetCellValue(rowi,5,mod)
+        self.SetReadOnly(rowi,5)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()): self.refresh_row(r)
+
+
+class feat_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Feats')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Feat"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Feat"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+
+        n_list = handler.xml[:]
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),2,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"Feat")
+        self.grid.SetColLabelValue(1,"Type")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+        self.SetSizer(self.sizer)
+
+    def refresh_row(self,i):
+        feat = self.n_list[i]
+        name = feat.get('name')
+        type = feat.get('type')
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,type)
+        self.grid.SetReadOnly(i,1)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.removeChild(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20feats.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('feat')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('feat')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+
+class spell_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Arcane Spells')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        n_list = handler.xml[:]
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),4,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"No.")
+        self.grid.SetColLabelValue(1,"Lvl")
+        self.grid.SetColLabelValue(2,"Spell")
+        self.grid.SetColLabelValue(3,"Desc")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 0: self.n_list[row].set('memrz',value)
+
+    def refresh_row(self,i):
+        spell = self.n_list[i]
+        memrz = spell.get('memrz')
+        name = spell.get('name')
+        type = spell.get('desc')
+        level = spell.get('level')
+        self.grid.SetCellValue(i,0,memrz)
+        self.grid.SetCellValue(i,2,name)
+        self.grid.SetReadOnly(i,2)
+        self.grid.SetCellValue(i,3,type)
+        self.grid.SetReadOnly(i,3)
+        self.grid.SetCellValue(i,1,level)
+        self.grid.SetReadOnly(i,1)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.removeChild(self.n_list[i])
+                self.handler.refresh_spells()
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20spells.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('spell')
+        opts = []
+        for f in f_list: opts.append("(" + f.get('level') + ")" + f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('spell')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_spells()
+        dlg.Destroy()
+
+    def on_refresh_spells( self, evt ):
+        f_list = self.xml.findall('spell')
+        for spell in f_list: spell.set( 'used', '0' )
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        self.grid.SetColSize(0,w * 0.10)
+        self.grid.SetColSize(1,w * 0.10)
+        self.grid.SetColSize(2,w * 0.30)
+        self.grid.SetColSize(3,w * 0.50)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+class divine_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Divine Spells')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        n_list = handler.xml[:]
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),4,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"No.")
+        self.grid.SetColLabelValue(1,"Lvl")
+        self.grid.SetColLabelValue(2,"Spell")
+        self.grid.SetColLabelValue(3,"Desc")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 0: self.n_list[row].set('memrz',value)
+
+
+    def refresh_row(self,i):
+        spell = self.n_list[i]
+        memrz = spell.get('memrz')
+        name = spell.get('name')
+        type = spell.get('desc')
+        level = spell.get('level')
+        self.grid.SetCellValue(i,0,memrz)
+        self.grid.SetCellValue(i,2,name)
+        self.grid.SetReadOnly(i,2)
+        self.grid.SetCellValue(i,3,type)
+        self.grid.SetReadOnly(i,3)
+        self.grid.SetCellValue(i,1,level)
+        self.grid.SetReadOnly(i,1)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+                self.handler.refresh_spells()
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20divine.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('gift')
+        opts = []
+        for f in f_list: opts.append("(" + f.get('level') + ")" + f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('gift')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_spells()
+        dlg.Destroy()
+
+    def on_refresh_spells( self, evt ):
+        f_list = self.xml.findall('gift')
+        for spell in f_list: spell.set( 'used', '0' )
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        self.grid.SetColSize(0,w * 0.10)
+        self.grid.SetColSize(1,w * 0.10)
+        self.grid.SetColSize(2,w * 0.30)
+        self.grid.SetColSize(3,w * 0.50)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+
+class power_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Pionic Powers')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Power"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Power"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 30, "Refresh Powers"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.Bind(wx.EVT_BUTTON, self.on_refresh_powers, id=30)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        n_list = handler.xml[:]
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),5,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"PP")
+        self.grid.SetColLabelValue(1,"Lvl")
+        self.grid.SetColLabelValue(2,"Power")
+        self.grid.SetColLabelValue(3,"Desc")
+        self.grid.SetColLabelValue(4,"Type")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.refresh_data()
+        self.temp_dom = None
+        self.SetSizer(self.sizer)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+
+    def refresh_row(self,i):
+        power = self.n_list[i]
+        point = power.get('point')
+        name = power.get('name')
+        type = power.get('desc')
+        test = power.get('test')
+        level = power.get('level')
+        self.grid.SetCellValue(i,0,point)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,level)
+        self.grid.SetReadOnly(i,1)
+        self.grid.SetCellValue(i,2,name)
+        self.grid.SetReadOnly(i,2)
+        self.grid.SetCellValue(i,3,type)
+        self.grid.SetReadOnly(i,3)
+        self.grid.SetCellValue(i,4,test)
+        self.grid.SetReadOnly(i,4)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.removeChild(self.n_list[i])
+                self.handler.refresh_powers()
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20powers.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('power')
+        opts = []
+        for f in f_list: opts.append("(" + f.get('level') + ") - " + f.get('name') + " - " + f.get('test'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Power','Powers',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('power')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_powers()
+        dlg.Destroy()
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+                self.n_list = self.xml.findall('weapon')
+                self.handler.refresh_weapons()
+
+    def on_refresh_powers( self, evt ):
+        mfre = self.handler.get_char_pp('maxfree')
+        mpp = self.handler.get_char_pp('max1')
+        self.handler.set_char_pp( 'free', mfre )
+        self.handler.set_char_pp( 'current1', mpp )
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        self.grid.SetColSize(0,w * 0.05)
+        self.grid.SetColSize(1,w * 0.05)
+        self.grid.SetColSize(2,w * 0.30)
+        self.grid.SetColSize(3,w * 0.30)
+        self.grid.SetColSize(4,w * 0.30)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+class attack_grid(wx.grid.Grid):
+    """grid for attacks"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Melee')
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.parent = parent
+        self.handler = handler
+        self.babs = self.handler.melee
+        self.CreateGrid(1,7)
+        self.SetRowLabelSize(0)
+        col_names = ['base','base 2','base 3','base 4','base 5','base 6','misc']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.refresh_data()
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try: int(value)
+        except:
+            value = "0"
+            self.SetCellValue( row, col, value )
+        attribs = ['base','second','third','forth','fifth','sixth','misc']
+        self.babs.set( attribs[col], value )
+        self.parent.refresh_data()
+
+    def refresh_data(self):
+        attack_mods = self.handler.get_attack_data()
+        for i in range(0,7): self.SetCellValue( 0, i, str(attack_mods[i]) )
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/cols
+        for i in range(0,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+class weapon_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Weapons')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Weapon"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Weapon"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        n_list = handler.xml.findall('weapon')
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.handler = handler
+        self.grid.CreateGrid(len(n_list),8,1)
+        self.grid.SetRowLabelSize(0)
+        col_names = ['Name','damage','mod','critical','type','weight','range','size']
+        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
+        self.refresh_data()
+        self.temp_dom = None
+        self.SetSizer(self.sizer)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 0:
+            self.n_list[row].set('name',value)
+            self.handler.refresh_weapons();
+        else: self.n_list[row].set(self.grid.GetColLabelValue(col),value)
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        name = n.get('name')
+        mod = n.get('mod')
+        ran = n.get('range')
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetCellValue(i,1,n.get('damage'))
+        self.grid.SetCellValue(i,2,mod)
+        self.grid.SetCellValue(i,3,n.get('critical'))
+        self.grid.SetCellValue(i,4,n.get('type'))
+        self.grid.SetCellValue(i,5,n.get('weight'))
+        self.grid.SetCellValue(i,6,ran)
+        self.grid.SetCellValue(i,7,n.get('size') )
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+                self.n_list = self.xml.findall('weapon')
+                self.handler.refresh_weapons()
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20weapons.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('weapon')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('weapon')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_weapons()
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols+1)
+        self.grid.SetColSize(0,col_w*2)
+        for i in range(1,cols): self.grid.SetColSize(i,col_w)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+
+class attack_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Melee')
+        wx.Panel.__init__(self, parent, -1)
+
+        self.a_grid = attack_grid(self, handler)
+        self.w_panel = weapon_panel(self, handler)
+        self.sizer = wx.BoxSizer(wx.VERTICAL)
+        self.sizer.Add(self.a_grid, 1, wx.EXPAND)
+        self.sizer.Add(self.w_panel, 2, wx.EXPAND)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.SetSizer(self.sizer)
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+    def refresh_data(self):
+        self.w_panel.refresh_data()
+        self.a_grid.refresh_data()
+
+
+class ac_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Armor')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Armor"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Armor"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.xml = handler.xml
+        n_list = handler.xml[:]
+        self.n_list = n_list
+        col_names = ['Armor','bonus','maxdex','cp','sf','weight','speed','type']
+        self.grid.CreateGrid(len(n_list),len(col_names),1)
+        self.grid.SetRowLabelSize(0)
+        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
+        self.atts =['name','bonus','maxdex','checkpenalty','spellfailure','weight','speed','type']
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+        self.SetSizer(self.sizer)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col >= 1 and col <= 5:
+            try:
+                int(value)
+                self.n_list[row].set(self.atts[col],value)
+            except: self.grid.SetCellValue(row,col,"0")
+        else: self.n_list[row].set(self.atts[col],value)
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        for y in range(len(self.atts)):
+            self.grid.SetCellValue(i,y,n.get(self.atts[y]))
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20armor.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('armor')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('armor')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols+2)
+        self.grid.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.grid.SetColSize(i,col_w)
+
+
+class class_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Class')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(wx.Button(self, 10, "Remove Class"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, 20, "Add Class"), 1, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+
+        n_list = handler.xml[:]
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),2,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"Class")
+        self.grid.SetColLabelValue(1,"Level")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        try:
+            int(value)
+            self.n_list[row].set('level',value)
+        except: self.grid.SetCellValue(row,col,"1")
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        name = n.get('name')
+        level = n.get('level')
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,level)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(orpg.dirpath.dir_struct["d20"]+"d20classes.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('class')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(XML(tostring(f_list[i])))
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('class')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
--- a/orpg/gametree/nodehandlers/dnd35.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/dnd35.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2035 +1,2035 @@
-from core import *
-from containers import *
-from string import *  #a 1.6003
+from core import *
+from containers import *
+from string import *  #a 1.6003
 from inspect import *  #a 1.9001
 from orpg.dirpath import dir_struct
 from xml.etree.ElementTree import parse
-dnd35_EXPORT = wx.NewId()
-
-############Global Stuff##############
-
-HP_CUR = wx.NewId()
-HP_MAX = wx.NewId()
-
-def getRoot (node): # a 1.5002 this whole function is new.
-    root = None
-    target = node
-    while target != None:
-        root = target
-        target = target.hparent
-    return root
-
-#a 1.6 convinience function added safeGetAttr
-def safeGetAttr(node, label, defRetV=None):
-    cna=node.attrib
+dnd35_EXPORT = wx.NewId()
+
+############Global Stuff##############
+
+HP_CUR = wx.NewId()
+HP_MAX = wx.NewId()
+
+def getRoot (node): # a 1.5002 this whole function is new.
+    root = None
+    target = node
+    while target != None:
+        root = target
+        target = target.hparent
+    return root
+
+#a 1.6 convinience function added safeGetAttr
+def safeGetAttr(node, label, defRetV=None):
+    cna=node.attrib
     for key in cna:
-        if key == label: return cna[key]
-    return defRetV
-#a 1.6... safeGetAttr end.
-
-########End of My global Stuff########
-########Start of Main Node Handlers#######
-class dnd35char_handler(container_handler):
-    """ Node handler for a dnd35 charactor
-        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.Version = "v1.000" #a 1.6000 general documentation, usage.
-        print "dnd35char_handler - version:",self.Version #m 1.6000
-        self.hparent = None #a 1.5002 allow ability to run up tree, this is the
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('general','GeneralInformation',dnd35general,'gear')
-        self.new_child_handler('inventory','MoneyAndInventory',dnd35inventory,'money')
-        self.new_child_handler('character','ClassesAndStats',dnd35classnstats,'knight')
-        self.new_child_handler('snf','SkillsAndFeats',dnd35skillsnfeats,'book')
-        self.new_child_handler('combat','Combat',dnd35combat,'spears')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-    def tohtml(self):
-        html_str = "<table><tr><td colspan=2 >"
-        html_str += self.general.tohtml()+"</td></tr>"
-        html_str += "<tr><td width='50%' valign=top >"+self.abilities.tohtml()
-        html_str += "<P>" + self.saves.tohtml()
-        html_str += "<P>" + self.attacks.tohtml()
-        html_str += "<P>" + self.ac.tohtml()
-        html_str += "<P>" + self.feats.tohtml()
-        html_str += "<P>" + self.inventory.tohtml() +"</td>"
-        html_str += "<td width='50%' valign=top >"+self.classes.tohtml()
-        html_str += "<P>" + self.hp.tohtml()
-        html_str += "<P>" + self.skills.tohtml() +"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-    def about(self):
-        """html_str = "<img src='" + dir_struct["icon"]
-        html_str += "dnd3e_logo.gif' ><br /><b>dnd35 Character Tool "
-        html_str += self.Version+"</b>" #m 1.6000 was hard coded.
-        html_str += "<br />by Dj Gilcrease<br />digitalxero@gmail.com"
+        if key == label: return cna[key]
+    return defRetV
+#a 1.6... safeGetAttr end.
+
+########End of My global Stuff########
+########Start of Main Node Handlers#######
+class dnd35char_handler(container_handler):
+    """ Node handler for a dnd35 charactor
+        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.Version = "v1.000" #a 1.6000 general documentation, usage.
+        print "dnd35char_handler - version:",self.Version #m 1.6000
+        self.hparent = None #a 1.5002 allow ability to run up tree, this is the
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('general','GeneralInformation',dnd35general,'gear')
+        self.new_child_handler('inventory','MoneyAndInventory',dnd35inventory,'money')
+        self.new_child_handler('character','ClassesAndStats',dnd35classnstats,'knight')
+        self.new_child_handler('snf','SkillsAndFeats',dnd35skillsnfeats,'book')
+        self.new_child_handler('combat','Combat',dnd35combat,'spears')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+    def tohtml(self):
+        html_str = "<table><tr><td colspan=2 >"
+        html_str += self.general.tohtml()+"</td></tr>"
+        html_str += "<tr><td width='50%' valign=top >"+self.abilities.tohtml()
+        html_str += "<P>" + self.saves.tohtml()
+        html_str += "<P>" + self.attacks.tohtml()
+        html_str += "<P>" + self.ac.tohtml()
+        html_str += "<P>" + self.feats.tohtml()
+        html_str += "<P>" + self.inventory.tohtml() +"</td>"
+        html_str += "<td width='50%' valign=top >"+self.classes.tohtml()
+        html_str += "<P>" + self.hp.tohtml()
+        html_str += "<P>" + self.skills.tohtml() +"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+    def about(self):
+        """html_str = "<img src='" + dir_struct["icon"]
+        html_str += "dnd3e_logo.gif' ><br /><b>dnd35 Character Tool "
+        html_str += self.Version+"</b>" #m 1.6000 was hard coded.
+        html_str += "<br />by Dj Gilcrease<br />digitalxero@gmail.com"
         return html_str"""
         text = 'dnd35 Character Tool' + self.Version +'\n'
         text += 'by Dj Gilcrease digitalxero@gmail.com'
-        return text
-
-########Core Handlers are done now############
-########Onto the Sub Nodes########
-##Primary Sub Node##
-
-class outline_panel(wx.Panel):
-    def __init__(self, parent, handler, wnd, txt,):
-        self.parent = parent #a 1.9001
-        wx.Panel.__init__(self, parent, -1)
-        self.panel = wnd(self,handler)
-        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self,-1,txt), wx.VERTICAL)
-
-        self.sizer.Add(self.panel, 1, wx.EXPAND)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-class dnd35_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd35general(dnd35_char_child):
-    """ Node Handler for general information.   This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.general = self  #a 1.5002
-        self.charName = self.get_char_name() # a 1.5002 make getting name easier.
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,gen_grid,"General Information")
-        wnd.title = "General Info"
-        return wnd
-
-    def tohtml(self):
-        n_list = self.xml.getchildren()
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
-        for n in n_list:
-            html_str += "<B>"+n.tag.capitalize() +":</B> "
-            html_str += n.text + ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def on_name_change(self,name):
-        self.char_hander.rename(name)
-        #o 1.5002 self.char_hander = parent in this case.
-        self.charName = name  #a 1.5002 make getting name easier.
-
-    def get_char_name( self ):
-        node = self.xml.findall( 'name' )[0]
-        return node.text
-
-class gen_grid(wx.grid.Grid):
-    """grid for gen info"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'General')
-        self.hparent = handler #a 1.5002 allow ability to run up tree, needed
-        # a 1.5002 parent is functional parent, not invoking parent.
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        n_list = handler.xml.getchildren()
-        self.CreateGrid(len(n_list),2)
-        self.SetRowLabelSize(0)
-        self.SetColLabelSize(0)
-        self.n_list = n_list
-        i = 0
-        for i in range(len(n_list)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        t_node = self.n_list[row]
-        t_node.text = value
-        if row==0: self.handler.on_name_change(value)
+        return text
+
+########Core Handlers are done now############
+########Onto the Sub Nodes########
+##Primary Sub Node##
+
+class outline_panel(wx.Panel):
+    def __init__(self, parent, handler, wnd, txt,):
+        self.parent = parent #a 1.9001
+        wx.Panel.__init__(self, parent, -1)
+        self.panel = wnd(self,handler)
+        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self,-1,txt), wx.VERTICAL)
+
+        self.sizer.Add(self.panel, 1, wx.EXPAND)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+class dnd35_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd35general(dnd35_char_child):
+    """ Node Handler for general information.   This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.general = self  #a 1.5002
+        self.charName = self.get_char_name() # a 1.5002 make getting name easier.
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,gen_grid,"General Information")
+        wnd.title = "General Info"
+        return wnd
+
+    def tohtml(self):
+        n_list = self.xml.getchildren()
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
+        for n in n_list:
+            html_str += "<B>"+n.tag.capitalize() +":</B> "
+            html_str += n.text + ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def on_name_change(self,name):
+        self.char_hander.rename(name)
+        #o 1.5002 self.char_hander = parent in this case.
+        self.charName = name  #a 1.5002 make getting name easier.
+
+    def get_char_name( self ):
+        node = self.xml.findall( 'name' )[0]
+        return node.text
+
+class gen_grid(wx.grid.Grid):
+    """grid for gen info"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'General')
+        self.hparent = handler #a 1.5002 allow ability to run up tree, needed
+        # a 1.5002 parent is functional parent, not invoking parent.
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        n_list = handler.xml.getchildren()
+        self.CreateGrid(len(n_list),2)
+        self.SetRowLabelSize(0)
+        self.SetColLabelSize(0)
+        self.n_list = n_list
+        i = 0
+        for i in range(len(n_list)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        t_node = self.n_list[row]
+        t_node.text = value
+        if row==0: self.handler.on_name_change(value)
+
+    def refresh_row(self, rowi):
+        self.SetCellValue(rowi, 0, self.n_list[rowi].tag)
+        self.SetReadOnly(rowi, 0)
+        self.SetCellValue(rowi, 1, self.n_list[rowi].text)
+        self.AutoSizeColumn(1)
+
+class dnd35inventory(dnd35_char_child):
+    """ Node Handler for general information.   This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.6009
+        self.root.inventory = self #a 1.6009
+
+    def get_design_panel(self,parent):
+        wnd = inventory_pane(parent, self) #outline_panel(parent,self,inventory_grid,"Inventory")
+        wnd.title = "Inventory"
+        return wnd
+
+    def tohtml(self):
+        n_list = self.xml.getchildren()
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Inventory</th></tr><tr><td>"
+        for n in n_list:
+            html_str += "<B>"+n.tag.capitalize() +":</B> "
+            html_str += n.text + "<br />"
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+class inventory_pane(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, wx.ID_ANY)
+        self.n_list = handler.xml.getchildren()
+        self.autosize = False
+        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Inventory"), wx.VERTICAL)
+        self.lang = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Languages")
+        self.gear = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Gear")
+        self.magic = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Magic")
+        self.grid = wx.grid.Grid(self, wx.ID_ANY, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.grid.CreateGrid(len(self.n_list)-3,2)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelSize(0)
+        for i in xrange(len(self.n_list)): self.refresh_row(i)
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(self.grid, 1, wx.EXPAND)
+        sizer1.Add(self.lang, 1, wx.EXPAND)
+        self.sizer.Add(sizer1, 0, wx.EXPAND)
+        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer2.Add(self.gear, 1, wx.EXPAND)
+        sizer2.Add(self.magic, 1, wx.EXPAND)
+        self.sizer.Add(sizer2, 1, wx.EXPAND)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.lang)
+        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.gear)
+        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.magic)
+        self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.on_cell_change, self.grid)
+
+    def fillTextNode(self, name, value):
+        if name == 'Languages': self.lang.SetValue(value)
+        elif name == 'Gear': self.gear.SetValue(value)
+        elif name == 'Magic': self.magic.SetValue(value)
+
+    def onTextNodeChange(self, event):
+        id = event.GetId()
+        if id == self.gear.GetId():
+            nodeName = 'Gear'
+            value = self.gear.GetValue()
+        elif id == self.magic.GetId():
+            nodeName = 'Magic'
+            value = self.magic.GetValue()
+        elif id == self.lang.GetId():
+            nodeName = 'Languages'
+            value = self.lang.GetValue()
+        for node in self.n_list:
+            if node._get_tagName() == nodeName: node.text = value
+
+    def saveMoney(self, row, col):
+        value = self.grid.GetCellValue(row, col)
+        self.n_list[row].text = value
+
+    def on_cell_change(self, evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        self.grid.AutoSizeColumn(col)
+        wx.CallAfter(self.saveMoney, row, col)
+
+    def refresh_row(self, row):
+        tagname = self.n_list[row].tag
+        value = self.n_list[row].text
+        if tagname == 'Gear': self.fillTextNode(tagname, value)
+        elif tagname == 'Magic': self.fillTextNode(tagname, value)
+        elif tagname == 'Languages': self.fillTextNode(tagname, value)
+        else:
+            self.grid.SetCellValue(row, 0, tagname)
+            self.grid.SetReadOnly(row, 0)
+            self.grid.SetCellValue(row, 1, value)
+            self.grid.AutoSize()
+
+
+class dnd35classnstats(dnd35_char_child):
+    """ Node handler for a dnd35 charactor
+        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('abilities','Abilities Scores',dnd35ability,'gear')
+        self.new_child_handler('classes','Classes',dnd35classes,'knight')
+        self.new_child_handler('saves','Saves',dnd35saves,'skull')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+class class_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd35ability(class_char_child):
+    """ Node Handler for ability.   This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        class_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self)  #a 1.5002 get top of our local function tree.
+        self.root.abilities = self #a 1.5002 let other classes find me.
+
+        self.abilities = {}
+        node_list = self.xml.findall('stat')
+        tree = self.tree
+        icons = tree.icons
+
+        for n in node_list:
+            name = n.get('abbr')
+            self.abilities[name] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if not item == self.mytree_node: #a 1.6016
+            mod = self.get_mod( name )
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
+            chat.ParsePost( txt, True, True )
+
+    def get_mod(self,abbr):
+        score = int(self.abilities[abbr].get('base'))
+        mod = (score - 10) / 2
+        mod = int(mod)
+        return mod
+
+    def set_score(self,abbr,score):
+        if score >= 0: self.abilities[abbr].set("base",str(score))
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,abil_grid,"Abilities")
+        wnd.title = "Abilities (edit)"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th>
+                    <th>Base</th><th>Modifier</th></tr>"""
+        node_list = self.xml.findall('stat')
+        for n in node_list:
+            name = n.get('name')
+            abbr = n.get('abbr')
+            base = n.get('base')
+            mod = str(self.get_mod(abbr))
+            if int(mod) >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str = (html_str + "<tr ALIGN='center'><td>"+
+                name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod))
+        html_str = html_str + "</table>"
+        return html_str
+
+class abil_grid(wx.grid.Grid):
+    """grid for abilities"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Stats')
+        self.hparent = handler #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self)
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        stats = handler.xml.findall('stat')
+        self.CreateGrid(len(stats),3)
+        self.SetRowLabelSize(0)
+        col_names = ['Ability','Score','Modifier']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.stats = stats
+        i = 0
+        for i in range(len(stats)): self.refresh_row(i)
+        self.char_wnd = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            self.stats[row].set('base',value)
+            self.refresh_row(row)
+        except:
+            self.SetCellValue(row,col,"0")
+        if self.char_wnd: self.char_wnd.refresh_data()
+
+    def refresh_row(self,rowi):
+        s = self.stats[rowi]
+        name = s.get('name')
+        abbr = s.get('abbr')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        self.SetCellValue(rowi,1,s.get('base'))
+        self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr)))
+        self.SetReadOnly(rowi,2)
+        self.root.saves.refresh_data() #a 1.9002
+        self.root.attacks.refreshMRdata() #a 1.9001 `
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()-1): self.refresh_row(r)
+
+class dnd35classes(class_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        class_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self)
+        self.root.classes = self
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,class_panel,"Classes")
+        wnd.title = "Classes"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
+        n_list = self.xml.getchildren()
+        for n in n_list: html_str += n.get('name') + " ("+n.get('level')+"), "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        node_list = self.xml.findall('class')
+        tot = 0  #a 1.5009 actually, slipping in a quick enhancement ;-)
+        for n in node_list:
+            lvl = n.get('level') 
+            tot += int(lvl)
+            type = n.get('name')
+            if attr == "level": return lvl
+            elif attr == "class": return type 
+        if attr == "lvl": return tot 
+
+    def get_class_lvl( self, classN ):
+        node_list = self.xml.findall('class')
+        for n in node_list:
+            lvl = n.get('level')
+            type = n.get('name')
+            if classN == type: return lvl
+
+class class_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Class')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Class"), 0, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Class"), 0, wx.EXPAND)
+
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),3,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"Class")
+        self.grid.SetColLabelValue(1,"Level")
+        self.grid.SetColLabelValue(2,"Refrence")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        try:
+            int(value)
+            self.n_list[row].set('level',value)
+        except: self.grid.SetCellValue(row,col,"1")
+
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        name = n.get('name')
+        level = n.get('level')
+        book = n.get('book')
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,level)
+        self.grid.SetCellValue(i,2,book)
+        self.grid.SetReadOnly(i,0)
+        self.grid.AutoSizeColumn(0)
+        self.grid.AutoSizeColumn(1)
+        self.grid.AutoSizeColumn(2)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd35"]+"dnd35classes.xml")
+            xml_dom = tree.getroot()
+            self.temp_dom = xml_dom
+        f_list = self.temp_dom.findall('class')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
 
-    def refresh_row(self, rowi):
-        self.SetCellValue(rowi, 0, self.n_list[rowi].tag)
-        self.SetReadOnly(rowi, 0)
-        self.SetCellValue(rowi, 1, self.n_list[rowi].text)
-        self.AutoSizeColumn(1)
-
-class dnd35inventory(dnd35_char_child):
-    """ Node Handler for general information.   This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.6009
-        self.root.inventory = self #a 1.6009
-
-    def get_design_panel(self,parent):
-        wnd = inventory_pane(parent, self) #outline_panel(parent,self,inventory_grid,"Inventory")
-        wnd.title = "Inventory"
-        return wnd
-
-    def tohtml(self):
-        n_list = self.xml.getchildren()
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Inventory</th></tr><tr><td>"
-        for n in n_list:
-            html_str += "<B>"+n.tag.capitalize() +":</B> "
-            html_str += n.text + "<br />"
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-class inventory_pane(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, wx.ID_ANY)
-        self.n_list = handler.xml.getchildren()
-        self.autosize = False
-        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Inventory"), wx.VERTICAL)
-        self.lang = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Languages")
-        self.gear = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Gear")
-        self.magic = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Magic")
-        self.grid = wx.grid.Grid(self, wx.ID_ANY, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.grid.CreateGrid(len(self.n_list)-3,2)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelSize(0)
-        for i in xrange(len(self.n_list)): self.refresh_row(i)
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(self.grid, 1, wx.EXPAND)
-        sizer1.Add(self.lang, 1, wx.EXPAND)
-        self.sizer.Add(sizer1, 0, wx.EXPAND)
-        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer2.Add(self.gear, 1, wx.EXPAND)
-        sizer2.Add(self.magic, 1, wx.EXPAND)
-        self.sizer.Add(sizer2, 1, wx.EXPAND)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.lang)
-        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.gear)
-        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.magic)
-        self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.on_cell_change, self.grid)
-
-    def fillTextNode(self, name, value):
-        if name == 'Languages': self.lang.SetValue(value)
-        elif name == 'Gear': self.gear.SetValue(value)
-        elif name == 'Magic': self.magic.SetValue(value)
-
-    def onTextNodeChange(self, event):
-        id = event.GetId()
-        if id == self.gear.GetId():
-            nodeName = 'Gear'
-            value = self.gear.GetValue()
-        elif id == self.magic.GetId():
-            nodeName = 'Magic'
-            value = self.magic.GetValue()
-        elif id == self.lang.GetId():
-            nodeName = 'Languages'
-            value = self.lang.GetValue()
-        for node in self.n_list:
-            if node._get_tagName() == nodeName: node.text = value
-
-    def saveMoney(self, row, col):
-        value = self.grid.GetCellValue(row, col)
-        self.n_list[row].text = value
-
-    def on_cell_change(self, evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        self.grid.AutoSizeColumn(col)
-        wx.CallAfter(self.saveMoney, row, col)
-
-    def refresh_row(self, row):
-        tagname = self.n_list[row].tag
-        value = self.n_list[row].text
-        if tagname == 'Gear': self.fillTextNode(tagname, value)
-        elif tagname == 'Magic': self.fillTextNode(tagname, value)
-        elif tagname == 'Languages': self.fillTextNode(tagname, value)
-        else:
-            self.grid.SetCellValue(row, 0, tagname)
-            self.grid.SetReadOnly(row, 0)
-            self.grid.SetCellValue(row, 1, value)
-            self.grid.AutoSize()
-
-
-class dnd35classnstats(dnd35_char_child):
-    """ Node handler for a dnd35 charactor
-        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('abilities','Abilities Scores',dnd35ability,'gear')
-        self.new_child_handler('classes','Classes',dnd35classes,'knight')
-        self.new_child_handler('saves','Saves',dnd35saves,'skull')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-class class_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd35ability(class_char_child):
-    """ Node Handler for ability.   This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        class_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self)  #a 1.5002 get top of our local function tree.
-        self.root.abilities = self #a 1.5002 let other classes find me.
-
-        self.abilities = {}
-        node_list = self.xml.findall('stat')
-        tree = self.tree
-        icons = tree.icons
-
-        for n in node_list:
-            name = n.get('abbr')
-            self.abilities[name] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if not item == self.mytree_node: #a 1.6016
-            mod = self.get_mod( name )
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
-            chat.ParsePost( txt, True, True )
-
-    def get_mod(self,abbr):
-        score = int(self.abilities[abbr].get('base'))
-        mod = (score - 10) / 2
-        mod = int(mod)
-        return mod
-
-    def set_score(self,abbr,score):
-        if score >= 0: self.abilities[abbr].set("base",str(score))
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,abil_grid,"Abilities")
-        wnd.title = "Abilities (edit)"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th>
-                    <th>Base</th><th>Modifier</th></tr>"""
-        node_list = self.xml.findall('stat')
-        for n in node_list:
-            name = n.get('name')
-            abbr = n.get('abbr')
-            base = n.get('base')
-            mod = str(self.get_mod(abbr))
-            if int(mod) >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str = (html_str + "<tr ALIGN='center'><td>"+
-                name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod))
-        html_str = html_str + "</table>"
-        return html_str
-
-class abil_grid(wx.grid.Grid):
-    """grid for abilities"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Stats')
-        self.hparent = handler #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self)
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        stats = handler.xml.findall('stat')
-        self.CreateGrid(len(stats),3)
-        self.SetRowLabelSize(0)
-        col_names = ['Ability','Score','Modifier']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.stats = stats
-        i = 0
-        for i in range(len(stats)): self.refresh_row(i)
-        self.char_wnd = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            self.stats[row].set('base',value)
-            self.refresh_row(row)
-        except:
-            self.SetCellValue(row,col,"0")
-        if self.char_wnd: self.char_wnd.refresh_data()
-
-    def refresh_row(self,rowi):
-        s = self.stats[rowi]
-        name = s.get('name')
-        abbr = s.get('abbr')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        self.SetCellValue(rowi,1,s.get('base'))
-        self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr)))
-        self.SetReadOnly(rowi,2)
-        self.root.saves.refresh_data() #a 1.9002
-        self.root.attacks.refreshMRdata() #a 1.9001 `
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()-1): self.refresh_row(r)
-
-class dnd35classes(class_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        class_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self)
-        self.root.classes = self
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,class_panel,"Classes")
-        wnd.title = "Classes"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
-        n_list = self.xml.getchildren()
-        for n in n_list: html_str += n.get('name') + " ("+n.get('level')+"), "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        node_list = self.xml.findall('class')
-        tot = 0  #a 1.5009 actually, slipping in a quick enhancement ;-)
-        for n in node_list:
-            lvl = n.get('level') 
-            tot += int(lvl)
-            type = n.get('name')
-            if attr == "level": return lvl
-            elif attr == "class": return type 
-        if attr == "lvl": return tot 
-
-    def get_class_lvl( self, classN ):
-        node_list = self.xml.findall('class')
-        for n in node_list:
-            lvl = n.get('level')
-            type = n.get('name')
-            if classN == type: return lvl
-
-class class_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Class')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Class"), 0, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Class"), 0, wx.EXPAND)
-
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),3,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"Class")
-        self.grid.SetColLabelValue(1,"Level")
-        self.grid.SetColLabelValue(2,"Refrence")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        try:
-            int(value)
-            self.n_list[row].set('level',value)
-        except: self.grid.SetCellValue(row,col,"1")
-
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        name = n.get('name')
-        level = n.get('level')
-        book = n.get('book')
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,level)
-        self.grid.SetCellValue(i,2,book)
-        self.grid.SetReadOnly(i,0)
-        self.grid.AutoSizeColumn(0)
-        self.grid.AutoSizeColumn(1)
-        self.grid.AutoSizeColumn(2)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd35"]+"dnd35classes.xml")
-            xml_dom = tree.getroot()
-            self.temp_dom = xml_dom
-        f_list = self.temp_dom.findall('class')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-
-
-class dnd35saves(class_char_child):
-    """ Node Handler for saves.   This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        class_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.saveGridFrame = []  #a 1.9002 handle list, check frame for close.
-
-        tree = self.tree
-        icons = self.tree.icons
-
-        self.root = getRoot(self) #a 1.5002
-        self.root.saves = self #a 1.6009
-        node_list = self.xml.findall('save')
-        self.saves={}
-        for n in node_list:
-            name = n.get('name')
-            self.saves[name] = n
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-
-    #a 1.9002 this whole method
-    def refresh_data(self): # refresh the data in the melee/ranged section
-        # of the attack chart.
-        # count backwards, maintains context despite "removes"
-        for i in range(len(self.saveGridFrame)-1,-1,-1):
-            x = self.saveGridFrame[i]
-            if x == None: x.refresh_data()
-            else: self.saveGridFrame.remove(x)
-
-    def get_mod(self,name):
-        save = self.saves[name]
-        stat = save.get('stat')
-        stat_mod = self.root.abilities.get_mod(stat) 
-        base = int(save.get('base'))
-        miscmod = int(save.get('miscmod'))
-        magmod = int(save.get('magmod'))
-        total = stat_mod + base + miscmod + magmod
-        return total
-
-    def on_rclick(self,evt):
-
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node:
-            pass #a 1.5003 syntatic place holder
-            return #a 1.5003
-        else:
-            mod = self.get_mod(name)
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
-            chat.ParsePost( txt, True, True )
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,save_grid,"Saves")
-        wnd.title = "Saves"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-            <th width='30%'>Save</th>
-            <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th>
-            <th>Misc</th><th>Total</th></tr>"""
-        node_list = self.xml.findall('save')
-        for n in node_list:
-            name = n.get('name')
-            stat = n.get('stat')
-            base = n.get('base')
-            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
-            stat_mod = self.root.abilities.get_mod(stat)        #a 1.5002
-            mag = n.get('magmod')
-            misc = n.get('miscmod')
-            mod = str(self.get_mod(name))
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str = html_str + "<td>"+str(stat_mod)+"</td><td>"+mag+"</td>"
-            html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-#mark6
-class save_grid(wx.grid.Grid):
-    """grid for saves"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Saves')
-        self.hparent = handler #a 1.5002 allow ability to run up tree.
-        #a 1.5002 in this case, we need the functional parent, not the invoking parent.
-        self.root = getRoot(self)
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        saves = handler.xml.findall('save')
-        self.CreateGrid(len(saves),7)
-        self.SetRowLabelSize(0)
-        col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.saves = saves
-        i = 0
-        for i in range(len(saves)): self.refresh_row(i)
-        climber = parent
-        nameNode = climber.GetClassName()
-        while nameNode != 'wxFrame':
-            climber = climber.parent
-            nameNode = climber.GetClassName()
-        masterFrame=climber
-        masterFrame.refresh_data=self.refresh_data
-        handler.saveGridFrame.append(masterFrame)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col == 2: self.saves[row].set('base',value)
-            elif col == 4: self.saves[row].set('magmod',value)
-            elif col == 5:  self.saves[row].set('miscmod',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-
-    def refresh_row(self,rowi):
-        s = self.saves[rowi]
-        name = s.get('name')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        stat = s.get('stat')
-        self.SetCellValue(rowi,1,stat)
-        self.SetReadOnly(rowi,1)
-        self.SetCellValue(rowi,2,s.get('base'))
-        self.SetCellValue(rowi,3,str(self.root.abilities.get_mod(stat)))
-        self.SetReadOnly(rowi,3)
-        self.SetCellValue(rowi,4,s.get('magmod'))
-        self.SetCellValue(rowi,5,s.get('miscmod'))
-        mod = str(self.handler.get_mod(name))
-        self.SetCellValue(rowi,6,mod)
-        self.SetReadOnly(rowi,6)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()): self.refresh_row(r)
-
-class dnd35skillsnfeats(dnd35_char_child):
-    """ Node handler for a dnd35 charactor
-        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.6009
-        node_handler.__init__(self,xml_dom,tree_node)
-        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('skills','Skills',dnd35skill,'book')
-        self.new_child_handler('feats','Feats',dnd35feats,'book')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-class skills_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd35skill(skills_char_child):
-    """ Node Handler for skill.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        #a 1.5002 Need the functional parent, not the invoking parent.
-        self.root = getRoot(self) #a 1.5002
-        self.root.skills = self #a 1.6009
-
-        skills_char_child.__init__(self,xml_dom,tree_node,parent)
-        tree = self.tree
-        icons = self.tree.icons
-        node_list = self.xml.findall('skill')
-
-        self.skills={}
-        #Adding code to not display skills you can not use -mgt
-        for n in node_list:
-            name = n.get('name')
-            self.skills[name] = n
-            skill_check = self.skills[name]
-            ranks = int(skill_check.get('rank'))
-            trained = int(skill_check.get('untrained'))
-            if ranks > 0 or trained == 1:
-                new_tree_node = tree.AppendItem(self.mytree_node,name,
-                                            icons['gear'],icons['gear'])
-            else: continue
-            tree.SetPyData(new_tree_node,self)
-
-    def refresh_skills(self):
-        #Adding this so when you update the grid the tree will reflect
-        #The change. -mgt
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('skill')
-
-        self.skills={}
-        for n in node_list:
-            name = n.get('name')
-            self.skills[name] = n
-            skill_check = self.skills[name]
-            ranks = int(skill_check.get('rank'))
-            trained = int(skill_check.get('untrained'))
-            if ranks > 0 or trained == 1:
-                new_tree_node = tree.AppendItem(self.mytree_node,name,
-                                            icons['gear'],icons['gear'])
-            else: continue
-            tree.SetPyData(new_tree_node,self)
-
-    def get_mod(self,name):
-        skill = self.skills[name]
-        stat = skill.get('stat')
-        stat_mod = self.root.abilities.get_mod(stat)                #a 1.5002
-        rank = int(skill.get('rank'))
-        misc = int(skill.get('misc'))
-        total = stat_mod + rank + misc
-        return total
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node: return
-        ac = self.root.ac.get_check_pen() #a 1.5002 for 1.5004 verify fix.
-        skill = self.skills[name]
-        untr = skill.get('untrained')                         #a 1.6004
-        rank = skill.get('rank')                              #a 1.6004
-        if eval('%s == 0' % (untr)):                                   #a 1.6004
-            if eval('%s == 0' % (rank)):                               #a 1.6004
-                res = 'You fumble around, accomplishing nothing'       #a 1.6004
-                txt = '%s Skill Check: %s' % (name, res)               #a 1.6004
-                chat = self.chat                                       #a 1.6004
-                chat.Post(txt,True,True)                               #a 1.6004
-                return                                                 #a 1.6004
-        armor = ''
-        acCp = ''
-        if ac < 0:  #acCp >= 1 #m 1.5004 this is stored as negatives.
-            armorCheck = int(skill.get('armorcheck'))
-            if armorCheck == 1:
-                acCp=ac
-                armor = '(includes Armor Penalty of %s)' % (acCp)
-        if item == self.mytree_node:
-            dnd35_char_child.on_ldclick(self,evt)
-        else:
-            mod = self.get_mod(name)
-            if mod >= 0:  mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s Skill Check: [1d20%s%s%s] %s' % (
-                    name, mod1, mod, acCp, armor)
-            chat.ParsePost(txt,True,True)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,skill_grid,"Skills")
-        wnd.title = "Skills (edit)"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-                    <th width='30%'>Skill</th><th>Key</th>
-                    <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>"""
-        node_list = self.xml.findall('skill')
-
-        for n in node_list:
-            name = n.get('name')
-            stat = n.get('stat')
-            rank = n.get('rank')
-            untr = n.get('untrained')                              #a 1.6004
-            #Filter unsuable skills out of pretty print -mgt
-            if eval('%s > 0' % (rank)) or eval('%s == 1' % (untr)):
-                if eval('%s >=1' % (rank)):
-                    html_str += "<tr ALIGN='center' bgcolor='#CCCCFF'><td>"     #a 1.6004
-                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
-                elif eval('%s == 1' % (untr)):                                  #a 1.6004
-                    html_str += "<tr ALIGN='center' bgcolor='#C0FF40'><td>"     #a 1.6004
-                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"  #a 1.6004
-                else:
-                    html_str += "<tr ALIGN='center'><td>"+name+"</td><td>"
-                    html_str += stat+"</td><td>"+rank+"</td>"
-            else: continue
-            stat_mod = self.root.abilities.get_mod(stat)        #a 1.5002
-            misc = n.get('misc')
-            mod = str(self.get_mod(name))
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str += "<td>"+str(stat_mod)+"</td><td>"+misc #m 1.6009 str()
-            html_str += '</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-
-class skill_grid(wx.grid.Grid):
-    """ panel for skills """
-    def __init__(self, parent, handler):
-        self.hparent = handler    #a 1.5002 need function parent, not invoker
-        self.root = getRoot(self) #a 1.5002
-        pname = handler.xml.set("name", 'Skills')
-
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        skills = handler.xml.findall('skill')
-        self.CreateGrid(len(skills),6)
-        self.SetRowLabelSize(0)
-        col_names = ['Skill','Key','Rank','Abil','Misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        rowi = 0
-        self.skills = skills
-        for i in range(len(skills)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col == 2: self.skills[row].set('rank',value)
-            elif col == 4: self.skills[row].set('misc',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-        self.handler.refresh_skills()
-
-    def refresh_row(self,rowi):
-        s = self.skills[rowi]
-        name = s.get('name')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        stat = s.get('stat')
-        self.SetCellValue(rowi,1,stat)
-        self.SetReadOnly(rowi,1)
-        self.SetCellValue(rowi,2,s.get('rank'))
-        #self.SetCellValue(rowi,3,str(dnd_globals["stats"][stat]))  #d 1.5002
-        if self.root.abilities: stat_mod=self.root.abilities.get_mod(stat)           #a 1.5002
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+
+
+class dnd35saves(class_char_child):
+    """ Node Handler for saves.   This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        class_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.saveGridFrame = []  #a 1.9002 handle list, check frame for close.
+
+        tree = self.tree
+        icons = self.tree.icons
+
+        self.root = getRoot(self) #a 1.5002
+        self.root.saves = self #a 1.6009
+        node_list = self.xml.findall('save')
+        self.saves={}
+        for n in node_list:
+            name = n.get('name')
+            self.saves[name] = n
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+
+    #a 1.9002 this whole method
+    def refresh_data(self): # refresh the data in the melee/ranged section
+        # of the attack chart.
+        # count backwards, maintains context despite "removes"
+        for i in range(len(self.saveGridFrame)-1,-1,-1):
+            x = self.saveGridFrame[i]
+            if x == None: x.refresh_data()
+            else: self.saveGridFrame.remove(x)
+
+    def get_mod(self,name):
+        save = self.saves[name]
+        stat = save.get('stat')
+        stat_mod = self.root.abilities.get_mod(stat) 
+        base = int(save.get('base'))
+        miscmod = int(save.get('miscmod'))
+        magmod = int(save.get('magmod'))
+        total = stat_mod + base + miscmod + magmod
+        return total
+
+    def on_rclick(self,evt):
+
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node:
+            pass #a 1.5003 syntatic place holder
+            return #a 1.5003
+        else:
+            mod = self.get_mod(name)
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
+            chat.ParsePost( txt, True, True )
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,save_grid,"Saves")
+        wnd.title = "Saves"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+            <th width='30%'>Save</th>
+            <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th>
+            <th>Misc</th><th>Total</th></tr>"""
+        node_list = self.xml.findall('save')
+        for n in node_list:
+            name = n.get('name')
+            stat = n.get('stat')
+            base = n.get('base')
+            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
+            stat_mod = self.root.abilities.get_mod(stat)        #a 1.5002
+            mag = n.get('magmod')
+            misc = n.get('miscmod')
+            mod = str(self.get_mod(name))
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str = html_str + "<td>"+str(stat_mod)+"</td><td>"+mag+"</td>"
+            html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+#mark6
+class save_grid(wx.grid.Grid):
+    """grid for saves"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Saves')
+        self.hparent = handler #a 1.5002 allow ability to run up tree.
+        #a 1.5002 in this case, we need the functional parent, not the invoking parent.
+        self.root = getRoot(self)
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        saves = handler.xml.findall('save')
+        self.CreateGrid(len(saves),7)
+        self.SetRowLabelSize(0)
+        col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.saves = saves
+        i = 0
+        for i in range(len(saves)): self.refresh_row(i)
+        climber = parent
+        nameNode = climber.GetClassName()
+        while nameNode != 'wxFrame':
+            climber = climber.parent
+            nameNode = climber.GetClassName()
+        masterFrame=climber
+        masterFrame.refresh_data=self.refresh_data
+        handler.saveGridFrame.append(masterFrame)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col == 2: self.saves[row].set('base',value)
+            elif col == 4: self.saves[row].set('magmod',value)
+            elif col == 5:  self.saves[row].set('miscmod',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+
+    def refresh_row(self,rowi):
+        s = self.saves[rowi]
+        name = s.get('name')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        stat = s.get('stat')
+        self.SetCellValue(rowi,1,stat)
+        self.SetReadOnly(rowi,1)
+        self.SetCellValue(rowi,2,s.get('base'))
+        self.SetCellValue(rowi,3,str(self.root.abilities.get_mod(stat)))
+        self.SetReadOnly(rowi,3)
+        self.SetCellValue(rowi,4,s.get('magmod'))
+        self.SetCellValue(rowi,5,s.get('miscmod'))
+        mod = str(self.handler.get_mod(name))
+        self.SetCellValue(rowi,6,mod)
+        self.SetReadOnly(rowi,6)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()): self.refresh_row(r)
+
+class dnd35skillsnfeats(dnd35_char_child):
+    """ Node handler for a dnd35 charactor
+        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.6009
+        node_handler.__init__(self,xml_dom,tree_node)
+        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('skills','Skills',dnd35skill,'book')
+        self.new_child_handler('feats','Feats',dnd35feats,'book')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+class skills_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd35skill(skills_char_child):
+    """ Node Handler for skill.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        #a 1.5002 Need the functional parent, not the invoking parent.
+        self.root = getRoot(self) #a 1.5002
+        self.root.skills = self #a 1.6009
+
+        skills_char_child.__init__(self,xml_dom,tree_node,parent)
+        tree = self.tree
+        icons = self.tree.icons
+        node_list = self.xml.findall('skill')
+
+        self.skills={}
+        #Adding code to not display skills you can not use -mgt
+        for n in node_list:
+            name = n.get('name')
+            self.skills[name] = n
+            skill_check = self.skills[name]
+            ranks = int(skill_check.get('rank'))
+            trained = int(skill_check.get('untrained'))
+            if ranks > 0 or trained == 1:
+                new_tree_node = tree.AppendItem(self.mytree_node,name,
+                                            icons['gear'],icons['gear'])
+            else: continue
+            tree.SetPyData(new_tree_node,self)
+
+    def refresh_skills(self):
+        #Adding this so when you update the grid the tree will reflect
+        #The change. -mgt
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('skill')
+
+        self.skills={}
+        for n in node_list:
+            name = n.get('name')
+            self.skills[name] = n
+            skill_check = self.skills[name]
+            ranks = int(skill_check.get('rank'))
+            trained = int(skill_check.get('untrained'))
+            if ranks > 0 or trained == 1:
+                new_tree_node = tree.AppendItem(self.mytree_node,name,
+                                            icons['gear'],icons['gear'])
+            else: continue
+            tree.SetPyData(new_tree_node,self)
+
+    def get_mod(self,name):
+        skill = self.skills[name]
+        stat = skill.get('stat')
+        stat_mod = self.root.abilities.get_mod(stat)                #a 1.5002
+        rank = int(skill.get('rank'))
+        misc = int(skill.get('misc'))
+        total = stat_mod + rank + misc
+        return total
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node: return
+        ac = self.root.ac.get_check_pen() #a 1.5002 for 1.5004 verify fix.
+        skill = self.skills[name]
+        untr = skill.get('untrained')                         #a 1.6004
+        rank = skill.get('rank')                              #a 1.6004
+        if eval('%s == 0' % (untr)):                                   #a 1.6004
+            if eval('%s == 0' % (rank)):                               #a 1.6004
+                res = 'You fumble around, accomplishing nothing'       #a 1.6004
+                txt = '%s Skill Check: %s' % (name, res)               #a 1.6004
+                chat = self.chat                                       #a 1.6004
+                chat.Post(txt,True,True)                               #a 1.6004
+                return                                                 #a 1.6004
+        armor = ''
+        acCp = ''
+        if ac < 0:  #acCp >= 1 #m 1.5004 this is stored as negatives.
+            armorCheck = int(skill.get('armorcheck'))
+            if armorCheck == 1:
+                acCp=ac
+                armor = '(includes Armor Penalty of %s)' % (acCp)
+        if item == self.mytree_node:
+            dnd35_char_child.on_ldclick(self,evt)
+        else:
+            mod = self.get_mod(name)
+            if mod >= 0:  mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s Skill Check: [1d20%s%s%s] %s' % (
+                    name, mod1, mod, acCp, armor)
+            chat.ParsePost(txt,True,True)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,skill_grid,"Skills")
+        wnd.title = "Skills (edit)"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+                    <th width='30%'>Skill</th><th>Key</th>
+                    <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>"""
+        node_list = self.xml.findall('skill')
+
+        for n in node_list:
+            name = n.get('name')
+            stat = n.get('stat')
+            rank = n.get('rank')
+            untr = n.get('untrained')                              #a 1.6004
+            #Filter unsuable skills out of pretty print -mgt
+            if eval('%s > 0' % (rank)) or eval('%s == 1' % (untr)):
+                if eval('%s >=1' % (rank)):
+                    html_str += "<tr ALIGN='center' bgcolor='#CCCCFF'><td>"     #a 1.6004
+                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
+                elif eval('%s == 1' % (untr)):                                  #a 1.6004
+                    html_str += "<tr ALIGN='center' bgcolor='#C0FF40'><td>"     #a 1.6004
+                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"  #a 1.6004
+                else:
+                    html_str += "<tr ALIGN='center'><td>"+name+"</td><td>"
+                    html_str += stat+"</td><td>"+rank+"</td>"
+            else: continue
+            stat_mod = self.root.abilities.get_mod(stat)        #a 1.5002
+            misc = n.get('misc')
+            mod = str(self.get_mod(name))
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str += "<td>"+str(stat_mod)+"</td><td>"+misc #m 1.6009 str()
+            html_str += '</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+
+class skill_grid(wx.grid.Grid):
+    """ panel for skills """
+    def __init__(self, parent, handler):
+        self.hparent = handler    #a 1.5002 need function parent, not invoker
+        self.root = getRoot(self) #a 1.5002
+        pname = handler.xml.set("name", 'Skills')
+
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        skills = handler.xml.findall('skill')
+        self.CreateGrid(len(skills),6)
+        self.SetRowLabelSize(0)
+        col_names = ['Skill','Key','Rank','Abil','Misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        rowi = 0
+        self.skills = skills
+        for i in range(len(skills)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col == 2: self.skills[row].set('rank',value)
+            elif col == 4: self.skills[row].set('misc',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+        self.handler.refresh_skills()
+
+    def refresh_row(self,rowi):
+        s = self.skills[rowi]
+        name = s.get('name')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        stat = s.get('stat')
+        self.SetCellValue(rowi,1,stat)
+        self.SetReadOnly(rowi,1)
+        self.SetCellValue(rowi,2,s.get('rank'))
+        #self.SetCellValue(rowi,3,str(dnd_globals["stats"][stat]))  #d 1.5002
+        if self.root.abilities: stat_mod=self.root.abilities.get_mod(stat)           #a 1.5002
         else: 
-            stat_mod = -6 #a 1.5002 this can happen if code is changed so
-            print "Please advise dnd35 maintainer alert 1.5002 raised"
-
-        self.SetCellValue(rowi,3,str(stat_mod))         #a 1.5002
-        self.SetReadOnly(rowi,3)
-        self.SetCellValue(rowi,4,s.get('misc'))
-        mod = str(self.handler.get_mod(name))
-        self.SetCellValue(rowi,5,mod)
-        self.SetReadOnly(rowi,5)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()): self.refresh_row(r)
-
-
-class dnd35feats(skills_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        skills_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.feats = self #a 1.6009
-
-
-    def get_design_panel(self,parent):
-        setTitle="Feats - " + self.root.general.charName    #a 1.5010
-        wnd = outline_panel(parent,self,feat_panel,setTitle) #a 1.5010
-        wnd.title = "Feats" #d 1.5010
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
-        n_list = self.xml.getchildren()
-        for n in n_list: html_str += n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-class feat_panel(wx.Panel):
-    def __init__(self, parent, handler):
-
-        self.hparent = handler #a 1.5002 allow ability to run up tree.
-
-        self.root = getRoot(self) #a 1.5002
-        pname = handler.xml.set("name", 'Feats') #d 1.5010
-        wx.Panel.__init__(self, parent, -1)
-        self.grid = wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Feat"), 0, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Feat"), 0, wx.EXPAND)
-
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),3,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"Feat")
-        self.grid.SetColLabelValue(1,"Reference")
-        self.grid.SetColLabelValue(2,"Description") #m 1.6 typo correction.
-        wrap = wx.grid.GridCellAutoWrapStringRenderer()
-        attr = wx.grid.GridCellAttr()
-        attr.SetRenderer(wrap)
-        self.grid.SetColAttr(2, attr)
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def refresh_row(self,i):
-        feat = self.n_list[i]
-        name = feat.get('name')
-        type = feat.get('type')
-        desc = feat.get('desc') #m 1.6 correct typo
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,type)
-        self.grid.SetReadOnly(i,1)
-        self.grid.SetCellValue(i,2,desc) #m 1.6 correct typo
-        self.grid.SetReadOnly(i,2)
-        self.grid.AutoSizeColumn(0)
-        self.grid.AutoSizeColumn(1)
-        self.grid.AutoSizeColumn(2, False)
-        self.grid.AutoSizeRow(i)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd35"]+"dnd35feats.xml")
-            xml_dom = tree.getroot()
-            self.temp_dom = xml_dom
-        f_list = self.temp_dom.findall('feat')
-        opts = []
-        for f in f_list:
-            opts.append(f.get('name') + "  -  [" +
-                     f.get('type') + "]  -  " + f.get('desc'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
+            stat_mod = -6 #a 1.5002 this can happen if code is changed so
+            print "Please advise dnd35 maintainer alert 1.5002 raised"
+
+        self.SetCellValue(rowi,3,str(stat_mod))         #a 1.5002
+        self.SetReadOnly(rowi,3)
+        self.SetCellValue(rowi,4,s.get('misc'))
+        mod = str(self.handler.get_mod(name))
+        self.SetCellValue(rowi,5,mod)
+        self.SetReadOnly(rowi,5)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()): self.refresh_row(r)
+
+
+class dnd35feats(skills_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        skills_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.feats = self #a 1.6009
+
+
+    def get_design_panel(self,parent):
+        setTitle="Feats - " + self.root.general.charName    #a 1.5010
+        wnd = outline_panel(parent,self,feat_panel,setTitle) #a 1.5010
+        wnd.title = "Feats" #d 1.5010
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
+        n_list = self.xml.getchildren()
+        for n in n_list: html_str += n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+class feat_panel(wx.Panel):
+    def __init__(self, parent, handler):
+
+        self.hparent = handler #a 1.5002 allow ability to run up tree.
+
+        self.root = getRoot(self) #a 1.5002
+        pname = handler.xml.set("name", 'Feats') #d 1.5010
+        wx.Panel.__init__(self, parent, -1)
+        self.grid = wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Feat"), 0, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Feat"), 0, wx.EXPAND)
+
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),3,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"Feat")
+        self.grid.SetColLabelValue(1,"Reference")
+        self.grid.SetColLabelValue(2,"Description") #m 1.6 typo correction.
+        wrap = wx.grid.GridCellAutoWrapStringRenderer()
+        attr = wx.grid.GridCellAttr()
+        attr.SetRenderer(wrap)
+        self.grid.SetColAttr(2, attr)
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def refresh_row(self,i):
+        feat = self.n_list[i]
+        name = feat.get('name')
+        type = feat.get('type')
+        desc = feat.get('desc') #m 1.6 correct typo
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,type)
+        self.grid.SetReadOnly(i,1)
+        self.grid.SetCellValue(i,2,desc) #m 1.6 correct typo
+        self.grid.SetReadOnly(i,2)
+        self.grid.AutoSizeColumn(0)
+        self.grid.AutoSizeColumn(1)
+        self.grid.AutoSizeColumn(2, False)
+        self.grid.AutoSizeRow(i)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd35"]+"dnd35feats.xml")
+            xml_dom = tree.getroot()
+            self.temp_dom = xml_dom
+        f_list = self.temp_dom.findall('feat')
+        opts = []
+        for f in f_list:
+            opts.append(f.get('name') + "  -  [" +
+                     f.get('type') + "]  -  " + f.get('desc'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
             self.refresh_row(self.grid.GetNumberRows()-1)
         f_list=0; opts=0
-        dlg.Destroy()
-
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-
-class dnd35combat(dnd35_char_child):
-    """ Node handler for a dnd35 charactor
-        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5012
-        #mark3
-        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('hp','Hit Points',dnd35hp,'gear')
-        self.new_child_handler('attacks','Attacks',dnd35attacks,'spears')
-        self.new_child_handler('ac','Armor',dnd35armor,'spears')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-
-class combat_char_child(node_handler):
-    """ Node Handler for combat.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd35hp(combat_char_child):
-    """ Node Handler for hit points.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        combat_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.6009
-        self.root.hp = self #a 1.6009
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,hp_panel,"Hit Points")
-        wnd.title = "Hit Points"
-        return wnd
-
-    def on_rclick( self, evt ):
-        chp = self.xml.get('current')
-        mhp = self.xml.get('max')
-        txt = '((HP: %s / %s))' % ( chp, mhp )
-        self.chat.ParsePost( txt, True, True )
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 >"
-        html_str += "<tr BGCOLOR=#E9E9E9 ><th colspan=4>Hit Points</th></tr>"
-        html_str += "<tr><th>Max:</th>"
-        html_str += "<td>"+self.xml.get('max')+"</td>"
-        html_str += "<th>Current:</th>"
-        html_str += "<td>"+self.xml.get('current')+"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-class hp_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.hparent = handler
-        pname = handler.xml.set("name", 'HitPoints')
-        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
-        self.xml = handler.xml
-        self.sizer.AddMany([ (wx.StaticText(self, -1, "HP Current:"),   0,
-           wx.ALIGN_CENTER_VERTICAL),
-          (wx.TextCtrl(self, HP_CUR,
-           self.xml.get('current')),   0, wx.EXPAND),
-          (wx.StaticText(self, -1, "HP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
-          (wx.TextCtrl(self, HP_MAX, self.xml.get('max')),
-           0, wx.EXPAND),
-         ])
-        self.sizer.AddGrowableCol(1)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_MAX)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_CUR)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == HP_CUR: self.xml.set('current',evt.GetString())
-        elif id == HP_MAX: self.xml.set('max',evt.GetString())
-
-    def on_size(self,evt):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-class dnd35attacks(combat_char_child):
-    """ Node Handler for attacks.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        combat_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.attacks = self #a 1.6009 so others can find me.
-        self.mrFrame = [] #a 1.9001
-        self.updateFootNotes = False
-        self.updateFootNotes = False
-        self.html_str = "<html><body>"
-        self.html_str += ("<br />  This character has weapons with no "+
-             "footnotes.  This program will "+
-             "add footnotes to the weapons which have names that still match "+
-             "the orginal names.  If you have changed the weapon name, you "+
-             "will see some weapons with a footnote of 'X', you will have "+
-             "to either delete and re-add the weapon, or research "+
-             "and add the correct footnotes for the weapon.\n"+
-             "<br />  Please be aware, that only the bow/sling footnote is "+
-             "being used to affect changes to rolls; implemenation of other "+
-             "footnotes to automaticly adjust rolls will be completed as "+
-             "soon as time allows." +
-             "<br /><br />Update to character:"+self.root.general.charName+
-             "<br /><br />"+
-             """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-              <th width='80%'>Weapon Name</th><th>Added Footnote</th></tr>\n""")
-        self.temp_dom={}
-        node_list = self.xml.findall('melee')
-        self.melee = node_list[0]
-        node_list = self.xml.findall('ranged')
-        self.ranged = node_list[0]
-        self.refresh_weapons()
-        if self.updateFootNotes == True:
-            self.updateFootNotes = False
-            name = self.root.general.charName
-            self.html_str +=  "</table>"
-            self.html_str +=  "</body> </html> "
-            masterFrame = self.root.frame
-            title = name+"'s weapons' update to have footnotes"
-            fnFrame = wx.Frame(masterFrame, -1, title)
-            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
-            fnFrame.panel.SetPage(self.html_str)
-            fnFrame.Show()
-
-    #a 1.9001 this whole method
-    def refreshMRdata(self): # refresh the data in the melee/ranged section
-        # of the attack chart.
-        # count backwards, maintains context despite "removes"
-        for i in range(len(self.mrFrame)-1,-1,-1):   #a 1.9001
-            x = self.mrFrame[i]
-            if x == None: x.refreshMRdata() #a 1.9001
-            else: self.mrFrame.remove(x)
-
-    def refresh_weapons(self):
-        self.weapons = {}
-
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('weapon')
-        for n in node_list:
-            name = n.get('name')
-            fn = safeGetAttr(n,'fn') #a 1.5012 can be removed when
-            if fn == None:#a 1.5012
-                self.updateFootNotes=True
-                self.updateFootN(n) #a 1.5012
-            new_tree_node = tree.AppendItem(
-                self.mytree_node,name,icons['sword'],icons['sword'])
-            tree.SetPyData(new_tree_node,self)
-            self.weapons[name]=n
-
-    def updateFootN(self,n):#a 1.5012 this whole function
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd35"]+"dnd35weapons.xml")
-            self.temp_dom = tree.getroot()
-        nameF = n.get('name')
-        w_list = self.temp_dom.findall('weapon')
-        found = False
-        for w in w_list:
-            if nameF == w.get('name'):
-                found = True
-                fnN = safeGetAttr(n,'fn')
-                if fnN == None or fnN == 'None':
-                    fnW = w.get('fn')
-                    self.html_str += ("<tr ALIGN='center'><td>"+nameF+"</td>"+
-                                     "<td>"+fnW+"</td></tr>\n")
-                    n.set('fn',fnW)
-                break
-        if not found:
-            self.html_str += ("<tr ALIGN='center'><td>"+nameF+" - Custom "+
-              "Weapon, research "+
-              "and update manually; setting footnote to indicate custom</td>"+
-                                     "<td>"+'X'+"</td></tr>\n")
-            n.set('fn','X')
-
-
-    def get_mod(self,type='m'):
-        (base, base2, base3, base4, base5, base6, stat_mod, misc) \
-            = self.get_attack_data(type)
-        return int(base + misc + int(stat_mod))
-
-    def get_attack_data(self,type='m'):
-        if type=='m' or type=='0':
-            stat = 'Str'  #m was dnd_globals["stats"]['Str'] 1.5002
-            temp = self.melee
-        else:
-            stat = 'Dex'  #m was dnd_globals["stats"]['Dex'] 1.5002
-            temp = self.ranged
-        stat_mod = -7
-        stat_mod = self.root.abilities.get_mod(stat)    #a 1.5002
-        base = int(temp.get('base'))
-        base2 = int(temp.get('second'))
-        base3 = int(temp.get('third'))
-        base4 = int(temp.get('forth'))
-        base5 = int(temp.get('fifth'))
-        base6 = int(temp.get('sixth'))
-        misc = int(temp.get('misc'))
-        return (base, base2, base3, base4, base5, base6, stat_mod ,misc)
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node: return 
-        else:
-            mod = int(self.weapons[name].get('mod'))
-            wepMod = mod #a 1.5008
-            footNotes = safeGetAttr(self.weapons[name],'fn','')
-            cat = self.weapons[name].get('category') #a1.6001
-            result = split(cat,"-",2) #a 1.6001
-            if len(result) < 2: #a 1.6021 this if & else
-                print "warning: 1.6002 unable to interpret weapon category"
-                print "format 'type weapon-[Range|Melee]', probably missing"
-                print "the hyphen.  Assuming Melee"
-                print "weapon name: ",name
-                tres="Melee"
-            else:
-                tres=result[1]
-            if tres == 'Melee': rangeOrMelee = 'm' 
-            elif tres == 'Ranged': rangeOrMelee = 'r'
-            else:
-                print "warning: 1.6001 unable to interpret weapon category"
-                print "treating weapon as Melee, please correct xml"
-                print "weapon name:",name
-                rangeOrMelee ='m'
-            mod = mod + self.get_mod(rangeOrMelee) #a 1.5008
-            chat = self.chat
-            dmg = self.weapons[name].get('damage')
-
-            #a 1.6003 start code fix instance a
-            result = split(dmg,"/",2)
-            dmg = result[0]
-            monkLvl = self.root.classes.get_class_lvl('Monk') # a 1.5002
-            if find(dmg, "Monk Med") > -1:
-                if monkLvl == None:     #a 1.5009
-                    txt = 'Attempting to use monk attack, but has no monk '
-                    txt += 'levels, please choose a different attack.'
-                    chat.ParsePost( txt, True, True ) #a 1.5009
-                    return #a 1.5009
-                else:   #a 1.5009
-                    lvl=int(monkLvl)
-                    if lvl <= 3: dmg = dmg.replace("Monk Med", "1d6")
-                    elif lvl <= 7: dmg = dmg.replace("Monk Med", "1d8")
-                    elif lvl <= 11: dmg = dmg.replace("Monk Med", "1d10")
-                    elif lvl <= 15: dmg = dmg.replace("Monk Med", "2d6")
-                    elif lvl <= 19: dmg = dmg.replace("Monk Med", "2d8")
-                    elif lvl <= 20: dmg = dmg.replace("Monk Med", "2d10")
-            if find(dmg, "Monk Small") > -1:
-                if monkLvl == None:     #a 1.5009
-                    txt = 'Attempting to use monk attack, but has no monk '
-                    txt += 'levels, please choose a different attack.'
-                    chat.ParsePost( txt, True, True ) #a 1.5009
-                    return #a 1.5009
-                else:   #a 1.5009
-                    lvl=int(monkLvl)
-                    if lvl <= 3: dmg = dmg.replace("Monk Small", "1d4")
-                    elif lvl <= 7: dmg = dmg.replace("Monk Small", "1d6")
-                    elif lvl <= 11: dmg = dmg.replace("Monk Small", "1d8")
-                    elif lvl <= 15: dmg = dmg.replace("Monk Small", "1d10")
-                    elif lvl <= 19: dmg = dmg.replace("Monk Small", "2d6")
-                    elif lvl <= 20: dmg = dmg.replace("Monk Small", "2d8")
-            if find(dmg, "Monk Large") > -1:
-                if monkLvl == None:     #a 1.5009
-                    txt = 'Attempting to use monk attack, but has no monk '
-                    txt += 'levels, please choose a different attack.'
-                    chat.ParsePost( txt, True, True ) #a 1.5009
-                    return #a 1.5009
-                else:   #a 1.5009
-                    lvl=int(monkLvl)
-                    if lvl <= 3: dmg = dmg.replace("Monk Large", "1d8")
-                    elif lvl <= 7: dmg = dmg.replace("Monk Large", "2d6")
-                    elif lvl <= 11: dmg = dmg.replace("Monk Large", "2d8")
-                    elif lvl <= 15: dmg = dmg.replace("Monk Large", "3d6")
-                    elif lvl <= 19: dmg = dmg.replace("Monk Large", "3d8")
-                    elif lvl <= 20: dmg = dmg.replace("Monk Large", "4d8")
-            flurry = False
-            str_mod = self.root.abilities.get_mod('Str') #a 1.5007,11,12,13
-            if rangeOrMelee == 'r':                     #a 1.5008
-                #if off_hand == True then stat_mod = stat_mod/2 #o 1.5013
-                #c 1.5007 ranged weapons normally get no str mod
-                if find(footNotes,'b') > -1:#a 1.5012 if it's a bow
-                    if str_mod >= 0: str_mod = 0 
-                else: str_mod = 0
-            mod2 = "" 
-            if str_mod >= 0: mod2 = "+"   #1.6 tidy up code.
-            aStrengthMod = mod2 + str(str_mod) #a 1.5008 applicable strength mod
-            if find(name ,"Flurry of Blows") > -1:  flurry = True
-            (base, base2, base3, base4, base5, base6, stat_mod, misc) = self.get_attack_data(rangeOrMelee)  #a 1.5008
-            name = name.replace('(Monk Med)', '')
-            name = name.replace('(Monk Small)', '')
-            if not flurry:
-                if name == 'Shuriken':
-                    for n in xrange(3):
-                        self.sendRoll(base, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod, rollAnyWay=True)
-                        self.sendRoll(base2, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                        self.sendRoll(base3, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                        self.sendRoll(base4, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                        self.sendRoll(base5, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                        self.sendRoll(base6, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                else:
-                    self.sendRoll(base, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod, rollAnyWay=True)
-                    self.sendRoll(base2, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                    self.sendRoll(base3, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                    self.sendRoll(base4, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                    self.sendRoll(base5, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-                    self.sendRoll(base6, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
-            else:
-                if monkLvl == None:
-                    txt = 'Attempting to use monk attack, but has no monk '
-                    txt += 'levels, please choose a different attack.'
-                    chat.ParsePost( txt, True, True ) #a 1.5009
-                    return
-                else:
-                    lvl = int(monkLvl)
-                    if lvl <= 4:
-                        flu = '-2'
-                        atks = False
-                    elif lvl <= 8:
-                        flu = '-1'
-                        atks = False
-                    elif lvl <= 10:
-                        flu = ''
-                        atks = False
-                    elif lvl <= 20:
-                        flu = ''
-                        atks = True
-
-                    self.sendRoll(base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=True)
-                    self.sendRoll(base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=True)
-                    if atks: self.sendRoll(base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=True)
-                    self.sendRoll(base2, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
-                    self.sendRoll(base3, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
-                    self.sendRoll(base4, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
-                    self.sendRoll(base5, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
-                    self.sendRoll(base6, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
-
-    def sendRoll(self, base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=False):
-        if base != 0 or rollAnyWay:
-            base = base + int(stat_mod) + misc + wepMod #m 1.5008
-            if base >= 0: mod1 = "+"
-            else: mod1 = ""
-            txt = ' %s Attack Roll: <b>[1d20%s%s%s]</b>' % (name, mod1, base, flu)
-            txt += ' ===> Damage: <b>[%s%s]</b>' % (dmg, aStrengthMod)
-            self.chat.ParsePost( txt, True, True )
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,attack_panel,"Attacks")
-        wnd.title = "Attacks"
-        return wnd
-
-    def tohtml(self):
-        melee = self.get_attack_data('m')
-        ranged = self.get_attack_data('r')
-        html_str = ("""<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >"""+
-          "<th>Attack</th><th>Total</th><th >Base</th>"+
-          "<th>Abil</th><th>Misc</th></tr>")
-        html_str += "<tr ALIGN='center' ><th >Melee:</th>"
-        html_str += "<td>"+str(melee[0]+melee[1]+melee[2])+"</td>"
-        html_str += "<td>"+str(melee[0])+"</td>"
-        html_str += "<td>"+str(melee[1])+"</td>"
-        html_str += "<td>"+str(melee[2])+"</td></tr>"
-
-        html_str += "<tr ALIGN='center' ><th >Ranged:</th>"
-        html_str += "<td>"+str(ranged[0]+ranged[1]+ranged[2])+"</td>"
-        html_str += "<td>"+str(ranged[0])+"</td>"
-        html_str += "<td>"+str(ranged[1])+"</td>"
-        html_str += "<td>"+str(ranged[2])+"</td></tr></table>"
-
-        n_list = self.xml.findall('weapon')
-        for n in n_list:
-            mod = n.get('mod')
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            ran = n.get('range')
-            total = str(int(mod) + self.get_mod(ran))
-            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
-                    <th colspan=2>Weapon</th>
-                    <th>Attack</th><th >Damage</th><th>Critical</th></tr>"""
-            html_str += "<tr ALIGN='center' ><td  colspan=2>"
-            html_str += n.get('name')+"</td><td>"+total+"</td>"
-            html_str += "<td>"+n.get('damage')+"</td><td>"
-            html_str += n.get('critical')+"</td></tr>"
-            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Range</th><th>Weight</th>
-                        <th>Type</th><th>Size</th><th>Misc Mod</th></tr>"""
-            html_str += "<tr ALIGN='center'><td>"+ran+"</td><td>"
-            html_str += n.get('weight')+"</td>"
-            html_str += "<td>"+n.get('type')+"</td><td>"
-            html_str += n.get('size')+"</td>"
-            html_str += '<td>%s%s</td></tr>'  % (mod1, mod)
-            html_str += """<tr><th BGCOLOR=#E9E9E9 colspan=2>Footnotes:</th>"""
-            html_str += "<th colspan=3>"+safeGetAttr(n,'fn','')+"</th></tr>"
-            html_str += '</table>'
-        return html_str
-
-class attack_grid(wx.grid.Grid):
-    """grid for attacks"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Melee')
-        self.hparent = handler
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.root = getRoot(self) #a 1.9001
-        self.parent = parent
-        self.handler = handler
-        self.rows = (self.handler.melee,self.handler.ranged)
-        self.CreateGrid(2,10)
-        self.SetRowLabelSize(0)
-        col_names = ['Type','base','base 2','base 3','base 4','base 5',
-            'base 6','abil','misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.SetCellValue(0,0,"Melee")
-        self.SetCellValue(1,0,"Ranged")
-        self.refresh_data()
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        climber = parent
-        nameNode = climber.GetClassName()
-        while nameNode != 'wxFrame':
-            climber = climber.parent
-            nameNode = climber.GetClassName()
-        masterFrame=climber
-        masterFrame.refreshMRdata=self.refresh_data
-
-        handler.mrFrame.append(masterFrame)
-
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col==1: self.rows[row].set('base',value)
-            elif col== 2: self.rows[row].set('second',value)
-            elif col== 3: self.rows[row].set('third',value)
-            elif col== 4: self.rows[row].set('forth',value)
-            elif col== 5: self.rows[row].set('fifth',value)
-            elif col== 6: self.rows[row].set('sixth',value)
-            elif col== 8: self.rows[row].set('misc',value)
-            self.parent.refresh_data()
-        except: self.SetCellValue(row,col,"0")
-
-    def refresh_data(self):
-
-        melee = self.handler.get_attack_data('m')
-        ranged = self.handler.get_attack_data('r')
-        tmelee = int(melee[0]) + int(melee[6]) + int(melee[7])
-        tranged = int(ranged[0]) + int(ranged[6]) + int(ranged[7])
-        for i in range(0,8):    #a 1.5005
-            self.SetCellValue(0,i+1,str(melee[i]))
-            self.SetCellValue(1,i+1,str(ranged[i]))
-        self.SetCellValue(0,9,str(tmelee))
-        self.SetCellValue(1,9,str(tranged))
-        self.SetReadOnly(0,0)
-        self.SetReadOnly(1,0)
-        self.SetReadOnly(0,7)
-        self.SetReadOnly(1,7)
-        self.SetReadOnly(0,9)
-        self.SetReadOnly(1,9)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+1)
-        self.SetColSize(0,col_w*2)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-class weapon_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        self.hparent = handler                          #a 1.5012
-        self.root = getRoot(self)
-
-        pname = handler.xml.set("name", 'Weapons')
-
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-
-        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer2.Add(wx.Button(self, 10, "Remove Weapon"), 0, wx.EXPAND)
-        sizer2.Add(wx.Size(10,10))
-        sizer2.Add(wx.Button(self, 20, "Add Weapon"), 0, wx.EXPAND)
-
-        sizer.Add(sizer2, 0, wx.EXPAND)
-        sizer.Add(wx.StaticText(self, -1, "Right click a weapon's footnote to see what the footnotes mean."),0, wx.EXPAND)#a 1.5012
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.sizer2 = sizer2
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.on_gridRclick)#a 1.5012
-
-        n_list = handler.xml.findall('weapon')
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.handler = handler
-        self.colAttr = ['name','damage','mod','critical','type','weight',
-                    'range','size','Total','fn',    'comment'] #a 1.5012
-        col_names = ['Name','Damage','To hit\nmod','Critical','Type','Weight',
-                    'Range','Size','Total','Foot\nnotes','Comment'] #a 1.5012
-        gridColCount=len(col_names)#a 1.5012
-        self.grid.CreateGrid(len(n_list),gridColCount,1) #a 1.5012
-        self.grid.SetRowLabelSize(0)
-
-        for i in range(gridColCount): self.grid.SetColLabelValue(i,col_names[i])
-        self.refresh_data()
-        self.temp_dom = None
-
-
-    #mark4
-    #a 1.5012 add entire method.
-    def on_gridRclick(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-
-        if col == 9 and value != 'None':
-            n = self.n_list[row]
-            name = n.get('name')
-            handler = self.hparent
-            masterFrame = handler.frame
-            title = name+"'s Special Weapon Characteristics"
-            fnFrame = wx.Frame(masterFrame, -1, title)
-            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
-            if not self.temp_dom:
-                tree = parse(dir_struct["dnd35"]+ "dnd35weapons.xml")
-                self.temp_dom = tree.getroot()
-            f_list = self.temp_dom.findall('f') # the footnotes
-            n = self.n_list[row]
-            name = n.get('name')
-            footnotes = n.get('fn')
-            html_str = "<html><body>"
-            html_str += """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-                        <th width='10%'>Note</th><th>Description</th></tr>\n"""
-            if footnotes == "":
-                html_str += "<tr ALIGN='center'><td></td>"
-                html_str += "  <td>This weapon has no footnotes</td></tr>"
-            for i in range(len(footnotes)):
-                aNote=footnotes[i]
-                found=False
-                for f in f_list:
-                    if f.get('mark') == aNote:
-                        found=True
-                        text=f.get('txt')
-                        html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
-                                     "<td>"+text+"</td></tr>\n")
-                if not found:
-                    html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
-                       "<td>is not a recognized footnote</td></tr>\n")
-
-            html_str +=  "</table>"
-            html_str +=  "</body> </html> "
-            fnFrame.panel.SetPage(html_str)
-            fnFrame.Show()
-            return
-        pass
-
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 2 and not int(value): # special case for mod, demoted
-            value = "0" #a 5.012 demoted
-            self.n_list[row].set('mod',value) # a 5.012 demoted
-        if not (col == 9 and value == "None" and
-                self.n_list[row].get('fn') == "None"
-                ): #a 5.012 special case for footnotes
-            self.n_list[row].set(self.colAttr[col],value)#a 5.012
-
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        fn = n.get('fn')
-        name = n.get('name')
-        mod = n.get('mod')
-        ran = n.get('range')
-        total = str(int(mod) + self.handler.get_mod(ran))
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetCellValue(i,1,n.get('damage'))
-        self.grid.SetCellValue(i,2,mod)
-        self.grid.SetCellValue(i,3,n.get('critical'))
-        self.grid.SetCellValue(i,4,n.get('type'))
-        self.grid.SetCellValue(i,5,n.get('weight'))
-        self.grid.SetCellValue(i,6,ran)
-        self.grid.SetCellValue(i,7,n.get('size') )
-        self.grid.SetCellValue(i,8,total)
-        self.grid.SetCellValue(i,9,safeGetAttr(n,'fn','None')) #a 1.5012
-        self.grid.SetCellValue(i,10,safeGetAttr(n,'comment','')) #a 1.5012
-        self.grid.SetReadOnly(i,8)
-
-    def on_remove(self,evt): #o 1.6011 correcting wrongful deletion
-        rows = self.grid.GetNumberRows()
-        for i in range(rows-1,-1,-1):   #a 1.6011 or you lose context
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-                self.n_list = self.xml.findall('weapon')
-                self.handler.refresh_weapons()
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd35"]+"dnd35weapons.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('weapon')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('weapon')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_weapons()
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-40)
-        self.sizer.SetDimension(0,s[1]-40,s[0],25)
-        self.sizer2.SetDimension(0,s[1]-15,s[0],15)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols+1)
-        self.grid.SetColSize(0,col_w*2)
-        for i in range(1,cols): self.grid.SetColSize(i,col_w)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-
-class attack_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Melee')
-        self.parent = parent #a 1.9001
-        wx.Panel.__init__(self, parent, -1)
-        self.a_grid = attack_grid(self, handler)
-        self.w_panel = weapon_panel(self, handler)
-        self.sizer = wx.BoxSizer(wx.VERTICAL)
-        self.sizer.Add(self.a_grid, 1, wx.EXPAND)
-        self.sizer.Add(self.w_panel, 2, wx.EXPAND)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-    def refresh_data(self):
-        self.w_panel.refresh_data()
-        self.a_grid.refresh_data()
-
-
-class dnd35armor(combat_char_child):
-    """ Node Handler for ac.  This handler will be
-        created by dnd35char_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        combat_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.ac = self #a 1.6009
-
-    def get_spell_failure(self):
-        return self.get_total('spellfailure')
-
-    def get_total_weight(self):
-        return self.get_total('weight')
-
-    def get_check_pen(self):
-        return self.get_total('checkpenalty')
-
-    def get_armor_class(self):
-        ac_total = 10
-
-        ac_total += self.get_total('bonus')
-        #m 1.5009 change to hardcode dex, was incorrect gv "stat"
-        dex_mod = self.root.abilities.get_mod('Dex')#m 1.5009 hardcode dex
-        max_dex = self.get_max_dex()
-        if dex_mod < max_dex: ac_total += dex_mod
-        else: ac_total += max_dex
-        return ac_total
-
-    def get_max_dex(self):
-        armor_list = self.xml.findall('armor')
-        dex = 10
-        for a in armor_list:
-            temp = int(a.get("maxdex"))
-            if temp < dex: dex = temp
-        return dex
-
-    def get_total(self,attr):
-        armor_list = self.xml.findall('armor')
-        total = 0
-        for a in armor_list: total += int(a.get(attr))
-        return total
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,ac_panel,"Armor")
-        wnd.title = "Armor"
-        return wnd
-
-    def on_rclick( self, evt ):
-        ac = self.get_armor_class()
-        fac = (int(ac)-(self.root.abilities.get_mod('Dex')))
-
-        txt = '((AC: %s Normal, %s Flatfoot))' % ( ac, fac ) #a 1.5002
-        self.chat.ParsePost( txt, True, True )
-
-    def tohtml(self):
-        html_str = """<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
-            <th>AC</th><th>Check Penalty</th><th >Spell Failure</th>
-            <th>Max Dex</th><th>Total Weight</th></tr>"""
-        html_str += "<tr ALIGN='center' >"
-        html_str += "<td>"+str(self.get_armor_class())+"</td>"
-        html_str += "<td>"+str(self.get_check_pen())+"</td>"
-        html_str += "<td>"+str(self.get_spell_failure())+"</td>"
-        html_str += "<td>"+str(self.get_max_dex())+"</td>"
-        html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>"
-        n_list = self.xml.getchildren()
-        for n in n_list:
-            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
-                <th colspan=3>Armor</th><th>Type</th><th >Bonus</th></tr>"""
-            html_str += "<tr ALIGN='center' >"
-            html_str += "<td  colspan=3>"+n.get('name')+"</td>"
-            html_str += "<td>"+n.get('type')+"</td>"
-            html_str += "<td>"+n.get('bonus')+"</td></tr>"
-            html_str += """<tr BGCOLOR=#E9E9E9 >"""
-            html_str += "<th>Check Penalty</th><th>Spell Failure</th>"
-            html_str += "<th>Max Dex</th><th>Speed</th><th>Weight</th></tr>"
-            html_str += "<tr ALIGN='center'>"
-            html_str += "<td>"+n.get('checkpenalty')+"</td>"
-            html_str += "<td>"+n.get('spellfailure')+"</td>"
-            html_str += "<td>"+n.get('maxdex')+"</td>"
-            html_str += "<td>"+n.get('speed')+"</td>"
-            html_str += "<td>"+n.get('weight')+"</td></tr></table>"
-        return html_str
-
-
-class ac_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Armor')
-        self.hparent = handler 
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Armor"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Armor"), 1, wx.EXPAND)
-
-        sizer.Add(sizer1, 0, wx.EXPAND)
-
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.xml = handler.xml
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        col_names = ['Armor','bonus','maxdex','cp','sf','weight','speed','type']
-        self.grid.CreateGrid(len(n_list),len(col_names),1)
-        self.grid.SetRowLabelSize(0)
-        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
-        self.atts =['name','bonus','maxdex','checkpenalty',
-            'spellfailure','weight','speed','type']
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col >= 1 and col <= 5:
-            try:
-                int(value)
-                self.n_list[row].set(self.atts[col],value)
-            except: self.grid.SetCellValue(row,col,"0")
-        else: self.n_list[row].set(self.atts[col],value)
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        for y in range(len(self.atts)): self.grid.SetCellValue(i,y,n.get(self.atts[y]))
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd35"]+"dnd35armor.xml")
-            self.temp_dom = tree.getroot()
-        f_list = self.temp_dom.findall('armor')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols+2)
-        self.grid.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.grid.SetColSize(i,col_w)
+        dlg.Destroy()
+
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+
+class dnd35combat(dnd35_char_child):
+    """ Node handler for a dnd35 charactor
+        <nodehandler name='?'  module='dnd35' class='dnd35char_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5012
+        #mark3
+        dnd35_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('hp','Hit Points',dnd35hp,'gear')
+        self.new_child_handler('attacks','Attacks',dnd35attacks,'spears')
+        self.new_child_handler('ac','Armor',dnd35armor,'spears')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+
+class combat_char_child(node_handler):
+    """ Node Handler for combat.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd35hp(combat_char_child):
+    """ Node Handler for hit points.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        combat_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.6009
+        self.root.hp = self #a 1.6009
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,hp_panel,"Hit Points")
+        wnd.title = "Hit Points"
+        return wnd
+
+    def on_rclick( self, evt ):
+        chp = self.xml.get('current')
+        mhp = self.xml.get('max')
+        txt = '((HP: %s / %s))' % ( chp, mhp )
+        self.chat.ParsePost( txt, True, True )
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 >"
+        html_str += "<tr BGCOLOR=#E9E9E9 ><th colspan=4>Hit Points</th></tr>"
+        html_str += "<tr><th>Max:</th>"
+        html_str += "<td>"+self.xml.get('max')+"</td>"
+        html_str += "<th>Current:</th>"
+        html_str += "<td>"+self.xml.get('current')+"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+class hp_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.hparent = handler
+        pname = handler.xml.set("name", 'HitPoints')
+        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
+        self.xml = handler.xml
+        self.sizer.AddMany([ (wx.StaticText(self, -1, "HP Current:"),   0,
+           wx.ALIGN_CENTER_VERTICAL),
+          (wx.TextCtrl(self, HP_CUR,
+           self.xml.get('current')),   0, wx.EXPAND),
+          (wx.StaticText(self, -1, "HP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
+          (wx.TextCtrl(self, HP_MAX, self.xml.get('max')),
+           0, wx.EXPAND),
+         ])
+        self.sizer.AddGrowableCol(1)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_MAX)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_CUR)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == HP_CUR: self.xml.set('current',evt.GetString())
+        elif id == HP_MAX: self.xml.set('max',evt.GetString())
+
+    def on_size(self,evt):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+class dnd35attacks(combat_char_child):
+    """ Node Handler for attacks.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        combat_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.attacks = self #a 1.6009 so others can find me.
+        self.mrFrame = [] #a 1.9001
+        self.updateFootNotes = False
+        self.updateFootNotes = False
+        self.html_str = "<html><body>"
+        self.html_str += ("<br />  This character has weapons with no "+
+             "footnotes.  This program will "+
+             "add footnotes to the weapons which have names that still match "+
+             "the orginal names.  If you have changed the weapon name, you "+
+             "will see some weapons with a footnote of 'X', you will have "+
+             "to either delete and re-add the weapon, or research "+
+             "and add the correct footnotes for the weapon.\n"+
+             "<br />  Please be aware, that only the bow/sling footnote is "+
+             "being used to affect changes to rolls; implemenation of other "+
+             "footnotes to automaticly adjust rolls will be completed as "+
+             "soon as time allows." +
+             "<br /><br />Update to character:"+self.root.general.charName+
+             "<br /><br />"+
+             """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+              <th width='80%'>Weapon Name</th><th>Added Footnote</th></tr>\n""")
+        self.temp_dom={}
+        node_list = self.xml.findall('melee')
+        self.melee = node_list[0]
+        node_list = self.xml.findall('ranged')
+        self.ranged = node_list[0]
+        self.refresh_weapons()
+        if self.updateFootNotes == True:
+            self.updateFootNotes = False
+            name = self.root.general.charName
+            self.html_str +=  "</table>"
+            self.html_str +=  "</body> </html> "
+            masterFrame = self.root.frame
+            title = name+"'s weapons' update to have footnotes"
+            fnFrame = wx.Frame(masterFrame, -1, title)
+            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
+            fnFrame.panel.SetPage(self.html_str)
+            fnFrame.Show()
+
+    #a 1.9001 this whole method
+    def refreshMRdata(self): # refresh the data in the melee/ranged section
+        # of the attack chart.
+        # count backwards, maintains context despite "removes"
+        for i in range(len(self.mrFrame)-1,-1,-1):   #a 1.9001
+            x = self.mrFrame[i]
+            if x == None: x.refreshMRdata() #a 1.9001
+            else: self.mrFrame.remove(x)
+
+    def refresh_weapons(self):
+        self.weapons = {}
+
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('weapon')
+        for n in node_list:
+            name = n.get('name')
+            fn = safeGetAttr(n,'fn') #a 1.5012 can be removed when
+            if fn == None:#a 1.5012
+                self.updateFootNotes=True
+                self.updateFootN(n) #a 1.5012
+            new_tree_node = tree.AppendItem(
+                self.mytree_node,name,icons['sword'],icons['sword'])
+            tree.SetPyData(new_tree_node,self)
+            self.weapons[name]=n
+
+    def updateFootN(self,n):#a 1.5012 this whole function
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd35"]+"dnd35weapons.xml")
+            self.temp_dom = tree.getroot()
+        nameF = n.get('name')
+        w_list = self.temp_dom.findall('weapon')
+        found = False
+        for w in w_list:
+            if nameF == w.get('name'):
+                found = True
+                fnN = safeGetAttr(n,'fn')
+                if fnN == None or fnN == 'None':
+                    fnW = w.get('fn')
+                    self.html_str += ("<tr ALIGN='center'><td>"+nameF+"</td>"+
+                                     "<td>"+fnW+"</td></tr>\n")
+                    n.set('fn',fnW)
+                break
+        if not found:
+            self.html_str += ("<tr ALIGN='center'><td>"+nameF+" - Custom "+
+              "Weapon, research "+
+              "and update manually; setting footnote to indicate custom</td>"+
+                                     "<td>"+'X'+"</td></tr>\n")
+            n.set('fn','X')
+
+
+    def get_mod(self,type='m'):
+        (base, base2, base3, base4, base5, base6, stat_mod, misc) \
+            = self.get_attack_data(type)
+        return int(base + misc + int(stat_mod))
+
+    def get_attack_data(self,type='m'):
+        if type=='m' or type=='0':
+            stat = 'Str'  #m was dnd_globals["stats"]['Str'] 1.5002
+            temp = self.melee
+        else:
+            stat = 'Dex'  #m was dnd_globals["stats"]['Dex'] 1.5002
+            temp = self.ranged
+        stat_mod = -7
+        stat_mod = self.root.abilities.get_mod(stat)    #a 1.5002
+        base = int(temp.get('base'))
+        base2 = int(temp.get('second'))
+        base3 = int(temp.get('third'))
+        base4 = int(temp.get('forth'))
+        base5 = int(temp.get('fifth'))
+        base6 = int(temp.get('sixth'))
+        misc = int(temp.get('misc'))
+        return (base, base2, base3, base4, base5, base6, stat_mod ,misc)
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node: return 
+        else:
+            mod = int(self.weapons[name].get('mod'))
+            wepMod = mod #a 1.5008
+            footNotes = safeGetAttr(self.weapons[name],'fn','')
+            cat = self.weapons[name].get('category') #a1.6001
+            result = split(cat,"-",2) #a 1.6001
+            if len(result) < 2: #a 1.6021 this if & else
+                print "warning: 1.6002 unable to interpret weapon category"
+                print "format 'type weapon-[Range|Melee]', probably missing"
+                print "the hyphen.  Assuming Melee"
+                print "weapon name: ",name
+                tres="Melee"
+            else:
+                tres=result[1]
+            if tres == 'Melee': rangeOrMelee = 'm' 
+            elif tres == 'Ranged': rangeOrMelee = 'r'
+            else:
+                print "warning: 1.6001 unable to interpret weapon category"
+                print "treating weapon as Melee, please correct xml"
+                print "weapon name:",name
+                rangeOrMelee ='m'
+            mod = mod + self.get_mod(rangeOrMelee) #a 1.5008
+            chat = self.chat
+            dmg = self.weapons[name].get('damage')
+
+            #a 1.6003 start code fix instance a
+            result = split(dmg,"/",2)
+            dmg = result[0]
+            monkLvl = self.root.classes.get_class_lvl('Monk') # a 1.5002
+            if find(dmg, "Monk Med") > -1:
+                if monkLvl == None:     #a 1.5009
+                    txt = 'Attempting to use monk attack, but has no monk '
+                    txt += 'levels, please choose a different attack.'
+                    chat.ParsePost( txt, True, True ) #a 1.5009
+                    return #a 1.5009
+                else:   #a 1.5009
+                    lvl=int(monkLvl)
+                    if lvl <= 3: dmg = dmg.replace("Monk Med", "1d6")
+                    elif lvl <= 7: dmg = dmg.replace("Monk Med", "1d8")
+                    elif lvl <= 11: dmg = dmg.replace("Monk Med", "1d10")
+                    elif lvl <= 15: dmg = dmg.replace("Monk Med", "2d6")
+                    elif lvl <= 19: dmg = dmg.replace("Monk Med", "2d8")
+                    elif lvl <= 20: dmg = dmg.replace("Monk Med", "2d10")
+            if find(dmg, "Monk Small") > -1:
+                if monkLvl == None:     #a 1.5009
+                    txt = 'Attempting to use monk attack, but has no monk '
+                    txt += 'levels, please choose a different attack.'
+                    chat.ParsePost( txt, True, True ) #a 1.5009
+                    return #a 1.5009
+                else:   #a 1.5009
+                    lvl=int(monkLvl)
+                    if lvl <= 3: dmg = dmg.replace("Monk Small", "1d4")
+                    elif lvl <= 7: dmg = dmg.replace("Monk Small", "1d6")
+                    elif lvl <= 11: dmg = dmg.replace("Monk Small", "1d8")
+                    elif lvl <= 15: dmg = dmg.replace("Monk Small", "1d10")
+                    elif lvl <= 19: dmg = dmg.replace("Monk Small", "2d6")
+                    elif lvl <= 20: dmg = dmg.replace("Monk Small", "2d8")
+            if find(dmg, "Monk Large") > -1:
+                if monkLvl == None:     #a 1.5009
+                    txt = 'Attempting to use monk attack, but has no monk '
+                    txt += 'levels, please choose a different attack.'
+                    chat.ParsePost( txt, True, True ) #a 1.5009
+                    return #a 1.5009
+                else:   #a 1.5009
+                    lvl=int(monkLvl)
+                    if lvl <= 3: dmg = dmg.replace("Monk Large", "1d8")
+                    elif lvl <= 7: dmg = dmg.replace("Monk Large", "2d6")
+                    elif lvl <= 11: dmg = dmg.replace("Monk Large", "2d8")
+                    elif lvl <= 15: dmg = dmg.replace("Monk Large", "3d6")
+                    elif lvl <= 19: dmg = dmg.replace("Monk Large", "3d8")
+                    elif lvl <= 20: dmg = dmg.replace("Monk Large", "4d8")
+            flurry = False
+            str_mod = self.root.abilities.get_mod('Str') #a 1.5007,11,12,13
+            if rangeOrMelee == 'r':                     #a 1.5008
+                #if off_hand == True then stat_mod = stat_mod/2 #o 1.5013
+                #c 1.5007 ranged weapons normally get no str mod
+                if find(footNotes,'b') > -1:#a 1.5012 if it's a bow
+                    if str_mod >= 0: str_mod = 0 
+                else: str_mod = 0
+            mod2 = "" 
+            if str_mod >= 0: mod2 = "+"   #1.6 tidy up code.
+            aStrengthMod = mod2 + str(str_mod) #a 1.5008 applicable strength mod
+            if find(name ,"Flurry of Blows") > -1:  flurry = True
+            (base, base2, base3, base4, base5, base6, stat_mod, misc) = self.get_attack_data(rangeOrMelee)  #a 1.5008
+            name = name.replace('(Monk Med)', '')
+            name = name.replace('(Monk Small)', '')
+            if not flurry:
+                if name == 'Shuriken':
+                    for n in xrange(3):
+                        self.sendRoll(base, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod, rollAnyWay=True)
+                        self.sendRoll(base2, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                        self.sendRoll(base3, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                        self.sendRoll(base4, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                        self.sendRoll(base5, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                        self.sendRoll(base6, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                else:
+                    self.sendRoll(base, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod, rollAnyWay=True)
+                    self.sendRoll(base2, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                    self.sendRoll(base3, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                    self.sendRoll(base4, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                    self.sendRoll(base5, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+                    self.sendRoll(base6, stat_mod, misc, wepMod, name, '', dmg, aStrengthMod)
+            else:
+                if monkLvl == None:
+                    txt = 'Attempting to use monk attack, but has no monk '
+                    txt += 'levels, please choose a different attack.'
+                    chat.ParsePost( txt, True, True ) #a 1.5009
+                    return
+                else:
+                    lvl = int(monkLvl)
+                    if lvl <= 4:
+                        flu = '-2'
+                        atks = False
+                    elif lvl <= 8:
+                        flu = '-1'
+                        atks = False
+                    elif lvl <= 10:
+                        flu = ''
+                        atks = False
+                    elif lvl <= 20:
+                        flu = ''
+                        atks = True
+
+                    self.sendRoll(base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=True)
+                    self.sendRoll(base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=True)
+                    if atks: self.sendRoll(base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=True)
+                    self.sendRoll(base2, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
+                    self.sendRoll(base3, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
+                    self.sendRoll(base4, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
+                    self.sendRoll(base5, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
+                    self.sendRoll(base6, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod)
+
+    def sendRoll(self, base, stat_mod, misc, wepMod, name, flu, dmg, aStrengthMod, rollAnyWay=False):
+        if base != 0 or rollAnyWay:
+            base = base + int(stat_mod) + misc + wepMod #m 1.5008
+            if base >= 0: mod1 = "+"
+            else: mod1 = ""
+            txt = ' %s Attack Roll: <b>[1d20%s%s%s]</b>' % (name, mod1, base, flu)
+            txt += ' ===> Damage: <b>[%s%s]</b>' % (dmg, aStrengthMod)
+            self.chat.ParsePost( txt, True, True )
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,attack_panel,"Attacks")
+        wnd.title = "Attacks"
+        return wnd
+
+    def tohtml(self):
+        melee = self.get_attack_data('m')
+        ranged = self.get_attack_data('r')
+        html_str = ("""<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >"""+
+          "<th>Attack</th><th>Total</th><th >Base</th>"+
+          "<th>Abil</th><th>Misc</th></tr>")
+        html_str += "<tr ALIGN='center' ><th >Melee:</th>"
+        html_str += "<td>"+str(melee[0]+melee[1]+melee[2])+"</td>"
+        html_str += "<td>"+str(melee[0])+"</td>"
+        html_str += "<td>"+str(melee[1])+"</td>"
+        html_str += "<td>"+str(melee[2])+"</td></tr>"
+
+        html_str += "<tr ALIGN='center' ><th >Ranged:</th>"
+        html_str += "<td>"+str(ranged[0]+ranged[1]+ranged[2])+"</td>"
+        html_str += "<td>"+str(ranged[0])+"</td>"
+        html_str += "<td>"+str(ranged[1])+"</td>"
+        html_str += "<td>"+str(ranged[2])+"</td></tr></table>"
+
+        n_list = self.xml.findall('weapon')
+        for n in n_list:
+            mod = n.get('mod')
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            ran = n.get('range')
+            total = str(int(mod) + self.get_mod(ran))
+            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
+                    <th colspan=2>Weapon</th>
+                    <th>Attack</th><th >Damage</th><th>Critical</th></tr>"""
+            html_str += "<tr ALIGN='center' ><td  colspan=2>"
+            html_str += n.get('name')+"</td><td>"+total+"</td>"
+            html_str += "<td>"+n.get('damage')+"</td><td>"
+            html_str += n.get('critical')+"</td></tr>"
+            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Range</th><th>Weight</th>
+                        <th>Type</th><th>Size</th><th>Misc Mod</th></tr>"""
+            html_str += "<tr ALIGN='center'><td>"+ran+"</td><td>"
+            html_str += n.get('weight')+"</td>"
+            html_str += "<td>"+n.get('type')+"</td><td>"
+            html_str += n.get('size')+"</td>"
+            html_str += '<td>%s%s</td></tr>'  % (mod1, mod)
+            html_str += """<tr><th BGCOLOR=#E9E9E9 colspan=2>Footnotes:</th>"""
+            html_str += "<th colspan=3>"+safeGetAttr(n,'fn','')+"</th></tr>"
+            html_str += '</table>'
+        return html_str
+
+class attack_grid(wx.grid.Grid):
+    """grid for attacks"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Melee')
+        self.hparent = handler
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.root = getRoot(self) #a 1.9001
+        self.parent = parent
+        self.handler = handler
+        self.rows = (self.handler.melee,self.handler.ranged)
+        self.CreateGrid(2,10)
+        self.SetRowLabelSize(0)
+        col_names = ['Type','base','base 2','base 3','base 4','base 5',
+            'base 6','abil','misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.SetCellValue(0,0,"Melee")
+        self.SetCellValue(1,0,"Ranged")
+        self.refresh_data()
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        climber = parent
+        nameNode = climber.GetClassName()
+        while nameNode != 'wxFrame':
+            climber = climber.parent
+            nameNode = climber.GetClassName()
+        masterFrame=climber
+        masterFrame.refreshMRdata=self.refresh_data
+
+        handler.mrFrame.append(masterFrame)
+
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col==1: self.rows[row].set('base',value)
+            elif col== 2: self.rows[row].set('second',value)
+            elif col== 3: self.rows[row].set('third',value)
+            elif col== 4: self.rows[row].set('forth',value)
+            elif col== 5: self.rows[row].set('fifth',value)
+            elif col== 6: self.rows[row].set('sixth',value)
+            elif col== 8: self.rows[row].set('misc',value)
+            self.parent.refresh_data()
+        except: self.SetCellValue(row,col,"0")
+
+    def refresh_data(self):
+
+        melee = self.handler.get_attack_data('m')
+        ranged = self.handler.get_attack_data('r')
+        tmelee = int(melee[0]) + int(melee[6]) + int(melee[7])
+        tranged = int(ranged[0]) + int(ranged[6]) + int(ranged[7])
+        for i in range(0,8):    #a 1.5005
+            self.SetCellValue(0,i+1,str(melee[i]))
+            self.SetCellValue(1,i+1,str(ranged[i]))
+        self.SetCellValue(0,9,str(tmelee))
+        self.SetCellValue(1,9,str(tranged))
+        self.SetReadOnly(0,0)
+        self.SetReadOnly(1,0)
+        self.SetReadOnly(0,7)
+        self.SetReadOnly(1,7)
+        self.SetReadOnly(0,9)
+        self.SetReadOnly(1,9)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+1)
+        self.SetColSize(0,col_w*2)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+class weapon_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        self.hparent = handler                          #a 1.5012
+        self.root = getRoot(self)
+
+        pname = handler.xml.set("name", 'Weapons')
+
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+
+        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer2.Add(wx.Button(self, 10, "Remove Weapon"), 0, wx.EXPAND)
+        sizer2.Add(wx.Size(10,10))
+        sizer2.Add(wx.Button(self, 20, "Add Weapon"), 0, wx.EXPAND)
+
+        sizer.Add(sizer2, 0, wx.EXPAND)
+        sizer.Add(wx.StaticText(self, -1, "Right click a weapon's footnote to see what the footnotes mean."),0, wx.EXPAND)#a 1.5012
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.sizer2 = sizer2
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.on_gridRclick)#a 1.5012
+
+        n_list = handler.xml.findall('weapon')
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.handler = handler
+        self.colAttr = ['name','damage','mod','critical','type','weight',
+                    'range','size','Total','fn',    'comment'] #a 1.5012
+        col_names = ['Name','Damage','To hit\nmod','Critical','Type','Weight',
+                    'Range','Size','Total','Foot\nnotes','Comment'] #a 1.5012
+        gridColCount=len(col_names)#a 1.5012
+        self.grid.CreateGrid(len(n_list),gridColCount,1) #a 1.5012
+        self.grid.SetRowLabelSize(0)
+
+        for i in range(gridColCount): self.grid.SetColLabelValue(i,col_names[i])
+        self.refresh_data()
+        self.temp_dom = None
+
+
+    #mark4
+    #a 1.5012 add entire method.
+    def on_gridRclick(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+
+        if col == 9 and value != 'None':
+            n = self.n_list[row]
+            name = n.get('name')
+            handler = self.hparent
+            masterFrame = handler.frame
+            title = name+"'s Special Weapon Characteristics"
+            fnFrame = wx.Frame(masterFrame, -1, title)
+            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
+            if not self.temp_dom:
+                tree = parse(dir_struct["dnd35"]+ "dnd35weapons.xml")
+                self.temp_dom = tree.getroot()
+            f_list = self.temp_dom.findall('f') # the footnotes
+            n = self.n_list[row]
+            name = n.get('name')
+            footnotes = n.get('fn')
+            html_str = "<html><body>"
+            html_str += """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+                        <th width='10%'>Note</th><th>Description</th></tr>\n"""
+            if footnotes == "":
+                html_str += "<tr ALIGN='center'><td></td>"
+                html_str += "  <td>This weapon has no footnotes</td></tr>"
+            for i in range(len(footnotes)):
+                aNote=footnotes[i]
+                found=False
+                for f in f_list:
+                    if f.get('mark') == aNote:
+                        found=True
+                        text=f.get('txt')
+                        html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
+                                     "<td>"+text+"</td></tr>\n")
+                if not found:
+                    html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
+                       "<td>is not a recognized footnote</td></tr>\n")
+
+            html_str +=  "</table>"
+            html_str +=  "</body> </html> "
+            fnFrame.panel.SetPage(html_str)
+            fnFrame.Show()
+            return
+        pass
+
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 2 and not int(value): # special case for mod, demoted
+            value = "0" #a 5.012 demoted
+            self.n_list[row].set('mod',value) # a 5.012 demoted
+        if not (col == 9 and value == "None" and
+                self.n_list[row].get('fn') == "None"
+                ): #a 5.012 special case for footnotes
+            self.n_list[row].set(self.colAttr[col],value)#a 5.012
+
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        fn = n.get('fn')
+        name = n.get('name')
+        mod = n.get('mod')
+        ran = n.get('range')
+        total = str(int(mod) + self.handler.get_mod(ran))
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetCellValue(i,1,n.get('damage'))
+        self.grid.SetCellValue(i,2,mod)
+        self.grid.SetCellValue(i,3,n.get('critical'))
+        self.grid.SetCellValue(i,4,n.get('type'))
+        self.grid.SetCellValue(i,5,n.get('weight'))
+        self.grid.SetCellValue(i,6,ran)
+        self.grid.SetCellValue(i,7,n.get('size') )
+        self.grid.SetCellValue(i,8,total)
+        self.grid.SetCellValue(i,9,safeGetAttr(n,'fn','None')) #a 1.5012
+        self.grid.SetCellValue(i,10,safeGetAttr(n,'comment','')) #a 1.5012
+        self.grid.SetReadOnly(i,8)
+
+    def on_remove(self,evt): #o 1.6011 correcting wrongful deletion
+        rows = self.grid.GetNumberRows()
+        for i in range(rows-1,-1,-1):   #a 1.6011 or you lose context
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+                self.n_list = self.xml.findall('weapon')
+                self.handler.refresh_weapons()
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd35"]+"dnd35weapons.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('weapon')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('weapon')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_weapons()
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-40)
+        self.sizer.SetDimension(0,s[1]-40,s[0],25)
+        self.sizer2.SetDimension(0,s[1]-15,s[0],15)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols+1)
+        self.grid.SetColSize(0,col_w*2)
+        for i in range(1,cols): self.grid.SetColSize(i,col_w)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+
+class attack_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Melee')
+        self.parent = parent #a 1.9001
+        wx.Panel.__init__(self, parent, -1)
+        self.a_grid = attack_grid(self, handler)
+        self.w_panel = weapon_panel(self, handler)
+        self.sizer = wx.BoxSizer(wx.VERTICAL)
+        self.sizer.Add(self.a_grid, 1, wx.EXPAND)
+        self.sizer.Add(self.w_panel, 2, wx.EXPAND)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+    def refresh_data(self):
+        self.w_panel.refresh_data()
+        self.a_grid.refresh_data()
+
+
+class dnd35armor(combat_char_child):
+    """ Node Handler for ac.  This handler will be
+        created by dnd35char_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        combat_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.ac = self #a 1.6009
+
+    def get_spell_failure(self):
+        return self.get_total('spellfailure')
+
+    def get_total_weight(self):
+        return self.get_total('weight')
+
+    def get_check_pen(self):
+        return self.get_total('checkpenalty')
+
+    def get_armor_class(self):
+        ac_total = 10
+
+        ac_total += self.get_total('bonus')
+        #m 1.5009 change to hardcode dex, was incorrect gv "stat"
+        dex_mod = self.root.abilities.get_mod('Dex')#m 1.5009 hardcode dex
+        max_dex = self.get_max_dex()
+        if dex_mod < max_dex: ac_total += dex_mod
+        else: ac_total += max_dex
+        return ac_total
+
+    def get_max_dex(self):
+        armor_list = self.xml.findall('armor')
+        dex = 10
+        for a in armor_list:
+            temp = int(a.get("maxdex"))
+            if temp < dex: dex = temp
+        return dex
+
+    def get_total(self,attr):
+        armor_list = self.xml.findall('armor')
+        total = 0
+        for a in armor_list: total += int(a.get(attr))
+        return total
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,ac_panel,"Armor")
+        wnd.title = "Armor"
+        return wnd
+
+    def on_rclick( self, evt ):
+        ac = self.get_armor_class()
+        fac = (int(ac)-(self.root.abilities.get_mod('Dex')))
+
+        txt = '((AC: %s Normal, %s Flatfoot))' % ( ac, fac ) #a 1.5002
+        self.chat.ParsePost( txt, True, True )
+
+    def tohtml(self):
+        html_str = """<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
+            <th>AC</th><th>Check Penalty</th><th >Spell Failure</th>
+            <th>Max Dex</th><th>Total Weight</th></tr>"""
+        html_str += "<tr ALIGN='center' >"
+        html_str += "<td>"+str(self.get_armor_class())+"</td>"
+        html_str += "<td>"+str(self.get_check_pen())+"</td>"
+        html_str += "<td>"+str(self.get_spell_failure())+"</td>"
+        html_str += "<td>"+str(self.get_max_dex())+"</td>"
+        html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>"
+        n_list = self.xml.getchildren()
+        for n in n_list:
+            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
+                <th colspan=3>Armor</th><th>Type</th><th >Bonus</th></tr>"""
+            html_str += "<tr ALIGN='center' >"
+            html_str += "<td  colspan=3>"+n.get('name')+"</td>"
+            html_str += "<td>"+n.get('type')+"</td>"
+            html_str += "<td>"+n.get('bonus')+"</td></tr>"
+            html_str += """<tr BGCOLOR=#E9E9E9 >"""
+            html_str += "<th>Check Penalty</th><th>Spell Failure</th>"
+            html_str += "<th>Max Dex</th><th>Speed</th><th>Weight</th></tr>"
+            html_str += "<tr ALIGN='center'>"
+            html_str += "<td>"+n.get('checkpenalty')+"</td>"
+            html_str += "<td>"+n.get('spellfailure')+"</td>"
+            html_str += "<td>"+n.get('maxdex')+"</td>"
+            html_str += "<td>"+n.get('speed')+"</td>"
+            html_str += "<td>"+n.get('weight')+"</td></tr></table>"
+        return html_str
+
+
+class ac_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Armor')
+        self.hparent = handler 
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Armor"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Armor"), 1, wx.EXPAND)
+
+        sizer.Add(sizer1, 0, wx.EXPAND)
+
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.xml = handler.xml
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        col_names = ['Armor','bonus','maxdex','cp','sf','weight','speed','type']
+        self.grid.CreateGrid(len(n_list),len(col_names),1)
+        self.grid.SetRowLabelSize(0)
+        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
+        self.atts =['name','bonus','maxdex','checkpenalty',
+            'spellfailure','weight','speed','type']
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col >= 1 and col <= 5:
+            try:
+                int(value)
+                self.n_list[row].set(self.atts[col],value)
+            except: self.grid.SetCellValue(row,col,"0")
+        else: self.n_list[row].set(self.atts[col],value)
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        for y in range(len(self.atts)): self.grid.SetCellValue(i,y,n.get(self.atts[y]))
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd35"]+"dnd35armor.xml")
+            self.temp_dom = tree.getroot()
+        f_list = self.temp_dom.findall('armor')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols+2)
+        self.grid.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.grid.SetColSize(i,col_w)
--- a/orpg/gametree/nodehandlers/dnd3e.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/dnd3e.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,2815 +1,2815 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: dnd3e.py
-# Author: Chris Davis & Digitalxero
-# Maintainer: leadb
-# Version:
-#   $Id: dnd3e.py,v 1.33 2006/11/04 21:24:21 digitalxero Exp $
-#
-# Description: The file contains code for the dnd3e nodehanlers
-#
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: dnd3e.py
+# Author: Chris Davis & Digitalxero
+# Maintainer: leadb
+# Version:
+#   $Id: dnd3e.py,v 1.33 2006/11/04 21:24:21 digitalxero Exp $
+#
+# Description: The file contains code for the dnd3e nodehanlers
+#
 
-from core import *
-from containers import *
-from string import *  #a 1.6003
+from core import *
+from containers import *
+from string import *  #a 1.6003
 from inspect import *  #a 1.9001
 from orpg.dirpath import dir_struct
 from orpg.tools.orpg_log import debug
 from xml.etree.ElementTree import parse
-
-dnd3e_EXPORT = wx.NewId()
-############Global Stuff##############
-
-HP_CUR = wx.NewId()
-HP_MAX = wx.NewId()
-PP_CUR = wx.NewId()
-PP_MAX = wx.NewId()
-PP_FRE = wx.NewId()
-PP_MFRE = wx.NewId()
-HOWTO_MAX = wx.NewId()
-
-def getRoot (node): # a 1.5002 this whole function is new.
-    root = None
-    target = node
-    while target != None:
-        root = target
-        target = target.hparent
-    return root
+
+dnd3e_EXPORT = wx.NewId()
+############Global Stuff##############
+
+HP_CUR = wx.NewId()
+HP_MAX = wx.NewId()
+PP_CUR = wx.NewId()
+PP_MAX = wx.NewId()
+PP_FRE = wx.NewId()
+PP_MFRE = wx.NewId()
+HOWTO_MAX = wx.NewId()
+
+def getRoot (node): # a 1.5002 this whole function is new.
+    root = None
+    target = node
+    while target != None:
+        root = target
+        target = target.hparent
+    return root
 
-# if a method runs getRoot for its instance and assigns the
-# value returned to self.root, you can get to instances X via Y
-# instance handle   via     invocation
-# ---------------   ---     -----------
-# classes           via     self.root.classes
-# abilities         via     self.root.abilities
-# pp                via     self.root.pp
-# general           via     self.root.general
-# saves             via     self.root.saves
-# attacks           via     self.root.attacks
-# ac                via     self.root.ac
-# feats             via     self.root.feats
-# spells            via     self.root.spells
-# divine            via     self.root.divine
-# powers            via     self.root.powers
-# inventory         via     self.root.inventory
-# hp                via     self.root.hp
-# skills            via     self.root.skills
-#... if other instances are needed and the instance exists uniquely,
-# add to the instance you need access to in the __init__ section the following:
-#       self.hparent = parent # or handler if a wx instance, also add up chain
-#       self.root = getRoot(self)
-#       self.root.{instance handle} = self
-#       # replace {instance handle} with your designation
-# then, where you need access to the instance, simply add this to the instance
-# that needs to reference
-#       self.hparent = getRoot(self) # in the init section, if not already there
-#       self.root = getRoot(self)    # also in the init
-#   then to refer to the instance where you need it:
-#       self.root.{instance handle}.{whatever you need}
-#       # replace {instance handle} with your designation
-#       # replace {whatever you need} with the attribute/method u want.
-
-def safeGetAttr(node, label, defRetV=None):
-    cna=node.attrib
+# if a method runs getRoot for its instance and assigns the
+# value returned to self.root, you can get to instances X via Y
+# instance handle   via     invocation
+# ---------------   ---     -----------
+# classes           via     self.root.classes
+# abilities         via     self.root.abilities
+# pp                via     self.root.pp
+# general           via     self.root.general
+# saves             via     self.root.saves
+# attacks           via     self.root.attacks
+# ac                via     self.root.ac
+# feats             via     self.root.feats
+# spells            via     self.root.spells
+# divine            via     self.root.divine
+# powers            via     self.root.powers
+# inventory         via     self.root.inventory
+# hp                via     self.root.hp
+# skills            via     self.root.skills
+#... if other instances are needed and the instance exists uniquely,
+# add to the instance you need access to in the __init__ section the following:
+#       self.hparent = parent # or handler if a wx instance, also add up chain
+#       self.root = getRoot(self)
+#       self.root.{instance handle} = self
+#       # replace {instance handle} with your designation
+# then, where you need access to the instance, simply add this to the instance
+# that needs to reference
+#       self.hparent = getRoot(self) # in the init section, if not already there
+#       self.root = getRoot(self)    # also in the init
+#   then to refer to the instance where you need it:
+#       self.root.{instance handle}.{whatever you need}
+#       # replace {instance handle} with your designation
+#       # replace {whatever you need} with the attribute/method u want.
+
+def safeGetAttr(node, label, defRetV=None):
+    cna=node.attrib
     for key in cna:
-        if key == label: return cna[key]
-    return defRetV
-
-
-########End of My global Stuff########
-########Start of Main Node Handlers#######
-class dnd3echar_handler(container_handler):
-    """ Node handler for a dnd3e charactor
-        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.Version = "v1.901" #a 1.6000 general documentation, usage.
-
-        print "dnd3echar_handler - version:", self.Version #m 1.6000
-
-        self.hparent = None 
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('howtouse','HowTo use this tool',dnd3ehowto,'note')
-        self.new_child_handler('general','GeneralInformation',dnd3egeneral,'gear')
-        self.new_child_handler('inventory','MoneyAndInventory',dnd3einventory,'money')
-        self.new_child_handler('character','ClassesAndStats',dnd3eclassnstats,'knight')
-        self.new_child_handler('snf','SkillsAndFeats',dnd3eskillsnfeats,'book')
-        self.new_child_handler('combat','Combat',dnd3ecombat,'spears')
-        self.new_child_handler('snp','SpellsAndPowers',dnd3esnp,'flask')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-    def tohtml(self):
-        html_str = "<table><tr><td colspan=2 >"
-        html_str += self.general.tohtml()+"</td></tr>"
-        html_str += "<tr><td width='50%' valign=top >"+self.abilities.tohtml()
-        html_str += "<P>" + self.saves.tohtml()
-        html_str += "<P>" + self.attacks.tohtml()
-        html_str += "<P>" + self.ac.tohtml()
-        html_str += "<P>" + self.feats.tohtml()
-        html_str += "<P>" + self.spells.tohtml()
-        html_str += "<P>" + self.divine.tohtml()
-        html_str += "<P>" + self.powers.tohtml()
-        html_str += "<P>" + self.inventory.tohtml() +"</td>"
-        html_str += "<td width='50%' valign=top >"+self.classes.tohtml()
-        html_str += "<P>" + self.hp.tohtml()
-        html_str += "<P>" + self.pp.tohtml()
-        html_str += "<P>" + self.skills.tohtml() +"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-    def about(self):
-        """html_str = "<img src='" + dir_struct["icon"]
-        html_str += "dnd3e_logo.gif' ><br><b>dnd3e Character Tool "
-        html_str += self.Version+"</b>"
-        html_str += "<br>by Dj Gilcrease<br>digitalxero@gmail.com"
+        if key == label: return cna[key]
+    return defRetV
+
+
+########End of My global Stuff########
+########Start of Main Node Handlers#######
+class dnd3echar_handler(container_handler):
+    """ Node handler for a dnd3e charactor
+        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.Version = "v1.901" #a 1.6000 general documentation, usage.
+
+        print "dnd3echar_handler - version:", self.Version #m 1.6000
+
+        self.hparent = None 
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('howtouse','HowTo use this tool',dnd3ehowto,'note')
+        self.new_child_handler('general','GeneralInformation',dnd3egeneral,'gear')
+        self.new_child_handler('inventory','MoneyAndInventory',dnd3einventory,'money')
+        self.new_child_handler('character','ClassesAndStats',dnd3eclassnstats,'knight')
+        self.new_child_handler('snf','SkillsAndFeats',dnd3eskillsnfeats,'book')
+        self.new_child_handler('combat','Combat',dnd3ecombat,'spears')
+        self.new_child_handler('snp','SpellsAndPowers',dnd3esnp,'flask')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+    def tohtml(self):
+        html_str = "<table><tr><td colspan=2 >"
+        html_str += self.general.tohtml()+"</td></tr>"
+        html_str += "<tr><td width='50%' valign=top >"+self.abilities.tohtml()
+        html_str += "<P>" + self.saves.tohtml()
+        html_str += "<P>" + self.attacks.tohtml()
+        html_str += "<P>" + self.ac.tohtml()
+        html_str += "<P>" + self.feats.tohtml()
+        html_str += "<P>" + self.spells.tohtml()
+        html_str += "<P>" + self.divine.tohtml()
+        html_str += "<P>" + self.powers.tohtml()
+        html_str += "<P>" + self.inventory.tohtml() +"</td>"
+        html_str += "<td width='50%' valign=top >"+self.classes.tohtml()
+        html_str += "<P>" + self.hp.tohtml()
+        html_str += "<P>" + self.pp.tohtml()
+        html_str += "<P>" + self.skills.tohtml() +"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+    def about(self):
+        """html_str = "<img src='" + dir_struct["icon"]
+        html_str += "dnd3e_logo.gif' ><br><b>dnd3e Character Tool "
+        html_str += self.Version+"</b>"
+        html_str += "<br>by Dj Gilcrease<br>digitalxero@gmail.com"
         return html_str"""
         text = 'dnd3e Character Tool' + self.Version +'\n'
         text += 'by Dj Gilcrease digitalxero@gmail.com'
-        return text
-
-########Core Handlers are done now############
-########Onto the Sub Nodes########
-##Primary Sub Node##
-
-class outline_panel(wx.Panel):
-    def __init__(self, parent, handler, wnd, txt,):
-        self.parent = parent #a 1.9001
-        wx.Panel.__init__(self, parent, -1)
-        self.panel = wnd(self,handler)
-        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self,-1,txt), wx.VERTICAL)
-
-        self.sizer.Add(self.panel, 1, wx.EXPAND)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-class dnd3e_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-###Child Nodes Organized the way they are in the XML for easier viewing####  #m 1.5002 corrected typo.
-class dnd3ehowto(dnd3e_char_child):  #m 1.5002 corrected string below to reflect "how to"
-    """ Node Handler for how to instructions.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-
-    def get_design_panel(self,parent):
-        wnd = howto_panel(parent, self)
-        wnd.title = "How To"
-        return wnd
-
-class howto_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-
-        pname = handler.xml.set("name", 'How To')
-        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'How To'), wx.VERTICAL)
-        self.xml = handler.xml
-        n_list = self.xml.getchildren()
-        for n in n_list:
-            self.sizer.Add(wx.StaticText(self, -1, n.text), 1, wx.EXPAND)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-class dnd3egeneral(dnd3e_char_child):
-    """ Node Handler for general information.   This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.root = getRoot(self) 
-        self.root.general = self
-        self.charName = self.get_char_name()
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,gen_grid,"General Information")
-        wnd.title = "General Info"
-        return wnd
-
-    def tohtml(self):
-        n_list = self.xml.getchildren()
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
+        return text
+
+########Core Handlers are done now############
+########Onto the Sub Nodes########
+##Primary Sub Node##
+
+class outline_panel(wx.Panel):
+    def __init__(self, parent, handler, wnd, txt,):
+        self.parent = parent #a 1.9001
+        wx.Panel.__init__(self, parent, -1)
+        self.panel = wnd(self,handler)
+        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self,-1,txt), wx.VERTICAL)
+
+        self.sizer.Add(self.panel, 1, wx.EXPAND)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+class dnd3e_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+###Child Nodes Organized the way they are in the XML for easier viewing####  #m 1.5002 corrected typo.
+class dnd3ehowto(dnd3e_char_child):  #m 1.5002 corrected string below to reflect "how to"
+    """ Node Handler for how to instructions.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+
+    def get_design_panel(self,parent):
+        wnd = howto_panel(parent, self)
+        wnd.title = "How To"
+        return wnd
+
+class howto_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+
+        pname = handler.xml.set("name", 'How To')
+        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'How To'), wx.VERTICAL)
+        self.xml = handler.xml
+        n_list = self.xml.getchildren()
+        for n in n_list:
+            self.sizer.Add(wx.StaticText(self, -1, n.text), 1, wx.EXPAND)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+class dnd3egeneral(dnd3e_char_child):
+    """ Node Handler for general information.   This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.root = getRoot(self) 
+        self.root.general = self
+        self.charName = self.get_char_name()
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,gen_grid,"General Information")
+        wnd.title = "General Info"
+        return wnd
+
+    def tohtml(self):
+        n_list = self.xml.getchildren()
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
+        for n in n_list:
+            debug(n)
+            html_str += "<B>"+n.tag.capitalize() +":</B> "
+            html_str += n.text + ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def on_name_change(self,name):
+        self.char_hander.rename(name)
+        self.charName = name 
+
+    def get_char_name( self ):
+        node = self.xml.findall( 'name' )[0]
+        return node.text
+
+class gen_grid(wx.grid.Grid):
+    """grid for gen info"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'General')
+        self.hparent = handler 
+
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        n_list = handler.xml.getchildren()
+        self.CreateGrid(len(n_list),2)
+        self.SetRowLabelSize(0)
+        self.SetColLabelSize(0)
+        self.n_list = n_list
+        i = 0
+        for i in range(len(n_list)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        self.n_list[row].text = value
+        if row==0: self.handler.on_name_change(value)
+
+    def refresh_row(self,rowi):
+        self.SetCellValue(rowi,0,self.n_list[rowi].tag)
+        self.SetReadOnly(rowi,0)
+        self.SetCellValue(rowi,1,self.n_list[rowi].text)
+        self.AutoSizeColumn(1)
+
+class dnd3einventory(dnd3e_char_child):
+    """ Node Handler for general information.   This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent
+        self.root = getRoot(self)
+        self.root.inventory = self
+
+    def get_design_panel(self,parent):
+        wnd = inventory_pane(parent, self) #outline_panel(parent,self,inventory_grid,"Inventory")
+        wnd.title = "Inventory"
+        return wnd
+
+    def tohtml(self):
+        n_list = self.xml.getchildren()
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
         for n in n_list:
-            debug(n)
-            html_str += "<B>"+n.tag.capitalize() +":</B> "
-            html_str += n.text + ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def on_name_change(self,name):
-        self.char_hander.rename(name)
-        self.charName = name 
-
-    def get_char_name( self ):
-        node = self.xml.findall( 'name' )[0]
-        return node.text
-
-class gen_grid(wx.grid.Grid):
-    """grid for gen info"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'General')
-        self.hparent = handler 
-
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        n_list = handler.xml.getchildren()
-        self.CreateGrid(len(n_list),2)
-        self.SetRowLabelSize(0)
-        self.SetColLabelSize(0)
-        self.n_list = n_list
-        i = 0
-        for i in range(len(n_list)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        self.n_list[row].text = value
-        if row==0: self.handler.on_name_change(value)
-
+            html_str += "<B>"+n.tag.capitalize()+":</B> "
+            html_str += n.text + "<br>"
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+class inventory_pane(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, wx.ID_ANY)
+        self.n_list = handler.xml.getchildren()
+        self.autosize = False
+        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Inventory"), wx.VERTICAL)
+        self.lang = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Languages")
+        self.gear = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Gear")
+        self.magic = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Magic")
+        self.grid = wx.grid.Grid(self, wx.ID_ANY, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.grid.CreateGrid(len(self.n_list)-3,2)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelSize(0)
+        for i in xrange(len(self.n_list)): self.refresh_row(i)
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(self.grid, 1, wx.EXPAND)
+        sizer1.Add(self.lang, 1, wx.EXPAND)
+        self.sizer.Add(sizer1, 0, wx.EXPAND)
+        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer2.Add(self.gear, 1, wx.EXPAND)
+        sizer2.Add(self.magic, 1, wx.EXPAND)
+        self.sizer.Add(sizer2, 1, wx.EXPAND)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.lang)
+        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.gear)
+        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.magic)
+        self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.on_cell_change, self.grid)
+
+    def fillTextNode(self, name, value):
+        if name == 'Languages': self.lang.SetValue(value)
+        elif name == 'Gear': self.gear.SetValue(value)
+        elif name == 'Magic': self.magic.SetValue(value)
+
+    def onTextNodeChange(self, event):
+        id = event.GetId()
+        if id == self.gear.GetId():
+            nodeName = 'Gear'
+            value = self.gear.GetValue()
+        elif id == self.magic.GetId():
+            nodeName = 'Magic'
+            value = self.magic.GetValue()
+        elif id == self.lang.GetId():
+            nodeName = 'Languages'
+            value = self.lang.GetValue()
+        for node in self.n_list:
+            if node.tag == nodeName:
+                debug(node)
+                node.text = value
+
+    def saveMoney(self, row, col):
+        value = self.grid.GetCellValue(row, col)
+        debug(self.n_list[row])
+        self.n_list[row].text = value
+
+    def on_cell_change(self, evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        self.grid.AutoSizeColumn(col)
+        wx.CallAfter(self.saveMoney, row, col)
+
+    def refresh_row(self, row):
+        tagname = self.n_list[row].tag
+        value = self.n_list[row].text
+        if tagname == 'Gear': self.fillTextNode(tagname, value)
+        elif tagname == 'Magic': self.fillTextNode(tagname, value)
+        elif tagname == 'Languages': self.fillTextNode(tagname, value)
+        else:
+            self.grid.SetCellValue(row, 0, tagname)
+            self.grid.SetReadOnly(row, 0)
+            self.grid.SetCellValue(row, 1, value)
+            self.grid.AutoSize()
+
+
+class dnd3eclassnstats(dnd3e_char_child):
+    """ Node handler for a dnd3e charactor
+        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.hparent = parent
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('abilities','Abilities Scores',dnd3eability,'gear')
+        self.new_child_handler('classes','Classes',dnd3eclasses,'knight')
+        self.new_child_handler('saves','Saves',dnd3esaves,'skull')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        print 'here'
+        return tabbed_panel(parent,self,2)
+
+class class_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd3eability(class_char_child):
+    """ Node Handler for ability.   This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        class_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.root = getRoot(self)
+        self.root.abilities = self 
+        self.abilities = {}
+        node_list = self.xml.findall('stat')
+        tree = self.tree
+        icons = tree.icons
+        for n in node_list:
+            name = n.get('abbr')
+            self.abilities[name] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if not item == self.mytree_node:
+            mod = self.get_mod( name )
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
+            chat.ParsePost( txt, True, True )
+
+    def get_mod(self,abbr):
+        score = int(self.abilities[abbr].get('base'))
+        mod = (score - 10) / 2
+        mod = int(mod)
+        return mod
+
+    def set_score(self,abbr,score):
+        if score >= 0:
+            self.abilities[abbr].set("base",str(score))
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,abil_grid,"Abilities")
+        wnd.title = "Abilities (edit)"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th>
+                    <th>Base</th><th>Modifier</th></tr>"""
+        node_list = self.xml.findall('stat')
+        for n in node_list:
+            name = n.get('name')
+            abbr = n.get('abbr')
+            base = n.get('base')
+            mod = str(self.get_mod(abbr))
+            if int(mod) >= 0:  mod1 = "+"
+            else: mod1 = ""
+            html_str = (html_str + "<tr ALIGN='center'><td>"+
+                name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod))
+        html_str = html_str + "</table>"
+        return html_str
+
+class abil_grid(wx.grid.Grid):
+    """grid for abilities"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Stats')
+        self.hparent = handler
+        self.root = getRoot(self)
+
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        stats = handler.xml.findall('stat')
+        self.CreateGrid(len(stats),3)
+        self.SetRowLabelSize(0)
+        col_names = ['Ability','Score','Modifier']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.stats = stats
+        i = 0
+        for i in range(len(stats)): self.refresh_row(i)
+        self.char_wnd = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            self.stats[row].set('base',value)
+            self.refresh_row(row)
+        except:
+            self.SetCellValue(row,col,"0")
+        if self.char_wnd: self.char_wnd.refresh_data()
+
     def refresh_row(self,rowi):
-        self.SetCellValue(rowi,0,self.n_list[rowi].tag)
-        self.SetReadOnly(rowi,0)
-        self.SetCellValue(rowi,1,self.n_list[rowi].text)
-        self.AutoSizeColumn(1)
-
-class dnd3einventory(dnd3e_char_child):
-    """ Node Handler for general information.   This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent
-        self.root = getRoot(self)
-        self.root.inventory = self
-
-    def get_design_panel(self,parent):
-        wnd = inventory_pane(parent, self) #outline_panel(parent,self,inventory_grid,"Inventory")
-        wnd.title = "Inventory"
-        return wnd
-
-    def tohtml(self):
-        n_list = self.xml.getchildren()
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>General Information</th></tr><tr><td>"
+        s = self.stats[rowi]
+        name = s.get('name')
+        abbr = s.get('abbr')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        self.SetCellValue(rowi,1,s.get('base'))
+        self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr)))
+        self.SetReadOnly(rowi,2)
+        self.root.saves.refresh_data()
+        self.root.attacks.refreshMRdata() 
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()-1): self.refresh_row(r)
+
+class dnd3eclasses(class_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        class_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.root = getRoot(self)
+        self.root.classes = self
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,class_panel,"Classes")
+        wnd.title = "Classes"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
+        n_list = self.xml.getchildren()
+        for n in n_list: html_str += n.get('name') + " ("+n.get('level')+"), "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        node_list = self.xml.findall('class')
+        tot = 0 
+        for n in node_list:
+            lvl = n.get('level')
+            tot += int(lvl)
+            type = n.get('name')
+            if attr == "level": return lvl
+            elif attr == "class": return type
+        if attr == "lvl":  return tot
+
+    def get_class_lvl( self, classN ):
+        node_list = self.xml.findall('class')
+        for n in node_list:
+            lvl = n.get('level')
+            type = n.get('name')
+            if classN == type: return lvl
+
+class class_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Class')
+
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Class"), 0, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Class"), 0, wx.EXPAND)
+
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),2,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"Class")
+        self.grid.SetColLabelValue(1,"Level")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        try:
+            int(value)
+            self.n_list[row].set('level',value)
+        except: self.grid.SetCellValue(row,col,"1")
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        name = n.get('name')
+        level = n.get('level')
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,level)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3eclasses.xml")
+            xml_dom = tree.getroot()
+            self.temp_dom = xml_dom
+        f_list = self.temp_dom.findall('class')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+
+
+class dnd3esaves(class_char_child):
+    """ Node Handler for saves.   This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        class_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.saveGridFrame = []
+
+        tree = self.tree
+        icons = self.tree.icons
+
+        self.root = getRoot(self)
+        self.root.saves = self 
+        node_list = self.xml.findall('save')
+        self.saves={}
+        for n in node_list:
+            name = n.get('name')
+            self.saves[name] = n
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+
+
+    def refresh_data(self): 
+        # of the attack chart.
+        # count backwards, maintains context despite "removes"
+        for i in range(len(self.saveGridFrame)-1,-1,-1):
+            x = self.saveGridFrame[i]
+            if x == None: x.refresh_data()
+            else: self.saveGridFrame.remove(x)
+
+    def get_mod(self,name):
+        save = self.saves[name]
+        stat = save.get('stat')
+        stat_mod = self.root.abilities.get_mod(stat)
+        base = int(save.get('base'))
+        miscmod = int(save.get('miscmod'))
+        magmod = int(save.get('magmod'))
+        total = stat_mod + base + miscmod + magmod
+        return total
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node:
+            pass
+            return 
+        else:
+            mod = self.get_mod(name)
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
+            chat.ParsePost( txt, True, True )
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,save_grid,"Saves")
+        wnd.title = "Saves"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+            <th width='30%'>Save</th>
+            <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th>
+            <th>Misc</th><th>Total</th></tr>"""
+        node_list = self.xml.findall('save')
+        for n in node_list:
+            name = n.get('name')
+            stat = n.get('stat')
+            base = n.get('base')
+            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
+            stat_mod = self.root.abilities.get_mod(stat)
+
+            mag = n.get('magmod')
+            misc = n.get('miscmod')
+            mod = str(self.get_mod(name))
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str = html_str + "<td>"+str(stat_mod)+"</td><td>"+mag+"</td>"
+            html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+#mark6
+class save_grid(wx.grid.Grid):
+    """grid for saves"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Saves')
+        self.hparent = handler 
+        self.root = getRoot(self)
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        saves = handler.xml.findall('save')
+        self.CreateGrid(len(saves),7)
+        self.SetRowLabelSize(0)
+        col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.saves = saves
+        i = 0
+        for i in range(len(saves)): self.refresh_row(i)
+        climber = parent
+        nameNode = climber.GetClassName()
+        while nameNode != 'wxFrame':
+            climber = climber.parent
+            nameNode = climber.GetClassName()
+        masterFrame=climber
+        masterFrame.refresh_data=self.refresh_data
+        handler.saveGridFrame.append(masterFrame)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col == 2: self.saves[row].set('base',value)
+            elif col == 4: self.saves[row].set('magmod',value)
+            elif col == 5: self.saves[row].set('miscmod',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+
+    def refresh_row(self,rowi):
+        s = self.saves[rowi]
+        name = s.get('name')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        stat = s.get('stat')
+        self.SetCellValue(rowi,1,stat)
+        self.SetReadOnly(rowi,1)
+        self.SetCellValue(rowi,2,s.get('base'))
+        self.SetCellValue(rowi,3,str(self.root.abilities.get_mod(stat)))
+        self.SetReadOnly(rowi,3)
+        self.SetCellValue(rowi,4,s.get('magmod'))
+        self.SetCellValue(rowi,5,s.get('miscmod'))
+        mod = str(self.handler.get_mod(name))
+        self.SetCellValue(rowi,6,mod)
+        self.SetReadOnly(rowi,6)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()): self.refresh_row(r)
+
+class dnd3eskillsnfeats(dnd3e_char_child):
+    """ Node handler for a dnd3e charactor
+        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        self.hparent = parent 
+        self.root = getRoot(self)
+        node_handler.__init__(self,xml_dom,tree_node)
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('skills','Skills',dnd3eskill,'book')
+        self.new_child_handler('feats','Feats',dnd3efeats,'book')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+class skills_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd3eskill(skills_char_child):
+    """ Node Handler for skill.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        self.hparent = parent
+        self.root = getRoot(self)
+        self.root.skills = self
+
+        skills_char_child.__init__(self,xml_dom,tree_node,parent)
+        tree = self.tree
+        icons = self.tree.icons
+        node_list = self.xml.findall('skill')
+
+        self.skills={}
+        for n in node_list:
+            name = n.get('name')
+            self.skills[name] = n
+            skill_check = self.skills[name]
+            ranks = int(skill_check.get('rank'))
+            trained = int(skill_check.get('untrained'))
+            if ranks > 0 or trained == 1:
+                new_tree_node = tree.AppendItem(self.mytree_node,name,
+                                            icons['gear'],icons['gear'])
+            else: continue
+            tree.SetPyData(new_tree_node,self)
+
+
+    def refresh_skills(self):
+        #Adding this so when you update the grid the tree will reflect
+        #The change. -mgt
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('skill')
+        self.skills={}
+        for n in node_list:
+            name = n.get('name')
+            self.skills[name] = n
+            skill_check = self.skills[name]
+            ranks = int(skill_check.get('rank'))
+            trained = int(skill_check.get('untrained'))
+            if ranks > 0 or trained == 1:
+                new_tree_node = tree.AppendItem(self.mytree_node,name,
+                                            icons['gear'],icons['gear'])
+            else: continue
+            tree.SetPyData(new_tree_node,self)
+
+    def get_mod(self,name):
+        skill = self.skills[name]
+        stat = skill.get('stat')
+        stat_mod = self.root.abilities.get_mod(stat)
+        rank = int(skill.get('rank'))
+        misc = int(skill.get('misc'))
+        total = stat_mod + rank + misc
+        return total
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node: return
+        ac = self.root.ac.get_check_pen() 
+        skill = self.skills[name]
+        untr = skill.get('untrained')
+        rank = skill.get('rank') 
+        if eval('%s == 0' % (untr)):
+            if eval('%s == 0' % (rank)): 
+                res = 'You fumble around, accomplishing nothing'
+                txt = '%s Skill Check: %s' % (name, res)
+                chat = self.chat
+                chat.Post(txt,True,True)
+                return 
+        armor = ''
+        acCp = ''
+        if ac < 0:
+            armorCheck = int(skill.get('armorcheck'))
+            if armorCheck == 1:
+                acCp=ac
+                armor = '(includes Armor Penalty of %s)' % (acCp)
+        if item == self.mytree_node:
+            dnd3e_char_child.on_ldclick(self,evt)
+        else:
+            mod = self.get_mod(name)
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            chat = self.chat
+            txt = '%s Skill Check: [1d20%s%s%s] %s' % (
+                    name, mod1, mod, acCp, armor)
+            chat.ParsePost(txt,True,True)
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,skill_grid,"Skills")
+        wnd.title = "Skills (edit)"
+        return wnd
+
+    def tohtml(self):
+        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+                    <th width='30%'>Skill</th><th>Key</th>
+                    <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>"""
+        node_list = self.xml.findall('skill')
+
+        for n in node_list:
+            name = n.get('name')
+            stat = n.get('stat')
+            rank = n.get('rank')
+            untr = n.get('untrained') 
+            #Filter unsuable skills out of pretty print -mgt
+            if eval('%s > 0' % (rank)) or eval('%s == 1' % (untr)):
+                if eval('%s >=1' % (rank)):
+                    html_str += "<tr ALIGN='center' bgcolor='#CCCCFF'><td>"
+                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
+                elif eval('%s == 1' % (untr)):
+                    html_str += "<tr ALIGN='center' bgcolor='#C0FF40'><td>" 
+                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
+                else:
+                    html_str += "<tr ALIGN='center'><td>"+name+"</td><td>"
+                    html_str += stat+"</td><td>"+rank+"</td>"
+            else: continue
+            stat_mod = self.root.abilities.get_mod(stat)
+            misc = n.get('misc')
+            mod = str(self.get_mod(name))
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            html_str += "<td>"+str(stat_mod)+"</td><td>"+misc #m 1.6009 str()
+            html_str += '</td><td>%s%s</td></tr>' % (mod1, mod)
+        html_str = html_str + "</table>"
+        return html_str
+
+
+class skill_grid(wx.grid.Grid):
+    """ panel for skills """
+    def __init__(self, parent, handler):
+        self.hparent = handler
+        self.root = getRoot(self)
+        pname = handler.xml.set("name", 'Skills')
+
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.handler = handler
+        skills = handler.xml.findall('skill')
+
+        self.CreateGrid(len(skills),6)
+        self.SetRowLabelSize(0)
+        col_names = ['Skill','Key','Rank','Abil','Misc','Total']
+        for i in range(len(col_names)):
+            self.SetColLabelValue(i,col_names[i])
+        rowi = 0
+        self.skills = skills
+        for i in range(len(skills)): self.refresh_row(i)
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col == 2: self.skills[row].set('rank',value)
+            elif col ==4: self.skills[row].set('misc',value)
+            self.refresh_row(row)
+        except: self.SetCellValue(row,col,"0")
+        self.handler.refresh_skills()
+
+    def refresh_row(self,rowi):
+        s = self.skills[rowi]
+        name = s.get('name')
+        self.SetCellValue(rowi,0,name)
+        self.SetReadOnly(rowi,0)
+        stat = s.get('stat')
+        self.SetCellValue(rowi,1,stat)
+        self.SetReadOnly(rowi,1)
+        self.SetCellValue(rowi,2,s.get('rank'))
+        if self.root.abilities: stat_mod=self.root.abilities.get_mod(stat)
+        else:
+            stat_mod = -6 
+            print "Please advise dnd3e maintainer alert 1.5002 raised"
+
+        self.SetCellValue(rowi,3,str(stat_mod))
+        self.SetReadOnly(rowi,3)
+        self.SetCellValue(rowi,4,s.get('misc'))
+        mod = str(self.handler.get_mod(name))
+        self.SetCellValue(rowi,5,mod)
+        self.SetReadOnly(rowi,5)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+2)
+        self.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+    def refresh_data(self):
+        for r in range(self.GetNumberRows()): self.refresh_row(r)
+
+
+class dnd3efeats(skills_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        skills_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent
+        self.root = getRoot(self) 
+        self.root.feats = self
+
+    def get_design_panel(self,parent):
+        setTitle="Feats - " + self.root.general.charName
+        wnd = outline_panel(parent,self,feat_panel,setTitle)
+        wnd.title = "Feats"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
+        n_list = self.xml.getchildren()
         for n in n_list:
-            html_str += "<B>"+n.tag.capitalize()+":</B> "
-            html_str += n.text + "<br>"
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-class inventory_pane(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, wx.ID_ANY)
-        self.n_list = handler.xml.getchildren()
-        self.autosize = False
-        self.sizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Inventory"), wx.VERTICAL)
-        self.lang = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Languages")
-        self.gear = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Gear")
-        self.magic = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_BESTWRAP, name="Magic")
-        self.grid = wx.grid.Grid(self, wx.ID_ANY, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.grid.CreateGrid(len(self.n_list)-3,2)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelSize(0)
-        for i in xrange(len(self.n_list)): self.refresh_row(i)
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(self.grid, 1, wx.EXPAND)
-        sizer1.Add(self.lang, 1, wx.EXPAND)
-        self.sizer.Add(sizer1, 0, wx.EXPAND)
-        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer2.Add(self.gear, 1, wx.EXPAND)
-        sizer2.Add(self.magic, 1, wx.EXPAND)
-        self.sizer.Add(sizer2, 1, wx.EXPAND)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.lang)
-        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.gear)
-        self.Bind(wx.EVT_TEXT, self.onTextNodeChange, self.magic)
-        self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.on_cell_change, self.grid)
-
-    def fillTextNode(self, name, value):
-        if name == 'Languages': self.lang.SetValue(value)
-        elif name == 'Gear': self.gear.SetValue(value)
-        elif name == 'Magic': self.magic.SetValue(value)
-
-    def onTextNodeChange(self, event):
-        id = event.GetId()
-        if id == self.gear.GetId():
-            nodeName = 'Gear'
-            value = self.gear.GetValue()
-        elif id == self.magic.GetId():
-            nodeName = 'Magic'
-            value = self.magic.GetValue()
-        elif id == self.lang.GetId():
-            nodeName = 'Languages'
-            value = self.lang.GetValue()
-        for node in self.n_list:
-            if node.tag == nodeName:
-                debug(node)
-                node.text = value
-
-    def saveMoney(self, row, col):
-        value = self.grid.GetCellValue(row, col)
-        debug(self.n_list[row])
-        self.n_list[row].text = value
-
-    def on_cell_change(self, evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        self.grid.AutoSizeColumn(col)
-        wx.CallAfter(self.saveMoney, row, col)
-
-    def refresh_row(self, row):
-        tagname = self.n_list[row].tag
-        value = self.n_list[row].text
-        if tagname == 'Gear': self.fillTextNode(tagname, value)
-        elif tagname == 'Magic': self.fillTextNode(tagname, value)
-        elif tagname == 'Languages': self.fillTextNode(tagname, value)
-        else:
-            self.grid.SetCellValue(row, 0, tagname)
-            self.grid.SetReadOnly(row, 0)
-            self.grid.SetCellValue(row, 1, value)
-            self.grid.AutoSize()
-
-
-class dnd3eclassnstats(dnd3e_char_child):
-    """ Node handler for a dnd3e charactor
-        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.hparent = parent
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('abilities','Abilities Scores',dnd3eability,'gear')
-        self.new_child_handler('classes','Classes',dnd3eclasses,'knight')
-        self.new_child_handler('saves','Saves',dnd3esaves,'skull')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
+            html_str += n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+class feat_panel(wx.Panel):
+    def __init__(self, parent, handler):
+
+        self.hparent = handler 
+        self.root = getRoot(self) 
+        pname = handler.xml.set("name", 'Feats')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Feat"), 0, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Feat"), 0, wx.EXPAND)
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),3,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"Feat")
+        self.grid.SetColLabelValue(1,"Type")
+        self.grid.SetColLabelValue(2,"Reference") 
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def refresh_row(self,i):
+        feat = self.n_list[i]
+        name = feat.get('name')
+        type = feat.get('type')
+        desc = feat.get('desc')
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,type)
+        self.grid.SetReadOnly(i,1)
+        self.grid.SetCellValue(i,2,desc)
+        self.grid.SetReadOnly(i,2)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3efeats.xml")
+            temp_dom = tree.getroot()
+        f_list = temp_dom.findall('feat')
+        opts = []
+        for f in f_list:
+            opts.append(f.get('name') + "  -  [" +
+                     f.get('type') + "]  -  " + f.get('desc'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
+
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols):
+            self.grid.SetColSize(i,col_w)
+
+class dnd3ecombat(dnd3e_char_child):
+    """ Node handler for a dnd3e charactor
+        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+
+        node_handler.__init__(self,xml_dom,tree_node)
+
+        self.hparent = parent 
+        self.root = getRoot(self) 
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('hp','Hit Points',dnd3ehp,'gear')
+        self.new_child_handler('attacks','Attacks',dnd3eattacks,'spears')
+        self.new_child_handler('ac','Armor',dnd3earmor,'spears')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+
+class combat_char_child(node_handler):
+    """ Node Handler for combat.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
     def get_use_panel(self,parent):
-        print 'here'
-        return tabbed_panel(parent,self,2)
-
-class class_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd3eability(class_char_child):
-    """ Node Handler for ability.   This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        class_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.root = getRoot(self)
-        self.root.abilities = self 
-        self.abilities = {}
-        node_list = self.xml.findall('stat')
-        tree = self.tree
-        icons = tree.icons
-        for n in node_list:
-            name = n.get('abbr')
-            self.abilities[name] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if not item == self.mytree_node:
-            mod = self.get_mod( name )
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s check: [1d20%s%s]' % ( name, mod1, mod )
-            chat.ParsePost( txt, True, True )
-
-    def get_mod(self,abbr):
-        score = int(self.abilities[abbr].get('base'))
-        mod = (score - 10) / 2
-        mod = int(mod)
-        return mod
-
-    def set_score(self,abbr,score):
-        if score >= 0:
-            self.abilities[abbr].set("base",str(score))
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,abil_grid,"Abilities")
-        wnd.title = "Abilities (edit)"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100%><tr BGCOLOR=#E9E9E9 ><th width='50%'>Ability</th>
-                    <th>Base</th><th>Modifier</th></tr>"""
-        node_list = self.xml.findall('stat')
-        for n in node_list:
-            name = n.get('name')
-            abbr = n.get('abbr')
-            base = n.get('base')
-            mod = str(self.get_mod(abbr))
-            if int(mod) >= 0:  mod1 = "+"
-            else: mod1 = ""
-            html_str = (html_str + "<tr ALIGN='center'><td>"+
-                name+"</td><td>"+base+'</td><td>%s%s</td></tr>' % (mod1, mod))
-        html_str = html_str + "</table>"
-        return html_str
-
-class abil_grid(wx.grid.Grid):
-    """grid for abilities"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Stats')
-        self.hparent = handler
-        self.root = getRoot(self)
-
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        stats = handler.xml.findall('stat')
-        self.CreateGrid(len(stats),3)
-        self.SetRowLabelSize(0)
-        col_names = ['Ability','Score','Modifier']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.stats = stats
-        i = 0
-        for i in range(len(stats)): self.refresh_row(i)
-        self.char_wnd = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            self.stats[row].set('base',value)
-            self.refresh_row(row)
-        except:
-            self.SetCellValue(row,col,"0")
-        if self.char_wnd: self.char_wnd.refresh_data()
-
-    def refresh_row(self,rowi):
-        s = self.stats[rowi]
-        name = s.get('name')
-        abbr = s.get('abbr')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        self.SetCellValue(rowi,1,s.get('base'))
-        self.SetCellValue(rowi,2,str(self.handler.get_mod(abbr)))
-        self.SetReadOnly(rowi,2)
-        self.root.saves.refresh_data()
-        self.root.attacks.refreshMRdata() 
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()-1): self.refresh_row(r)
-
-class dnd3eclasses(class_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        class_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.root = getRoot(self)
-        self.root.classes = self
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,class_panel,"Classes")
-        wnd.title = "Classes"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Classes</th></tr><tr><td>"
-        n_list = self.xml.getchildren()
-        for n in n_list: html_str += n.get('name') + " ("+n.get('level')+"), "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        node_list = self.xml.findall('class')
-        tot = 0 
-        for n in node_list:
-            lvl = n.get('level')
-            tot += int(lvl)
-            type = n.get('name')
-            if attr == "level": return lvl
-            elif attr == "class": return type
-        if attr == "lvl":  return tot
-
-    def get_class_lvl( self, classN ):
-        node_list = self.xml.findall('class')
-        for n in node_list:
-            lvl = n.get('level')
-            type = n.get('name')
-            if classN == type: return lvl
-
-class class_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Class')
-
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Class"), 0, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Class"), 0, wx.EXPAND)
-
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),2,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"Class")
-        self.grid.SetColLabelValue(1,"Level")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        try:
-            int(value)
-            self.n_list[row].set('level',value)
-        except: self.grid.SetCellValue(row,col,"1")
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        name = n.get('name')
-        level = n.get('level')
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,level)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3eclasses.xml")
-            xml_dom = tree.getroot()
-            self.temp_dom = xml_dom
-        f_list = self.temp_dom.findall('class')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Class','Classes',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-
-
-class dnd3esaves(class_char_child):
-    """ Node Handler for saves.   This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        class_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.saveGridFrame = []
-
-        tree = self.tree
-        icons = self.tree.icons
-
-        self.root = getRoot(self)
-        self.root.saves = self 
-        node_list = self.xml.findall('save')
-        self.saves={}
-        for n in node_list:
-            name = n.get('name')
-            self.saves[name] = n
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-
-
-    def refresh_data(self): 
-        # of the attack chart.
-        # count backwards, maintains context despite "removes"
-        for i in range(len(self.saveGridFrame)-1,-1,-1):
-            x = self.saveGridFrame[i]
-            if x == None: x.refresh_data()
-            else: self.saveGridFrame.remove(x)
-
-    def get_mod(self,name):
-        save = self.saves[name]
-        stat = save.get('stat')
-        stat_mod = self.root.abilities.get_mod(stat)
-        base = int(save.get('base'))
-        miscmod = int(save.get('miscmod'))
-        magmod = int(save.get('magmod'))
-        total = stat_mod + base + miscmod + magmod
-        return total
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node:
-            pass
-            return 
-        else:
-            mod = self.get_mod(name)
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s save: [1d20%s%s]' % (name, mod1, mod)
-            chat.ParsePost( txt, True, True )
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,save_grid,"Saves")
-        wnd.title = "Saves"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-            <th width='30%'>Save</th>
-            <th>Key</th><th>Base</th><th>Abil</th><th>Magic</th>
-            <th>Misc</th><th>Total</th></tr>"""
-        node_list = self.xml.findall('save')
-        for n in node_list:
-            name = n.get('name')
-            stat = n.get('stat')
-            base = n.get('base')
-            html_str = html_str + "<tr ALIGN='center'><td>"+name+"</td><td>"+stat+"</td><td>"+base+"</td>"
-            stat_mod = self.root.abilities.get_mod(stat)
-
-            mag = n.get('magmod')
-            misc = n.get('miscmod')
-            mod = str(self.get_mod(name))
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str = html_str + "<td>"+str(stat_mod)+"</td><td>"+mag+"</td>"
-            html_str = html_str + '<td>'+misc+'</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-#mark6
-class save_grid(wx.grid.Grid):
-    """grid for saves"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Saves')
-        self.hparent = handler 
-        self.root = getRoot(self)
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        saves = handler.xml.findall('save')
-        self.CreateGrid(len(saves),7)
-        self.SetRowLabelSize(0)
-        col_names = ['Save','Key','base','Abil','Magic','Misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.saves = saves
-        i = 0
-        for i in range(len(saves)): self.refresh_row(i)
-        climber = parent
-        nameNode = climber.GetClassName()
-        while nameNode != 'wxFrame':
-            climber = climber.parent
-            nameNode = climber.GetClassName()
-        masterFrame=climber
-        masterFrame.refresh_data=self.refresh_data
-        handler.saveGridFrame.append(masterFrame)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col == 2: self.saves[row].set('base',value)
-            elif col == 4: self.saves[row].set('magmod',value)
-            elif col == 5: self.saves[row].set('miscmod',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-
-    def refresh_row(self,rowi):
-        s = self.saves[rowi]
-        name = s.get('name')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        stat = s.get('stat')
-        self.SetCellValue(rowi,1,stat)
-        self.SetReadOnly(rowi,1)
-        self.SetCellValue(rowi,2,s.get('base'))
-        self.SetCellValue(rowi,3,str(self.root.abilities.get_mod(stat)))
-        self.SetReadOnly(rowi,3)
-        self.SetCellValue(rowi,4,s.get('magmod'))
-        self.SetCellValue(rowi,5,s.get('miscmod'))
-        mod = str(self.handler.get_mod(name))
-        self.SetCellValue(rowi,6,mod)
-        self.SetReadOnly(rowi,6)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()): self.refresh_row(r)
-
-class dnd3eskillsnfeats(dnd3e_char_child):
-    """ Node handler for a dnd3e charactor
-        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        self.hparent = parent 
-        self.root = getRoot(self)
-        node_handler.__init__(self,xml_dom,tree_node)
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('skills','Skills',dnd3eskill,'book')
-        self.new_child_handler('feats','Feats',dnd3efeats,'book')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-class skills_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd3eskill(skills_char_child):
-    """ Node Handler for skill.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        self.hparent = parent
-        self.root = getRoot(self)
-        self.root.skills = self
-
-        skills_char_child.__init__(self,xml_dom,tree_node,parent)
-        tree = self.tree
-        icons = self.tree.icons
-        node_list = self.xml.findall('skill')
-
-        self.skills={}
-        for n in node_list:
-            name = n.get('name')
-            self.skills[name] = n
-            skill_check = self.skills[name]
-            ranks = int(skill_check.get('rank'))
-            trained = int(skill_check.get('untrained'))
-            if ranks > 0 or trained == 1:
-                new_tree_node = tree.AppendItem(self.mytree_node,name,
-                                            icons['gear'],icons['gear'])
-            else: continue
-            tree.SetPyData(new_tree_node,self)
-
-
-    def refresh_skills(self):
-        #Adding this so when you update the grid the tree will reflect
-        #The change. -mgt
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('skill')
-        self.skills={}
-        for n in node_list:
-            name = n.get('name')
-            self.skills[name] = n
-            skill_check = self.skills[name]
-            ranks = int(skill_check.get('rank'))
-            trained = int(skill_check.get('untrained'))
-            if ranks > 0 or trained == 1:
-                new_tree_node = tree.AppendItem(self.mytree_node,name,
-                                            icons['gear'],icons['gear'])
-            else: continue
-            tree.SetPyData(new_tree_node,self)
-
-    def get_mod(self,name):
-        skill = self.skills[name]
-        stat = skill.get('stat')
-        stat_mod = self.root.abilities.get_mod(stat)
-        rank = int(skill.get('rank'))
-        misc = int(skill.get('misc'))
-        total = stat_mod + rank + misc
-        return total
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node: return
-        ac = self.root.ac.get_check_pen() 
-        skill = self.skills[name]
-        untr = skill.get('untrained')
-        rank = skill.get('rank') 
-        if eval('%s == 0' % (untr)):
-            if eval('%s == 0' % (rank)): 
-                res = 'You fumble around, accomplishing nothing'
-                txt = '%s Skill Check: %s' % (name, res)
-                chat = self.chat
-                chat.Post(txt,True,True)
-                return 
-        armor = ''
-        acCp = ''
-        if ac < 0:
-            armorCheck = int(skill.get('armorcheck'))
-            if armorCheck == 1:
-                acCp=ac
-                armor = '(includes Armor Penalty of %s)' % (acCp)
-        if item == self.mytree_node:
-            dnd3e_char_child.on_ldclick(self,evt)
-        else:
-            mod = self.get_mod(name)
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            chat = self.chat
-            txt = '%s Skill Check: [1d20%s%s%s] %s' % (
-                    name, mod1, mod, acCp, armor)
-            chat.ParsePost(txt,True,True)
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,skill_grid,"Skills")
-        wnd.title = "Skills (edit)"
-        return wnd
-
-    def tohtml(self):
-        html_str = """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-                    <th width='30%'>Skill</th><th>Key</th>
-                    <th>Rank</th><th>Abil</th><th>Misc</th><th>Total</th></tr>"""
-        node_list = self.xml.findall('skill')
-
-        for n in node_list:
-            name = n.get('name')
-            stat = n.get('stat')
-            rank = n.get('rank')
-            untr = n.get('untrained') 
-            #Filter unsuable skills out of pretty print -mgt
-            if eval('%s > 0' % (rank)) or eval('%s == 1' % (untr)):
-                if eval('%s >=1' % (rank)):
-                    html_str += "<tr ALIGN='center' bgcolor='#CCCCFF'><td>"
-                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
-                elif eval('%s == 1' % (untr)):
-                    html_str += "<tr ALIGN='center' bgcolor='#C0FF40'><td>" 
-                    html_str += name+"</td><td>"+stat+"</td><td>"+rank+"</td>"
-                else:
-                    html_str += "<tr ALIGN='center'><td>"+name+"</td><td>"
-                    html_str += stat+"</td><td>"+rank+"</td>"
-            else: continue
-            stat_mod = self.root.abilities.get_mod(stat)
-            misc = n.get('misc')
-            mod = str(self.get_mod(name))
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            html_str += "<td>"+str(stat_mod)+"</td><td>"+misc #m 1.6009 str()
-            html_str += '</td><td>%s%s</td></tr>' % (mod1, mod)
-        html_str = html_str + "</table>"
-        return html_str
-
-
-class skill_grid(wx.grid.Grid):
-    """ panel for skills """
-    def __init__(self, parent, handler):
-        self.hparent = handler
-        self.root = getRoot(self)
-        pname = handler.xml.set("name", 'Skills')
-
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.handler = handler
-        skills = handler.xml.findall('skill')
-
-        self.CreateGrid(len(skills),6)
-        self.SetRowLabelSize(0)
-        col_names = ['Skill','Key','Rank','Abil','Misc','Total']
-        for i in range(len(col_names)):
-            self.SetColLabelValue(i,col_names[i])
-        rowi = 0
-        self.skills = skills
-        for i in range(len(skills)): self.refresh_row(i)
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col == 2: self.skills[row].set('rank',value)
-            elif col ==4: self.skills[row].set('misc',value)
-            self.refresh_row(row)
-        except: self.SetCellValue(row,col,"0")
-        self.handler.refresh_skills()
-
-    def refresh_row(self,rowi):
-        s = self.skills[rowi]
-        name = s.get('name')
-        self.SetCellValue(rowi,0,name)
-        self.SetReadOnly(rowi,0)
-        stat = s.get('stat')
-        self.SetCellValue(rowi,1,stat)
-        self.SetReadOnly(rowi,1)
-        self.SetCellValue(rowi,2,s.get('rank'))
-        if self.root.abilities: stat_mod=self.root.abilities.get_mod(stat)
-        else:
-            stat_mod = -6 
-            print "Please advise dnd3e maintainer alert 1.5002 raised"
-
-        self.SetCellValue(rowi,3,str(stat_mod))
-        self.SetReadOnly(rowi,3)
-        self.SetCellValue(rowi,4,s.get('misc'))
-        mod = str(self.handler.get_mod(name))
-        self.SetCellValue(rowi,5,mod)
-        self.SetReadOnly(rowi,5)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+2)
-        self.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-    def refresh_data(self):
-        for r in range(self.GetNumberRows()): self.refresh_row(r)
-
-
-class dnd3efeats(skills_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        skills_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent
-        self.root = getRoot(self) 
-        self.root.feats = self
-
-    def get_design_panel(self,parent):
-        setTitle="Feats - " + self.root.general.charName
-        wnd = outline_panel(parent,self,feat_panel,setTitle)
-        wnd.title = "Feats"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Feats</th></tr><tr><td>"
-        n_list = self.xml.getchildren()
-        for n in n_list:
-            html_str += n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-class feat_panel(wx.Panel):
-    def __init__(self, parent, handler):
-
-        self.hparent = handler 
-        self.root = getRoot(self) 
-        pname = handler.xml.set("name", 'Feats')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Feat"), 0, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Feat"), 0, wx.EXPAND)
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),3,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"Feat")
-        self.grid.SetColLabelValue(1,"Type")
-        self.grid.SetColLabelValue(2,"Reference") 
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def refresh_row(self,i):
-        feat = self.n_list[i]
-        name = feat.get('name')
-        type = feat.get('type')
-        desc = feat.get('desc')
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,type)
-        self.grid.SetReadOnly(i,1)
-        self.grid.SetCellValue(i,2,desc)
-        self.grid.SetReadOnly(i,2)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3efeats.xml")
-            temp_dom = tree.getroot()
-        f_list = temp_dom.findall('feat')
-        opts = []
-        for f in f_list:
-            opts.append(f.get('name') + "  -  [" +
-                     f.get('type') + "]  -  " + f.get('desc'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Feat','Feats',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols):
-            self.grid.SetColSize(i,col_w)
-
-class dnd3ecombat(dnd3e_char_child):
-    """ Node handler for a dnd3e charactor
-        <nodehandler name='?'  module='dnd3e' class='dnd3echar_handler2'  />
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-
-        node_handler.__init__(self,xml_dom,tree_node)
-
-        self.hparent = parent 
-        self.root = getRoot(self) 
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('hp','Hit Points',dnd3ehp,'gear')
-        self.new_child_handler('attacks','Attacks',dnd3eattacks,'spears')
-        self.new_child_handler('ac','Armor',dnd3earmor,'spears')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
-
-
-class combat_char_child(node_handler):
-    """ Node Handler for combat.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-class dnd3ehp(combat_char_child):
-    """ Node Handler for hit points.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        combat_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.root = getRoot(self)
-        self.root.hp = self 
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,hp_panel,"Hit Points")
-        wnd.title = "Hit Points"
-        return wnd
-
-    def on_rclick( self, evt ):
-        chp = self.xml.get('current')
-        mhp = self.xml.get('max')
-        txt = '((HP: %s / %s))' % ( chp, mhp )
-        self.chat.ParsePost( txt, True, True )
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 >"
-        html_str += "<tr BGCOLOR=#E9E9E9 ><th colspan=4>Hit Points</th></tr>"
-        html_str += "<tr><th>Max:</th>"
-        html_str += "<td>"+self.xml.get('max')+"</td>"
-        html_str += "<th>Current:</th>"
-        html_str += "<td>"+self.xml.get('current')+"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-class hp_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.hparent = handler 
-        pname = handler.xml.set("name", 'HitPoints')
-        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
-        self.xml = handler.xml
-        self.sizer.AddMany([ (wx.StaticText(self, -1, "HP Current:"),   0,
-           wx.ALIGN_CENTER_VERTICAL),
-          (wx.TextCtrl(self, HP_CUR,
-           self.xml.get('current')),   0, wx.EXPAND),
-          (wx.StaticText(self, -1, "HP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
-          (wx.TextCtrl(self, HP_MAX, self.xml.get('max')),
-           0, wx.EXPAND),
-         ])
-        self.sizer.AddGrowableCol(1)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_MAX)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_CUR)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == HP_CUR: self.xml.set('current',evt.GetString())
-        elif id == HP_MAX: self.xml.set('max',evt.GetString())
-
-    def on_size(self,evt):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-class dnd3eattacks(combat_char_child):
-    """ Node Handler for attacks.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        combat_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent
-        self.root = getRoot(self)
-        self.root.attacks = self 
-        self.mrFrame = [] 
-        self.updateFootNotes = False
-        self.updateFootNotes = False
-        self.html_str = "<html><body>"
-        self.html_str += ("<br>  This character has weapons with no "+
-             "footnotes.  This program will "+
-             "add footnotes to the weapons which have names that still match "+
-             "the orginal names.  If you have changed the weapon name, you "+
-             "will see some weapons with a footnote of 'X', you will have "+
-             "to either delete and re-add the weapon, or research "+
-             "and add the correct footnotes for the weapon.\n"+
-             "<br>  Please be aware, that only the bow/sling footnote is "+
-             "being used to affect changes to rolls; implemenation of other "+
-             "footnotes to automaticly adjust rolls will be completed as "+
-             "soon as time allows." +
-             "<br><br>Update to character:"+self.root.general.charName+
-             "<br><br>"+
-             """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-              <th width='80%'>Weapon Name</th><th>Added Footnote</th></tr>\n""")
-        self.temp_dom={}
-        node_list = self.xml.findall('melee')
-        self.melee = node_list[0]
-        node_list = self.xml.findall('ranged')
-        self.ranged = node_list[0]
-        self.refresh_weapons() 
-        if self.updateFootNotes == True:
-            self.updateFootNotes = False
-            name = self.root.general.charName
-            self.html_str +=  "</table>"
-            self.html_str +=  "</body> </html> "
-            masterFrame = self.root.frame
-            title = name+"'s weapons' update to have footnotes"
-            fnFrame = wx.Frame(masterFrame, -1, title)
-            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
-            fnFrame.panel.SetPage(self.html_str)
-            fnFrame.Show()
-
-
-
-    def refreshMRdata(self): 
-        # of the attack chart.
-        # count backwards, maintains context despite "removes"
-        for i in range(len(self.mrFrame)-1,-1,-1):
-            x = self.mrFrame[i]
-            if x == None: x.refreshMRdata() #a 1.9001
-            else: self.mrFrame.remove(x)
-
-    def refresh_weapons(self):
-        self.weapons = {}
-
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('weapon')
-        for n in node_list:
-            name = n.get('name')
-            fn = safeGetAttr(n,'fn')
-            if fn == None:
-                self.updateFootNotes=True
-                self.updateFootN(n) 
-            new_tree_node = tree.AppendItem(
-                self.mytree_node,name,icons['sword'],icons['sword'])
-            tree.SetPyData(new_tree_node,self)
-            self.weapons[name]=n
-
-    def updateFootN(self,n):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3eweapons.xml")
-            self.temp_dom = tree.getroot()
-        nameF = n.get('name')
-        w_list = self.temp_dom.findall('weapon')
-        found = False
-        for w in w_list:
-            if nameF == w.get('name'):
-                found = True
-                fnN = safeGetAttr(n,'fn')
-                if fnN == None or fnN == 'None':
-                    fnW = w.get('fn')
-                    self.html_str += ("<tr ALIGN='center'><td>"+nameF+"</td>"+
-                                     "<td>"+fnW+"</td></tr>\n")
-                    n.set('fn',fnW)
-                break
-        if not found:
-            self.html_str += ("<tr ALIGN='center'><td>"+nameF+" - Custom "+
-              "Weapon, research "+
-              "and update manually; setting footnote to indicate custom</td>"+
-                                     "<td>"+'X'+"</td></tr>\n")
-            n.set('fn','X')
-
-    def get_mod(self,type='m'):
-        (base, base2, base3, base4, base5, base6, stat_mod, misc) \
-            = self.get_attack_data(type)
-        return int(base + misc + int(stat_mod))
-
-    def get_attack_data(self,type='m'):
-        if type=='m' or type=='0':
-            stat = 'Str' 
-            temp = self.melee
-        else:
-            stat = 'Dex' 
-            temp = self.ranged
-        stat_mod = -7
-        stat_mod = self.root.abilities.get_mod(stat)
-        base = int(temp.get('base'))
-        base2 = int(temp.get('second'))
-        base3 = int(temp.get('third'))
-        base4 = int(temp.get('forth'))
-        base5 = int(temp.get('fifth'))
-        base6 = int(temp.get('sixth'))
-        misc = int(temp.get('misc'))
-        return (base, base2, base3, base4, base5, base6, stat_mod ,misc)
-
-    def on_rclick(self,evt):
-        item = self.tree.GetSelection()
-
-        name = self.tree.GetItemText(item)
-        if item == self.mytree_node:
-            return 
-        else:
-
-            mod = int(self.weapons[name].get('mod'))
-            wepMod = mod #a 1.5008
-            footNotes = safeGetAttr(self.weapons[name],'fn','')
-            cat = self.weapons[name].get('category') #a1.6001
-            result = split(cat,"-",2) #a 1.6001
-            if len(result) < 2: #a 1.6021 this if & else
-                print "warning: 1.6002 unable to interpret weapon category"
-                print "format 'type weapon-[Range|Melee]', probably missing"
-                print "the hyphen.  Assuming Melee"
-                print "weapon name: ",name
-                tres="Melee"
-            else:
-                tres=result[1]
-            if tres == 'Melee': #a 1.6001   #m 1.6022 use of tres here and...
-                rangeOrMelee = 'm' #a 1.5008 code demote for next comment block
-            elif tres == 'Ranged': #m 1.6001 (was just else) #m 1.6022 here
-                rangeOrMelee = 'r' #a 1.5008
-            else:#a 1.6001 add this whole else clause.
-                print "warning: 1.6001 unable to interpret weapon category"
-                print "treating weapon as Melee, please correct xml"
-                print "weapon name:",name
-                rangeOrMelee ='m'
-            mod = mod + self.get_mod(rangeOrMelee) #a 1.5008
-            chat = self.chat
-            dmg = self.weapons[name].get('damage')
-
-            #a 1.6003 start code fix instance a
-            result = split(dmg,"/",2)
-            dmg = result[0]
-            monkLvl = self.root.classes.get_class_lvl('Monk') # a 1.5002
-            if dmg == "Monk Med":
-                if monkLvl == None:     #a 1.5009
-                    txt = 'Attempting to use monk attack, but has no monk '
-                    txt += 'levels, please choose a different attack.'
-                    chat.ParsePost( txt, True, True ) #a 1.5009
-                    return #a 1.5009
-                else:   #a 1.5009
-                    lvl=int(monkLvl)
-                    if lvl <= 3: dmg = "1d6"
-                    elif lvl <= 7: dmg = "1d8"
-                    elif lvl <= 11: dmg = "1d10"
-                    elif lvl <= 15: dmg = "2d6"
-                    elif lvl <= 19: dmg = "2d8"
-                    elif lvl <= 20: dmg = "2d10"
-            if dmg == "Monk Small":
-                if monkLvl == None:
-                    txt = 'Attempting to use monk attack, but has no monk '
-                    txt += 'levels, please choose a different attack.'
-                    chat.ParsePost( txt, True, True )
-                    return
-                else: 
-                    lvl=int(monkLvl)
-                    if lvl <= 3: dmg = "1d4"
-                    elif lvl <= 7: dmg = "1d6"
-                    elif lvl <= 11: dmg = "1d8"
-                    elif lvl <= 15: dmg = "1d10"
-                    elif lvl <= 20: dmg = "2d6"
-            flu = ''
-            str_mod = self.root.abilities.get_mod('Str') #a 1.5007,11,12,13
-            if rangeOrMelee == 'r':                     #a 1.5008
-
-                if find(footNotes,'b') > -1:
-                    if str_mod >= 0: str_mod = 0 
-                else:  str_mod = 0
-            mod2 = ""
-            if str_mod >= 0: mod2 = "+"
-            aStrengthMod = mod2 + str(str_mod) #a 1.5008 applicable strength mod
-            if find(name ,"Flurry of Blows") > -1: #a 1.6012
-                flu = '-2'
-            (base, base2, base3, base4, base5, base6, stat_mod, misc)\
-                = self.get_attack_data(rangeOrMelee)  #a 1.5008
-            self.sendRoll(base ,stat_mod,misc,wepMod,name,flu,dmg,
-                aStrengthMod,'',True,rollAnyWay=True)
-            if flu != '':
-                self.sendRoll(base ,stat_mod,misc,wepMod,name,flu,dmg,
-                    aStrengthMod) #a 1.6021
-
-            self.sendRoll(base2,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
-            self.sendRoll(base3,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
-            self.sendRoll(base4,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
-            self.sendRoll(base5,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
-            self.sendRoll(base6,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
-
-
-    def sendRoll(self,base,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod,
-        spacer="",pname=False,rollAnyWay=False):
-        if base != 0 or rollAnyWay:
-            base = base + int(stat_mod) + misc + wepMod #m 1.5008
-            if base >= 0: mod1 = "+"
-            else: mod1 = ""
-            txt = '%s ' % (spacer)
-            txt += '%s Attack Roll: <b>[1d20%s%s%s]</b>' % (name, mod1, base, flu)
-            txt += ' ===> Damage: <b>[%s%s]</b>' % (dmg, aStrengthMod)
-            self.chat.ParsePost( txt, True, True )
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,attack_panel,"Attacks")
-        wnd.title = "Attacks"
-        return wnd
-
-    def tohtml(self):
-        melee = self.get_attack_data('m')
-        ranged = self.get_attack_data('r')
-        html_str = ("""<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >"""+
-          "<th>Attack</th><th>Total</th><th >Base</th>"+
-          "<th>Abil</th><th>Misc</th></tr>")
-        html_str += "<tr ALIGN='center' ><th >Melee:</th>"
-        html_str += "<td>"+str(melee[0]+melee[1]+melee[2])+"</td>"
-        html_str += "<td>"+str(melee[0])+"</td>"
-        html_str += "<td>"+str(melee[1])+"</td>"
-        html_str += "<td>"+str(melee[2])+"</td></tr>"
-
-        html_str += "<tr ALIGN='center' ><th >Ranged:</th>"
-        html_str += "<td>"+str(ranged[0]+ranged[1]+ranged[2])+"</td>"
-        html_str += "<td>"+str(ranged[0])+"</td>"
-        html_str += "<td>"+str(ranged[1])+"</td>"
-        html_str += "<td>"+str(ranged[2])+"</td></tr></table>"
-
-        n_list = self.xml.findall('weapon')
-        for n in n_list:
-            mod = n.get('mod')
-            if mod >= 0: mod1 = "+"
-            else: mod1 = ""
-            ran = n.get('range')
-            total = str(int(mod) + self.get_mod(ran))
-            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
-                    <th colspan=2>Weapon</th>
-                    <th>Attack</th><th >Damage</th><th>Critical</th></tr>"""
-            html_str += "<tr ALIGN='center' ><td  colspan=2>"
-            html_str += n.get('name')+"</td><td>"+total+"</td>"
-            html_str += "<td>"+n.get('damage')+"</td><td>"
-            html_str += n.get('critical')+"</td></tr>"
-            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Range</th><th>Weight</th>
-                        <th>Type</th><th>Size</th><th>Misc Mod</th></tr>"""
-            html_str += "<tr ALIGN='center'><td>"+ran+"</td><td>"
-            html_str += n.get('weight')+"</td>"
-            html_str += "<td>"+n.get('type')+"</td><td>"
-            html_str += n.get('size')+"</td>"
-            html_str += '<td>%s%s</td></tr>'  % (mod1, mod)
-            html_str += """<tr><th BGCOLOR=#E9E9E9 colspan=2>Footnotes:</th>"""
-            html_str += "<th colspan=3>"+safeGetAttr(n,'fn','')+"</th></tr>"
-            html_str += '</table>'
-        return html_str
-
-class attack_grid(wx.grid.Grid):
-    """grid for attacks"""
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Melee')
-        self.hparent = handler 
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-
-        self.root = getRoot(self) #a 1.9001
-        self.parent = parent
-        self.handler = handler
-        self.rows = (self.handler.melee,self.handler.ranged)
-        self.CreateGrid(2,10)
-        self.SetRowLabelSize(0)
-        col_names = ['Type','base','base 2','base 3','base 4','base 5',
-            'base 6','abil','misc','Total']
-        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
-        self.SetCellValue(0,0,"Melee")
-        self.SetCellValue(1,0,"Ranged")
-        self.refresh_data()
-        self.Bind(wx.EVT_SIZE, self.on_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        climber = parent
-        nameNode = climber.GetClassName()
-        while nameNode != 'wxFrame':
-            climber = climber.parent
-            nameNode = climber.GetClassName()
-        masterFrame=climber
-        masterFrame.refreshMRdata=self.refresh_data
-        handler.mrFrame.append(masterFrame)
-
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        try:
-            int(value)
-            if col==1: self.rows[row].set('base',value)
-            elif col==2: self.rows[row].set('second',value)
-            elif col==3: self.rows[row].set('third',value)
-            elif col==4: self.rows[row].set('forth',value)
-            elif col==5: self.rows[row].set('fifth',value)
-            elif col==6: self.rows[row].set('sixth',value)
-            elif col==8: self.rows[row].set('misc',value)
-            self.parent.refresh_data()
-        except: self.SetCellValue(row,col,"0")
-
-    def refresh_data(self):
-        melee = self.handler.get_attack_data('m')
-        ranged = self.handler.get_attack_data('r')
-        tmelee = int(melee[0]) + int(melee[6]) + int(melee[7])
-        tranged = int(ranged[0]) + int(ranged[6]) + int(ranged[7])
-        for i in range(0,8):    #a 1.5005
-            self.SetCellValue(0,i+1,str(melee[i]))
-            self.SetCellValue(1,i+1,str(ranged[i]))
-        self.SetCellValue(0,9,str(tmelee))
-        self.SetCellValue(1,9,str(tranged))
-        self.SetReadOnly(0,0)
-        self.SetReadOnly(1,0)
-        self.SetReadOnly(0,7)
-        self.SetReadOnly(1,7)
-        self.SetReadOnly(0,9)
-        self.SetReadOnly(1,9)
-
-    def on_size(self,evt):
-        (w,h) = self.GetClientSizeTuple()
-        cols = self.GetNumberCols()
-        col_w = w/(cols+1)
-        self.SetColSize(0,col_w*2)
-        for i in range(1,cols): self.SetColSize(i,col_w)
-        evt.Skip()
-        self.Refresh()
-
-class weapon_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        self.hparent = handler
-        self.root = getRoot(self)
-        pname = handler.xml.set("name", 'Weapons')
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer2.Add(wx.Button(self, 10, "Remove Weapon"), 0, wx.EXPAND)
-        sizer2.Add(wx.Size(10,10))
-        sizer2.Add(wx.Button(self, 20, "Add Weapon"), 0, wx.EXPAND)
-        sizer.Add(sizer2, 0, wx.EXPAND)
-        sizer.Add(wx.StaticText(self, -1, "Right click a weapon's footnote to see what the footnotes mean."),0, wx.EXPAND)#a 1.5012
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.sizer2 = sizer2
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.on_gridRclick)#a 1.5012
-
-        n_list = handler.xml.findall('weapon')
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.handler = handler
-        self.colAttr = ['name','damage','mod','critical','type','weight',
-                    'range','size','Total','fn',    'comment']
-        col_names = ['Name','Damage','To hit\nmod','Critical','Type','Weight',
-                    'Range','Size','Total','Foot\nnotes','Comment']
-        gridColCount=len(col_names)
-        self.grid.CreateGrid(len(n_list),gridColCount,1)
-        self.grid.SetRowLabelSize(0)
-        for i in range(gridColCount):  self.grid.SetColLabelValue(i,col_names[i])
-        self.refresh_data()
-        self.temp_dom = None
-
-
-    #mark4
-    #a 1.5012 add entire method.
-    def on_gridRclick(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 9 and value != 'None':
-            n = self.n_list[row]
-            name = n.get('name')
-            handler = self.hparent
-            # A handler is a node, and nodes have a reference to
-            # the master frame
-            masterFrame = handler.frame
-            title = name+"'s Special Weapon Characteristics"
-            fnFrame = wx.Frame(masterFrame, -1, title)
-            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
-            if not self.temp_dom:
-                tree = parse(dir_struct["dnd3e"]+"dnd3eweapons.xml")
-                xml_dom = tree.getroot()
-                self.temp_dom = xml_dom
-            f_list = self.temp_dom.findall('f') # the footnotes
-            n = self.n_list[row]
-            name = n.get('name')
-            footnotes = n.get('fn')
-            html_str = "<html><body>"
-            html_str += """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
-                        <th width='10%'>Note</th><th>Description</th></tr>\n"""
-            if footnotes == "":
-                html_str += "<tr ALIGN='center'><td></td>"
-                html_str += "  <td>This weapon has no footnotes</td></tr>"
-            for i in range(len(footnotes)):
-                aNote=footnotes[i]
-                found=False
-                for f in f_list:
-                    if f.get('mark') == aNote:
-                        found=True
-                        text=f.get('txt')
-                        html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
-                                     "<td>"+text+"</td></tr>\n")
-                if not found:
-                    html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
-                       "<td>is not a recognized footnote</td></tr>\n")
-
-            html_str +=  "</table>"
-            html_str +=  "</body> </html> "
-            fnFrame.panel.SetPage(html_str)
-            fnFrame.Show()
-            return
-        pass
-
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 2 and not int(value): # special case for mod, demoted
-            value = "0" #a 5.012 demoted
-            self.n_list[row].set('mod',value) # a 5.012 demoted
-        if not (col == 9 and value == "None" and
-                self.n_list[row].get('fn') == "None"
-                ): #a 5.012 special case for footnotes
-            self.n_list[row].set(self.colAttr[col],value)#a 5.012
-
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        fn = n.get('fn')
-        name = n.get('name')
-        mod = n.get('mod')
-        ran = n.get('range')
-        total = str(int(mod) + self.handler.get_mod(ran))
-        self.grid.SetCellValue(i,0,name)
-        self.grid.SetCellValue(i,1,n.get('damage'))
-        self.grid.SetCellValue(i,2,mod)
-        self.grid.SetCellValue(i,3,n.get('critical'))
-        self.grid.SetCellValue(i,4,n.get('type'))
-        self.grid.SetCellValue(i,5,n.get('weight'))
-        self.grid.SetCellValue(i,6,ran)
-        self.grid.SetCellValue(i,7,n.get('size') )
-        self.grid.SetCellValue(i,8,total)
-        self.grid.SetCellValue(i,9,safeGetAttr(n,'fn','None')) #a 1.5012
-        self.grid.SetCellValue(i,10,safeGetAttr(n,'comment','')) #a 1.5012
-        self.grid.SetReadOnly(i,8)
-
-    def on_remove(self,evt): #o 1.6011 correcting wrongful deletion
-        rows = self.grid.GetNumberRows()
-        for i in range(rows-1,-1,-1):   #a 1.6011 or you lose context
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-                self.n_list = self.xml.findall('weapon')
-                self.handler.refresh_weapons()
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3eweapons.xml")
-            xml_dom = tree.getroot()
-            self.temp_dom = xml_dom
-        f_list = self.temp_dom.findall('weapon')
-        opts = []
-        for f in f_list:
-            opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('weapon')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_weapons()
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-40)
-        self.sizer.SetDimension(0,s[1]-40,s[0],25)
-        self.sizer2.SetDimension(0,s[1]-15,s[0],15)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols+1)
-        self.grid.SetColSize(0,col_w*2)
-        for i in range(1,cols): self.grid.SetColSize(i,col_w)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-
-class attack_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Melee')
-        self.parent = parent #a 1.9001
-        wx.Panel.__init__(self, parent, -1)
-        self.a_grid = attack_grid(self, handler)
-        self.w_panel = weapon_panel(self, handler)
-        self.sizer = wx.BoxSizer(wx.VERTICAL)
-        self.sizer.Add(self.a_grid, 1, wx.EXPAND)
-        self.sizer.Add(self.w_panel, 2, wx.EXPAND)
-        self.Bind(wx.EVT_SIZE, self.on_size)
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-    def refresh_data(self):
-        self.w_panel.refresh_data()
-        self.a_grid.refresh_data()
-
-
-class dnd3earmor(combat_char_child):
-    """ Node Handler for ac.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        combat_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.root = getRoot(self) 
-        self.root.ac = self
-
-    def get_spell_failure(self):
-        return self.get_total('spellfailure')
-
-    def get_total_weight(self):
-        return self.get_total('weight')
-
-    def get_check_pen(self):
-        return self.get_total('checkpenalty')
-
-    def get_armor_class(self):
-        ac_total = 10
-
-        ac_total += self.get_total('bonus')
-        dex_mod = self.root.abilities.get_mod('Dex')
-        max_dex = self.get_max_dex()
-        if dex_mod < max_dex: ac_total += dex_mod
-        else: ac_total += max_dex
-        return ac_total
-
-    def get_max_dex(self):
-        armor_list = self.xml.findall('armor')
-        dex = 10
-        for a in armor_list:
-            temp = int(a.get("maxdex"))
-            if temp < dex: dex = temp
-        return dex
-
-    def get_total(self,attr):
-        armor_list = self.xml.findall('armor')
-        total = 0
-        for a in armor_list: total += int(a.get(attr))
-        return total
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,ac_panel,"Armor")
-        wnd.title = "Armor"
-        return wnd
-
-    def on_rclick( self, evt ):
-        ac = self.get_armor_class()
-        fac = (int(ac)-(self.root.abilities.get_mod('Dex')))
-        txt = '((AC: %s Normal, %s Flatfoot))' % ( ac, fac ) #a 1.5002
-        self.chat.ParsePost( txt, True, True )
-
-    def tohtml(self):
-        html_str = """<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
-            <th>AC</th><th>Check Penalty</th><th >Spell Failure</th>
-            <th>Max Dex</th><th>Total Weight</th></tr>"""
-        html_str += "<tr ALIGN='center' >"
-        html_str += "<td>"+str(self.get_armor_class())+"</td>"
-        html_str += "<td>"+str(self.get_check_pen())+"</td>"
-        html_str += "<td>"+str(self.get_spell_failure())+"</td>"
-        html_str += "<td>"+str(self.get_max_dex())+"</td>"
-        html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>"
-        n_list = self.xml.getchildren()
-        for n in n_list:
-            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
-                <th colspan=3>Armor</th><th>Type</th><th >Bonus</th></tr>"""
-            html_str += "<tr ALIGN='center' >"
-            html_str += "<td  colspan=3>"+n.get('name')+"</td>"
-            html_str += "<td>"+n.get('type')+"</td>"
-            html_str += "<td>"+n.get('bonus')+"</td></tr>"
-            html_str += """<tr BGCOLOR=#E9E9E9 >"""
-            html_str += "<th>Check Penalty</th><th>Spell Failure</th>"
-            html_str += "<th>Max Dex</th><th>Speed</th><th>Weight</th></tr>"
-            html_str += "<tr ALIGN='center'>"
-            html_str += "<td>"+n.get('checkpenalty')+"</td>"
-            html_str += "<td>"+n.get('spellfailure')+"</td>"
-            html_str += "<td>"+n.get('maxdex')+"</td>"
-            html_str += "<td>"+n.get('speed')+"</td>"
-            html_str += "<td>"+n.get('weight')+"</td></tr></table>"
-        return html_str
-
-
-class ac_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Armor')
-        self.hparent = handler 
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Armor"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Armor"), 1, wx.EXPAND)
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.xml = handler.xml
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        col_names = ['Armor','bonus','maxdex','cp','sf','weight','speed','type']
-        self.grid.CreateGrid(len(n_list),len(col_names),1)
-        self.grid.SetRowLabelSize(0)
-        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
-        self.atts =['name','bonus','maxdex','checkpenalty',
-            'spellfailure','weight','speed','type']
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col >= 1 and col <= 5:
-            try:
-                int(value)
-                self.n_list[row].set(self.atts[col],value)
-            except: self.grid.SetCellValue(row,col,"0")
-        else: self.n_list[row].set(self.atts[col],value)
-
-    def refresh_row(self,i):
-        n = self.n_list[i]
-        for y in range(len(self.atts)): self.grid.SetCellValue(i,y,n.get(self.atts[y]))
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3earmor.xml")
-            xml_dom = tree.getroot()
-            self.temp_dom = xml_dom
-        f_list = self.temp_dom.findall('armor')
-        opts = []
-        for f in f_list: opts.append(f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.refresh_row(self.grid.GetNumberRows()-1)
-        dlg.Destroy()
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols+2)
-        self.grid.SetColSize(0,col_w*3)
-        for i in range(1,cols): self.grid.SetColSize(i,col_w)
-
-
-class dnd3esnp(dnd3e_char_child):
-    """ Node Handler for power points.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent 
-        self.frame = component.get('frame')
-        self.child_handlers = {}
-        self.new_child_handler('spells','Spells',dnd3espells,'book')
-        self.new_child_handler('divine','Divine Spells',dnd3edivine,'book')
-        self.new_child_handler('powers','Powers',dnd3epowers,'book')
-        self.new_child_handler('pp','Power Points',dnd3epp,'gear')
-        self.myeditor = None
-
-    def new_child_handler(self,tag,text,handler_class,icon='gear'):
-        node_list = self.xml.findall(tag)
-        tree = self.tree
-        i = self.tree.icons[icon]
-        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
-        handler = handler_class(node_list[0],new_tree_node,self)
-        tree.SetPyData(new_tree_node,handler)
-        self.child_handlers[tag] = handler
-
-    def get_design_panel(self,parent):
-        return tabbed_panel(parent,self,1)
-
-    def get_use_panel(self,parent):
-        return tabbed_panel(parent,self,2)
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+class dnd3ehp(combat_char_child):
+    """ Node Handler for hit points.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        combat_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.root = getRoot(self)
+        self.root.hp = self 
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,hp_panel,"Hit Points")
+        wnd.title = "Hit Points"
+        return wnd
+
+    def on_rclick( self, evt ):
+        chp = self.xml.get('current')
+        mhp = self.xml.get('max')
+        txt = '((HP: %s / %s))' % ( chp, mhp )
+        self.chat.ParsePost( txt, True, True )
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 >"
+        html_str += "<tr BGCOLOR=#E9E9E9 ><th colspan=4>Hit Points</th></tr>"
+        html_str += "<tr><th>Max:</th>"
+        html_str += "<td>"+self.xml.get('max')+"</td>"
+        html_str += "<th>Current:</th>"
+        html_str += "<td>"+self.xml.get('current')+"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+class hp_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.hparent = handler 
+        pname = handler.xml.set("name", 'HitPoints')
+        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
+        self.xml = handler.xml
+        self.sizer.AddMany([ (wx.StaticText(self, -1, "HP Current:"),   0,
+           wx.ALIGN_CENTER_VERTICAL),
+          (wx.TextCtrl(self, HP_CUR,
+           self.xml.get('current')),   0, wx.EXPAND),
+          (wx.StaticText(self, -1, "HP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
+          (wx.TextCtrl(self, HP_MAX, self.xml.get('max')),
+           0, wx.EXPAND),
+         ])
+        self.sizer.AddGrowableCol(1)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_MAX)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=HP_CUR)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == HP_CUR: self.xml.set('current',evt.GetString())
+        elif id == HP_MAX: self.xml.set('max',evt.GetString())
+
+    def on_size(self,evt):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+class dnd3eattacks(combat_char_child):
+    """ Node Handler for attacks.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        combat_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent
+        self.root = getRoot(self)
+        self.root.attacks = self 
+        self.mrFrame = [] 
+        self.updateFootNotes = False
+        self.updateFootNotes = False
+        self.html_str = "<html><body>"
+        self.html_str += ("<br>  This character has weapons with no "+
+             "footnotes.  This program will "+
+             "add footnotes to the weapons which have names that still match "+
+             "the orginal names.  If you have changed the weapon name, you "+
+             "will see some weapons with a footnote of 'X', you will have "+
+             "to either delete and re-add the weapon, or research "+
+             "and add the correct footnotes for the weapon.\n"+
+             "<br>  Please be aware, that only the bow/sling footnote is "+
+             "being used to affect changes to rolls; implemenation of other "+
+             "footnotes to automaticly adjust rolls will be completed as "+
+             "soon as time allows." +
+             "<br><br>Update to character:"+self.root.general.charName+
+             "<br><br>"+
+             """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+              <th width='80%'>Weapon Name</th><th>Added Footnote</th></tr>\n""")
+        self.temp_dom={}
+        node_list = self.xml.findall('melee')
+        self.melee = node_list[0]
+        node_list = self.xml.findall('ranged')
+        self.ranged = node_list[0]
+        self.refresh_weapons() 
+        if self.updateFootNotes == True:
+            self.updateFootNotes = False
+            name = self.root.general.charName
+            self.html_str +=  "</table>"
+            self.html_str +=  "</body> </html> "
+            masterFrame = self.root.frame
+            title = name+"'s weapons' update to have footnotes"
+            fnFrame = wx.Frame(masterFrame, -1, title)
+            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
+            fnFrame.panel.SetPage(self.html_str)
+            fnFrame.Show()
+
+
+
+    def refreshMRdata(self): 
+        # of the attack chart.
+        # count backwards, maintains context despite "removes"
+        for i in range(len(self.mrFrame)-1,-1,-1):
+            x = self.mrFrame[i]
+            if x == None: x.refreshMRdata() #a 1.9001
+            else: self.mrFrame.remove(x)
+
+    def refresh_weapons(self):
+        self.weapons = {}
+
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('weapon')
+        for n in node_list:
+            name = n.get('name')
+            fn = safeGetAttr(n,'fn')
+            if fn == None:
+                self.updateFootNotes=True
+                self.updateFootN(n) 
+            new_tree_node = tree.AppendItem(
+                self.mytree_node,name,icons['sword'],icons['sword'])
+            tree.SetPyData(new_tree_node,self)
+            self.weapons[name]=n
+
+    def updateFootN(self,n):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3eweapons.xml")
+            self.temp_dom = tree.getroot()
+        nameF = n.get('name')
+        w_list = self.temp_dom.findall('weapon')
+        found = False
+        for w in w_list:
+            if nameF == w.get('name'):
+                found = True
+                fnN = safeGetAttr(n,'fn')
+                if fnN == None or fnN == 'None':
+                    fnW = w.get('fn')
+                    self.html_str += ("<tr ALIGN='center'><td>"+nameF+"</td>"+
+                                     "<td>"+fnW+"</td></tr>\n")
+                    n.set('fn',fnW)
+                break
+        if not found:
+            self.html_str += ("<tr ALIGN='center'><td>"+nameF+" - Custom "+
+              "Weapon, research "+
+              "and update manually; setting footnote to indicate custom</td>"+
+                                     "<td>"+'X'+"</td></tr>\n")
+            n.set('fn','X')
+
+    def get_mod(self,type='m'):
+        (base, base2, base3, base4, base5, base6, stat_mod, misc) \
+            = self.get_attack_data(type)
+        return int(base + misc + int(stat_mod))
+
+    def get_attack_data(self,type='m'):
+        if type=='m' or type=='0':
+            stat = 'Str' 
+            temp = self.melee
+        else:
+            stat = 'Dex' 
+            temp = self.ranged
+        stat_mod = -7
+        stat_mod = self.root.abilities.get_mod(stat)
+        base = int(temp.get('base'))
+        base2 = int(temp.get('second'))
+        base3 = int(temp.get('third'))
+        base4 = int(temp.get('forth'))
+        base5 = int(temp.get('fifth'))
+        base6 = int(temp.get('sixth'))
+        misc = int(temp.get('misc'))
+        return (base, base2, base3, base4, base5, base6, stat_mod ,misc)
+
+    def on_rclick(self,evt):
+        item = self.tree.GetSelection()
+
+        name = self.tree.GetItemText(item)
+        if item == self.mytree_node:
+            return 
+        else:
+
+            mod = int(self.weapons[name].get('mod'))
+            wepMod = mod #a 1.5008
+            footNotes = safeGetAttr(self.weapons[name],'fn','')
+            cat = self.weapons[name].get('category') #a1.6001
+            result = split(cat,"-",2) #a 1.6001
+            if len(result) < 2: #a 1.6021 this if & else
+                print "warning: 1.6002 unable to interpret weapon category"
+                print "format 'type weapon-[Range|Melee]', probably missing"
+                print "the hyphen.  Assuming Melee"
+                print "weapon name: ",name
+                tres="Melee"
+            else:
+                tres=result[1]
+            if tres == 'Melee': #a 1.6001   #m 1.6022 use of tres here and...
+                rangeOrMelee = 'm' #a 1.5008 code demote for next comment block
+            elif tres == 'Ranged': #m 1.6001 (was just else) #m 1.6022 here
+                rangeOrMelee = 'r' #a 1.5008
+            else:#a 1.6001 add this whole else clause.
+                print "warning: 1.6001 unable to interpret weapon category"
+                print "treating weapon as Melee, please correct xml"
+                print "weapon name:",name
+                rangeOrMelee ='m'
+            mod = mod + self.get_mod(rangeOrMelee) #a 1.5008
+            chat = self.chat
+            dmg = self.weapons[name].get('damage')
+
+            #a 1.6003 start code fix instance a
+            result = split(dmg,"/",2)
+            dmg = result[0]
+            monkLvl = self.root.classes.get_class_lvl('Monk') # a 1.5002
+            if dmg == "Monk Med":
+                if monkLvl == None:     #a 1.5009
+                    txt = 'Attempting to use monk attack, but has no monk '
+                    txt += 'levels, please choose a different attack.'
+                    chat.ParsePost( txt, True, True ) #a 1.5009
+                    return #a 1.5009
+                else:   #a 1.5009
+                    lvl=int(monkLvl)
+                    if lvl <= 3: dmg = "1d6"
+                    elif lvl <= 7: dmg = "1d8"
+                    elif lvl <= 11: dmg = "1d10"
+                    elif lvl <= 15: dmg = "2d6"
+                    elif lvl <= 19: dmg = "2d8"
+                    elif lvl <= 20: dmg = "2d10"
+            if dmg == "Monk Small":
+                if monkLvl == None:
+                    txt = 'Attempting to use monk attack, but has no monk '
+                    txt += 'levels, please choose a different attack.'
+                    chat.ParsePost( txt, True, True )
+                    return
+                else: 
+                    lvl=int(monkLvl)
+                    if lvl <= 3: dmg = "1d4"
+                    elif lvl <= 7: dmg = "1d6"
+                    elif lvl <= 11: dmg = "1d8"
+                    elif lvl <= 15: dmg = "1d10"
+                    elif lvl <= 20: dmg = "2d6"
+            flu = ''
+            str_mod = self.root.abilities.get_mod('Str') #a 1.5007,11,12,13
+            if rangeOrMelee == 'r':                     #a 1.5008
+
+                if find(footNotes,'b') > -1:
+                    if str_mod >= 0: str_mod = 0 
+                else:  str_mod = 0
+            mod2 = ""
+            if str_mod >= 0: mod2 = "+"
+            aStrengthMod = mod2 + str(str_mod) #a 1.5008 applicable strength mod
+            if find(name ,"Flurry of Blows") > -1: #a 1.6012
+                flu = '-2'
+            (base, base2, base3, base4, base5, base6, stat_mod, misc)\
+                = self.get_attack_data(rangeOrMelee)  #a 1.5008
+            self.sendRoll(base ,stat_mod,misc,wepMod,name,flu,dmg,
+                aStrengthMod,'',True,rollAnyWay=True)
+            if flu != '':
+                self.sendRoll(base ,stat_mod,misc,wepMod,name,flu,dmg,
+                    aStrengthMod) #a 1.6021
+
+            self.sendRoll(base2,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
+            self.sendRoll(base3,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
+            self.sendRoll(base4,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
+            self.sendRoll(base5,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
+            self.sendRoll(base6,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod)
+
+
+    def sendRoll(self,base,stat_mod,misc,wepMod,name,flu,dmg,aStrengthMod,
+        spacer="",pname=False,rollAnyWay=False):
+        if base != 0 or rollAnyWay:
+            base = base + int(stat_mod) + misc + wepMod #m 1.5008
+            if base >= 0: mod1 = "+"
+            else: mod1 = ""
+            txt = '%s ' % (spacer)
+            txt += '%s Attack Roll: <b>[1d20%s%s%s]</b>' % (name, mod1, base, flu)
+            txt += ' ===> Damage: <b>[%s%s]</b>' % (dmg, aStrengthMod)
+            self.chat.ParsePost( txt, True, True )
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,attack_panel,"Attacks")
+        wnd.title = "Attacks"
+        return wnd
+
+    def tohtml(self):
+        melee = self.get_attack_data('m')
+        ranged = self.get_attack_data('r')
+        html_str = ("""<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >"""+
+          "<th>Attack</th><th>Total</th><th >Base</th>"+
+          "<th>Abil</th><th>Misc</th></tr>")
+        html_str += "<tr ALIGN='center' ><th >Melee:</th>"
+        html_str += "<td>"+str(melee[0]+melee[1]+melee[2])+"</td>"
+        html_str += "<td>"+str(melee[0])+"</td>"
+        html_str += "<td>"+str(melee[1])+"</td>"
+        html_str += "<td>"+str(melee[2])+"</td></tr>"
+
+        html_str += "<tr ALIGN='center' ><th >Ranged:</th>"
+        html_str += "<td>"+str(ranged[0]+ranged[1]+ranged[2])+"</td>"
+        html_str += "<td>"+str(ranged[0])+"</td>"
+        html_str += "<td>"+str(ranged[1])+"</td>"
+        html_str += "<td>"+str(ranged[2])+"</td></tr></table>"
+
+        n_list = self.xml.findall('weapon')
+        for n in n_list:
+            mod = n.get('mod')
+            if mod >= 0: mod1 = "+"
+            else: mod1 = ""
+            ran = n.get('range')
+            total = str(int(mod) + self.get_mod(ran))
+            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
+                    <th colspan=2>Weapon</th>
+                    <th>Attack</th><th >Damage</th><th>Critical</th></tr>"""
+            html_str += "<tr ALIGN='center' ><td  colspan=2>"
+            html_str += n.get('name')+"</td><td>"+total+"</td>"
+            html_str += "<td>"+n.get('damage')+"</td><td>"
+            html_str += n.get('critical')+"</td></tr>"
+            html_str += """<tr BGCOLOR=#E9E9E9 ><th>Range</th><th>Weight</th>
+                        <th>Type</th><th>Size</th><th>Misc Mod</th></tr>"""
+            html_str += "<tr ALIGN='center'><td>"+ran+"</td><td>"
+            html_str += n.get('weight')+"</td>"
+            html_str += "<td>"+n.get('type')+"</td><td>"
+            html_str += n.get('size')+"</td>"
+            html_str += '<td>%s%s</td></tr>'  % (mod1, mod)
+            html_str += """<tr><th BGCOLOR=#E9E9E9 colspan=2>Footnotes:</th>"""
+            html_str += "<th colspan=3>"+safeGetAttr(n,'fn','')+"</th></tr>"
+            html_str += '</table>'
+        return html_str
+
+class attack_grid(wx.grid.Grid):
+    """grid for attacks"""
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Melee')
+        self.hparent = handler 
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+
+        self.root = getRoot(self) #a 1.9001
+        self.parent = parent
+        self.handler = handler
+        self.rows = (self.handler.melee,self.handler.ranged)
+        self.CreateGrid(2,10)
+        self.SetRowLabelSize(0)
+        col_names = ['Type','base','base 2','base 3','base 4','base 5',
+            'base 6','abil','misc','Total']
+        for i in range(len(col_names)): self.SetColLabelValue(i,col_names[i])
+        self.SetCellValue(0,0,"Melee")
+        self.SetCellValue(1,0,"Ranged")
+        self.refresh_data()
+        self.Bind(wx.EVT_SIZE, self.on_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        climber = parent
+        nameNode = climber.GetClassName()
+        while nameNode != 'wxFrame':
+            climber = climber.parent
+            nameNode = climber.GetClassName()
+        masterFrame=climber
+        masterFrame.refreshMRdata=self.refresh_data
+        handler.mrFrame.append(masterFrame)
+
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        try:
+            int(value)
+            if col==1: self.rows[row].set('base',value)
+            elif col==2: self.rows[row].set('second',value)
+            elif col==3: self.rows[row].set('third',value)
+            elif col==4: self.rows[row].set('forth',value)
+            elif col==5: self.rows[row].set('fifth',value)
+            elif col==6: self.rows[row].set('sixth',value)
+            elif col==8: self.rows[row].set('misc',value)
+            self.parent.refresh_data()
+        except: self.SetCellValue(row,col,"0")
+
+    def refresh_data(self):
+        melee = self.handler.get_attack_data('m')
+        ranged = self.handler.get_attack_data('r')
+        tmelee = int(melee[0]) + int(melee[6]) + int(melee[7])
+        tranged = int(ranged[0]) + int(ranged[6]) + int(ranged[7])
+        for i in range(0,8):    #a 1.5005
+            self.SetCellValue(0,i+1,str(melee[i]))
+            self.SetCellValue(1,i+1,str(ranged[i]))
+        self.SetCellValue(0,9,str(tmelee))
+        self.SetCellValue(1,9,str(tranged))
+        self.SetReadOnly(0,0)
+        self.SetReadOnly(1,0)
+        self.SetReadOnly(0,7)
+        self.SetReadOnly(1,7)
+        self.SetReadOnly(0,9)
+        self.SetReadOnly(1,9)
+
+    def on_size(self,evt):
+        (w,h) = self.GetClientSizeTuple()
+        cols = self.GetNumberCols()
+        col_w = w/(cols+1)
+        self.SetColSize(0,col_w*2)
+        for i in range(1,cols): self.SetColSize(i,col_w)
+        evt.Skip()
+        self.Refresh()
+
+class weapon_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        self.hparent = handler
+        self.root = getRoot(self)
+        pname = handler.xml.set("name", 'Weapons')
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer2.Add(wx.Button(self, 10, "Remove Weapon"), 0, wx.EXPAND)
+        sizer2.Add(wx.Size(10,10))
+        sizer2.Add(wx.Button(self, 20, "Add Weapon"), 0, wx.EXPAND)
+        sizer.Add(sizer2, 0, wx.EXPAND)
+        sizer.Add(wx.StaticText(self, -1, "Right click a weapon's footnote to see what the footnotes mean."),0, wx.EXPAND)#a 1.5012
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.sizer2 = sizer2
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.on_gridRclick)#a 1.5012
+
+        n_list = handler.xml.findall('weapon')
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.handler = handler
+        self.colAttr = ['name','damage','mod','critical','type','weight',
+                    'range','size','Total','fn',    'comment']
+        col_names = ['Name','Damage','To hit\nmod','Critical','Type','Weight',
+                    'Range','Size','Total','Foot\nnotes','Comment']
+        gridColCount=len(col_names)
+        self.grid.CreateGrid(len(n_list),gridColCount,1)
+        self.grid.SetRowLabelSize(0)
+        for i in range(gridColCount):  self.grid.SetColLabelValue(i,col_names[i])
+        self.refresh_data()
+        self.temp_dom = None
+
+
+    #mark4
+    #a 1.5012 add entire method.
+    def on_gridRclick(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 9 and value != 'None':
+            n = self.n_list[row]
+            name = n.get('name')
+            handler = self.hparent
+            # A handler is a node, and nodes have a reference to
+            # the master frame
+            masterFrame = handler.frame
+            title = name+"'s Special Weapon Characteristics"
+            fnFrame = wx.Frame(masterFrame, -1, title)
+            fnFrame.panel = wx.html.HtmlWindow(fnFrame,-1)
+            if not self.temp_dom:
+                tree = parse(dir_struct["dnd3e"]+"dnd3eweapons.xml")
+                xml_dom = tree.getroot()
+                self.temp_dom = xml_dom
+            f_list = self.temp_dom.findall('f') # the footnotes
+            n = self.n_list[row]
+            name = n.get('name')
+            footnotes = n.get('fn')
+            html_str = "<html><body>"
+            html_str += """<table border='1' width=100% ><tr BGCOLOR=#E9E9E9 >
+                        <th width='10%'>Note</th><th>Description</th></tr>\n"""
+            if footnotes == "":
+                html_str += "<tr ALIGN='center'><td></td>"
+                html_str += "  <td>This weapon has no footnotes</td></tr>"
+            for i in range(len(footnotes)):
+                aNote=footnotes[i]
+                found=False
+                for f in f_list:
+                    if f.get('mark') == aNote:
+                        found=True
+                        text=f.get('txt')
+                        html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
+                                     "<td>"+text+"</td></tr>\n")
+                if not found:
+                    html_str += ("<tr ALIGN='center'><td>"+aNote+"</td>"+
+                       "<td>is not a recognized footnote</td></tr>\n")
+
+            html_str +=  "</table>"
+            html_str +=  "</body> </html> "
+            fnFrame.panel.SetPage(html_str)
+            fnFrame.Show()
+            return
+        pass
+
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 2 and not int(value): # special case for mod, demoted
+            value = "0" #a 5.012 demoted
+            self.n_list[row].set('mod',value) # a 5.012 demoted
+        if not (col == 9 and value == "None" and
+                self.n_list[row].get('fn') == "None"
+                ): #a 5.012 special case for footnotes
+            self.n_list[row].set(self.colAttr[col],value)#a 5.012
+
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        fn = n.get('fn')
+        name = n.get('name')
+        mod = n.get('mod')
+        ran = n.get('range')
+        total = str(int(mod) + self.handler.get_mod(ran))
+        self.grid.SetCellValue(i,0,name)
+        self.grid.SetCellValue(i,1,n.get('damage'))
+        self.grid.SetCellValue(i,2,mod)
+        self.grid.SetCellValue(i,3,n.get('critical'))
+        self.grid.SetCellValue(i,4,n.get('type'))
+        self.grid.SetCellValue(i,5,n.get('weight'))
+        self.grid.SetCellValue(i,6,ran)
+        self.grid.SetCellValue(i,7,n.get('size') )
+        self.grid.SetCellValue(i,8,total)
+        self.grid.SetCellValue(i,9,safeGetAttr(n,'fn','None')) #a 1.5012
+        self.grid.SetCellValue(i,10,safeGetAttr(n,'comment','')) #a 1.5012
+        self.grid.SetReadOnly(i,8)
+
+    def on_remove(self,evt): #o 1.6011 correcting wrongful deletion
+        rows = self.grid.GetNumberRows()
+        for i in range(rows-1,-1,-1):   #a 1.6011 or you lose context
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+                self.n_list = self.xml.findall('weapon')
+                self.handler.refresh_weapons()
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3eweapons.xml")
+            xml_dom = tree.getroot()
+            self.temp_dom = xml_dom
+        f_list = self.temp_dom.findall('weapon')
+        opts = []
+        for f in f_list:
+            opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Weapon','Weapon List',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('weapon')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_weapons()
+        dlg.Destroy()
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-40)
+        self.sizer.SetDimension(0,s[1]-40,s[0],25)
+        self.sizer2.SetDimension(0,s[1]-15,s[0],15)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols+1)
+        self.grid.SetColSize(0,col_w*2)
+        for i in range(1,cols): self.grid.SetColSize(i,col_w)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+
+class attack_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Melee')
+        self.parent = parent #a 1.9001
+        wx.Panel.__init__(self, parent, -1)
+        self.a_grid = attack_grid(self, handler)
+        self.w_panel = weapon_panel(self, handler)
+        self.sizer = wx.BoxSizer(wx.VERTICAL)
+        self.sizer.Add(self.a_grid, 1, wx.EXPAND)
+        self.sizer.Add(self.w_panel, 2, wx.EXPAND)
+        self.Bind(wx.EVT_SIZE, self.on_size)
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+    def refresh_data(self):
+        self.w_panel.refresh_data()
+        self.a_grid.refresh_data()
+
+
+class dnd3earmor(combat_char_child):
+    """ Node Handler for ac.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        combat_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.root = getRoot(self) 
+        self.root.ac = self
+
+    def get_spell_failure(self):
+        return self.get_total('spellfailure')
+
+    def get_total_weight(self):
+        return self.get_total('weight')
+
+    def get_check_pen(self):
+        return self.get_total('checkpenalty')
+
+    def get_armor_class(self):
+        ac_total = 10
+
+        ac_total += self.get_total('bonus')
+        dex_mod = self.root.abilities.get_mod('Dex')
+        max_dex = self.get_max_dex()
+        if dex_mod < max_dex: ac_total += dex_mod
+        else: ac_total += max_dex
+        return ac_total
+
+    def get_max_dex(self):
+        armor_list = self.xml.findall('armor')
+        dex = 10
+        for a in armor_list:
+            temp = int(a.get("maxdex"))
+            if temp < dex: dex = temp
+        return dex
+
+    def get_total(self,attr):
+        armor_list = self.xml.findall('armor')
+        total = 0
+        for a in armor_list: total += int(a.get(attr))
+        return total
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,ac_panel,"Armor")
+        wnd.title = "Armor"
+        return wnd
+
+    def on_rclick( self, evt ):
+        ac = self.get_armor_class()
+        fac = (int(ac)-(self.root.abilities.get_mod('Dex')))
+        txt = '((AC: %s Normal, %s Flatfoot))' % ( ac, fac ) #a 1.5002
+        self.chat.ParsePost( txt, True, True )
+
+    def tohtml(self):
+        html_str = """<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
+            <th>AC</th><th>Check Penalty</th><th >Spell Failure</th>
+            <th>Max Dex</th><th>Total Weight</th></tr>"""
+        html_str += "<tr ALIGN='center' >"
+        html_str += "<td>"+str(self.get_armor_class())+"</td>"
+        html_str += "<td>"+str(self.get_check_pen())+"</td>"
+        html_str += "<td>"+str(self.get_spell_failure())+"</td>"
+        html_str += "<td>"+str(self.get_max_dex())+"</td>"
+        html_str += "<td>"+str(self.get_total_weight())+"</td></tr></table>"
+        n_list = self.xml.getchildren()
+        for n in n_list:
+            html_str += """<P><table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >
+                <th colspan=3>Armor</th><th>Type</th><th >Bonus</th></tr>"""
+            html_str += "<tr ALIGN='center' >"
+            html_str += "<td  colspan=3>"+n.get('name')+"</td>"
+            html_str += "<td>"+n.get('type')+"</td>"
+            html_str += "<td>"+n.get('bonus')+"</td></tr>"
+            html_str += """<tr BGCOLOR=#E9E9E9 >"""
+            html_str += "<th>Check Penalty</th><th>Spell Failure</th>"
+            html_str += "<th>Max Dex</th><th>Speed</th><th>Weight</th></tr>"
+            html_str += "<tr ALIGN='center'>"
+            html_str += "<td>"+n.get('checkpenalty')+"</td>"
+            html_str += "<td>"+n.get('spellfailure')+"</td>"
+            html_str += "<td>"+n.get('maxdex')+"</td>"
+            html_str += "<td>"+n.get('speed')+"</td>"
+            html_str += "<td>"+n.get('weight')+"</td></tr></table>"
+        return html_str
+
+
+class ac_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Armor')
+        self.hparent = handler 
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Armor"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Armor"), 1, wx.EXPAND)
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.xml = handler.xml
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        col_names = ['Armor','bonus','maxdex','cp','sf','weight','speed','type']
+        self.grid.CreateGrid(len(n_list),len(col_names),1)
+        self.grid.SetRowLabelSize(0)
+        for i in range(len(col_names)): self.grid.SetColLabelValue(i,col_names[i])
+        self.atts =['name','bonus','maxdex','checkpenalty',
+            'spellfailure','weight','speed','type']
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col >= 1 and col <= 5:
+            try:
+                int(value)
+                self.n_list[row].set(self.atts[col],value)
+            except: self.grid.SetCellValue(row,col,"0")
+        else: self.n_list[row].set(self.atts[col],value)
+
+    def refresh_row(self,i):
+        n = self.n_list[i]
+        for y in range(len(self.atts)): self.grid.SetCellValue(i,y,n.get(self.atts[y]))
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3earmor.xml")
+            xml_dom = tree.getroot()
+            self.temp_dom = xml_dom
+        f_list = self.temp_dom.findall('armor')
+        opts = []
+        for f in f_list: opts.append(f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Armor:','Armor List',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.refresh_row(self.grid.GetNumberRows()-1)
+        dlg.Destroy()
 
-
-class snp_char_child(node_handler):
-    """ Node Handler for skill.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        node_handler.__init__(self,xml_dom,tree_node)
-        self.char_hander = parent
-        self.drag = False
-        self.frame = component.get('frame')
-        self.myeditor = None
-
-    def on_drop(self,evt):
-        pass
-
-    def on_rclick(self,evt):
-        pass
-
-    def on_ldclick(self,evt):
-        return
-
-    def on_html(self,evt):
-        html_str = self.tohtml()
-        wnd = http_html_window(self.frame.note,-1)
-        wnd.title = self.xml.get('name')
-        self.frame.add_panel(wnd)
-        wnd.SetPage(html_str)
-
-    def get_design_panel(self,parent):
-        pass
-
-    def get_use_panel(self,parent):
-        return self.get_design_panel(parent)
-
-    def delete(self):
-        pass
-
-
-class dnd3espells(snp_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        snp_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.spells = self #a 1.6009
-
-
-        node_list = self.xml.findall( 'spell' )
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        for n in node_list:
-            name = n.get('name')
-            self.spells[ name ] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if item == self.mytree_node:
-            dnd3e_char_child.on_ldclick( self, evt )
-        else:
-            level = self.spells[ name ].get( 'level' )
-            descr = self.spells[ name ].get( 'desc' )
-            use = self.spells[ name ].get( 'used' )
-            memrz = self.spells[ name ].get( 'memrz' )
-            use += '+1'
-            charNameL=self.root.general.charName #a  1.5002
-            left = eval( '%s - ( %s )' % ( memrz, use ) )
-            if left < 0:
-                txt = '%s Tried to cast %s but has used all of them for today,'
-                txt +='"Please rest so I can cast more."' % ( charNameL, name ) #a 1.5002
-                self.chat.ParsePost( txt, True, False )
-            else:
-                txt = '%s casts %s ( level %s, "%s" )' % ( charNameL, name, level, descr )#a f 1.5002
-                self.chat.ParsePost( txt, True, False )
-                s = ''
-                if left != 1: s = 's'
-                txt = '%s can cast %s %d more time%s' % ( charNameL, name, left, s ) #a 1.5002
-                self.chat.ParsePost( txt, False, False )
-                self.spells[ name ].set( 'used', `eval( use )` )
-
-    def refresh_spells(self):
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('spell')
-        for n in node_list:
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-            self.spells[name]=n
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,spells_panel,"Spells")
-        wnd.title = "Spells"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Arcane Spells</th></tr><tr><td><br>"
-        n_list = self.xml.getchildren()
-        for n in n_list: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        return self.char_hander.get_char_lvl(attr)
-
-class spells_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Arcane Spells')
-        self.hparent = handler #a 1.5002 allow ability to run up tree.
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),4,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"No.")
-        self.grid.SetColLabelValue(1,"Lvl")
-        self.grid.SetColLabelValue(2,"Spell")
-        self.grid.SetColLabelValue(3,"Desc")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 0: self.n_list[row].set('memrz',value)
-
-    def refresh_row(self,i):
-        spell = self.n_list[i]
-        memrz = spell.get('memrz')
-        name = spell.get('name')
-        type = spell.get('desc')
-        level = spell.get('level')
-        self.grid.SetCellValue(i,0,memrz)
-        self.grid.SetCellValue(i,2,name)
-        self.grid.SetReadOnly(i,2)
-        self.grid.SetCellValue(i,3,type)
-        self.grid.SetReadOnly(i,3)
        self.grid.SetCellValue(i,1,level)
-        self.grid.SetReadOnly(i,1)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        debug()
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3espells.xml")
-            xml_dom = tree.getroot()
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols+2)
+        self.grid.SetColSize(0,col_w*3)
+        for i in range(1,cols): self.grid.SetColSize(i,col_w)
+
+
+class dnd3esnp(dnd3e_char_child):
+    """ Node Handler for power points.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        dnd3e_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent 
+        self.frame = component.get('frame')
+        self.child_handlers = {}
+        self.new_child_handler('spells','Spells',dnd3espells,'book')
+        self.new_child_handler('divine','Divine Spells',dnd3edivine,'book')
+        self.new_child_handler('powers','Powers',dnd3epowers,'book')
+        self.new_child_handler('pp','Power Points',dnd3epp,'gear')
+        self.myeditor = None
+
+    def new_child_handler(self,tag,text,handler_class,icon='gear'):
+        node_list = self.xml.findall(tag)
+        tree = self.tree
+        i = self.tree.icons[icon]
+        new_tree_node = tree.AppendItem(self.mytree_node,text,i,i)
+        handler = handler_class(node_list[0],new_tree_node,self)
+        tree.SetPyData(new_tree_node,handler)
+        self.child_handlers[tag] = handler
+
+    def get_design_panel(self,parent):
+        return tabbed_panel(parent,self,1)
+
+    def get_use_panel(self,parent):
+        return tabbed_panel(parent,self,2)
+
+
+class snp_char_child(node_handler):
+    """ Node Handler for skill.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.char_hander = parent
+        self.drag = False
+        self.frame = component.get('frame')
+        self.myeditor = None
+
+    def on_drop(self,evt):
+        pass
+
+    def on_rclick(self,evt):
+        pass
+
+    def on_ldclick(self,evt):
+        return
+
+    def on_html(self,evt):
+        html_str = self.tohtml()
+        wnd = http_html_window(self.frame.note,-1)
+        wnd.title = self.xml.get('name')
+        self.frame.add_panel(wnd)
+        wnd.SetPage(html_str)
+
+    def get_design_panel(self,parent):
+        pass
+
+    def get_use_panel(self,parent):
+        return self.get_design_panel(parent)
+
+    def delete(self):
+        pass
+
+
+class dnd3espells(snp_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        snp_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.spells = self #a 1.6009
+
+
+        node_list = self.xml.findall( 'spell' )
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        for n in node_list:
+            name = n.get('name')
+            self.spells[ name ] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if item == self.mytree_node:
+            dnd3e_char_child.on_ldclick( self, evt )
+        else:
+            level = self.spells[ name ].get( 'level' )
+            descr = self.spells[ name ].get( 'desc' )
+            use = self.spells[ name ].get( 'used' )
+            memrz = self.spells[ name ].get( 'memrz' )
+            use += '+1'
+            charNameL=self.root.general.charName #a  1.5002
+            left = eval( '%s - ( %s )' % ( memrz, use ) )
+            if left < 0:
+                txt = '%s Tried to cast %s but has used all of them for today,'
+                txt +='"Please rest so I can cast more."' % ( charNameL, name ) #a 1.5002
+                self.chat.ParsePost( txt, True, False )
+            else:
+                txt = '%s casts %s ( level %s, "%s" )' % ( charNameL, name, level, descr )#a f 1.5002
+                self.chat.ParsePost( txt, True, False )
+                s = ''
+                if left != 1: s = 's'
+                txt = '%s can cast %s %d more time%s' % ( charNameL, name, left, s ) #a 1.5002
+                self.chat.ParsePost( txt, False, False )
+                self.spells[ name ].set( 'used', `eval( use )` )
+
+    def refresh_spells(self):
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('spell')
+        for n in node_list:
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+            self.spells[name]=n
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,spells_panel,"Spells")
+        wnd.title = "Spells"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Arcane Spells</th></tr><tr><td><br>"
+        n_list = self.xml.getchildren()
+        for n in n_list: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        return self.char_hander.get_char_lvl(attr)
+
+class spells_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Arcane Spells')
+        self.hparent = handler #a 1.5002 allow ability to run up tree.
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),4,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"No.")
+        self.grid.SetColLabelValue(1,"Lvl")
+        self.grid.SetColLabelValue(2,"Spell")
+        self.grid.SetColLabelValue(3,"Desc")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 0: self.n_list[row].set('memrz',value)
+
+    def refresh_row(self,i):
+        spell = self.n_list[i]
+        memrz = spell.get('memrz')
+        name = spell.get('name')
+        type = spell.get('desc')
+        level = spell.get('level')
+        self.grid.SetCellValue(i,0,memrz)
+        self.grid.SetCellValue(i,2,name)
+        self.grid.SetReadOnly(i,2)
+        self.grid.SetCellValue(i,3,type)
+        self.grid.SetReadOnly(i,3)
        self.grid.SetCellValue(i,1,level)
+        self.grid.SetReadOnly(i,1)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        debug()
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3espells.xml")
+            xml_dom = tree.getroot()
             self.temp_dom = xml_dom
-        debug(self.temp_dom)
-        f_list = self.temp_dom.findall('spell')
-        opts = []
-        #lvl = int(dnd3e_char_child.get_char_lvl('level'))
-        #castlvl = eval('%s/2' % (lvl))
-        for f in f_list:
-            spelllvl = f.get('level')
-            opts.append("(" + f.get('level') + ")" + f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('spell')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_spells()
-        dlg.Destroy()
-
-    def on_refresh_spells( self, evt ):
-        f_list = self.xml.findall('spell')
-        for spell in f_list: spell.set( 'used', '0' )
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-        self.grid.SetColSize(0,w * 0.10)
-        self.grid.SetColSize(1,w * 0.10)
-        self.grid.SetColSize(2,w * 0.30)
-        self.grid.SetColSize(3,w * 0.50)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-class dnd3edivine(snp_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        snp_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.divine = self #a 1.6009
-        node_list = self.xml.findall( 'gift' )
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        for n in node_list:
-            name = n.get('name')
-            self.spells[ name ] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['flask'], icons['flask'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        charNameL=self.root.general.charName #a f 1.5002
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        if item == self.mytree_node:
-            dnd3e_char_child.on_ldclick( self, evt )
-        else:
-            level = self.spells[ name ].get( 'level' )
-            descr = self.spells[ name ].get( 'desc' )
-            use = self.spells[ name ].get( 'used' )
-            memrz = self.spells[ name ].get( 'memrz' )
-            use += '+1'
-            left = eval( '%s - ( %s )' % ( memrz, use ) )
-            if left < 0:
-                txt = '%s Tried to cast %s but has used all of them for today,' #m 1.5002 break in 2.
-                txt += "Please rest so I can cast more."' % ( charNameL, name )' #a 1.5002
-                self.chat.ParsePost( txt, True, False )
-            else:
-                txt = '%s casts %s ( level %s, "%s" )' % ( charNameL, name, level, descr ) #a 5002
-                self.chat.ParsePost( txt, True, False )
-                s = ''
-                if left != 1: s = 's'
-                txt = '%s can cast %s %d more time%s' % ( charNameL, name, left, s ) #a 1.5002
-                self.chat.ParsePost( txt, False, False )
-                self.spells[ name ].set( 'used', `eval( use )` )
-
-    def refresh_spells(self):
-        self.spells = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('gift')
-        for n in node_list:
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['flask'],icons['flask'])
-            tree.SetPyData(new_tree_node,self)
-            self.spells[name]=n
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,divine_panel,"Spells")
-        wnd.title = "Spells"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Divine Spells</th></tr><tr><td><br>"
-        n_list = self.xml.getchildren()
-        for n in n_list: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-    def get_char_lvl( self, attr ):
-        return self.char_hander.get_char_lvl(attr)
-
-class divine_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        pname = handler.xml.set("name", 'Divine Spells')
-        self.hparent = handler
-        wx.Panel.__init__(self, parent, -1)
-        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),4,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"No.")
-        self.grid.SetColLabelValue(1,"Lvl")
-        self.grid.SetColLabelValue(2,"Spell")
-        self.grid.SetColLabelValue(3,"Desc")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-        if col == 0: self.n_list[row].set('memrz',value)
-
-    def refresh_row(self,i):
-        spell = self.n_list[i]
-        memrz = spell.get('memrz')
-        name = spell.get('name')
-        type = spell.get('desc')
-        level = spell.get('level')
-        self.grid.SetCellValue(i,0,memrz)
-        self.grid.SetCellValue(i,2,name)
-        self.grid.SetReadOnly(i,2)
-        self.grid.SetCellValue(i,3,type)
-        self.grid.SetReadOnly(i,3)
-        self.grid.SetCellValue(i,1,level)
-        self.grid.SetReadOnly(i,1)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
-    def on_add(self,evt):
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3edivine.xml")
-            xml_dom = tree.getroot()
-            self.temp_dom = xml_dom
-        f_list = self.temp_dom.findall('gift')
-        opts = []
-        for f in f_list:
-            spelllvl = f.get('level')
-            opts.append("(" + f.get('level') + ")" + f.get('name'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('gift')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_spells()
-        dlg.Destroy()
-
-    def on_refresh_spells( self, evt ):
-        f_list = self.xml.findall('gift')
-        for spell in f_list: spell.set( 'used', '0' )
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-        self.grid.SetColSize(0,w * 0.10)
-        self.grid.SetColSize(1,w * 0.10)
-        self.grid.SetColSize(2,w * 0.30)
-        self.grid.SetColSize(3,w * 0.50)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-
-class dnd3epowers(snp_char_child):
-    """ Node Handler for classes.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        snp_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self) #a 1.5002
-        self.root.powers = self #a 1.6009
-
-        node_list = self.xml.findall( 'power' )
-        self.powers = {}
-        tree = self.tree
-        icons = self.tree.icons
-        for n in node_list:
-            name = n.get('name')
-            self.powers[ name ] = n
-            new_tree_node = tree.AppendItem( self.mytree_node, name,
-                                             icons['gear'], icons['gear'] )
-            tree.SetPyData( new_tree_node, self )
-
-    def on_rclick( self, evt ):
-        charNameL = self.root.general.charName                  #a f 1.5002
-
-        item = self.tree.GetSelection()
-        name = self.tree.GetItemText( item )
-        charNameL = self.root.general.charName                  #a 1.5002
-        if item == self.mytree_node:
-            dnd3e_char_child.on_ldclick( self, evt )
-        else:
-            level = int(self.powers[ name ].get( 'level' ))
-            descr = self.powers[ name ].get( 'desc' )
-            #use can be removed -mgt
-            #use = self.powers[ name ].get( 'used' )
-            points = self.powers[ name ].get( 'point' )
-            #cpp and fre are strings without the eval -mgt
-            cpp = eval(self.root.pp.get_char_pp('current1'))          #a 1.5002
-            fre = eval(self.root.pp.get_char_pp('free'))              #a 1.5002
-            if level == 0 and fre > 0:
-                left = eval('%s - ( %s )' % ( fre, points ))
-                numcast = eval('%s / %s' % (left, points))
-                if left < 0:
-                    #In theory you should never see this -mgt
-                    txt = ('%s doesnt have enough PowerPoints to use %s'
-                        % ( charNameL, name )) #a 1.5002
-                    self.chat.ParsePost( txt, True, False )
-                else:
-                    txt = ('%s uses %s as a Free Talent ( level %s, "%s" )'
-                        % ( charNameL, name, level, descr )) #a 1.5002
-                    self.chat.ParsePost( txt, True, False )
-                    s = ''
-                    if left != 1: s = 's'
-                    txt = '%s has %d Free Talent%s left' % ( charNameL, numcast, s ) #a 1.5002
-                    self.chat.ParsePost( txt, False, False )
-                    self.root.pp.set_char_pp('free',left)       #a 1.5002
-            else:
-                left = eval('%s - ( %s )' % ( cpp, points ))
-                #numcast = eval('%s / %s' % (left, points))
-                if left < 0:
-                    txt = '%s doesnt have enough PowerPoints to use %s' % ( charNameL, name ) #m 1.5002
-                    self.chat.ParsePost( txt, True, False )
-                else:
-                    txt = '%s uses %s ( level %s, "%s" )' % ( charNameL, name, level, descr ) #m 1.5002
-                    self.chat.ParsePost( txt, True, False )
-                    s = ''
-                    if left != 1:
-                        s = 's'
-                    #numcast is meaningless here -mgt
-                    #txt = '%s can use %s %d more time%s' % ( charNameL, name, numcast, s ) #m 1.5002
-                    #txt += ' - And has %d more PowerpointsP left' % (left)
-                    txt = '%s has %d more Powerpoint%s' % ( charNameL, left, s ) #m 1.5002
-                    self.chat.ParsePost( txt, False, False )
-                    self.root.pp.set_char_pp('current1',left)   #a 1.5002
-
-    def refresh_powers(self):
-        self.powers = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        node_list = self.xml.findall('power')
-        for n in node_list:
-            name = n.get('name')
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            tree.SetPyData(new_tree_node,self)
-            self.powers[name]=n
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,power_panel,"Powers")
-        wnd.title = "Powers"
-        return wnd
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Powers</th></tr><tr><td><br>"
-        n_list = self.xml.getchildren()
-        for n in n_list:
-            html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
-        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
-        return html_str
-
-
-class power_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        #m 1.5015 corrected typo, was Pionic.
-        pname = handler.xml.set("name", 'Psionic Powers')
-        self.hparent = handler 
-        self.root = getRoot(self)               #a (debug) 1.5002,1.5014
-
-        wx.Panel.__init__(self, parent, -1)
-        self.grid = wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.handler = handler
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.grid, 1, wx.EXPAND)
-
-        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer1.Add(wx.Button(self, 10, "Remove Power"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 20, "Add Power"), 1, wx.EXPAND)
-        sizer1.Add(wx.Size(10,10))
-        sizer1.Add(wx.Button(self, 30, "Refresh Power"), 1, wx.EXPAND)
-
-        sizer.Add(sizer1, 0, wx.EXPAND)
-        self.sizer = sizer
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        #self.Bind(wx.EVT_SIZE, self.on_size)
-
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
-        self.Bind(wx.EVT_BUTTON, self.on_refresh_powers, id=30)
-        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        n_list = handler.xml.getchildren()
-        self.n_list = n_list
-        self.xml = handler.xml
-        self.grid.CreateGrid(len(n_list),5,1)
-        self.grid.SetRowLabelSize(0)
-        self.grid.SetColLabelValue(0,"PP")
-        self.grid.SetColLabelValue(1,"Lvl")
-        self.grid.SetColLabelValue(2,"Power")
-        self.grid.SetColLabelValue(3,"Desc")
-        self.grid.SetColLabelValue(4,"Type")
-        for i in range(len(n_list)): self.refresh_row(i)
-        self.refresh_data()
-        self.temp_dom = None
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.grid.GetCellValue(row,col)
-
-    def refresh_row(self,i):
-        power = self.n_list[i]
-        point = power.get('point')
-        name = power.get('name')
-        type = power.get('desc')
-        test = power.get('test')
-        level = power.get('level')
-        self.grid.SetCellValue(i,0,point)
-        self.grid.SetReadOnly(i,0)
-        self.grid.SetCellValue(i,1,level)
-        self.grid.SetReadOnly(i,1)
-        self.grid.SetCellValue(i,2,name)
-        self.grid.SetReadOnly(i,2)
-        self.grid.SetCellValue(i,3,type)
-        self.grid.SetReadOnly(i,3)
-        self.grid.SetCellValue(i,4,test)
-        self.grid.SetReadOnly(i,4)
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-
+        debug(self.temp_dom)
+        f_list = self.temp_dom.findall('spell')
+        opts = []
+        #lvl = int(dnd3e_char_child.get_char_lvl('level'))
+        #castlvl = eval('%s/2' % (lvl))
+        for f in f_list:
+            spelllvl = f.get('level')
+            opts.append("(" + f.get('level') + ")" + f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('spell')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_spells()
+        dlg.Destroy()
+
+    def on_refresh_spells( self, evt ):
+        f_list = self.xml.findall('spell')
+        for spell in f_list: spell.set( 'used', '0' )
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        self.grid.SetColSize(0,w * 0.10)
+        self.grid.SetColSize(1,w * 0.10)
+        self.grid.SetColSize(2,w * 0.30)
+        self.grid.SetColSize(3,w * 0.50)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+class dnd3edivine(snp_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        snp_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.divine = self #a 1.6009
+        node_list = self.xml.findall( 'gift' )
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        for n in node_list:
+            name = n.get('name')
+            self.spells[ name ] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name, icons['flask'], icons['flask'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        charNameL=self.root.general.charName #a f 1.5002
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        if item == self.mytree_node:
+            dnd3e_char_child.on_ldclick( self, evt )
+        else:
+            level = self.spells[ name ].get( 'level' )
+            descr = self.spells[ name ].get( 'desc' )
+            use = self.spells[ name ].get( 'used' )
+            memrz = self.spells[ name ].get( 'memrz' )
+            use += '+1'
+            left = eval( '%s - ( %s )' % ( memrz, use ) )
+            if left < 0:
+                txt = '%s Tried to cast %s but has used all of them for today,' #m 1.5002 break in 2.
+                txt += "Please rest so I can cast more."' % ( charNameL, name )' #a 1.5002
+                self.chat.ParsePost( txt, True, False )
+            else:
+                txt = '%s casts %s ( level %s, "%s" )' % ( charNameL, name, level, descr ) #a 5002
+                self.chat.ParsePost( txt, True, False )
+                s = ''
+                if left != 1: s = 's'
+                txt = '%s can cast %s %d more time%s' % ( charNameL, name, left, s ) #a 1.5002
+                self.chat.ParsePost( txt, False, False )
+                self.spells[ name ].set( 'used', `eval( use )` )
+
+    def refresh_spells(self):
+        self.spells = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('gift')
+        for n in node_list:
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['flask'],icons['flask'])
+            tree.SetPyData(new_tree_node,self)
+            self.spells[name]=n
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,divine_panel,"Spells")
+        wnd.title = "Spells"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Divine Spells</th></tr><tr><td><br>"
+        n_list = self.xml.getchildren()
+        for n in n_list: html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+    def get_char_lvl( self, attr ):
+        return self.char_hander.get_char_lvl(attr)
+
+class divine_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        pname = handler.xml.set("name", 'Divine Spells')
+        self.hparent = handler
+        wx.Panel.__init__(self, parent, -1)
+        self.grid =wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Spell"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Spell"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 30, "Refresh Spells"), 1, wx.EXPAND)
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.Bind(wx.EVT_BUTTON, self.on_refresh_spells, id=30)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),4,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"No.")
+        self.grid.SetColLabelValue(1,"Lvl")
+        self.grid.SetColLabelValue(2,"Spell")
+        self.grid.SetColLabelValue(3,"Desc")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+        if col == 0: self.n_list[row].set('memrz',value)
+
+    def refresh_row(self,i):
+        spell = self.n_list[i]
+        memrz = spell.get('memrz')
+        name = spell.get('name')
+        type = spell.get('desc')
+        level = spell.get('level')
+        self.grid.SetCellValue(i,0,memrz)
+        self.grid.SetCellValue(i,2,name)
+        self.grid.SetReadOnly(i,2)
+        self.grid.SetCellValue(i,3,type)
+        self.grid.SetReadOnly(i,3)
+        self.grid.SetCellValue(i,1,level)
+        self.grid.SetReadOnly(i,1)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
     def on_add(self,evt):
-        debug()
-        if not self.temp_dom:
-            tree = parse(dir_struct["dnd3e"]+"dnd3epowers.xml")
-            xml_dom = tree.getroot()
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3edivine.xml")
+            xml_dom = tree.getroot()
             self.temp_dom = xml_dom
-        debug(self.temp)
-        f_list = self.temp_dom.findall('power')
-        opts = []
-        for f in f_list:
-            spelllvl = f.get('level')
-            opts.append("(" + f.get('level') + ") - " +
-                        f.get('name') + " - " + f.get('test'))
-        dlg = wx.SingleChoiceDialog(self,'Choose Power','Powers',opts)
-        if dlg.ShowModal() == wx.ID_OK:
-            i = dlg.GetSelection()
-            new_node = self.xml.append(f_list[i])
-            self.grid.AppendRows(1)
-            self.n_list = self.xml.findall('power')
-            self.refresh_row(self.grid.GetNumberRows()-1)
-            self.handler.refresh_powers()
-        dlg.Destroy()
-
-    def on_remove(self,evt):
-        rows = self.grid.GetNumberRows()
-        for i in range(rows):
-            if self.grid.IsInSelection(i,0):
-                self.grid.DeleteRows(i)
-                self.xml.remove(self.n_list[i])
-                self.n_list = self.xml.findall('weapon')
-                self.handler.refresh_powers()
-
-    def on_refresh_powers( self, evt ):
-        self.root.pp.set_char_pp('current1',self.root.pp.get_char_pp('max1'))
-        self.root.pp.set_char_pp('free',self.root.pp.get_char_pp('maxfree'))
-
-    def on_size(self,event):
-        s = self.GetClientSizeTuple()
-        self.grid.SetDimensions(0,0,s[0],s[1]-25)
-        self.sizer.SetDimension(0,s[1]-25,s[0],25)
-        (w,h) = self.grid.GetClientSizeTuple()
-        cols = self.grid.GetNumberCols()
-        col_w = w/(cols)
-        for i in range(0,cols): self.grid.SetColSize(i,col_w)
-        self.grid.SetColSize(0,w * 0.05)
-        self.grid.SetColSize(1,w * 0.05)
-        self.grid.SetColSize(2,w * 0.30)
-        self.grid.SetColSize(3,w * 0.30)
-        self.grid.SetColSize(4,w * 0.30)
-
-    def refresh_data(self):
-        for i in range(len(self.n_list)): self.refresh_row(i)
-
-class dnd3epp(snp_char_child):
-    """ Node Handler for power points.  This handler will be
-        created by dnd3echar_handler.
-    """
-    def __init__(self,xml_dom,tree_node,parent):
-        snp_char_child.__init__(self,xml_dom,tree_node,parent)
-        self.hparent = parent #a 1.5002 allow ability to run up tree.
-        self.root = getRoot(self)
-        self.root.pp = self
-        self.ppPanel=None
-
-    def get_design_panel(self,parent):
-        wnd = outline_panel(parent,self,pp_panel,"Power Points")
-        wnd.title = "Power Points"
-        return wnd
-
-
-    def tohtml(self):
-        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >"
-        html_str += "<th colspan=7>Power Points</th>" #a 1.6010
-        html_str += "</tr><tr>"
-        html_str += "<th colspan=2>Max:</th>"
-        html_str += "<td>"+self.xml.get('max1')+"</td>"
-        html_str += "<th colspan=3>Max Talents/day:</th>"
-        html_str += "<td>"+self.xml.get('maxfree')+"</td>"
-        html_str += "</tr><tr>"
-        html_str += "<th colspan=2>Current:</th>"
-        html_str += "<td>"+self.xml.get('current1')+"</td>"
-        html_str += "<th colspan=3>Current Talents/day:</th>"
-        html_str += "<td>"+self.xml.get('free')+"</td>"
-        html_str += "</tr></table>"
-        return html_str
-
-    def get_char_pp( self, attr ):
-        pp = self.xml.get(attr)
-        return pp
-
-    def set_char_pp( self, attr, evl ):
-        qSub = str(evl) #a 1.5014 must force it to be a string for next call.
-        self.xml.set(attr, qSub)
-
-class pp_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.hparent = handler #a 1.5002 allow ability to run up tree.
-        self.hparent.ppPanel=self #a 1.5xx
-
-        pname = handler.xml.set("name", 'PowerPoints')
-        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
-        self.xml = handler.xml
-
-        self.static1= wx.StaticText(self, -1, "PP Current:")  #a 1.5015
-        self.dyn1= wx.TextCtrl(self, PP_CUR,
-                self.xml.get('current1'))   #a 1.5015
-        self.dyn3= wx.TextCtrl(self, PP_FRE,
-                self.xml.get('free'))       #a 1.5015
-        self.sizer.AddMany([ (self.static1, 0, wx.ALIGN_CENTER_VERTICAL),
-            (self.dyn1,   0, wx.EXPAND),
-            (wx.StaticText(self, -1, "PP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
-            (wx.TextCtrl(self, PP_MAX,
-                self.xml.get('max1')),  0, wx.EXPAND),
-            (wx.StaticText(self, -1, "Current Free Talants per day:"),
-                          0, wx.ALIGN_CENTER_VERTICAL),
-            (self.dyn3,  0, wx.EXPAND),                          #a 1.5015
-            (wx.StaticText(self, -1, "Max Free Talants per day:"),
-                            0, wx.ALIGN_CENTER_VERTICAL),
-            (wx.TextCtrl(self, PP_MFRE,
-                self.xml.get('maxfree')),  0, wx.EXPAND),
-            ])
-
-        self.sizer.AddGrowableCol(1)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MAX)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_CUR)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_FRE)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MFRE)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == PP_CUR: self.xml.set('current1',evt.GetString())
-        elif id == PP_MAX: self.xml.set('max1',evt.GetString())
-        elif id == PP_FRE: self.xml.set('free',evt.GetString())
-        elif id == PP_MFRE: self.xml.set('maxfree',evt.GetString())
-
-    def on_size(self,evt):
-        s = self.GetClientSizeTuple()
-        self.sizer.SetDimension(0,0,s[0],s[1])
-
-    #a 5.015 this whole function.
-    def on_refresh(self,attr,value):
-        if attr == 'current1': self.dyn1.SetValue(value)
-        else: self.dyn3.SetValue(value)
+        f_list = self.temp_dom.findall('gift')
+        opts = []
+        for f in f_list:
+            spelllvl = f.get('level')
+            opts.append("(" + f.get('level') + ")" + f.get('name'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Spell','Spells',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('gift')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_spells()
+        dlg.Destroy()
+
+    def on_refresh_spells( self, evt ):
+        f_list = self.xml.findall('gift')
+        for spell in f_list: spell.set( 'used', '0' )
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        self.grid.SetColSize(0,w * 0.10)
+        self.grid.SetColSize(1,w * 0.10)
+        self.grid.SetColSize(2,w * 0.30)
+        self.grid.SetColSize(3,w * 0.50)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+
+class dnd3epowers(snp_char_child):
+    """ Node Handler for classes.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        snp_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self) #a 1.5002
+        self.root.powers = self #a 1.6009
+
+        node_list = self.xml.findall( 'power' )
+        self.powers = {}
+        tree = self.tree
+        icons = self.tree.icons
+        for n in node_list:
+            name = n.get('name')
+            self.powers[ name ] = n
+            new_tree_node = tree.AppendItem( self.mytree_node, name,
+                                             icons['gear'], icons['gear'] )
+            tree.SetPyData( new_tree_node, self )
+
+    def on_rclick( self, evt ):
+        charNameL = self.root.general.charName                  #a f 1.5002
+
+        item = self.tree.GetSelection()
+        name = self.tree.GetItemText( item )
+        charNameL = self.root.general.charName                  #a 1.5002
+        if item == self.mytree_node:
+            dnd3e_char_child.on_ldclick( self, evt )
+        else:
+            level = int(self.powers[ name ].get( 'level' ))
+            descr = self.powers[ name ].get( 'desc' )
+            #use can be removed -mgt
+            #use = self.powers[ name ].get( 'used' )
+            points = self.powers[ name ].get( 'point' )
+            #cpp and fre are strings without the eval -mgt
+            cpp = eval(self.root.pp.get_char_pp('current1'))          #a 1.5002
+            fre = eval(self.root.pp.get_char_pp('free'))              #a 1.5002
+            if level == 0 and fre > 0:
+                left = eval('%s - ( %s )' % ( fre, points ))
+                numcast = eval('%s / %s' % (left, points))
+                if left < 0:
+                    #In theory you should never see this -mgt
+                    txt = ('%s doesnt have enough PowerPoints to use %s'
+                        % ( charNameL, name )) #a 1.5002
+                    self.chat.ParsePost( txt, True, False )
+                else:
+                    txt = ('%s uses %s as a Free Talent ( level %s, "%s" )'
+                        % ( charNameL, name, level, descr )) #a 1.5002
+                    self.chat.ParsePost( txt, True, False )
+                    s = ''
+                    if left != 1: s = 's'
+                    txt = '%s has %d Free Talent%s left' % ( charNameL, numcast, s ) #a 1.5002
+                    self.chat.ParsePost( txt, False, False )
+                    self.root.pp.set_char_pp('free',left)       #a 1.5002
+            else:
+                left = eval('%s - ( %s )' % ( cpp, points ))
+                #numcast = eval('%s / %s' % (left, points))
+                if left < 0:
+                    txt = '%s doesnt have enough PowerPoints to use %s' % ( charNameL, name ) #m 1.5002
+                    self.chat.ParsePost( txt, True, False )
+                else:
+                    txt = '%s uses %s ( level %s, "%s" )' % ( charNameL, name, level, descr ) #m 1.5002
+                    self.chat.ParsePost( txt, True, False )
+                    s = ''
+                    if left != 1:
+                        s = 's'
+                    #numcast is meaningless here -mgt
+                    #txt = '%s can use %s %d more time%s' % ( charNameL, name, numcast, s ) #m 1.5002
+                    #txt += ' - And has %d more PowerpointsP left' % (left)
+                    txt = '%s has %d more Powerpoint%s' % ( charNameL, left, s ) #m 1.5002
+                    self.chat.ParsePost( txt, False, False )
+                    self.root.pp.set_char_pp('current1',left)   #a 1.5002
+
+    def refresh_powers(self):
+        self.powers = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        node_list = self.xml.findall('power')
+        for n in node_list:
+            name = n.get('name')
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            tree.SetPyData(new_tree_node,self)
+            self.powers[name]=n
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,power_panel,"Powers")
+        wnd.title = "Powers"
+        return wnd
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 ><th>Powers</th></tr><tr><td><br>"
+        n_list = self.xml.getchildren()
+        for n in n_list:
+            html_str += "(" + n.get('level') + ") " + n.get('name')+ ", "
+        html_str = html_str[:len(html_str)-2] + "</td></tr></table>"
+        return html_str
+
+
+class power_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        #m 1.5015 corrected typo, was Pionic.
+        pname = handler.xml.set("name", 'Psionic Powers')
+        self.hparent = handler 
+        self.root = getRoot(self)               #a (debug) 1.5002,1.5014
+
+        wx.Panel.__init__(self, parent, -1)
+        self.grid = wx.grid.Grid(self, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.handler = handler
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.grid, 1, wx.EXPAND)
+
+        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer1.Add(wx.Button(self, 10, "Remove Power"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 20, "Add Power"), 1, wx.EXPAND)
+        sizer1.Add(wx.Size(10,10))
+        sizer1.Add(wx.Button(self, 30, "Refresh Power"), 1, wx.EXPAND)
+
+        sizer.Add(sizer1, 0, wx.EXPAND)
+        self.sizer = sizer
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        #self.Bind(wx.EVT_SIZE, self.on_size)
+
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=10)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=20)
+        self.Bind(wx.EVT_BUTTON, self.on_refresh_powers, id=30)
+        self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        n_list = handler.xml.getchildren()
+        self.n_list = n_list
+        self.xml = handler.xml
+        self.grid.CreateGrid(len(n_list),5,1)
+        self.grid.SetRowLabelSize(0)
+        self.grid.SetColLabelValue(0,"PP")
+        self.grid.SetColLabelValue(1,"Lvl")
+        self.grid.SetColLabelValue(2,"Power")
+        self.grid.SetColLabelValue(3,"Desc")
+        self.grid.SetColLabelValue(4,"Type")
+        for i in range(len(n_list)): self.refresh_row(i)
+        self.refresh_data()
+        self.temp_dom = None
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.grid.GetCellValue(row,col)
+
+    def refresh_row(self,i):
+        power = self.n_list[i]
+        point = power.get('point')
+        name = power.get('name')
+        type = power.get('desc')
+        test = power.get('test')
+        level = power.get('level')
+        self.grid.SetCellValue(i,0,point)
+        self.grid.SetReadOnly(i,0)
+        self.grid.SetCellValue(i,1,level)
+        self.grid.SetReadOnly(i,1)
+        self.grid.SetCellValue(i,2,name)
+        self.grid.SetReadOnly(i,2)
+        self.grid.SetCellValue(i,3,type)
+        self.grid.SetReadOnly(i,3)
+        self.grid.SetCellValue(i,4,test)
+        self.grid.SetReadOnly(i,4)
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+
+    def on_add(self,evt):
+        debug()
+        if not self.temp_dom:
+            tree = parse(dir_struct["dnd3e"]+"dnd3epowers.xml")
+            xml_dom = tree.getroot()
+            self.temp_dom = xml_dom
+        debug(self.temp)
+        f_list = self.temp_dom.findall('power')
+        opts = []
+        for f in f_list:
+            spelllvl = f.get('level')
+            opts.append("(" + f.get('level') + ") - " +
+                        f.get('name') + " - " + f.get('test'))
+        dlg = wx.SingleChoiceDialog(self,'Choose Power','Powers',opts)
+        if dlg.ShowModal() == wx.ID_OK:
+            i = dlg.GetSelection()
+            new_node = self.xml.append(f_list[i])
+            self.grid.AppendRows(1)
+            self.n_list = self.xml.findall('power')
+            self.refresh_row(self.grid.GetNumberRows()-1)
+            self.handler.refresh_powers()
+        dlg.Destroy()
+
+    def on_remove(self,evt):
+        rows = self.grid.GetNumberRows()
+        for i in range(rows):
+            if self.grid.IsInSelection(i,0):
+                self.grid.DeleteRows(i)
+                self.xml.remove(self.n_list[i])
+                self.n_list = self.xml.findall('weapon')
+                self.handler.refresh_powers()
+
+    def on_refresh_powers( self, evt ):
+        self.root.pp.set_char_pp('current1',self.root.pp.get_char_pp('max1'))
+        self.root.pp.set_char_pp('free',self.root.pp.get_char_pp('maxfree'))
+
+    def on_size(self,event):
+        s = self.GetClientSizeTuple()
+        self.grid.SetDimensions(0,0,s[0],s[1]-25)
+        self.sizer.SetDimension(0,s[1]-25,s[0],25)
+        (w,h) = self.grid.GetClientSizeTuple()
+        cols = self.grid.GetNumberCols()
+        col_w = w/(cols)
+        for i in range(0,cols): self.grid.SetColSize(i,col_w)
+        self.grid.SetColSize(0,w * 0.05)
+        self.grid.SetColSize(1,w * 0.05)
+        self.grid.SetColSize(2,w * 0.30)
+        self.grid.SetColSize(3,w * 0.30)
+        self.grid.SetColSize(4,w * 0.30)
+
+    def refresh_data(self):
+        for i in range(len(self.n_list)): self.refresh_row(i)
+
+class dnd3epp(snp_char_child):
+    """ Node Handler for power points.  This handler will be
+        created by dnd3echar_handler.
+    """
+    def __init__(self,xml_dom,tree_node,parent):
+        snp_char_child.__init__(self,xml_dom,tree_node,parent)
+        self.hparent = parent #a 1.5002 allow ability to run up tree.
+        self.root = getRoot(self)
+        self.root.pp = self
+        self.ppPanel=None
+
+    def get_design_panel(self,parent):
+        wnd = outline_panel(parent,self,pp_panel,"Power Points")
+        wnd.title = "Power Points"
+        return wnd
+
+
+    def tohtml(self):
+        html_str = "<table width=100% border=1 ><tr BGCOLOR=#E9E9E9 >"
+        html_str += "<th colspan=7>Power Points</th>" #a 1.6010
+        html_str += "</tr><tr>"
+        html_str += "<th colspan=2>Max:</th>"
+        html_str += "<td>"+self.xml.get('max1')+"</td>"
+        html_str += "<th colspan=3>Max Talents/day:</th>"
+        html_str += "<td>"+self.xml.get('maxfree')+"</td>"
+        html_str += "</tr><tr>"
+        html_str += "<th colspan=2>Current:</th>"
+        html_str += "<td>"+self.xml.get('current1')+"</td>"
+        html_str += "<th colspan=3>Current Talents/day:</th>"
+        html_str += "<td>"+self.xml.get('free')+"</td>"
+        html_str += "</tr></table>"
+        return html_str
+
+    def get_char_pp( self, attr ):
+        pp = self.xml.get(attr)
+        return pp
+
+    def set_char_pp( self, attr, evl ):
+        qSub = str(evl) #a 1.5014 must force it to be a string for next call.
+        self.xml.set(attr, qSub)
+
+class pp_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.hparent = handler #a 1.5002 allow ability to run up tree.
+        self.hparent.ppPanel=self #a 1.5xx
+
+        pname = handler.xml.set("name", 'PowerPoints')
+        self.sizer = wx.FlexGridSizer(2, 4, 2, 2)  # rows, cols, hgap, vgap
+        self.xml = handler.xml
+
+        self.static1= wx.StaticText(self, -1, "PP Current:")  #a 1.5015
+        self.dyn1= wx.TextCtrl(self, PP_CUR,
+                self.xml.get('current1'))   #a 1.5015
+        self.dyn3= wx.TextCtrl(self, PP_FRE,
+                self.xml.get('free'))       #a 1.5015
+        self.sizer.AddMany([ (self.static1, 0, wx.ALIGN_CENTER_VERTICAL),
+            (self.dyn1,   0, wx.EXPAND),
+            (wx.StaticText(self, -1, "PP Max:"), 0, wx.ALIGN_CENTER_VERTICAL),
+            (wx.TextCtrl(self, PP_MAX,
+                self.xml.get('max1')),  0, wx.EXPAND),
+            (wx.StaticText(self, -1, "Current Free Talants per day:"),
+                          0, wx.ALIGN_CENTER_VERTICAL),
+            (self.dyn3,  0, wx.EXPAND),                          #a 1.5015
+            (wx.StaticText(self, -1, "Max Free Talants per day:"),
+                            0, wx.ALIGN_CENTER_VERTICAL),
+            (wx.TextCtrl(self, PP_MFRE,
+                self.xml.get('maxfree')),  0, wx.EXPAND),
+            ])
+
+        self.sizer.AddGrowableCol(1)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MAX)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_CUR)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_FRE)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=PP_MFRE)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == PP_CUR: self.xml.set('current1',evt.GetString())
+        elif id == PP_MAX: self.xml.set('max1',evt.GetString())
+        elif id == PP_FRE: self.xml.set('free',evt.GetString())
+        elif id == PP_MFRE: self.xml.set('maxfree',evt.GetString())
+
+    def on_size(self,evt):
+        s = self.GetClientSizeTuple()
+        self.sizer.SetDimension(0,0,s[0],s[1])
+
+    #a 5.015 this whole function.
+    def on_refresh(self,attr,value):
+        if attr == 'current1': self.dyn1.SetValue(value)
+        else: self.dyn3.SetValue(value)
--- a/orpg/gametree/nodehandlers/forms.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/forms.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,776 +1,776 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: forms.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: forms.py,v 1.53 2007/04/21 23:00:51 digitalxero Exp $
-#
-# Description: The file contains code for the form based nodehanlers
-#
-
-__version__ = "$Id: forms.py,v 1.53 2007/04/21 23:00:51 digitalxero Exp $"
-
-from containers import *
-import orpg.minidom as minidom
-from orpg.orpg_xml import xml
-from wx.lib.scrolledpanel import ScrolledPanel
-
-def bool2int(b):
-    #in wxPython 2.5+, evt.Checked() returns True or False instead of 1.0 or 0.
-    #by running the results of that through this function, we convert it.
-    #if it was an int already, nothing changes. The difference between 1.0
-    #and 1, i.e. between ints and floats, is potentially dangerous when we
-    #use str() on it, but it seems to work fine right now.
-    if b: return 1
-    else: return 0
-
-#################################
-## form container
-#################################
-
-class form_handler(container_handler):
-    """
-            <nodehandler name='?'  module='forms' class='form_handler'  >
-            <form width='100' height='100' />
-            </nodehandler>
-    """
-    def __init__(self,xml,tree_node):
-        container_handler.__init__(self, xml, tree_node)
-
-    def load_children(self):
-        self.atts = None
-        for child_xml in self.xml:
-            if child_xml.tag == "form": self.xml.remove(child_xml)
-            elif child_xml: self.tree.load_xml(child_xml, self.mytree_node)
-        if not self.xml.get('width'): self.xml.set('width', '400')
-        if not self.xml.get('height'): self.xml.set('height', '600')
-
-    def get_design_panel(self,parent):
-        return form_edit_panel(parent,self)
-
-    def get_use_panel(self,parent):
-        return form_panel(parent,self)
-
-    def on_drop(self,evt):
-        # make sure its a contorl node
-        container_handler.on_drop(self,evt)
-
-class form_panel(ScrolledPanel):
-    def __init__(self, parent, handler):
-        ScrolledPanel.__init__(self, parent, wx.ID_ANY, style=wx.NO_BORDER|wx.VSCROLL|wx.HSCROLL)
-        self.height = int(handler.xml.get("height"))
-        self.width = int(handler.xml.get("width"))
-        self.SetSize((0,0))
-        self.handler = handler
-        self.parent = parent
-        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
-        handler.tree.traverse(handler.mytree_node, self.create_child_wnd, None, False)
-        self.SetSizer(self.main_sizer)
-        self.SetAutoLayout(True)
-        self.SetupScrolling()
-        parent.SetSize(self.GetSize())
-        self.Fit()
-
-    def SetSize(self, xy):
-        (x, y) = self.GetSize()
-        (nx, ny) = xy
-        if x < nx:
-            x = nx+10
-        y += ny+11
-        ScrolledPanel.SetSize(self, (x, y))
-
-    def create_child_wnd(self, treenode, evt):
-        node = self.handler.tree.GetPyData(treenode)
-        panel = node.get_use_panel(self)
-        size = node.get_size_constraint()
-        if panel:
-            self.main_sizer.Add(panel, size, wx.EXPAND)
-            self.main_sizer.Add(wx.Size(10,10))
-
-F_HEIGHT = wx.NewId()
-F_WIDTH = wx.NewId()
-class form_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Form Properties"), wx.VERTICAL)
-        wh_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.text = {   P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')),
-                        F_HEIGHT : wx.TextCtrl(self, F_HEIGHT, handler.xml.get('height')),
-                        F_WIDTH : wx.TextCtrl(self, F_WIDTH, handler.xml.get('width'))
-                      }
-
-        wh_sizer.Add(wx.StaticText(self, -1, "Width:"), 0, wx.ALIGN_CENTER)
-        wh_sizer.Add(wx.Size(10,10))
-        wh_sizer.Add(self.text[F_WIDTH], 0, wx.EXPAND)
-        wh_sizer.Add(wx.Size(10,10))
-        wh_sizer.Add(wx.StaticText(self, -1, "Height:"), 0, wx.ALIGN_CENTER)
-        wh_sizer.Add(wx.Size(10,10))
-        wh_sizer.Add(self.text[F_HEIGHT], 0, wx.EXPAND)
-
-        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wh_sizer,0,wx.EXPAND)
-
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        parent.SetSize(self.GetBestSize())
-
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=F_HEIGHT)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=F_WIDTH)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        txt = self.text[id].GetValue()
-        if not len(txt): return
-        if id == P_TITLE:
-            self.handler.xml.set('name',txt)
-            self.handler.rename(txt)
-        elif id == F_HEIGHT or id == F_WIDTH:
-            try: int(txt)
-            except: return 0
-            if id == F_HEIGHT: self.handler.xml.set("height",txt)
-            elif id == F_WIDTH: self.handler.xml.set("width",txt)
-
-##########################
-## control handler
-##########################
-class control_handler(node_handler):
-    """ A nodehandler for form controls.
-        <nodehandler name='?' module='forms' class='control_handler' />
-    """
-    def __init__(self, xml, tree_node):
-        node_handler.__init__(self, xml, tree_node)
-
-    def get_size_constraint(self):
-        return 0
-
-##########################
-## textctrl handler
-##########################
-    #
-    # Updated by Snowdog (April 2003)
-    #   Now includes Raw Send Mode (like the chat macro uses)
-    #   and an option to remove the title from text when sent
-    #   to the chat in the normal non-chat macro mode.
-    #
-class textctrl_handler(node_handler):
-    """ <nodehandler class="textctrl_handler" module="form" name="">
-           <text multiline='0' send_button='0' raw_mode='0' hide_title='0'>Text In Node</text>
-        </nodehandler>
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.text_elem = self.xml.find('text')
-        if self.text_elem.get("send_button") == "": self.text_elem.set("send_button","0")
-        if self.text_elem.get("raw_mode") == "": self.text_elem.set("raw_mode","0")
-        if self.text_elem.get("hide_title") == "": self.text_elem.set("hide_title","0")
-
-    def get_design_panel(self,parent):
-        return textctrl_edit_panel(parent,self)
-
-    def get_use_panel(self,parent):
-        return text_panel(parent,self)
-
-    def get_size_constraint(self):
-        return int(self.text_elem.get("multiline",0))
-
-    def is_multi_line(self):
-        return int(self.text_elem.get("multiline",0))
-
-    def is_raw_send(self):
-        return int(self.text_elem.get("raw_mode",0))
-
-    def is_hide_title(self):
-        return int(self.text_elem.get("hide_title",0))
-
-    def has_send_button(self):
-        return int(self.text_elem.get("send_button",0))
-
-    def tohtml(self):
-        txt = self.get_value()
-        txt = string.replace(txt,'\n',"<br />")
-        if not self.is_hide_title(): txt = "<b>"+self.xml.get("name")+":</b> "+txt
-        return txt
-
-    def get_value(self):
-        return self.text_elem.text
-
-    def set_value(self, new_value):
-        self.text_elem.text = str(new_value)
-
-FORM_TEXT_CTRL = wx.NewId()
-FORM_SEND_BUTTON = wx.NewId()
-
-class text_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.chat = handler.chat
-        self.handler = handler
-        if handler.is_multi_line():
-            text_style = wx.TE_MULTILINE
-            sizer_style = wx.EXPAND
-            sizer = wx.BoxSizer(wx.VERTICAL)
-        else:
-            sizer_style = wx.ALIGN_CENTER
-            text_style = 0
-            sizer = wx.BoxSizer(wx.HORIZONTAL)
-
-        txt = handler.get_value()
-        if txt == None: txt = ''
-        self.text = wx.TextCtrl(self, FORM_TEXT_CTRL, txt, style=text_style)
-        sizer.Add(wx.StaticText(self, -1, handler.xml.get('name')+": "), 0, sizer_style)
-        sizer.Add(wx.Size(5,0))
-        sizer.Add(self.text, 1, sizer_style)
-
-        if handler.has_send_button(): sizer.Add(wx.Button(self, FORM_SEND_BUTTON, "Send"), 0, sizer_style)
-
-        self.sizer = sizer
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-
-        parent.SetSize(self.GetBestSize())
-        self.Bind(wx.EVT_TEXT, self.on_text, id=FORM_TEXT_CTRL)
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: forms.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: forms.py,v 1.53 2007/04/21 23:00:51 digitalxero Exp $
+#
+# Description: The file contains code for the form based nodehanlers
+#
+
+__version__ = "$Id: forms.py,v 1.53 2007/04/21 23:00:51 digitalxero Exp $"
+
+from containers import *
+import orpg.minidom as minidom
+from orpg.orpg_xml import xml
+from wx.lib.scrolledpanel import ScrolledPanel
+
+def bool2int(b):
+    #in wxPython 2.5+, evt.Checked() returns True or False instead of 1.0 or 0.
+    #by running the results of that through this function, we convert it.
+    #if it was an int already, nothing changes. The difference between 1.0
+    #and 1, i.e. between ints and floats, is potentially dangerous when we
+    #use str() on it, but it seems to work fine right now.
+    if b: return 1
+    else: return 0
+
+#################################
+## form container
+#################################
+
+class form_handler(container_handler):
+    """
+            <nodehandler name='?'  module='forms' class='form_handler'  >
+            <form width='100' height='100' />
+            </nodehandler>
+    """
+    def __init__(self,xml,tree_node):
+        container_handler.__init__(self, xml, tree_node)
+
+    def load_children(self):
+        self.atts = None
+        for child_xml in self.xml:
+            if child_xml.tag == "form": self.xml.remove(child_xml)
+            elif child_xml: self.tree.load_xml(child_xml, self.mytree_node)
+        if not self.xml.get('width'): self.xml.set('width', '400')
+        if not self.xml.get('height'): self.xml.set('height', '600')
+
+    def get_design_panel(self,parent):
+        return form_edit_panel(parent,self)
+
+    def get_use_panel(self,parent):
+        return form_panel(parent,self)
+
+    def on_drop(self,evt):
+        # make sure its a contorl node
+        container_handler.on_drop(self,evt)
+
+class form_panel(ScrolledPanel):
+    def __init__(self, parent, handler):
+        ScrolledPanel.__init__(self, parent, wx.ID_ANY, style=wx.NO_BORDER|wx.VSCROLL|wx.HSCROLL)
+        self.height = int(handler.xml.get("height"))
+        self.width = int(handler.xml.get("width"))
+        self.SetSize((0,0))
+        self.handler = handler
+        self.parent = parent
+        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
+        handler.tree.traverse(handler.mytree_node, self.create_child_wnd, None, False)
+        self.SetSizer(self.main_sizer)
+        self.SetAutoLayout(True)
+        self.SetupScrolling()
+        parent.SetSize(self.GetSize())
+        self.Fit()
+
+    def SetSize(self, xy):
+        (x, y) = self.GetSize()
+        (nx, ny) = xy
+        if x < nx:
+            x = nx+10
+        y += ny+11
+        ScrolledPanel.SetSize(self, (x, y))
+
+    def create_child_wnd(self, treenode, evt):
+        node = self.handler.tree.GetPyData(treenode)
+        panel = node.get_use_panel(self)
+        size = node.get_size_constraint()
+        if panel:
+            self.main_sizer.Add(panel, size, wx.EXPAND)
+            self.main_sizer.Add(wx.Size(10,10))
+
+F_HEIGHT = wx.NewId()
+F_WIDTH = wx.NewId()
+class form_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Form Properties"), wx.VERTICAL)
+        wh_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.text = {   P_TITLE : wx.TextCtrl(self, P_TITLE, handler.xml.get('name')),
+                        F_HEIGHT : wx.TextCtrl(self, F_HEIGHT, handler.xml.get('height')),
+                        F_WIDTH : wx.TextCtrl(self, F_WIDTH, handler.xml.get('width'))
+                      }
+
+        wh_sizer.Add(wx.StaticText(self, -1, "Width:"), 0, wx.ALIGN_CENTER)
+        wh_sizer.Add(wx.Size(10,10))
+        wh_sizer.Add(self.text[F_WIDTH], 0, wx.EXPAND)
+        wh_sizer.Add(wx.Size(10,10))
+        wh_sizer.Add(wx.StaticText(self, -1, "Height:"), 0, wx.ALIGN_CENTER)
+        wh_sizer.Add(wx.Size(10,10))
+        wh_sizer.Add(self.text[F_HEIGHT], 0, wx.EXPAND)
+
+        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wh_sizer,0,wx.EXPAND)
+
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        parent.SetSize(self.GetBestSize())
+
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=F_HEIGHT)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=F_WIDTH)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        txt = self.text[id].GetValue()
+        if not len(txt): return
+        if id == P_TITLE:
+            self.handler.xml.set('name',txt)
+            self.handler.rename(txt)
+        elif id == F_HEIGHT or id == F_WIDTH:
+            try: int(txt)
+            except: return 0
+            if id == F_HEIGHT: self.handler.xml.set("height",txt)
+            elif id == F_WIDTH: self.handler.xml.set("width",txt)
+
+##########################
+## control handler
+##########################
+class control_handler(node_handler):
+    """ A nodehandler for form controls.
+        <nodehandler name='?' module='forms' class='control_handler' />
+    """
+    def __init__(self, xml, tree_node):
+        node_handler.__init__(self, xml, tree_node)
+
+    def get_size_constraint(self):
+        return 0
+
+##########################
+## textctrl handler
+##########################
+    #
+    # Updated by Snowdog (April 2003)
+    #   Now includes Raw Send Mode (like the chat macro uses)
+    #   and an option to remove the title from text when sent
+    #   to the chat in the normal non-chat macro mode.
+    #
+class textctrl_handler(node_handler):
+    """ <nodehandler class="textctrl_handler" module="form" name="">
+           <text multiline='0' send_button='0' raw_mode='0' hide_title='0'>Text In Node</text>
+        </nodehandler>
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.text_elem = self.xml.find('text')
+        if self.text_elem.get("send_button") == "": self.text_elem.set("send_button","0")
+        if self.text_elem.get("raw_mode") == "": self.text_elem.set("raw_mode","0")
+        if self.text_elem.get("hide_title") == "": self.text_elem.set("hide_title","0")
+
+    def get_design_panel(self,parent):
+        return textctrl_edit_panel(parent,self)
+
+    def get_use_panel(self,parent):
+        return text_panel(parent,self)
+
+    def get_size_constraint(self):
+        return int(self.text_elem.get("multiline",0))
+
+    def is_multi_line(self):
+        return int(self.text_elem.get("multiline",0))
+
+    def is_raw_send(self):
+        return int(self.text_elem.get("raw_mode",0))
+
+    def is_hide_title(self):
+        return int(self.text_elem.get("hide_title",0))
+
+    def has_send_button(self):
+        return int(self.text_elem.get("send_button",0))
+
+    def tohtml(self):
+        txt = self.get_value()
+        txt = string.replace(txt,'\n',"<br />")
+        if not self.is_hide_title(): txt = "<b>"+self.xml.get("name")+":</b> "+txt
+        return txt
+
+    def get_value(self):
+        return self.text_elem.text
+
+    def set_value(self, new_value):
+        self.text_elem.text = str(new_value)
+
+FORM_TEXT_CTRL = wx.NewId()
+FORM_SEND_BUTTON = wx.NewId()
+
+class text_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.chat = handler.chat
+        self.handler = handler
+        if handler.is_multi_line():
+            text_style = wx.TE_MULTILINE
+            sizer_style = wx.EXPAND
+            sizer = wx.BoxSizer(wx.VERTICAL)
+        else:
+            sizer_style = wx.ALIGN_CENTER
+            text_style = 0
+            sizer = wx.BoxSizer(wx.HORIZONTAL)
+
+        txt = handler.get_value()
+        if txt == None: txt = ''
+        self.text = wx.TextCtrl(self, FORM_TEXT_CTRL, txt, style=text_style)
+        sizer.Add(wx.StaticText(self, -1, handler.xml.get('name')+": "), 0, sizer_style)
+        sizer.Add(wx.Size(5,0))
+        sizer.Add(self.text, 1, sizer_style)
+
+        if handler.has_send_button(): sizer.Add(wx.Button(self, FORM_SEND_BUTTON, "Send"), 0, sizer_style)
+
+        self.sizer = sizer
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+
+        parent.SetSize(self.GetBestSize())
+        self.Bind(wx.EVT_TEXT, self.on_text, id=FORM_TEXT_CTRL)
         self.Bind(wx.EVT_BUTTON, self.on_send, id=FORM_SEND_BUTTON)
 
     def on_text(self, evt):
-        debug()
-        txt = self.text.GetValue()
-        #txt = strip_text(txt) ##Does not seem to exist.
-        self.handler.text_elem.text = txt
-
-    def on_send(self, evt):
+        debug()
+        txt = self.text.GetValue()
+        #txt = strip_text(txt) ##Does not seem to exist.
+        self.handler.text_elem.text = txt
+
+    def on_send(self, evt):
         txt = self.text.GetValue()
         txt = self.chat.ParseMap(txt, self.handler.xml)
-        if not self.handler.is_raw_send():
-            self.chat.ParsePost(self.handler.tohtml(), True, True)
-            return 1
-        actionlist = txt.split("\n")
-        for line in actionlist:
-            if(line != ""):
-                if line[0] != "/": ## it's not a slash command
-                    self.chat.ParsePost(line, True, True)
-                else:
-                    action = line
-                    self.chat.chat_cmds.docmd(action)
-        return 1
-
-F_MULTI = wx.NewId()
-F_SEND_BUTTON = wx.NewId()
-F_RAW_SEND = wx.NewId()
-F_HIDE_TITLE = wx.NewId()
-F_TEXT = wx.NewId()
-
-class textctrl_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Text Properties"), wx.VERTICAL)
-
-        self.title = wx.TextCtrl(self, P_TITLE, handler.xml.get('name'))
-        self.multi = wx.CheckBox(self, F_MULTI, " Multi-Line")
-        self.multi.SetValue(handler.is_multi_line())
-        self.raw_send = wx.CheckBox(self, F_RAW_SEND, " Send as Macro")
-        self.raw_send.SetValue(handler.is_raw_send())
-        self.hide_title = wx.CheckBox(self, F_HIDE_TITLE, " Hide Title")
-        self.hide_title.SetValue(handler.is_hide_title())
-        self.send_button = wx.CheckBox(self, F_SEND_BUTTON, " Send Button")
-        self.send_button.SetValue(handler.has_send_button())
-
-        sizer.Add(wx.StaticText(self, P_TITLE, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.title, 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(self.multi, 0, wx.EXPAND)
-        sizer.Add(self.raw_send, 0, wx.EXPAND)
-        sizer.Add(self.hide_title, 0, wx.EXPAND)
-        sizer.Add(self.send_button, 0 , wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        if handler.is_multi_line():
-            sizer_style = wx.EXPAND
-            text_style = wx.TE_MULTILINE
-            multi = 1
-        else:
-            sizer_style=wx.EXPAND
-            text_style = 0
-            multi = 0
-        self.text = wx.TextCtrl(self, F_TEXT, handler.get_value(),style=text_style)
-        sizer.Add(wx.Size(5,0))
-        sizer.Add(self.text, multi, sizer_style)
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=F_TEXT)
-        self.Bind(wx.EVT_CHECKBOX, self.on_button, id=F_MULTI)
-        self.Bind(wx.EVT_CHECKBOX, self.on_raw_button, id=F_RAW_SEND)
-        self.Bind(wx.EVT_CHECKBOX, self.on_hide_button, id=F_HIDE_TITLE)
-        self.Bind(wx.EVT_CHECKBOX, self.on_send_button, id=F_SEND_BUTTON)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        if id == P_TITLE:
-            txt = self.title.GetValue()
-            if not len(txt): return
-            self.handler.xml.set('name',txt)
-            self.handler.rename(txt)
-        if id == F_TEXT:
-            txt = self.text.GetValue()
-            #txt = strip_text(txt) ##Does not seem to exist. 
-            self.handler.text_elem.text = txt
-
-    def on_button(self,evt):
-        self.handler.text_elem.set("multiline",str(bool2int(evt.Checked())))
-
-    def on_raw_button(self,evt):
-        self.handler.text_elem.set("raw_mode",str(bool2int(evt.Checked())))
-
-    def on_hide_button(self,evt):
-        self.handler.text_elem.set("hide_title",str(bool2int(evt.Checked())))
-
-    def on_send_button(self,evt):
-        self.handler.text_elem.set("send_button",str(bool2int(evt.Checked())))
-
-
-#######################
-## listbox handler
-#######################
-    #
-    # Updated by Snowdog (April 2003)
-    #   Now includesan option to remove the title from
-    #   text when sent to the chat.
-    #
-L_DROP = 0
-L_LIST = 1
-L_RADIO = 2
-L_CHECK = 3
-L_ROLLER = 4
-
-class listbox_handler(node_handler):
-    """
-    <nodehandler class="listbox_handler" module="forms" name="">
-        <list type="1"  send_button='0' hide_title='0'>
-                <option value="" selected="" >Option Text I</option>
-                <option value="" selected="" >Option Text II</option>
-        </list>
-    </nodehandler>
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.list = self.xml.find('list')
-        self.options = self.list.findall('option')
-        if self.list.get("send_button") == "": self.list.set("send_button","0")
+        if not self.handler.is_raw_send():
+            self.chat.ParsePost(self.handler.tohtml(), True, True)
+            return 1
+        actionlist = txt.split("\n")
+        for line in actionlist:
+            if(line != ""):
+                if line[0] != "/": ## it's not a slash command
+                    self.chat.ParsePost(line, True, True)
+                else:
+                    action = line
+                    self.chat.chat_cmds.docmd(action)
+        return 1
+
+F_MULTI = wx.NewId()
+F_SEND_BUTTON = wx.NewId()
+F_RAW_SEND = wx.NewId()
+F_HIDE_TITLE = wx.NewId()
+F_TEXT = wx.NewId()
+
+class textctrl_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Text Properties"), wx.VERTICAL)
+
+        self.title = wx.TextCtrl(self, P_TITLE, handler.xml.get('name'))
+        self.multi = wx.CheckBox(self, F_MULTI, " Multi-Line")
+        self.multi.SetValue(handler.is_multi_line())
+        self.raw_send = wx.CheckBox(self, F_RAW_SEND, " Send as Macro")
+        self.raw_send.SetValue(handler.is_raw_send())
+        self.hide_title = wx.CheckBox(self, F_HIDE_TITLE, " Hide Title")
+        self.hide_title.SetValue(handler.is_hide_title())
+        self.send_button = wx.CheckBox(self, F_SEND_BUTTON, " Send Button")
+        self.send_button.SetValue(handler.has_send_button())
+
+        sizer.Add(wx.StaticText(self, P_TITLE, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.title, 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(self.multi, 0, wx.EXPAND)
+        sizer.Add(self.raw_send, 0, wx.EXPAND)
+        sizer.Add(self.hide_title, 0, wx.EXPAND)
+        sizer.Add(self.send_button, 0 , wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        if handler.is_multi_line():
+            sizer_style = wx.EXPAND
+            text_style = wx.TE_MULTILINE
+            multi = 1
+        else:
+            sizer_style=wx.EXPAND
+            text_style = 0
+            multi = 0
+        self.text = wx.TextCtrl(self, F_TEXT, handler.get_value(),style=text_style)
+        sizer.Add(wx.Size(5,0))
+        sizer.Add(self.text, multi, sizer_style)
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=F_TEXT)
+        self.Bind(wx.EVT_CHECKBOX, self.on_button, id=F_MULTI)
+        self.Bind(wx.EVT_CHECKBOX, self.on_raw_button, id=F_RAW_SEND)
+        self.Bind(wx.EVT_CHECKBOX, self.on_hide_button, id=F_HIDE_TITLE)
+        self.Bind(wx.EVT_CHECKBOX, self.on_send_button, id=F_SEND_BUTTON)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        if id == P_TITLE:
+            txt = self.title.GetValue()
+            if not len(txt): return
+            self.handler.xml.set('name',txt)
+            self.handler.rename(txt)
+        if id == F_TEXT:
+            txt = self.text.GetValue()
+            #txt = strip_text(txt) ##Does not seem to exist. 
+            self.handler.text_elem.text = txt
+
+    def on_button(self,evt):
+        self.handler.text_elem.set("multiline",str(bool2int(evt.Checked())))
+
+    def on_raw_button(self,evt):
+        self.handler.text_elem.set("raw_mode",str(bool2int(evt.Checked())))
+
+    def on_hide_button(self,evt):
+        self.handler.text_elem.set("hide_title",str(bool2int(evt.Checked())))
+
+    def on_send_button(self,evt):
+        self.handler.text_elem.set("send_button",str(bool2int(evt.Checked())))
+
+
+#######################
+## listbox handler
+#######################
+    #
+    # Updated by Snowdog (April 2003)
+    #   Now includesan option to remove the title from
+    #   text when sent to the chat.
+    #
+L_DROP = 0
+L_LIST = 1
+L_RADIO = 2
+L_CHECK = 3
+L_ROLLER = 4
+
+class listbox_handler(node_handler):
+    """
+    <nodehandler class="listbox_handler" module="forms" name="">
+        <list type="1"  send_button='0' hide_title='0'>
+                <option value="" selected="" >Option Text I</option>
+                <option value="" selected="" >Option Text II</option>
+        </list>
+    </nodehandler>
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.list = self.xml.find('list')
+        self.options = self.list.findall('option')
+        if self.list.get("send_button") == "": self.list.set("send_button","0")
         if self.list.get("hide_title") == "": self.list.set("hide_title","0")
-        if self.list.get("raw_mode") == "": self.list.set("raw_mode","0")
-
-    def get_design_panel(self,parent):
-        return listbox_edit_panel(parent,self)
-
-    def get_use_panel(self,parent):
-        return listbox_panel(parent,self)
-
-    def get_type(self):
-        return int(self.list.get("type"))
-
-    def set_type(self,type):
-        self.list.set("type",str(type))
-
-    def is_hide_title(self):
+        if self.list.get("raw_mode") == "": self.list.set("raw_mode","0")
+
+    def get_design_panel(self,parent):
+        return listbox_edit_panel(parent,self)
+
+    def get_use_panel(self,parent):
+        return listbox_panel(parent,self)
+
+    def get_type(self):
+        return int(self.list.get("type"))
+
+    def set_type(self,type):
+        self.list.set("type",str(type))
+
+    def is_hide_title(self):
         return int(self.list.get("hide_title", 0))
 
-    def is_raw_send(self):
-        return int(self.list.get("raw_mode",0))
-
-    # single selection methods
-    def get_selected_node(self):
-        for opt in self.options:
-            if opt.get("selected") == "1": return opt
-        return None
-
-    def get_selected_index(self):
-        i = 0
-        for opt in self.options:
-            if opt.get("selected") == "1": return i
-            i += 1
-        return 0
-
-    def get_selected_text(self):
-        node = self.get_selected_node()
-        if node: return node.text
-        else: return ""
-
-    # mult selection methods
-    def get_selections(self):
-        opts = []
-        for opt in self.options:
-            if opt.get("selected") == "1": opts.append(opt)
-        return opts
-
-    def get_selections_text(self):
-        opts = []
-        for opt in self.options:
-            if opt.get("selected") == "1": opts.append(opt.text)
-        return opts
-
-    def get_selections_index(self):
-        opts = []
-        i = 0
-        for opt in self.options:
-            if opt.get("selected") == "1": opts.append(i)
-            i += 1
-        return opts
-
-    # setting selection method
-    def set_selected_node(self,index,selected=1):
-        if self.get_type() != L_CHECK: self.clear_selections()
-        self.options[index].set("selected", str(bool2int(selected)))
-
-    def clear_selections(self):
-        for opt in self.options: opt.set("selected","0")
-
-    # misc methods
-    def get_options(self):
-        opts = []
-        for opt in self.options: opts.append(opt.text)
-        return opts
-
-    def get_option(self,index):
-        return self.options[index].text
-
-    def add_option(self,opt):
-        elem = Element('option')
-        elem.set("value","0")
-        elem.set("selected","0")
-        elem.text = opt
-        self.list.append(elem)
-        self.options = self.list.findall('option')
-
-    def remove_option(self,index):
-        self.list.remove(self.options[index])
-        self.options = self.list.findall('option')
-
-    def edit_option(self,index,value):
-        self.options[index].text = value
-
-    def has_send_button(self):
-        if self.list.get("send_button") == '0': return False
-        else: return True
-
-    def get_size_constraint(self):
-        if self.get_type() == L_DROP: return 0
-        else: return 1
-
-    def tohtml(self):
-        opts = self.get_selections_text()
-        text = ""
-        if not self.is_hide_title(): text = "<b>"+self.xml.get("name")+":</b> "
-        comma = ", "
-        text += comma.join(opts)
-        return text
-
-    def get_value(self):
+    def is_raw_send(self):
+        return int(self.list.get("raw_mode",0))
+
+    # single selection methods
+    def get_selected_node(self):
+        for opt in self.options:
+            if opt.get("selected") == "1": return opt
+        return None
+
+    def get_selected_index(self):
+        i = 0
+        for opt in self.options:
+            if opt.get("selected") == "1": return i
+            i += 1
+        return 0
+
+    def get_selected_text(self):
+        node = self.get_selected_node()
+        if node: return node.text
+        else: return ""
+
+    # mult selection methods
+    def get_selections(self):
+        opts = []
+        for opt in self.options:
+            if opt.get("selected") == "1": opts.append(opt)
+        return opts
+
+    def get_selections_text(self):
+        opts = []
+        for opt in self.options:
+            if opt.get("selected") == "1": opts.append(opt.text)
+        return opts
+
+    def get_selections_index(self):
+        opts = []
+        i = 0
+        for opt in self.options:
+            if opt.get("selected") == "1": opts.append(i)
+            i += 1
+        return opts
+
+    # setting selection method
+    def set_selected_node(self,index,selected=1):
+        if self.get_type() != L_CHECK: self.clear_selections()
+        self.options[index].set("selected", str(bool2int(selected)))
+
+    def clear_selections(self):
+        for opt in self.options: opt.set("selected","0")
+
+    # misc methods
+    def get_options(self):
+        opts = []
+        for opt in self.options: opts.append(opt.text)
+        return opts
+
+    def get_option(self,index):
+        return self.options[index].text
+
+    def add_option(self,opt):
+        elem = Element('option')
+        elem.set("value","0")
+        elem.set("selected","0")
+        elem.text = opt
+        self.list.append(elem)
+        self.options = self.list.findall('option')
+
+    def remove_option(self,index):
+        self.list.remove(self.options[index])
+        self.options = self.list.findall('option')
+
+    def edit_option(self,index,value):
+        self.options[index].text = value
+
+    def has_send_button(self):
+        if self.list.get("send_button") == '0': return False
+        else: return True
+
+    def get_size_constraint(self):
+        if self.get_type() == L_DROP: return 0
+        else: return 1
+
+    def tohtml(self):
+        opts = self.get_selections_text()
+        text = ""
+        if not self.is_hide_title(): text = "<b>"+self.xml.get("name")+":</b> "
+        comma = ", "
+        text += comma.join(opts)
+        return text
+
+    def get_value(self):
         return "\n".join(self.get_selections_text())
 
-    def on_send_to_chat(self, evt):
+    def on_send_to_chat(self, evt):
         txt = self.get_selected_text()
         txt = self.chat.ParseMap(txt, self.xml)
-        if not self.is_raw_send():
-            self.chat.ParsePost(self.tohtml(), True, True)
-            return 1
-        actionlist = self.get_selections_text()
+        if not self.is_raw_send():
+            self.chat.ParsePost(self.tohtml(), True, True)
+            return 1
+        actionlist = self.get_selections_text()
         for line in actionlist:
-            line = self.chat.ParseMap(line, self.xml)
-            if(line != ""):
-                if line[0] != "/": ## it's not a slash command
-                    self.chat.ParsePost(line, True, True)
-                else:
-                    action = line
-                    self.chat.chat_cmds.docmd(action)
-        return 1
-
-
-F_LIST = wx.NewId()
-F_SEND = wx.NewId()
-
-
-class listbox_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        self.chat = handler.chat
-        opts = handler.get_options()
-        cur_opt = handler.get_selected_text()
-        type = handler.get_type()
-        label = handler.xml.get('name')
-
-        if type == L_DROP:
-            self.list = wx.ComboBox(self, F_LIST, cur_opt, choices=opts, style=wx.CB_READONLY)
-            if self.list.GetSize()[0] > 200:
-                self.list.Destroy()
-                self.list = wx.ComboBox(self, F_LIST, cur_opt, size=(200, -1), choices=opts, style=wx.CB_READONLY)
-        elif type == L_LIST: self.list = wx.ListBox(self,F_LIST,choices=opts)
-        elif type == L_RADIO: self.list = wx.RadioBox(self,F_LIST,label,choices=opts,majorDimension=3)
-        elif type == L_CHECK:
-            self.list = wx.CheckListBox(self,F_LIST,choices=opts)
-            self.set_checks()
-
-        for i in handler.get_selections_text():
-            if type == L_DROP: self.list.SetValue( i )
-            else: self.list.SetStringSelection( i )
-        if type == L_DROP: sizer = wx.BoxSizer(wx.HORIZONTAL)
-        else: sizer = wx.BoxSizer(wx.VERTICAL)
-
-        if type != L_RADIO:
-            sizer.Add(wx.StaticText(self, -1, label+": "), 0, wx.EXPAND)
-            sizer.Add(wx.Size(5,0))
-        sizer.Add(self.list, 1, wx.EXPAND)
-        if handler.has_send_button():
-            sizer.Add(wx.Button(self, F_SEND, "Send"), 0, wx.EXPAND)
-            self.Bind(wx.EVT_BUTTON, self.handler.on_send_to_chat, id=F_SEND)
-        self.sizer = sizer
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        parent.SetSize(self.GetBestSize())
-
-        if type == L_DROP: self.Bind(wx.EVT_COMBOBOX, self.on_change, id=F_LIST)
-        elif type == L_LIST: self.Bind(wx.EVT_LISTBOX, self.on_change, id=F_LIST)
-        elif type == L_RADIO: self.Bind(wx.EVT_RADIOBOX, self.on_change, id=F_LIST)
-        elif type == L_CHECK:self.Bind(wx.EVT_CHECKLISTBOX, self.on_check, id=F_LIST)
-        self.type = type
-
-    def on_change(self,evt):
-        self.handler.set_selected_node(self.list.GetSelection())
-
-    def on_check(self,evt):
+            line = self.chat.ParseMap(line, self.xml)
+            if(line != ""):
+                if line[0] != "/": ## it's not a slash command
+                    self.chat.ParsePost(line, True, True)
+                else:
+                    action = line
+                    self.chat.chat_cmds.docmd(action)
+        return 1
+
+
+F_LIST = wx.NewId()
+F_SEND = wx.NewId()
+
+
+class listbox_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        self.chat = handler.chat
+        opts = handler.get_options()
+        cur_opt = handler.get_selected_text()
+        type = handler.get_type()
+        label = handler.xml.get('name')
+
+        if type == L_DROP:
+            self.list = wx.ComboBox(self, F_LIST, cur_opt, choices=opts, style=wx.CB_READONLY)
+            if self.list.GetSize()[0] > 200:
+                self.list.Destroy()
+                self.list = wx.ComboBox(self, F_LIST, cur_opt, size=(200, -1), choices=opts, style=wx.CB_READONLY)
+        elif type == L_LIST: self.list = wx.ListBox(self,F_LIST,choices=opts)
+        elif type == L_RADIO: self.list = wx.RadioBox(self,F_LIST,label,choices=opts,majorDimension=3)
+        elif type == L_CHECK:
+            self.list = wx.CheckListBox(self,F_LIST,choices=opts)
+            self.set_checks()
+
+        for i in handler.get_selections_text():
+            if type == L_DROP: self.list.SetValue( i )
+            else: self.list.SetStringSelection( i )
+        if type == L_DROP: sizer = wx.BoxSizer(wx.HORIZONTAL)
+        else: sizer = wx.BoxSizer(wx.VERTICAL)
+
+        if type != L_RADIO:
+            sizer.Add(wx.StaticText(self, -1, label+": "), 0, wx.EXPAND)
+            sizer.Add(wx.Size(5,0))
+        sizer.Add(self.list, 1, wx.EXPAND)
+        if handler.has_send_button():
+            sizer.Add(wx.Button(self, F_SEND, "Send"), 0, wx.EXPAND)
+            self.Bind(wx.EVT_BUTTON, self.handler.on_send_to_chat, id=F_SEND)
+        self.sizer = sizer
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        parent.SetSize(self.GetBestSize())
+
+        if type == L_DROP: self.Bind(wx.EVT_COMBOBOX, self.on_change, id=F_LIST)
+        elif type == L_LIST: self.Bind(wx.EVT_LISTBOX, self.on_change, id=F_LIST)
+        elif type == L_RADIO: self.Bind(wx.EVT_RADIOBOX, self.on_change, id=F_LIST)
+        elif type == L_CHECK:self.Bind(wx.EVT_CHECKLISTBOX, self.on_check, id=F_LIST)
+        self.type = type
+
+    def on_change(self,evt):
+        self.handler.set_selected_node(self.list.GetSelection())
+
+    def on_check(self,evt):
         for i in xrange(self.list.GetCount()): self.handler.set_selected_node(i, bool2int(self.list.IsChecked(i)))
-
-    def set_checks(self):
-        for i in self.handler.get_selections_index(): self.list.Check(i)
-
-
-BUT_ADD = wx.NewId()
-BUT_REM = wx.NewId()
-BUT_EDIT = wx.NewId()
-F_TYPE = wx.NewId()
-F_NO_TITLE = wx.NewId()
-
-class listbox_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "List Box Properties"), wx.VERTICAL)
-
-        self.text = wx.TextCtrl(self, P_TITLE, handler.xml.get('name'))
-
-        opts = handler.get_options()
-        self.listbox = wx.ListBox(self, F_LIST, choices=opts, style=wx.LB_HSCROLL|wx.LB_SINGLE|wx.LB_NEEDED_SB)
-        opts = ['Drop Down', 'List Box', 'Radio Box', 'Check List']
-        self.type_radios = wx.RadioBox(self,F_TYPE,"List Type",choices=opts)
-        self.type_radios.SetSelection(handler.get_type())
-
-        self.send_button = wx.CheckBox(self, F_SEND_BUTTON, " Send Button")
+
+    def set_checks(self):
+        for i in self.handler.get_selections_index(): self.list.Check(i)
+
+
+BUT_ADD = wx.NewId()
+BUT_REM = wx.NewId()
+BUT_EDIT = wx.NewId()
+F_TYPE = wx.NewId()
+F_NO_TITLE = wx.NewId()
+
+class listbox_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "List Box Properties"), wx.VERTICAL)
+
+        self.text = wx.TextCtrl(self, P_TITLE, handler.xml.get('name'))
+
+        opts = handler.get_options()
+        self.listbox = wx.ListBox(self, F_LIST, choices=opts, style=wx.LB_HSCROLL|wx.LB_SINGLE|wx.LB_NEEDED_SB)
+        opts = ['Drop Down', 'List Box', 'Radio Box', 'Check List']
+        self.type_radios = wx.RadioBox(self,F_TYPE,"List Type",choices=opts)
+        self.type_radios.SetSelection(handler.get_type())
+
+        self.send_button = wx.CheckBox(self, F_SEND_BUTTON, " Send Button")
         self.send_button.SetValue(handler.has_send_button())
 
-        self.raw_send = wx.CheckBox(self, F_RAW_SEND, " Send as Macro")
-        self.raw_send.SetValue(handler.is_raw_send())
-
-        self.hide_title = wx.CheckBox(self, F_NO_TITLE, " Hide Title")
-        self.hide_title.SetValue(handler.is_hide_title())
-
-        but_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        but_sizer.Add(wx.Button(self, BUT_ADD, "Add"), 1, wx.EXPAND)
-        but_sizer.Add(wx.Size(10,10))
-        but_sizer.Add(wx.Button(self, BUT_EDIT, "Edit"), 1, wx.EXPAND)
-        but_sizer.Add(wx.Size(10,10))
-        but_sizer.Add(wx.Button(self, BUT_REM, "Remove"), 1, wx.EXPAND)
-
-        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.text, 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(self.type_radios, 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(self.send_button, 0 , wx.EXPAND)
+        self.raw_send = wx.CheckBox(self, F_RAW_SEND, " Send as Macro")
+        self.raw_send.SetValue(handler.is_raw_send())
+
+        self.hide_title = wx.CheckBox(self, F_NO_TITLE, " Hide Title")
+        self.hide_title.SetValue(handler.is_hide_title())
+
+        but_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        but_sizer.Add(wx.Button(self, BUT_ADD, "Add"), 1, wx.EXPAND)
+        but_sizer.Add(wx.Size(10,10))
+        but_sizer.Add(wx.Button(self, BUT_EDIT, "Edit"), 1, wx.EXPAND)
+        but_sizer.Add(wx.Size(10,10))
+        but_sizer.Add(wx.Button(self, BUT_REM, "Remove"), 1, wx.EXPAND)
+
+        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.text, 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(self.type_radios, 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(self.send_button, 0 , wx.EXPAND)
         sizer.Add(self.hide_title, 0, wx.EXPAND)
-        sizer.Add(self.raw_send, 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.StaticText(self, -1, "Options:"), 0, wx.EXPAND)
-        sizer.Add(self.listbox,1,wx.EXPAND);
-        sizer.Add(but_sizer,0,wx.EXPAND)
-
-        self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        parent.SetSize(self.GetBestSize())
-
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-        self.Bind(wx.EVT_BUTTON, self.on_edit, id=BUT_EDIT)
-        self.Bind(wx.EVT_BUTTON, self.on_remove, id=BUT_REM)
-        self.Bind(wx.EVT_BUTTON, self.on_add, id=BUT_ADD)
-        self.Bind(wx.EVT_RADIOBOX, self.on_type, id=F_TYPE)
-        self.Bind(wx.EVT_CHECKBOX, self.on_hide_button, id=F_NO_TITLE)
+        sizer.Add(self.raw_send, 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.StaticText(self, -1, "Options:"), 0, wx.EXPAND)
+        sizer.Add(self.listbox,1,wx.EXPAND);
+        sizer.Add(but_sizer,0,wx.EXPAND)
+
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        parent.SetSize(self.GetBestSize())
+
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+        self.Bind(wx.EVT_BUTTON, self.on_edit, id=BUT_EDIT)
+        self.Bind(wx.EVT_BUTTON, self.on_remove, id=BUT_REM)
+        self.Bind(wx.EVT_BUTTON, self.on_add, id=BUT_ADD)
+        self.Bind(wx.EVT_RADIOBOX, self.on_type, id=F_TYPE)
+        self.Bind(wx.EVT_CHECKBOX, self.on_hide_button, id=F_NO_TITLE)
         self.Bind(wx.EVT_CHECKBOX, self.on_send_button, id=F_SEND_BUTTON)
-        self.Bind(wx.EVT_CHECKBOX, self.on_raw_button, id=F_RAW_SEND)
-
-    def on_type(self,evt):
-        self.handler.set_type(evt.GetInt())
-
-    def on_add(self,evt):
-        dlg = wx.TextEntryDialog(self, 'Enter option?','Add Option', '')
-        if dlg.ShowModal() == wx.ID_OK:
-            self.handler.add_option(dlg.GetValue())
-        dlg.Destroy()
-        self.reload_options()
-
-    def on_remove(self,evt):
-        index = self.listbox.GetSelection()
-        if index >= 0:
-            self.handler.remove_option(index)
-            self.reload_options()
-
-    def on_edit(self,evt):
-        index = self.listbox.GetSelection()
-        if index >= 0:
-            txt = self.handler.get_option(index)
-            dlg = wx.TextEntryDialog(self, 'Enter option?','Edit Option', txt)
-            if dlg.ShowModal() == wx.ID_OK:
-                self.handler.edit_option(index,dlg.GetValue())
-            dlg.Destroy()
-            self.reload_options()
-
-    def reload_options(self):
-        self.listbox.Clear()
-        for opt in self.handler.get_options():
-            self.listbox.Append(opt)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        txt = self.text.GetValue()
-        if not len(txt): return
-        if id == P_TITLE:
-            self.handler.xml.set('name',txt)
-            self.handler.rename(txt)
-
-    def on_send_button(self,evt):
-        self.handler.list.set("send_button", str( bool2int(evt.Checked()) ))
-
-    def on_hide_button(self,evt):
+        self.Bind(wx.EVT_CHECKBOX, self.on_raw_button, id=F_RAW_SEND)
+
+    def on_type(self,evt):
+        self.handler.set_type(evt.GetInt())
+
+    def on_add(self,evt):
+        dlg = wx.TextEntryDialog(self, 'Enter option?','Add Option', '')
+        if dlg.ShowModal() == wx.ID_OK:
+            self.handler.add_option(dlg.GetValue())
+        dlg.Destroy()
+        self.reload_options()
+
+    def on_remove(self,evt):
+        index = self.listbox.GetSelection()
+        if index >= 0:
+            self.handler.remove_option(index)
+            self.reload_options()
+
+    def on_edit(self,evt):
+        index = self.listbox.GetSelection()
+        if index >= 0:
+            txt = self.handler.get_option(index)
+            dlg = wx.TextEntryDialog(self, 'Enter option?','Edit Option', txt)
+            if dlg.ShowModal() == wx.ID_OK:
+                self.handler.edit_option(index,dlg.GetValue())
+            dlg.Destroy()
+            self.reload_options()
+
+    def reload_options(self):
+        self.listbox.Clear()
+        for opt in self.handler.get_options():
+            self.listbox.Append(opt)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        txt = self.text.GetValue()
+        if not len(txt): return
+        if id == P_TITLE:
+            self.handler.xml.set('name',txt)
+            self.handler.rename(txt)
+
+    def on_send_button(self,evt):
+        self.handler.list.set("send_button", str( bool2int(evt.Checked()) ))
+
+    def on_hide_button(self,evt):
         self.handler.list.set("hide_title", str( bool2int(evt.Checked()) ))
 
-    def on_raw_button(self,evt):
-        self.handler.list.set("raw_mode",str(bool2int(evt.Checked())))
-
-
-###############################
-## link image handlers
-###############################
-
-class link_handler(node_handler):
-    """ A nodehandler for URLs. Will open URL in a wxHTMLFrame
-        <nodehandler name='?' module='forms' class='link_handler' >
-                <link  href='http//??.??'  />
-        </nodehandler >
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.link = self.xml[0]
-
-    def on_use(self,evt):
-        href = self.link.get("href")
-        wb = webbrowser.get()
-        wb.open(href)
-
-    def get_design_panel(self,parent):
-        return link_edit_panel(parent,self)
-
-    def get_use_panel(self,parent):
-        return link_panel(parent,self)
-
-    def tohtml(self):
-        href = self.link.get("href")
-        title = self.xml.get("name")
-        return "<a href='"+href+"' >"+title+"</a>"
-
-class link_panel(wx.StaticText):
-    def __init__(self,parent,handler):
-        self.handler = handler
-        label = handler.xml.get('name')
-        wx.StaticText.__init__(self,parent,-1,label)
-        self.SetForegroundColour(wx.BLUE)
-        self.Bind(wx.EVT_LEFT_DOWN, self.handler.on_use)
-
-P_URL = wx.NewId()
-
-class link_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Link Properties"), wx.VERTICAL)
-
-        self.text = {}
-        self.text[P_TITLE] = wx.TextCtrl(self, P_TITLE, handler.xml.get('name'))
-        self.text[P_URL] = wx.TextCtrl(self, P_URL, handler.link.get('href'))
-
-        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.StaticText(self, -1, "URL:"), 0, wx.EXPAND)
-        sizer.Add(self.text[P_URL], 0, wx.EXPAND)
-        self.SetSizer(sizer)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
-        self.Bind(wx.EVT_TEXT, self.on_text, id=P_URL)
-
-    def on_text(self,evt):
-        id = evt.GetId()
-        txt = self.text[id].GetValue()
-        if not len(txt): return
-        if id == P_TITLE:
-            self.handler.xml.set('name',txt)
-            self.handler.rename(txt)
-        elif id == P_URL: self.handler.link.set('href',txt)
-
-##########################
-## webimg node handler
-##########################
-class webimg_handler(node_handler):
-    """ A nodehandler for URLs. Will open URL in a wxHTMLFrame
-        <nodehandler name='?' module='forms' class='webimg_handler' >
-                <link  href='http//??.??'  />
-        </nodehandler >
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.link = self.xml[0]
-
-    def get_design_panel(self,parent):
-        return link_edit_panel(parent,self)
-
-    def get_use_panel(self,parent):
-        img = img_helper().load_url(self.link.get("href"))
-        if not img is None: return wx.StaticBitmap(parent,-1,img,size= wx.Size(img.GetWidth(),img.GetHeight()))
-        return wx.EmptyBitmap(1, 1)
-
-    def tohtml(self):
-        href = self.link.get("href")
-        title = self.xml.get("name")
-        return "<img src='"+href+"' alt="+title+" >"
+    def on_raw_button(self,evt):
+        self.handler.list.set("raw_mode",str(bool2int(evt.Checked())))
+
+
+###############################
+## link image handlers
+###############################
+
+class link_handler(node_handler):
+    """ A nodehandler for URLs. Will open URL in a wxHTMLFrame
+        <nodehandler name='?' module='forms' class='link_handler' >
+                <link  href='http//??.??'  />
+        </nodehandler >
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.link = self.xml[0]
+
+    def on_use(self,evt):
+        href = self.link.get("href")
+        wb = webbrowser.get()
+        wb.open(href)
+
+    def get_design_panel(self,parent):
+        return link_edit_panel(parent,self)
+
+    def get_use_panel(self,parent):
+        return link_panel(parent,self)
+
+    def tohtml(self):
+        href = self.link.get("href")
+        title = self.xml.get("name")
+        return "<a href='"+href+"' >"+title+"</a>"
+
+class link_panel(wx.StaticText):
+    def __init__(self,parent,handler):
+        self.handler = handler
+        label = handler.xml.get('name')
+        wx.StaticText.__init__(self,parent,-1,label)
+        self.SetForegroundColour(wx.BLUE)
+        self.Bind(wx.EVT_LEFT_DOWN, self.handler.on_use)
+
+P_URL = wx.NewId()
+
+class link_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Link Properties"), wx.VERTICAL)
+
+        self.text = {}
+        self.text[P_TITLE] = wx.TextCtrl(self, P_TITLE, handler.xml.get('name'))
+        self.text[P_URL] = wx.TextCtrl(self, P_URL, handler.link.get('href'))
+
+        sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_TITLE], 0, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.StaticText(self, -1, "URL:"), 0, wx.EXPAND)
+        sizer.Add(self.text[P_URL], 0, wx.EXPAND)
+        self.SetSizer(sizer)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_TITLE)
+        self.Bind(wx.EVT_TEXT, self.on_text, id=P_URL)
+
+    def on_text(self,evt):
+        id = evt.GetId()
+        txt = self.text[id].GetValue()
+        if not len(txt): return
+        if id == P_TITLE:
+            self.handler.xml.set('name',txt)
+            self.handler.rename(txt)
+        elif id == P_URL: self.handler.link.set('href',txt)
+
+##########################
+## webimg node handler
+##########################
+class webimg_handler(node_handler):
+    """ A nodehandler for URLs. Will open URL in a wxHTMLFrame
+        <nodehandler name='?' module='forms' class='webimg_handler' >
+                <link  href='http//??.??'  />
+        </nodehandler >
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.link = self.xml[0]
+
+    def get_design_panel(self,parent):
+        return link_edit_panel(parent,self)
+
+    def get_use_panel(self,parent):
+        img = img_helper().load_url(self.link.get("href"))
+        if not img is None: return wx.StaticBitmap(parent,-1,img,size= wx.Size(img.GetWidth(),img.GetHeight()))
+        return wx.EmptyBitmap(1, 1)
+
+    def tohtml(self):
+        href = self.link.get("href")
+        title = self.xml.get("name")
+        return "<img src='"+href+"' alt="+title+" >"
--- a/orpg/gametree/nodehandlers/map_miniature_nodehandler.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/map_miniature_nodehandler.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,130 +1,130 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: map_miniature_nodehandler.py
-# Author: Andrew Bennett
-# Maintainer:
-# Version:
-#   $Id: map_miniature_nodehandler.py,v 1.17 2007/12/07 20:39:48 digitalxero Exp $
-#
-# Description: nodehandler for miniature images
-#
-
-#from nodehandlers.core import *
-from core import *
-from orpg.gametree import *
-from orpg.mapper.miniatures_msg import mini_msg
-from orpg.mapper.images import ImageHandler
-import urllib
-
-class map_miniature_handler(node_handler):
-
-    """ A node handler for miniatures
-        <nodehandler name='Elf-1' module='map_miniature_nodehandler' class='map_miniature_handler' >
-                <miniature id='' label='Elf-1' posx='' posy='' path='' ...  />
-        </nodehandler >
-    """
-
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.mapper = component.get("map")
-        self.session = component.get("session")
-        self.miniature_xml = self.xml.find("miniature")
-        
-    def get_scaled_bitmap(self,x,y):
-        my_mini_msg = mini_msg()
-        my_mini_msg.init_from_dom(self.miniature_xml)
-        bmp = None
-        path = my_mini_msg.get_prop("path")
-
-        if path:
-            path = urllib.unquote(path)
-            if ImageHandler.Cache.has_key(path): bmp = ImageHandler.Cache[path]
-            else: bmp = ImageHandler.directLoad(path)# Old Code TaS.
-
-            if bmp:
-                img = wx.ImageFromMime(ImageHandler.Cache[path][1], ImageHandler.Cache[path][2])
-                #img = wx.ImageFromBitmap(bmp)
-                scaled_img = img.Scale(x,y)
-                scaled_bmp = scaled_img.ConvertToBitmap()
-                scratch = scaled_img.ConvertToBitmap()
-                memDC = wx.MemoryDC()
-                memDC.BeginDrawing()
-                memDC.SelectObject(scaled_bmp)
-                memDC.SetBrush(wx.WHITE_BRUSH)
-                memDC.SetPen(wx.WHITE_PEN)
-                memDC.DrawRectangle(0,0,x,y)
-                memDC.SetPen(wx.NullPen)
-                memDC.SetBrush(wx.NullBrush)
-                memDC.DrawBitmap(scratch,0,0,1)
-                memDC.SelectObject(wx.NullBitmap)
-                memDC.EndDrawing()
-                del memDC
-                return scaled_bmp
-
-    def map_aware(self):
-        return 1
-
-    def get_miniature_XML(self):
-        my_mini_msg = mini_msg()
-        my_mini_msg.init_from_dom(self.miniature_xml)
-        my_mini_msg.init_prop("id",self.session.get_next_id())
-        label = self.xml.get("name")
-        my_mini_msg.init_prop("label",label)
-        new_xml = my_mini_msg.get_all_xml()
-        return new_xml
-
-    def get_to_map_XML(self):
-        new_xml = self.get_miniature_XML()
-        new_xml = str("<map action='update'><miniatures>" + new_xml + "</miniatures></map>")
-        return new_xml
-
-    def on_send_to_map(self,evt):
-        if isinstance(evt, wx.MouseEvent) and evt.LeftUp():# as opposed to a menu event
-            dc = wx.ClientDC(self.mapper.canvas)
-            self.mapper.canvas.PrepareDC(dc)
-            grid = self.mapper.canvas.layers['grid']
-            dc.SetUserScale(grid.mapscale, grid.mapscale)
-            pos = evt.GetLogicalPosition(dc)
-            try:
-                align = int(self.xml.get("align"))
-                width = int(self.xml.get("width"))
-                height = int(self.xml.get("height"))
-                pos = grid.get_snapped_to_pos(pos, align, width, height)
-            except: pass
-            self.miniature_xml.set("posx", str(pos.x))
-            self.miniature_xml.set("posy", str(pos.y))
-        new_xml = self.get_to_map_XML()
-        if (self.session.my_role() != self.session.ROLE_GM) and (self.session.my_role() != self.session.ROLE_PLAYER):
-            component.get("chat").InfoPost("You must be either a player or GM to use the miniature Layer")
-            return
-        if new_xml:
-            self.mapper.new_data(new_xml)
-            self.session.send(new_xml)
-        else: print "problem converting old mini xml to new mini xml"
-
-    def about(self):
-        return "Miniature node by Andrew Bennett"
-
-    def tohtml(self):
-        html_str = "<table><tr><td>"
-        html_str += "<center><img src='" + self.xml.get("path") + "'>"
-        html_str += "</center></td></tr>\n"
-        html_str += "<tr><td><center>" + self.xml.get("name") + "</center></td></tr></table>"
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: map_miniature_nodehandler.py
+# Author: Andrew Bennett
+# Maintainer:
+# Version:
+#   $Id: map_miniature_nodehandler.py,v 1.17 2007/12/07 20:39:48 digitalxero Exp $
+#
+# Description: nodehandler for miniature images
+#
+
+#from nodehandlers.core import *
+from core import *
+from orpg.gametree import *
+from orpg.mapper.miniatures_msg import mini_msg
+from orpg.mapper.images import ImageHandler
+import urllib
+
+class map_miniature_handler(node_handler):
+
+    """ A node handler for miniatures
+        <nodehandler name='Elf-1' module='map_miniature_nodehandler' class='map_miniature_handler' >
+                <miniature id='' label='Elf-1' posx='' posy='' path='' ...  />
+        </nodehandler >
+    """
+
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.mapper = component.get("map")
+        self.session = component.get("session")
+        self.miniature_xml = self.xml.find("miniature")
+        
+    def get_scaled_bitmap(self,x,y):
+        my_mini_msg = mini_msg()
+        my_mini_msg.init_from_dom(self.miniature_xml)
+        bmp = None
+        path = my_mini_msg.get_prop("path")
+
+        if path:
+            path = urllib.unquote(path)
+            if ImageHandler.Cache.has_key(path): bmp = ImageHandler.Cache[path]
+            else: bmp = ImageHandler.directLoad(path)# Old Code TaS.
+
+            if bmp:
+                img = wx.ImageFromMime(ImageHandler.Cache[path][1], ImageHandler.Cache[path][2])
+                #img = wx.ImageFromBitmap(bmp)
+                scaled_img = img.Scale(x,y)
+                scaled_bmp = scaled_img.ConvertToBitmap()
+                scratch = scaled_img.ConvertToBitmap()
+                memDC = wx.MemoryDC()
+                memDC.BeginDrawing()
+                memDC.SelectObject(scaled_bmp)
+                memDC.SetBrush(wx.WHITE_BRUSH)
+                memDC.SetPen(wx.WHITE_PEN)
+                memDC.DrawRectangle(0,0,x,y)
+                memDC.SetPen(wx.NullPen)
+                memDC.SetBrush(wx.NullBrush)
+                memDC.DrawBitmap(scratch,0,0,1)
+                memDC.SelectObject(wx.NullBitmap)
+                memDC.EndDrawing()
+                del memDC
+                return scaled_bmp
+
+    def map_aware(self):
+        return 1
+
+    def get_miniature_XML(self):
+        my_mini_msg = mini_msg()
+        my_mini_msg.init_from_dom(self.miniature_xml)
+        my_mini_msg.init_prop("id",self.session.get_next_id())
+        label = self.xml.get("name")
+        my_mini_msg.init_prop("label",label)
+        new_xml = my_mini_msg.get_all_xml()
+        return new_xml
+
+    def get_to_map_XML(self):
+        new_xml = self.get_miniature_XML()
+        new_xml = str("<map action='update'><miniatures>" + new_xml + "</miniatures></map>")
+        return new_xml
+
+    def on_send_to_map(self,evt):
+        if isinstance(evt, wx.MouseEvent) and evt.LeftUp():# as opposed to a menu event
+            dc = wx.ClientDC(self.mapper.canvas)
+            self.mapper.canvas.PrepareDC(dc)
+            grid = self.mapper.canvas.layers['grid']
+            dc.SetUserScale(grid.mapscale, grid.mapscale)
+            pos = evt.GetLogicalPosition(dc)
+            try:
+                align = int(self.xml.get("align"))
+                width = int(self.xml.get("width"))
+                height = int(self.xml.get("height"))
+                pos = grid.get_snapped_to_pos(pos, align, width, height)
+            except: pass
+            self.miniature_xml.set("posx", str(pos.x))
+            self.miniature_xml.set("posy", str(pos.y))
+        new_xml = self.get_to_map_XML()
+        if (self.session.my_role() != self.session.ROLE_GM) and (self.session.my_role() != self.session.ROLE_PLAYER):
+            component.get("chat").InfoPost("You must be either a player or GM to use the miniature Layer")
+            return
+        if new_xml:
+            self.mapper.new_data(new_xml)
+            self.session.send(new_xml)
+        else: print "problem converting old mini xml to new mini xml"
+
+    def about(self):
+        return "Miniature node by Andrew Bennett"
+
+    def tohtml(self):
+        html_str = "<table><tr><td>"
+        html_str += "<center><img src='" + self.xml.get("path") + "'>"
+        html_str += "</center></td></tr>\n"
+        html_str += "<tr><td><center>" + self.xml.get("name") + "</center></td></tr></table>"
         return html_str
--- a/orpg/gametree/nodehandlers/minilib.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/minilib.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,501 +1,501 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#   openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: minilib.py
-# Author: Ted Berg
-# Maintainer:
-# Version:
-#   $Id: minilib.py,v 1.28 2007/04/22 22:00:18 digitalxero Exp $
-#
-# Description: nodehandler for a collection of miniatures.
-#
-
-__version__ = "$Id: minilib.py,v 1.28 2007/04/22 22:00:18 digitalxero Exp $"
-
-"""Nodehandler for collections of miniatures.  User can add, delete, edit
-miniatures as sending them to the map singly or in batches.
-"""
-from core import *
-from orpg.dirpath import dir_struct
-import string
-import map_miniature_nodehandler
-import orpg.mapper.map_msg
-import orpg.minidom as minidom
-# import scriptkit
-
-# Constants
-TO_MINILIB_MAP = {'path':'url', 'label':'name', 'id':None, 'action':None}
-FROM_MINILIB_MAP = {'url':'path', 'name':'label', 'unique':None}
-CORE_ATTRIBUTES = ['name', 'url', 'unique', 'posy', 'posx', 'hide', 'face', 'heading', 'align', 'locked', 'width', 'height']
-
-ATTRIBUTE_NAME = 'name'
-ATTRIBUTE_URL = 'url'
-ATTRIBUTE_UNIQUE = 'unique'
-ATTRIBUTE_ID = 'id'
-ATTRIBUTE_POSX = 'posx'
-ATTRIBUTE_POSY = 'posy'
-
-TAG_MINIATURE = 'miniature'
-
-COMPONENT_MAP = 'map'
-COMPONENT_SESSION = 'session'
-# <nodehandler name='?' module='minilib' class='minilib_handler'>
-#     <miniature name='?' url='?' unique='?'></miniature>
-# </nodehandler>
-
-class minilib_handler( node_handler ):
-    """A nodehandler that manages a collection of miniatures for the
-    map.
-    <pre>
-        &lt;nodehandler name='?' module='minilib' class='minilib_handler'&gt;
-            &lt;miniature name='?' url='?' unique='?'&gt;&lt;/miniature&gt;
-        &lt;/nodehandler&gt;
-    </pre>
-    """
-    def __init__(self, xml, tree_node):
-        """Instantiates the class, and sets all vars to their default state
-        """
-        node_handler.__init__(self, xml, tree_node)
-        self.myeditor = None
-        self.mywindow = None
-        self.tree_node = tree_node
-        self.update_leaves()
-        self.sanity_check_nodes()
-
-    def get_design_panel( self, parent ):
-        """returns an instance of the miniature library edit control ( see
-        on_design ).  This is for use with the the 'edit multiple nodes in a
-        single frame' code.
-        """
-        return minpedit( parent, self )
-
-    def get_use_panel( self, parent ):
-        """returns an instance of the miniature library view control ( see
-        on_use ).  This is for use with the the 'view multiple nodes in a
-        single frame' code.
-        """
-        return minilib_use_panel( parent, self )
-
-    def tohtml( self ):
-        """Returns an HTML representation of this node in string format.
-        The table columnwidths are currently being forced, as the wxHTML
-        widgets being used don't handle cells wider than the widgets are
-        expecting for a given column.
-        """
-        str = '<table border="2" >'
-        str += "<tr><th width='20%'>Label</th><th>Image</th><th width='65%'>URL</th><th>Unique</th></tr>"
-        for mini in self.xml.findall(TAG_MINIATURE):
-            url = mini.get(ATTRIBUTE_URL)
-            label = mini.get(ATTRIBUTE_NAME)
-            flag = 0
-            try: flag = eval( mini.get(ATTRIBUTE_UNIQUE) )
-            except: pass
-            show = 'yes'
-            if flag: show = 'no'
-            str += """<tr>
-                <td> %s </td>
-                <td><img src="%s"></td>
-                <td> %s </td>
-                <td> %s </td>
-            </tr>""" % ( label, url, url, show )
-        str += "</table>"
-        return str
-
-    def html_view( self ):
-        """see to_html
-        """
-        return self.tohtml()
-
-    def on_drop(self, evt):
-        drag_obj = self.tree.drag_obj
-        if drag_obj == self or self.tree.is_parent_node( self.mytree_node, drag_obj.mytree_node ): return
-        elif isinstance( drag_obj, map_miniature_nodehandler.map_miniature_handler ):
-            drop_xml = self.tree.drag_obj.xml#.delete()
-            obj = drop_xml[0]
-            dict = {}
-            unique = ''
-            for attrib in obj.keys():
-                key = TO_MINILIB_MAP.get( attrib, attrib )
-                if key != None: dict[ key ] = obj.get( attrib )
-            dict[ ATTRIBUTE_UNIQUE ] = unique
-            self.new_mini( dict )
-        else: node_handler.on_drop(self, evt)
-
-
-    def new_mini( self, data={}, add=1 ):
-        mini = Element( TAG_MINIATURE )
-        for key in data.keys(): mini.set( key, data[ key ] )
-        for key in CORE_ATTRIBUTES:
-            if mini.get( key ) == '': mini.set( key, '0' )
-        if add:
-            self.add_mini( mini )
-            self.add_leaf( mini )
-        return mini
-
-    def add_mini( self, mini ):
-        self.xml.append( mini )
-
-    def add_leaf( self, mini, icon='gear' ):
-        tree = self.tree
-        icons = tree.icons
-        key = mini.get( ATTRIBUTE_NAME )
-        self.mydata.append( mini )
-
-    def update_leaves( self ):
-        self.mydata = []
-        for n in self.xml.findall(TAG_MINIATURE): self.add_leaf( n )
-
-    def on_drag( self, evt ):
-        print 'drag event caught'
-
-    def send_mini_to_map( self, mini, count=1, addName=True ):
-        if mini == None: return
-        if mini.get( ATTRIBUTE_URL ) == '' or mini.get( ATTRIBUTE_URL ) == 'http://':
-            self.chat.ParsePost( self.chat.colorize(self.chat.syscolor, '"%s" is not a valid URL, the mini "%s" will not be added to the map' % ( mini.get( ATTRIBUTE_URL ), mini.get( ATTRIBUTE_NAME ) )) )
-            return
-        session = component.get( COMPONENT_SESSION )
-        if (session.my_role() != session.ROLE_GM) and (session.my_role() != session.ROLE_PLAYER):
-            component.get("chat").InfoPost("You must be either a player or GM to use the miniature Layer")
-            return
-        map = component.get(COMPONENT_MAP)
-        for loop in range( count ):
-            msg = self.get_miniature_XML( mini, addName)
-            msg = str("<map action='update'><miniatures>" + msg + "</miniatures></map>")
-            map.new_data( msg )
-            session.send( msg )
-
-    def get_miniature_XML( self, mini_xml, addName = True ):
-        msg = orpg.mapper.map_msg.mini_msg()
-        map = component.get( COMPONENT_MAP )
-        session = component.get( COMPONENT_SESSION )
-        msg.init_prop( ATTRIBUTE_ID, session.get_next_id() )
-        msg.init_prop('selected', '1')# this will make the mini initially selected
-        for k in mini_xml.keys():
-            # translate our attributes to map attributes
-            key = FROM_MINILIB_MAP.get( k, k )
-            if key != None:
-                if not addName and k == 'name': pass
-                else: msg.init_prop( key, mini_xml.get( k ) )
-        unique = self.is_unique( mini_xml )
-        if addName: label = mini_xml.get( ATTRIBUTE_NAME )
-        else: label = ''
-        return msg.get_all_xml()
-
-    def is_unique( self, mini ):
-        unique = mini.get( ATTRIBUTE_UNIQUE )
-        val = 0
-        try: val = eval( unique )
-        except: val = len( unique )
-        return val
-
-    def sanity_check_nodes( self ):
-        for node in self.xml.findall(TAG_MINIATURE):
-            if node.get( ATTRIBUTE_POSX ) == '': node.set( ATTRIBUTE_POSX, '0' )
-            if node.get( ATTRIBUTE_POSY ) == '': node.set( ATTRIBUTE_POSY, '0' )
-
-    def get_mini( self, index ):
-        try: return self.xml.findall(TAG_MINIATURE)[index]
-        except: return None
-
-class mini_handler( node_handler ):
-    def __init__( self, xml, tree_node, handler ):
-        node_handler.__init__( self, xml, tree_node)
-        self.handler = handler
-
-    def on_ldclick( self, evt ):
-        self.handler.send_mini_to_map( self.xml )
-
-    def on_drop( self, evt ):
-        pass
-
-    def on_lclick( self, evt ):
-        print 'hi'
-        evt.Skip()
-
-class minilib_use_panel(wx.Panel):
-    """This panel will be displayed when the user double clicks on the
-    miniature library node.  It is a sorted listbox of miniature labels,
-    a text field for entering a count ( for batch adds ) and 'add'/'done'
-    buttons.
-    """
-    def __init__( self, frame, handler ):
-        """Constructor.
-        """
-        wx.Panel.__init__( self, frame, -1 )
-        self.handler = handler
-        self.frame = frame
-
-        self.map = component.get('map')
-        names = self.buildList()
-
-        s = self.GetClientSizeTuple()
-
-        self.sizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.BoxSizer(wx.HORIZONTAL)
-        self.listbox = wx.ListBox(self, wx.ID_ANY, (10, 10), (s[0] - 10, s[1] - 30 ), names, wx.LB_EXTENDED)
-        self.count = wx.TextCtrl(self, wx.ID_ANY, '1')
-
-        box.Add( wx.StaticText( self, -1, 'Minis to add' ), 0, wx.EXPAND )
-        box.Add(wx.Size(10,10))
-        box.Add(self.count, 1, wx.EXPAND)
-
-        self.sizer.Add( self.listbox, 1, wx.EXPAND )
-        self.sizer.Add( box, 0, wx.EXPAND )
-
-        box = wx.BoxSizer( wx.HORIZONTAL )
-        self.okBtn = wx.Button(self, wx.ID_ANY, 'Add')
-        box.Add(self.okBtn, 0, wx.EXPAND)
-        self.addBtn = wx.Button(self, wx.ID_ANY, 'Add No Label')
-        box.Add(self.addBtn, 0, wx.EXPAND)
-        self.cancleBtn = wx.Button(self, wx.ID_ANY, 'Done')
-        box.Add(self.cancleBtn, 0, wx.EXPAND)
-
-        self.sizer.Add(wx.Size(10,10))
-        self.sizer.Add(box, 0, wx.EXPAND)
-        self.Bind(wx.EVT_BUTTON, self.on_ok, self.okBtn)
-        self.Bind(wx.EVT_BUTTON, self.on_ok, self.addBtn)
-        self.Bind(wx.EVT_BUTTON, self.on_close, self.cancleBtn)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-    def buildList( self ):
-        """Returns a dictionary of label => game tree miniature DOM node mappings.
-        """
-        self.list = []
-        for mini in self.handler.xml.findall(TAG_MINIATURE): self.list.append( mini.get( ATTRIBUTE_NAME ) )
-        return self.list
-
-    def on_close(self, evt):
-        self.frame.Close()
-
-    def on_ok( self, evt ):
-        """Event handler for the 'add' button.
-        """
-        btn = self.FindWindowById(evt.GetId())
-        sendName = True
-        try: count = eval( self.count.GetValue() )
-        except: count = 1
-        try:
-            if eval( unique ): count = 1
-            unique = eval( unique )
-        except: pass
-
-        if btn.GetLabel() == 'Add No Label': sendName = False
-        for index in self.listbox.GetSelections(): self.handler.send_mini_to_map( self.handler.get_mini( index ), count, sendName )
-
-
-class minpedit(wx.Panel):
-    """Panel for editing game tree miniature nodes.  Node information
-    is displayed in a grid, and buttons are provided for adding, deleting
-    nodes, and for sending minis to the map ( singly and in batches ).
-    """
-    def __init__( self, frame, handler ):
-        """Constructor.
-        """
-        wx.Panel.__init__( self, frame, -1 )
-        self.handler = handler
-        self.frame = frame
-
-        self.sizer = wx.BoxSizer( wx.VERTICAL )
-        self.grid = minilib_grid( self, handler )
-
-        bbox = wx.BoxSizer( wx.HORIZONTAL )
-        newMiniBtn = wx.Button( self, wx.ID_ANY, "New mini" )
-        delMiniBtn = wx.Button( self, wx.ID_ANY, "Del mini" )
-        addMiniBtn = wx.Button( self, wx.ID_ANY, "Add 1" )
-        addBatchBtn = wx.Button( self, wx.ID_ANY, "Add Batch" )
-        bbox.Add(newMiniBtn, 0, wx.EXPAND )
-        bbox.Add(delMiniBtn, 0, wx.EXPAND )
-        bbox.Add(wx.Size(10,10))
-        bbox.Add(addMiniBtn, 0, wx.EXPAND )
-        bbox.Add(addBatchBtn, 0, wx.EXPAND )
-
-        self.sizer.Add( self.grid, 1, wx.EXPAND)
-        self.sizer.Add( bbox, 0)
-        self.SetSizer(self.sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_BUTTON, self.add_mini, newMiniBtn)
-        self.Bind(wx.EVT_BUTTON, self.del_mini, delMiniBtn)
-        self.Bind(wx.EVT_BUTTON, self.send_to_map, addMiniBtn)
-        self.Bind(wx.EVT_BUTTON, self.send_group_to_map, addBatchBtn)
-
-    def add_mini( self, evt=None ):
-        """Event handler for the 'New mini' button.  It calls
-        minilib_grid.add_row
-        """
-        self.grid.add_row()
-
-    def del_mini( self, evt=None ):
-        """Event handler for the 'Del mini' button.  It calls
-        minilib_grid.del_row
-        """
-        self.grid.del_row()
-
-    def send_to_map( self, evt=None ):
-        """Event handler for the 'Add 1' button.  Sends the
-        miniature defined by the currently selected row to the map, once.
-        """
-        index = self.grid.GetGridCursorRow()
-        self.handler.send_mini_to_map( self.handler.get_mini( index ) )
-
-    def send_group_to_map( self, evt=None ):
-        """Event handler for the 'Add batch' button.  Querys the user
-        for a mini count and sends the miniature defined by the currently
-        selected row to the map, the specified number of times.
-        """
-        if self.grid.GetNumberRows() > 0:
-            dlg = wx.TextEntryDialog( self.frame,
-                'How many %s\'s do you want to add?' %
-                ( self.grid.getSelectedLabel() ), 'Batch mini add', '2' )
-            if dlg.ShowModal() == wx.ID_OK:
-                try: value = eval( dlg.GetValue() )
-                except: value = 0
-                print 'getting selected index for batch send'
-                index = self.grid.GetGridCursorRow()
-                print 'sending batch to map'
-                self.handler.send_mini_to_map( self.handler.get_mini( index ), value )
-
-class minilib_grid(wx.grid.Grid):
-    """A wxGrid subclass designed for editing game tree miniature library
-    nodes.
-    """
-    def __init__( self, parent, handler ):
-        """Constructor.
-        """
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS )
-        self.parent = parent
-        self.handler = handler
-        self.keys = CORE_ATTRIBUTES
-        self.CreateGrid( 1, len( self.keys ) )
-        for key in self.keys: self.SetColLabelValue( self.keys.index( key ), key )
-        self.update_all()
-        self.selectedRow = 0
-        self.AutoSizeColumns()
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.select_cell)
-
-    def update_cols( self ):
-        for n in self.handler.xml.findall(TAG_MINIATURE):
-            for k in n.keys():
-                if k not in self.keys: self.keys.append( k )
-
-    def select_cell( self, evt ):
-        """Event handler for grid cell selection changes.  It stores the
-        last selected row in a variable for use by the add[*] and del_row
-        operations.
-        """
-        self.BeginBatch()
-        self.selectedRow = evt.GetRow()
-        self.SelectRow( self.selectedRow )
-        self.EndBatch()
-        evt.Skip()
-
-    def getList( self ):
-        """Returns the list of 'miniature' DOM elements associated with this
-        miniature library.
-        """
-        return self.handler.xml.findall( TAG_MINIATURE )
-
-    def add_row( self, count = 1 ):
-        """creates a new miniature node, and then adds it to the current
-        miniature library, and to the grid.
-        """
-        self.AppendRows( count )
-        node = self.handler.new_mini( {
-          ATTRIBUTE_NAME :' ',
-          ATTRIBUTE_URL :'http://'} )# minidom.Element( TAG_MINIATURE )
-        self.update_all()
-        #self.handler.xml.append( node )
-
-    def del_row( self ):
-        """deletes the miniature associated with the currently selected
-        row. BUG BUG BUG this method should drop a child from the DOM but
-        does not.
-        """
-        if self.selectedRow > -1:
-            pos = self.selectedRow
-            list = self.handler.xml.findall(TAG_MINIATURE)
-            self.handler.xml.remove( list[pos] )
-            self.DeleteRows( pos, 1 )
-            list = self.getList()
-            del list[ pos ]
-
-    def on_cell_change( self, evt ):
-        """Event handler for cell selection changes. selected row is used
-        to update data for that row.
-        """
-        row = evt.GetRow()
-        self.update_data_row( row )
-
-    def update_all( self ):
-        """ensures that the grid is displaying the correct number of
-        rows, and then updates all data displayed by the grid
-        """
-        list = self.getList()
-        count = 0
-        for n in list:
-            for k in n.keys():
-                if k not in self.keys: self.keys.append( k )
-        count = len( self.keys )
-        if self.GetNumberCols() < count:
-            self.AppendCols( count - self.GetNumberCols() )
-            for k in self.keys: self.SetColLabelValue( self.keys.index( k ), k )
-        count = len( list )
-        rowcount = self.GetNumberRows()
-        if ( count > rowcount ):
-            total = count - rowcount
-            self.AppendRows( total )
-        elif ( count < rowcount ):
-            total = rowcount - count
-            self.DeleteRows( 0, total );
-        for index in range( 0, count ):
-            self.update_grid_row( index )
-
-    def getSelectedLabel( self ):
-        """Returns the label for the selected row
-        """
-        return self.GetTable().GetValue( self.selectedRow, 0 )
-
-    def getSelectedURL( self ):
-        """Returns the URL for the selected row
-        """
-        return self.GetTable().GetValue( self.selectedRow, 1 )
-
-    def getSelectedSerial( self ):
-        """Returns the ATTRIBUTE_UNIQUE value for the selected row
-        """
-        return self.GetTable().GetValue( self.selectedRow, 2 )
-
-    def update_grid_row( self, row ):
-        """Updates the specified grid row with data from the DOM node
-        specified by 'row'
-        """
-        list = self.getList()
-        item = list[ row ]
-        for key in self.keys: self.GetTable().SetValue( row, self.keys.index( key ), item.get( key ) )
-
-    def update_data_row( self, row ):
-        """Updates the DOM nodw 'row' with grid data from 'row'
-        """
-        list = self.getList()
-        item = list[ row ]
-        for key in self.keys: item.set( key, string.strip( self.GetTable().GetValue( row, self.keys.index( key ) ) ) ) 
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#   openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: minilib.py
+# Author: Ted Berg
+# Maintainer:
+# Version:
+#   $Id: minilib.py,v 1.28 2007/04/22 22:00:18 digitalxero Exp $
+#
+# Description: nodehandler for a collection of miniatures.
+#
+
+__version__ = "$Id: minilib.py,v 1.28 2007/04/22 22:00:18 digitalxero Exp $"
+
+"""Nodehandler for collections of miniatures.  User can add, delete, edit
+miniatures as sending them to the map singly or in batches.
+"""
+from core import *
+from orpg.dirpath import dir_struct
+import string
+import map_miniature_nodehandler
+import orpg.mapper.map_msg
+import orpg.minidom as minidom
+# import scriptkit
+
+# Constants
+TO_MINILIB_MAP = {'path':'url', 'label':'name', 'id':None, 'action':None}
+FROM_MINILIB_MAP = {'url':'path', 'name':'label', 'unique':None}
+CORE_ATTRIBUTES = ['name', 'url', 'unique', 'posy', 'posx', 'hide', 'face', 'heading', 'align', 'locked', 'width', 'height']
+
+ATTRIBUTE_NAME = 'name'
+ATTRIBUTE_URL = 'url'
+ATTRIBUTE_UNIQUE = 'unique'
+ATTRIBUTE_ID = 'id'
+ATTRIBUTE_POSX = 'posx'
+ATTRIBUTE_POSY = 'posy'
+
+TAG_MINIATURE = 'miniature'
+
+COMPONENT_MAP = 'map'
+COMPONENT_SESSION = 'session'
+# <nodehandler name='?' module='minilib' class='minilib_handler'>
+#     <miniature name='?' url='?' unique='?'></miniature>
+# </nodehandler>
+
+class minilib_handler( node_handler ):
+    """A nodehandler that manages a collection of miniatures for the
+    map.
+    <pre>
+        &lt;nodehandler name='?' module='minilib' class='minilib_handler'&gt;
+            &lt;miniature name='?' url='?' unique='?'&gt;&lt;/miniature&gt;
+        &lt;/nodehandler&gt;
+    </pre>
+    """
+    def __init__(self, xml, tree_node):
+        """Instantiates the class, and sets all vars to their default state
+        """
+        node_handler.__init__(self, xml, tree_node)
+        self.myeditor = None
+        self.mywindow = None
+        self.tree_node = tree_node
+        self.update_leaves()
+        self.sanity_check_nodes()
+
+    def get_design_panel( self, parent ):
+        """returns an instance of the miniature library edit control ( see
+        on_design ).  This is for use with the the 'edit multiple nodes in a
+        single frame' code.
+        """
+        return minpedit( parent, self )
+
+    def get_use_panel( self, parent ):
+        """returns an instance of the miniature library view control ( see
+        on_use ).  This is for use with the the 'view multiple nodes in a
+        single frame' code.
+        """
+        return minilib_use_panel( parent, self )
+
+    def tohtml( self ):
+        """Returns an HTML representation of this node in string format.
+        The table columnwidths are currently being forced, as the wxHTML
+        widgets being used don't handle cells wider than the widgets are
+        expecting for a given column.
+        """
+        str = '<table border="2" >'
+        str += "<tr><th width='20%'>Label</th><th>Image</th><th width='65%'>URL</th><th>Unique</th></tr>"
+        for mini in self.xml.findall(TAG_MINIATURE):
+            url = mini.get(ATTRIBUTE_URL)
+            label = mini.get(ATTRIBUTE_NAME)
+            flag = 0
+            try: flag = eval( mini.get(ATTRIBUTE_UNIQUE) )
+            except: pass
+            show = 'yes'
+            if flag: show = 'no'
+            str += """<tr>
+                <td> %s </td>
+                <td><img src="%s"></td>
+                <td> %s </td>
+                <td> %s </td>
+            </tr>""" % ( label, url, url, show )
+        str += "</table>"
+        return str
+
+    def html_view( self ):
+        """see to_html
+        """
+        return self.tohtml()
+
+    def on_drop(self, evt):
+        drag_obj = self.tree.drag_obj
+        if drag_obj == self or self.tree.is_parent_node( self.mytree_node, drag_obj.mytree_node ): return
+        elif isinstance( drag_obj, map_miniature_nodehandler.map_miniature_handler ):
+            drop_xml = self.tree.drag_obj.xml#.delete()
+            obj = drop_xml[0]
+            dict = {}
+            unique = ''
+            for attrib in obj.keys():
+                key = TO_MINILIB_MAP.get( attrib, attrib )
+                if key != None: dict[ key ] = obj.get( attrib )
+            dict[ ATTRIBUTE_UNIQUE ] = unique
+            self.new_mini( dict )
+        else: node_handler.on_drop(self, evt)
+
+
+    def new_mini( self, data={}, add=1 ):
+        mini = Element( TAG_MINIATURE )
+        for key in data.keys(): mini.set( key, data[ key ] )
+        for key in CORE_ATTRIBUTES:
+            if mini.get( key ) == '': mini.set( key, '0' )
+        if add:
+            self.add_mini( mini )
+            self.add_leaf( mini )
+        return mini
+
+    def add_mini( self, mini ):
+        self.xml.append( mini )
+
+    def add_leaf( self, mini, icon='gear' ):
+        tree = self.tree
+        icons = tree.icons
+        key = mini.get( ATTRIBUTE_NAME )
+        self.mydata.append( mini )
+
+    def update_leaves( self ):
+        self.mydata = []
+        for n in self.xml.findall(TAG_MINIATURE): self.add_leaf( n )
+
+    def on_drag( self, evt ):
+        print 'drag event caught'
+
+    def send_mini_to_map( self, mini, count=1, addName=True ):
+        if mini == None: return
+        if mini.get( ATTRIBUTE_URL ) == '' or mini.get( ATTRIBUTE_URL ) == 'http://':
+            self.chat.ParsePost( self.chat.colorize(self.chat.syscolor, '"%s" is not a valid URL, the mini "%s" will not be added to the map' % ( mini.get( ATTRIBUTE_URL ), mini.get( ATTRIBUTE_NAME ) )) )
+            return
+        session = component.get( COMPONENT_SESSION )
+        if (session.my_role() != session.ROLE_GM) and (session.my_role() != session.ROLE_PLAYER):
+            component.get("chat").InfoPost("You must be either a player or GM to use the miniature Layer")
+            return
+        map = component.get(COMPONENT_MAP)
+        for loop in range( count ):
+            msg = self.get_miniature_XML( mini, addName)
+            msg = str("<map action='update'><miniatures>" + msg + "</miniatures></map>")
+            map.new_data( msg )
+            session.send( msg )
+
+    def get_miniature_XML( self, mini_xml, addName = True ):
+        msg = orpg.mapper.map_msg.mini_msg()
+        map = component.get( COMPONENT_MAP )
+        session = component.get( COMPONENT_SESSION )
+        msg.init_prop( ATTRIBUTE_ID, session.get_next_id() )
+        msg.init_prop('selected', '1')# this will make the mini initially selected
+        for k in mini_xml.keys():
+            # translate our attributes to map attributes
+            key = FROM_MINILIB_MAP.get( k, k )
+            if key != None:
+                if not addName and k == 'name': pass
+                else: msg.init_prop( key, mini_xml.get( k ) )
+        unique = self.is_unique( mini_xml )
+        if addName: label = mini_xml.get( ATTRIBUTE_NAME )
+        else: label = ''
+        return msg.get_all_xml()
+
+    def is_unique( self, mini ):
+        unique = mini.get( ATTRIBUTE_UNIQUE )
+        val = 0
+        try: val = eval( unique )
+        except: val = len( unique )
+        return val
+
+    def sanity_check_nodes( self ):
+        for node in self.xml.findall(TAG_MINIATURE):
+            if node.get( ATTRIBUTE_POSX ) == '': node.set( ATTRIBUTE_POSX, '0' )
+            if node.get( ATTRIBUTE_POSY ) == '': node.set( ATTRIBUTE_POSY, '0' )
+
+    def get_mini( self, index ):
+        try: return self.xml.findall(TAG_MINIATURE)[index]
+        except: return None
+
+class mini_handler( node_handler ):
+    def __init__( self, xml, tree_node, handler ):
+        node_handler.__init__( self, xml, tree_node)
+        self.handler = handler
+
+    def on_ldclick( self, evt ):
+        self.handler.send_mini_to_map( self.xml )
+
+    def on_drop( self, evt ):
+        pass
+
+    def on_lclick( self, evt ):
+        print 'hi'
+        evt.Skip()
+
+class minilib_use_panel(wx.Panel):
+    """This panel will be displayed when the user double clicks on the
+    miniature library node.  It is a sorted listbox of miniature labels,
+    a text field for entering a count ( for batch adds ) and 'add'/'done'
+    buttons.
+    """
+    def __init__( self, frame, handler ):
+        """Constructor.
+        """
+        wx.Panel.__init__( self, frame, -1 )
+        self.handler = handler
+        self.frame = frame
+
+        self.map = component.get('map')
+        names = self.buildList()
+
+        s = self.GetClientSizeTuple()
+
+        self.sizer = wx.BoxSizer(wx.VERTICAL)
+        box = wx.BoxSizer(wx.HORIZONTAL)
+        self.listbox = wx.ListBox(self, wx.ID_ANY, (10, 10), (s[0] - 10, s[1] - 30 ), names, wx.LB_EXTENDED)
+        self.count = wx.TextCtrl(self, wx.ID_ANY, '1')
+
+        box.Add( wx.StaticText( self, -1, 'Minis to add' ), 0, wx.EXPAND )
+        box.Add(wx.Size(10,10))
+        box.Add(self.count, 1, wx.EXPAND)
+
+        self.sizer.Add( self.listbox, 1, wx.EXPAND )
+        self.sizer.Add( box, 0, wx.EXPAND )
+
+        box = wx.BoxSizer( wx.HORIZONTAL )
+        self.okBtn = wx.Button(self, wx.ID_ANY, 'Add')
+        box.Add(self.okBtn, 0, wx.EXPAND)
+        self.addBtn = wx.Button(self, wx.ID_ANY, 'Add No Label')
+        box.Add(self.addBtn, 0, wx.EXPAND)
+        self.cancleBtn = wx.Button(self, wx.ID_ANY, 'Done')
+        box.Add(self.cancleBtn, 0, wx.EXPAND)
+
+        self.sizer.Add(wx.Size(10,10))
+        self.sizer.Add(box, 0, wx.EXPAND)
+        self.Bind(wx.EVT_BUTTON, self.on_ok, self.okBtn)
+        self.Bind(wx.EVT_BUTTON, self.on_ok, self.addBtn)
+        self.Bind(wx.EVT_BUTTON, self.on_close, self.cancleBtn)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+    def buildList( self ):
+        """Returns a dictionary of label => game tree miniature DOM node mappings.
+        """
+        self.list = []
+        for mini in self.handler.xml.findall(TAG_MINIATURE): self.list.append( mini.get( ATTRIBUTE_NAME ) )
+        return self.list
+
+    def on_close(self, evt):
+        self.frame.Close()
+
+    def on_ok( self, evt ):
+        """Event handler for the 'add' button.
+        """
+        btn = self.FindWindowById(evt.GetId())
+        sendName = True
+        try: count = eval( self.count.GetValue() )
+        except: count = 1
+        try:
+            if eval( unique ): count = 1
+            unique = eval( unique )
+        except: pass
+
+        if btn.GetLabel() == 'Add No Label': sendName = False
+        for index in self.listbox.GetSelections(): self.handler.send_mini_to_map( self.handler.get_mini( index ), count, sendName )
+
+
+class minpedit(wx.Panel):
+    """Panel for editing game tree miniature nodes.  Node information
+    is displayed in a grid, and buttons are provided for adding, deleting
+    nodes, and for sending minis to the map ( singly and in batches ).
+    """
+    def __init__( self, frame, handler ):
+        """Constructor.
+        """
+        wx.Panel.__init__( self, frame, -1 )
+        self.handler = handler
+        self.frame = frame
+
+        self.sizer = wx.BoxSizer( wx.VERTICAL )
+        self.grid = minilib_grid( self, handler )
+
+        bbox = wx.BoxSizer( wx.HORIZONTAL )
+        newMiniBtn = wx.Button( self, wx.ID_ANY, "New mini" )
+        delMiniBtn = wx.Button( self, wx.ID_ANY, "Del mini" )
+        addMiniBtn = wx.Button( self, wx.ID_ANY, "Add 1" )
+        addBatchBtn = wx.Button( self, wx.ID_ANY, "Add Batch" )
+        bbox.Add(newMiniBtn, 0, wx.EXPAND )
+        bbox.Add(delMiniBtn, 0, wx.EXPAND )
+        bbox.Add(wx.Size(10,10))
+        bbox.Add(addMiniBtn, 0, wx.EXPAND )
+        bbox.Add(addBatchBtn, 0, wx.EXPAND )
+
+        self.sizer.Add( self.grid, 1, wx.EXPAND)
+        self.sizer.Add( bbox, 0)
+        self.SetSizer(self.sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_BUTTON, self.add_mini, newMiniBtn)
+        self.Bind(wx.EVT_BUTTON, self.del_mini, delMiniBtn)
+        self.Bind(wx.EVT_BUTTON, self.send_to_map, addMiniBtn)
+        self.Bind(wx.EVT_BUTTON, self.send_group_to_map, addBatchBtn)
+
+    def add_mini( self, evt=None ):
+        """Event handler for the 'New mini' button.  It calls
+        minilib_grid.add_row
+        """
+        self.grid.add_row()
+
+    def del_mini( self, evt=None ):
+        """Event handler for the 'Del mini' button.  It calls
+        minilib_grid.del_row
+        """
+        self.grid.del_row()
+
+    def send_to_map( self, evt=None ):
+        """Event handler for the 'Add 1' button.  Sends the
+        miniature defined by the currently selected row to the map, once.
+        """
+        index = self.grid.GetGridCursorRow()
+        self.handler.send_mini_to_map( self.handler.get_mini( index ) )
+
+    def send_group_to_map( self, evt=None ):
+        """Event handler for the 'Add batch' button.  Querys the user
+        for a mini count and sends the miniature defined by the currently
+        selected row to the map, the specified number of times.
+        """
+        if self.grid.GetNumberRows() > 0:
+            dlg = wx.TextEntryDialog( self.frame,
+                'How many %s\'s do you want to add?' %
+                ( self.grid.getSelectedLabel() ), 'Batch mini add', '2' )
+            if dlg.ShowModal() == wx.ID_OK:
+                try: value = eval( dlg.GetValue() )
+                except: value = 0
+                print 'getting selected index for batch send'
+                index = self.grid.GetGridCursorRow()
+                print 'sending batch to map'
+                self.handler.send_mini_to_map( self.handler.get_mini( index ), value )
+
+class minilib_grid(wx.grid.Grid):
+    """A wxGrid subclass designed for editing game tree miniature library
+    nodes.
+    """
+    def __init__( self, parent, handler ):
+        """Constructor.
+        """
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS )
+        self.parent = parent
+        self.handler = handler
+        self.keys = CORE_ATTRIBUTES
+        self.CreateGrid( 1, len( self.keys ) )
+        for key in self.keys: self.SetColLabelValue( self.keys.index( key ), key )
+        self.update_all()
+        self.selectedRow = 0
+        self.AutoSizeColumns()
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.select_cell)
+
+    def update_cols( self ):
+        for n in self.handler.xml.findall(TAG_MINIATURE):
+            for k in n.keys():
+                if k not in self.keys: self.keys.append( k )
+
+    def select_cell( self, evt ):
+        """Event handler for grid cell selection changes.  It stores the
+        last selected row in a variable for use by the add[*] and del_row
+        operations.
+        """
+        self.BeginBatch()
+        self.selectedRow = evt.GetRow()
+        self.SelectRow( self.selectedRow )
+        self.EndBatch()
+        evt.Skip()
+
+    def getList( self ):
+        """Returns the list of 'miniature' DOM elements associated with this
+        miniature library.
+        """
+        return self.handler.xml.findall( TAG_MINIATURE )
+
+    def add_row( self, count = 1 ):
+        """creates a new miniature node, and then adds it to the current
+        miniature library, and to the grid.
+        """
+        self.AppendRows( count )
+        node = self.handler.new_mini( {
+          ATTRIBUTE_NAME :' ',
+          ATTRIBUTE_URL :'http://'} )# minidom.Element( TAG_MINIATURE )
+        self.update_all()
+        #self.handler.xml.append( node )
+
+    def del_row( self ):
+        """deletes the miniature associated with the currently selected
+        row. BUG BUG BUG this method should drop a child from the DOM but
+        does not.
+        """
+        if self.selectedRow > -1:
+            pos = self.selectedRow
+            list = self.handler.xml.findall(TAG_MINIATURE)
+            self.handler.xml.remove( list[pos] )
+            self.DeleteRows( pos, 1 )
+            list = self.getList()
+            del list[ pos ]
+
+    def on_cell_change( self, evt ):
+        """Event handler for cell selection changes. selected row is used
+        to update data for that row.
+        """
+        row = evt.GetRow()
+        self.update_data_row( row )
+
+    def update_all( self ):
+        """ensures that the grid is displaying the correct number of
+        rows, and then updates all data displayed by the grid
+        """
+        list = self.getList()
+        count = 0
+        for n in list:
+            for k in n.keys():
+                if k not in self.keys: self.keys.append( k )
+        count = len( self.keys )
+        if self.GetNumberCols() < count:
+            self.AppendCols( count - self.GetNumberCols() )
+            for k in self.keys: self.SetColLabelValue( self.keys.index( k ), k )
+        count = len( list )
+        rowcount = self.GetNumberRows()
+        if ( count > rowcount ):
+            total = count - rowcount
+            self.AppendRows( total )
+        elif ( count < rowcount ):
+            total = rowcount - count
+            self.DeleteRows( 0, total );
+        for index in range( 0, count ):
+            self.update_grid_row( index )
+
+    def getSelectedLabel( self ):
+        """Returns the label for the selected row
+        """
+        return self.GetTable().GetValue( self.selectedRow, 0 )
+
+    def getSelectedURL( self ):
+        """Returns the URL for the selected row
+        """
+        return self.GetTable().GetValue( self.selectedRow, 1 )
+
+    def getSelectedSerial( self ):
+        """Returns the ATTRIBUTE_UNIQUE value for the selected row
+        """
+        return self.GetTable().GetValue( self.selectedRow, 2 )
+
+    def update_grid_row( self, row ):
+        """Updates the specified grid row with data from the DOM node
+        specified by 'row'
+        """
+        list = self.getList()
+        item = list[ row ]
+        for key in self.keys: self.GetTable().SetValue( row, self.keys.index( key ), item.get( key ) )
+
+    def update_data_row( self, row ):
+        """Updates the DOM nodw 'row' with grid data from 'row'
+        """
+        list = self.getList()
+        item = list[ row ]
+        for key in self.keys: item.set( key, string.strip( self.GetTable().GetValue( row, self.keys.index( key ) ) ) ) 
--- a/orpg/gametree/nodehandlers/nodehandler_version.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/nodehandler_version.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,3 +1,3 @@
-### this file holds the nodehandler version ###
-
-NODEHANDLER_VERSION = "1.0"
+### this file holds the nodehandler version ###
+
+NODEHANDLER_VERSION = "1.0"
--- a/orpg/gametree/nodehandlers/rpg_grid.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/rpg_grid.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,443 +1,443 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#        openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: rpg_grid.py
-# Author: Chris Davis
-# Maintainer:
-# Version:
-#   $Id: rpg_grid.py,v 1.20 2006/11/15 12:11:24 digitalxero Exp $
-#
-# Description: The file contains code for the grid nodehanlers
-#
-
-__version__ = "$Id: rpg_grid.py,v 1.20 2006/11/15 12:11:24 digitalxero Exp $"
-
-from core import *
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: rpg_grid.py
+# Author: Chris Davis
+# Maintainer:
+# Version:
+#   $Id: rpg_grid.py,v 1.20 2006/11/15 12:11:24 digitalxero Exp $
+#
+# Description: The file contains code for the grid nodehanlers
+#
+
+__version__ = "$Id: rpg_grid.py,v 1.20 2006/11/15 12:11:24 digitalxero Exp $"
+
+from core import *
 from forms import *
-
-class rpg_grid_handler(node_handler):
-    """ Node handler for rpg grid tool
-<nodehandler module='rpg_grid' class='rpg_grid_handler' name='sample'>
-  <grid border='' autosize='1' >
-    <row>
-      <cell size='?'></cell>
-      <cell></cell>
-    </row>
-    <row>
-      <cell></cell>
-      <cell></cell>
-    </row>
-  </grid>
-  <macros>
-    <macro name=''/>
-  </macros>
-</nodehandler>
-    """
-    def __init__(self,xml,tree_node):
-        node_handler.__init__(self,xml,tree_node)
-        self.grid = self.xml.find('grid')
-        if self.grid.get("border") == "": self.grid.set("border","1")
-        if self.grid.get("autosize") == "": self.grid.set("autosize","1")
-        self.macros = self.xml.find('macros')
-        self.myeditor = None
-        self.refresh_rows()
-
-    def refresh_die_macros(self):
-        pass
-
-    def refresh_rows(self):
-        self.rows = {}
-        tree = self.tree
-        icons = self.tree.icons
-        tree.CollapseAndReset(self.mytree_node)
-        for row in self.grid.findall('row'):
-            first_cell = row.find('cell')
-            name = first_cell.text
-            if name == None or name == '': name = "Row"
-            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
-            handler = grid_row_handler(row,new_tree_node,self)
-            tree.SetPyData(new_tree_node,handler)
-
-    def tohtml(self):
-        border = self.grid.get("border")
-        name = self.xml.get('name')
-        rows = self.grid.findall('row')
-        colspan = str(len(rows[0].findall('cell')))
-        html_str = "<table border=\""+border+"\" align=center><tr bgcolor=\""+TH_BG+"\" ><th colspan="+colspan+">"+name+"</th></tr>"
-        for r in rows:
-            cells = r.findall('cell')
-            html_str += "<tr>"
-            for c in cells:
-                html_str += "<td >"
-                text = c.text
-                if text == None or text == '': text = '<br />'
-                html_str += text + "</td>"
-            html_str += "</tr>"
-        html_str += "</table>"
-        return html_str
-
-    def get_design_panel(self,parent):
-        return rpg_grid_edit_panel(parent,self)
-
-    def get_use_panel(self,parent):
-        return rpg_grid_panel(parent,self)
-
-    def get_size_constraint(self):
-        return 1
-
-    def is_autosized(self):
-        return self.grid.get("autosize")
-
-    def set_autosize(self,autosize=1):
-        self.grid.set("autosize",str(autosize))
-
-class grid_row_handler(node_handler):
-    """ Node Handler grid row.
-    """
-    def __init__(self,xml,tree_node,parent):
-        node_handler.__init__(self,xml,tree_node)
-        self.drag = False
-
-    def on_drop(self,evt):
-        pass
-
-    def can_clone(self):
-        return 0;
-
-    def tohtml(self):
-        cells = self.xml.findall('cell')
-        html_str = "<table border=1 align=center><tr >"
-        for c in cells: # should loop over rows first, then cells
-            html_str += "<td >"
-            text = c.text
-            if text == '' or text is None: text = '<br />'
-            html_str += text + "</td>"
-            html_str += "</tr>"
-        html_str += "</table>"
-        return html_str
-
-    def get_value(self):
-        cells = self.xml.findall('cell')
-        if len(cells) == 2: return getText(cells[1])
-        else: return None
-
-    def set_value(self, new_value):
-        cells = self.xml.findall('cell')
-        if len(cells) == 2:
-            cells[1].text = new_value
-
-class MyCellEditor(wx.grid.PyGridCellEditor):
-    """
-    This is a sample GridCellEditor that shows you how to make your own custom
-    grid editors.  All the methods that can be overridden are show here.  The
-    ones that must be overridden are marked with "*Must Override*" in the
-    docstring.
-
-    Notice that in order to call the base class version of these special
-    methods we use the method name preceded by "base_".  This is because these
-    methods are "virtual" in C++ so if we try to call wxGridCellEditor.Create
-    for example, then when the wxPython extension module tries to call
-    ptr->Create(...) then it actually calls the derived class version which
-    looks up the method in this class and calls it, causing a recursion loop.
-    If you don't understand any of this, don't worry, just call the "base_"
-    version instead.
-
-    ----------------------------------------------------------------------------
-    This class is copied from the wxPython examples directory and was written by
-    Robin Dunn.
-
-    I have pasted it directly in and removed all references to "log"
-
-    -- Andrew
-
-    """
-    def __init__(self):
-        wx.grid.PyGridCellEditor.__init__(self)
-
-    def Create(self, parent, id, evtHandler):
-        """
-        Called to create the control, which must derive from wxControl.
-        *Must Override*
-        """
-        self._tc = wx.TextCtrl(parent, id, "", style=wx.TE_PROCESS_ENTER | wx.TE_PROCESS_TAB)
-        self._tc.SetInsertionPoint(0)
-        self.SetControl(self._tc)
-        if evtHandler: self._tc.PushEventHandler(evtHandler)
-
-    def SetSize(self, rect):
-        """
-        Called to position/size the edit control within the cell rectangle.
-        If you don't fill the cell (the rect) then be sure to override
-        PaintBackground and do something meaningful there.
-        """
-        self._tc.SetDimensions(rect.x+1, rect.y+1, rect.width+2, rect.height+2)
-
-    def BeginEdit(self, row, col, grid):
-        """
-        Fetch the value from the table and prepare the edit control
-        to begin editing.  Set the focus to the edit control.
-        *Must Override*
-        """
-        self.startValue = grid.GetTable().GetValue(row, col)
-        self._tc.SetValue(self.startValue)
-        self._tc.SetInsertionPointEnd()
-        self._tc.SetFocus()
-
-        # For this example, select the text
-        self._tc.SetSelection(0, self._tc.GetLastPosition())
-
-    def EndEdit(self, row, col, grid):
-        """
-        Complete the editing of the current cell. Returns True if the value
-        has changed.  If necessary, the control may be destroyed.
-        *Must Override*
-        """
-        changed = False
-        val = self._tc.GetValue()
-        if val != self.startValue:
-            changed = True
-            grid.GetTable().SetValue(row, col, val) # update the table
-
-        self.startValue = ''
-        self._tc.SetValue('')
-        return changed
-
-    def Reset(self):
-        """
-        Reset the value in the control back to its starting value.
-        *Must Override*
-        """
-        self._tc.SetValue(self.startValue)
-        self._tc.SetInsertionPointEnd()
-
-    def IsAcceptedKey(self, evt):
-        """
-        Return True to allow the given key to start editing: the base class
-        version only checks that the event has no modifiers.  F2 is special
-        and will always start the editor.
-        """
-        return (not (evt.ControlDown() or evt.AltDown()) and
-                evt.GetKeyCode() != wx.WXK_SHIFT)
-
-    def StartingKey(self, evt):
-        """
-        If the editor is enabled by pressing keys on the grid, this will be
-        called to let the editor do something about that first key if desired.
-        """
-        key = evt.GetKeyCode()
-        ch = None
-        if key in [wx.WXK_NUMPAD0, wx.WXK_NUMPAD1, wx.WXK_NUMPAD2, wx.WXK_NUMPAD3, wx.WXK_NUMPAD4,
-                   wx.WXK_NUMPAD5, wx.WXK_NUMPAD6, wx.WXK_NUMPAD7, wx.WXK_NUMPAD8, wx.WXK_NUMPAD9]:
-            ch = ch = chr(ord('0') + key - wx.WXK_NUMPAD0)
-        elif key < 256 and key >= 0 and chr(key) in string.printable:
-            ch = chr(key)
-            if not evt.ShiftDown(): ch = string.lower(ch)
-        if ch is not None: self._tc.AppendText(ch)
-        else: evt.Skip()
-
-    def Destroy(self):
-        """final cleanup"""
-        self.base_Destroy()
-
-    def Clone(self):
-        """
-        Create a new object which is the copy of this one
-        *Must Override*
-        """
-        return MyCellEditor()
+
+class rpg_grid_handler(node_handler):
+    """ Node handler for rpg grid tool
+<nodehandler module='rpg_grid' class='rpg_grid_handler' name='sample'>
+  <grid border='' autosize='1' >
+    <row>
+      <cell size='?'></cell>
+      <cell></cell>
+    </row>
+    <row>
+      <cell></cell>
+      <cell></cell>
+    </row>
+  </grid>
+  <macros>
+    <macro name=''/>
+  </macros>
+</nodehandler>
+    """
+    def __init__(self,xml,tree_node):
+        node_handler.__init__(self,xml,tree_node)
+        self.grid = self.xml.find('grid')
+        if self.grid.get("border") == "": self.grid.set("border","1")
+        if self.grid.get("autosize") == "": self.grid.set("autosize","1")
+        self.macros = self.xml.find('macros')
+        self.myeditor = None
+        self.refresh_rows()
+
+    def refresh_die_macros(self):
+        pass
+
+    def refresh_rows(self):
+        self.rows = {}
+        tree = self.tree
+        icons = self.tree.icons
+        tree.CollapseAndReset(self.mytree_node)
+        for row in self.grid.findall('row'):
+            first_cell = row.find('cell')
+            name = first_cell.text
+            if name == None or name == '': name = "Row"
+            new_tree_node = tree.AppendItem(self.mytree_node,name,icons['gear'],icons['gear'])
+            handler = grid_row_handler(row,new_tree_node,self)
+            tree.SetPyData(new_tree_node,handler)
+
+    def tohtml(self):
+        border = self.grid.get("border")
+        name = self.xml.get('name')
+        rows = self.grid.findall('row')
+        colspan = str(len(rows[0].findall('cell')))
+        html_str = "<table border=\""+border+"\" align=center><tr bgcolor=\""+TH_BG+"\" ><th colspan="+colspan+">"+name+"</th></tr>"
+        for r in rows:
+            cells = r.findall('cell')
+            html_str += "<tr>"
+            for c in cells:
+                html_str += "<td >"
+                text = c.text
+                if text == None or text == '': text = '<br />'
+                html_str += text + "</td>"
+            html_str += "</tr>"
+        html_str += "</table>"
+        return html_str
+
+    def get_design_panel(self,parent):
+        return rpg_grid_edit_panel(parent,self)
+
+    def get_use_panel(self,parent):
+        return rpg_grid_panel(parent,self)
+
+    def get_size_constraint(self):
+        return 1
+
+    def is_autosized(self):
+        return self.grid.get("autosize")
+
+    def set_autosize(self,autosize=1):
+        self.grid.set("autosize",str(autosize))
+
+class grid_row_handler(node_handler):
+    """ Node Handler grid row.
+    """
+    def __init__(self,xml,tree_node,parent):
+        node_handler.__init__(self,xml,tree_node)
+        self.drag = False
+
+    def on_drop(self,evt):
+        pass
+
+    def can_clone(self):
+        return 0;
+
+    def tohtml(self):
+        cells = self.xml.findall('cell')
+        html_str = "<table border=1 align=center><tr >"
+        for c in cells: # should loop over rows first, then cells
+            html_str += "<td >"
+            text = c.text
+            if text == '' or text is None: text = '<br />'
+            html_str += text + "</td>"
+            html_str += "</tr>"
+        html_str += "</table>"
+        return html_str
+
+    def get_value(self):
+        cells = self.xml.findall('cell')
+        if len(cells) == 2: return getText(cells[1])
+        else: return None
+
+    def set_value(self, new_value):
+        cells = self.xml.findall('cell')
+        if len(cells) == 2:
+            cells[1].text = new_value
+
+class MyCellEditor(wx.grid.PyGridCellEditor):
+    """
+    This is a sample GridCellEditor that shows you how to make your own custom
+    grid editors.  All the methods that can be overridden are show here.  The
+    ones that must be overridden are marked with "*Must Override*" in the
+    docstring.
+
+    Notice that in order to call the base class version of these special
+    methods we use the method name preceded by "base_".  This is because these
+    methods are "virtual" in C++ so if we try to call wxGridCellEditor.Create
+    for example, then when the wxPython extension module tries to call
+    ptr->Create(...) then it actually calls the derived class version which
+    looks up the method in this class and calls it, causing a recursion loop.
+    If you don't understand any of this, don't worry, just call the "base_"
+    version instead.
+
+    ----------------------------------------------------------------------------
+    This class is copied from the wxPython examples directory and was written by
+    Robin Dunn.
+
+    I have pasted it directly in and removed all references to "log"
+
+    -- Andrew
+
+    """
+    def __init__(self):
+        wx.grid.PyGridCellEditor.__init__(self)
+
+    def Create(self, parent, id, evtHandler):
+        """
+        Called to create the control, which must derive from wxControl.
+        *Must Override*
+        """
+        self._tc = wx.TextCtrl(parent, id, "", style=wx.TE_PROCESS_ENTER | wx.TE_PROCESS_TAB)
+        self._tc.SetInsertionPoint(0)
+        self.SetControl(self._tc)
+        if evtHandler: self._tc.PushEventHandler(evtHandler)
+
+    def SetSize(self, rect):
+        """
+        Called to position/size the edit control within the cell rectangle.
+        If you don't fill the cell (the rect) then be sure to override
+        PaintBackground and do something meaningful there.
+        """
+        self._tc.SetDimensions(rect.x+1, rect.y+1, rect.width+2, rect.height+2)
+
+    def BeginEdit(self, row, col, grid):
+        """
+        Fetch the value from the table and prepare the edit control
+        to begin editing.  Set the focus to the edit control.
+        *Must Override*
+        """
+        self.startValue = grid.GetTable().GetValue(row, col)
+        self._tc.SetValue(self.startValue)
+        self._tc.SetInsertionPointEnd()
+        self._tc.SetFocus()
+
+        # For this example, select the text
+        self._tc.SetSelection(0, self._tc.GetLastPosition())
 
-
-class rpg_grid(wx.grid.Grid):
-    """grid for attacks"""
-    def __init__(self, parent, handler):
-        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
-        self.parent = parent
-        self.handler = handler
-
-        self.RegisterDataType(wx.grid.GRID_VALUE_STRING, wx.grid.GridCellStringRenderer(),MyCellEditor())
-
-        self.rows = handler.grid.findall('row')
-        rows = len(self.rows)
-        cols = len(self.rows[0].findall('cell'))
-        self.CreateGrid(rows,cols)
-        self.SetRowLabelSize(0)
-        self.SetColLabelSize(0)
-        self.set_col_widths()
-
-        for i in range(0,len(self.rows)): self.refresh_row(i)
-
-        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
-        self.Bind(wx.grid.EVT_GRID_COL_SIZE, self.on_col_size)
-        self.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.on_leftdclick)
-
-
-    def on_leftdclick(self,evt):
-        if self.CanEnableCellControl(): self.EnableCellEditControl()
-
-    def on_col_size(self, evt):
-        col = evt.GetRowOrCol()
-        cells = self.rows[0].findall('cell')
-        size = self.GetColSize(col)
-        cells[col].set('size',str(size))
-        evt.Skip()
-
-    def on_cell_change(self,evt):
-        row = evt.GetRow()
-        col = evt.GetCol()
-        value = self.GetCellValue(row,col)
-        cells = self.rows[row].findall('cell')
-        cells[col].text = value
-        if col == 0: self.handler.refresh_rows()
-
-    def set_col_widths(self):
-        cells = self.rows[0].findall('cell')
-        for i in range(0,len(cells)):
-            try:
-                size = int(cells[i].get('size'))
-                self.SetColSize(i,size)
-            except: continue
-
-    def refresh_row(self,rowi):
-        cells = self.rows[rowi].findall('cell')
-        for i in range(0,len(cells)):
-            text = cells[i].text
-            if text == None or text == '':
-                text = ''
-                cells[i].text = text
-            self.SetCellValue(rowi,i,text)
-
-    def add_row(self,evt=None):
-        cols = self.GetNumberCols()
-        row = Element('row')
-        for i in range(0,cols):
-            cell = Element('cell')
-            cell.text = ''
-            row.append(cell)
-        self.handler.grid.append(row)
-        self.AppendRows(1)
-        self.rows = self.handler.grid.findall('row')
-        self.handler.refresh_rows()
-
-    def add_col(self,evt=None):
-        for r in self.rows:
-            cell = Element('cell')
-            cell.text = ''
-            r.append(cell)
-        self.AppendCols(1)
-        self.set_col_widths()
-
-    def del_row(self,evt=None):
-        num = self.GetNumberRows()
-        if num == 1: return
-        self.handler.grid.remove(self.handler.grid[num-1])# always remove last row -- nasty
-        self.DeleteRows(num-1,1)
-        self.rows = self.handler.grid.findall('row')
-        self.handler.refresh_rows()
-
-    def del_col(self,evt=None):
-        num = self.GetNumberCols()
-        if num == 1: return
-        for r in self.rows:
-            cells = r.findall('cell')
-            r.remove(r[num-1])                  # always remove the last column -- nasty
-        self.DeleteCols(num-1,1)
-        self.set_col_widths()
-
-
-G_TITLE = wx.NewId()
-GRID_BOR = wx.NewId()
-class rpg_grid_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
-        self.grid = rpg_grid(self,handler)
-        label = handler.xml.get('name')
-        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
-        self.main_sizer.Add(wx.StaticText(self, -1, label+": "), 0, wx.EXPAND)
-        self.main_sizer.Add(self.grid,1,wx.EXPAND)
-        self.SetSizer(self.main_sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-        parent.SetSize(self.GetBestSize())
-
-G_AUTO_SIZE = wx.NewId()
-G_ADD_ROW = wx.NewId()
-G_ADD_COL = wx.NewId()
-G_DEL_ROW = wx.NewId()
-G_DEL_COL = wx.NewId()
-
-class rpg_grid_edit_panel(wx.Panel):
-    def __init__(self, parent, handler):
-        wx.Panel.__init__(self, parent, -1)
-        self.handler = handler
+    def EndEdit(self, row, col, grid):
+        """
+        Complete the editing of the current cell. Returns True if the value
+        has changed.  If necessary, the control may be destroyed.
+        *Must Override*
+        """
+        changed = False
+        val = self._tc.GetValue()
+        if val != self.startValue:
+            changed = True
+            grid.GetTable().SetValue(row, col, val) # update the table
+
+        self.startValue = ''
+        self._tc.SetValue('')
+        return changed
+
+    def Reset(self):
+        """
+        Reset the value in the control back to its starting value.
+        *Must Override*
+        """
+        self._tc.SetValue(self.startValue)
+        self._tc.SetInsertionPointEnd()
+
+    def IsAcceptedKey(self, evt):
+        """
+        Return True to allow the given key to start editing: the base class
+        version only checks that the event has no modifiers.  F2 is special
+        and will always start the editor.
+        """
+        return (not (evt.ControlDown() or evt.AltDown()) and
+                evt.GetKeyCode() != wx.WXK_SHIFT)
+
+    def StartingKey(self, evt):
+        """
+        If the editor is enabled by pressing keys on the grid, this will be
+        called to let the editor do something about that first key if desired.
+        """
+        key = evt.GetKeyCode()
+        ch = None
+        if key in [wx.WXK_NUMPAD0, wx.WXK_NUMPAD1, wx.WXK_NUMPAD2, wx.WXK_NUMPAD3, wx.WXK_NUMPAD4,
+                   wx.WXK_NUMPAD5, wx.WXK_NUMPAD6, wx.WXK_NUMPAD7, wx.WXK_NUMPAD8, wx.WXK_NUMPAD9]:
+            ch = ch = chr(ord('0') + key - wx.WXK_NUMPAD0)
+        elif key < 256 and key >= 0 and chr(key) in string.printable:
+            ch = chr(key)
+            if not evt.ShiftDown(): ch = string.lower(ch)
+        if ch is not None: self._tc.AppendText(ch)
+        else: evt.Skip()
+
+    def Destroy(self):
+        """final cleanup"""
+        self.base_Destroy()
+
+    def Clone(self):
+        """
+        Create a new object which is the copy of this one
+        *Must Override*
+        """
+        return MyCellEditor()
+
+
+class rpg_grid(wx.grid.Grid):
+    """grid for attacks"""
+    def __init__(self, parent, handler):
+        wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS)
+        self.parent = parent
+        self.handler = handler
+
+        self.RegisterDataType(wx.grid.GRID_VALUE_STRING, wx.grid.GridCellStringRenderer(),MyCellEditor())
+
+        self.rows = handler.grid.findall('row')
+        rows = len(self.rows)
+        cols = len(self.rows[0].findall('cell'))
+        self.CreateGrid(rows,cols)
+        self.SetRowLabelSize(0)
+        self.SetColLabelSize(0)
+        self.set_col_widths()
+
+        for i in range(0,len(self.rows)): self.refresh_row(i)
+
+        self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
+        self.Bind(wx.grid.EVT_GRID_COL_SIZE, self.on_col_size)
+        self.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.on_leftdclick)
+
+
+    def on_leftdclick(self,evt):
+        if self.CanEnableCellControl(): self.EnableCellEditControl()
+
+    def on_col_size(self, evt):
+        col = evt.GetRowOrCol()
+        cells = self.rows[0].findall('cell')
+        size = self.GetColSize(col)
+        cells[col].set('size',str(size))
+        evt.Skip()
+
+    def on_cell_change(self,evt):
+        row = evt.GetRow()
+        col = evt.GetCol()
+        value = self.GetCellValue(row,col)
+        cells = self.rows[row].findall('cell')
+        cells[col].text = value
+        if col == 0: self.handler.refresh_rows()
+
+    def set_col_widths(self):
+        cells = self.rows[0].findall('cell')
+        for i in range(0,len(cells)):
+            try:
+                size = int(cells[i].get('size'))
+                self.SetColSize(i,size)
+            except: continue
+
+    def refresh_row(self,rowi):
+        cells = self.rows[rowi].findall('cell')
+        for i in range(0,len(cells)):
+            text = cells[i].text
+            if text == None or text == '':
+                text = ''
+                cells[i].text = text
+            self.SetCellValue(rowi,i,text)
+
+    def add_row(self,evt=None):
+        cols = self.GetNumberCols()
+        row = Element('row')
+        for i in range(0,cols):
+            cell = Element('cell')
+            cell.text = ''
+            row.append(cell)
+        self.handler.grid.append(row)
+        self.AppendRows(1)
+        self.rows = self.handler.grid.findall('row')
+        self.handler.refresh_rows()
+
+    def add_col(self,evt=None):
+        for r in self.rows:
+            cell = Element('cell')
+            cell.text = ''
+            r.append(cell)
+        self.AppendCols(1)
+        self.set_col_widths()
+
+    def del_row(self,evt=None):
+        num = self.GetNumberRows()
+        if num == 1: return
+        self.handler.grid.remove(self.handler.grid[num-1])# always remove last row -- nasty
+        self.DeleteRows(num-1,1)
+        self.rows = self.handler.grid.findall('row')
+        self.handler.refresh_rows()
+
+    def del_col(self,evt=None):
+        num = self.GetNumberCols()
+        if num == 1: return
+        for r in self.rows:
+            cells = r.findall('cell')
+            r.remove(r[num-1])                  # always remove the last column -- nasty
+        self.DeleteCols(num-1,1)
+        self.set_col_widths()
+
+
+G_TITLE = wx.NewId()
+GRID_BOR = wx.NewId()
+class rpg_grid_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
+        self.grid = rpg_grid(self,handler)
+        label = handler.xml.get('name')
+        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
+        self.main_sizer.Add(wx.StaticText(self, -1, label+": "), 0, wx.EXPAND)
+        self.main_sizer.Add(self.grid,1,wx.EXPAND)
+        self.SetSizer(self.main_sizer)
+        self.SetAutoLayout(True)
+        self.Fit()
+        parent.SetSize(self.GetBestSize())
+
+G_AUTO_SIZE = wx.NewId()
+G_ADD_ROW = wx.NewId()
+G_ADD_COL = wx.NewId()
+G_DEL_ROW = wx.NewId()
+G_DEL_COL = wx.NewId()
+
+class rpg_grid_edit_panel(wx.Panel):
+    def __init__(self, parent, handler):
+        wx.Panel.__init__(self, parent, -1)
+        self.handler = handler
         self.grid = rpg_grid(self,handler)
         self.main_sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Grid"), wx.VERTICAL)
-
-        self.title = wx.TextCtrl(self, G_TITLE, handler.xml.get('name'))
 
-        radio_b = wx.RadioBox(self, GRID_BOR, "Border (HTML)", choices=["no","yes"])
+        self.title = wx.TextCtrl(self, G_TITLE, handler.xml.get('name'))
+
+        radio_b = wx.RadioBox(self, GRID_BOR, "Border (HTML)", choices=["no","yes"])
         border = handler.grid.get("border")
-        radio_b.SetSelection(int(border))
-
-        self.auto_size = wx.CheckBox(self, G_AUTO_SIZE, "Auto Size")
-        if handler.is_autosized() == '1': self.auto_size.SetValue(True)
-        else: self.auto_size.SetValue(False)
-
+        radio_b.SetSelection(int(border))
+
+        self.auto_size = wx.CheckBox(self, G_AUTO_SIZE, "Auto Size")
+        if handler.is_autosized() == '1': self.auto_size.SetValue(True)
+        else: self.auto_size.SetValue(False)
+
         sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(wx.Button(self, G_ADD_ROW, "Add Row"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, G_DEL_ROW, "Remove Row"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
-        sizer.Add(wx.Button(self, G_ADD_COL, "Add Column"), 1, wx.EXPAND)
-        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, G_ADD_ROW, "Add Row"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, G_DEL_ROW, "Remove Row"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
+        sizer.Add(wx.Button(self, G_ADD_COL, "Add Column"), 1, wx.EXPAND)
+        sizer.Add(wx.Size(10,10))
         sizer.Add(wx.Button(self, G_DEL_COL, "Remove Column"), 1, wx.EXPAND)
-
-        self.main_sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
-        self.main_sizer.Add(self.title, 0, wx.EXPAND)
-        self.main_sizer.Add(radio_b, 0, 0)
-        self.main_sizer.Add(self.auto_size, 0, 0)
-        self.main_sizer.Add(self.grid,1,wx.EXPAND)
+
+        self.main_sizer.Add(wx.StaticText(self, -1, "Title:"), 0, wx.EXPAND)
+        self.main_sizer.Add(self.title, 0, wx.EXPAND)
+        self.main_sizer.Add(radio_b, 0, 0)
+        self.main_sizer.Add(self.auto_size, 0, 0)
+        self.main_sizer.Add(self.grid,1,wx.EXPAND)
         self.main_sizer.Add(sizer,0,wx.EXPAND)
-
+
         self.SetSizer(self.main_sizer)
-        self.SetAutoLayout(True)
-        self.Fit()
-
-        self.Bind(wx.EVT_TEXT, self.on_text, id=G_TITLE)
-        self.Bind(wx.EVT_BUTTON, self.grid.add_row, id=G_ADD_ROW)
-        self.Bind(wx.EVT_BUTTON, self.grid.del_row, id=G_DEL_ROW)
-        self.Bind(wx.EVT_BUTTON, self.grid.add_col, id=G_ADD_COL)
-        self.Bind(wx.EVT_BUTTON, self.grid.del_col, id=G_DEL_COL)
-        self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GRID_BOR)
-        self.Bind(wx.EVT_CHECKBOX, self.on_auto_size, id=G_AUTO_SIZE)
-
-    def on_auto_size(self,evt):
-        self.handler.set_autosize(bool2int(evt.Checked()))
-
-    def on_radio_box(self,evt):
-        id = evt.GetId()
-        index = evt.GetInt()
-        if id == GRID_BOR:
-            self.handler.grid.set("border",str(index))
-
-    def on_text(self,evt):
-        txt = self.title.GetValue()
-        if txt != "":
-            self.handler.xml.set('name',txt)
-            self.handler.rename(txt)
+        self.SetAutoLayout(True)
+        self.Fit()
+
+        self.Bind(wx.EVT_TEXT, self.on_text, id=G_TITLE)
+        self.Bind(wx.EVT_BUTTON, self.grid.add_row, id=G_ADD_ROW)
+        self.Bind(wx.EVT_BUTTON, self.grid.del_row, id=G_DEL_ROW)
+        self.Bind(wx.EVT_BUTTON, self.grid.add_col, id=G_ADD_COL)
+        self.Bind(wx.EVT_BUTTON, self.grid.del_col, id=G_DEL_COL)
+        self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=GRID_BOR)
+        self.Bind(wx.EVT_CHECKBOX, self.on_auto_size, id=G_AUTO_SIZE)
+
+    def on_auto_size(self,evt):
+        self.handler.set_autosize(bool2int(evt.Checked()))
+
+    def on_radio_box(self,evt):
+        id = evt.GetId()
+        index = evt.GetInt()
+        if id == GRID_BOR:
+            self.handler.grid.set("border",str(index))
+
+    def on_text(self,evt):
+        txt = self.title.GetValue()
+        if txt != "":
+            self.handler.xml.set('name',txt)
+            self.handler.rename(txt)
--- a/orpg/gametree/nodehandlers/voxchat.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/gametree/nodehandlers/voxchat.py	Wed Nov 25 12:34:04 2009 -0600
@@ -1,66 +1,66 @@
-# Copyright (C) 2000-2001 The OpenRPG Project
-#
-#   openrpg-dev@lists.sourceforge.net
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# --
-#
-# File: voxchat.py
-# Author: Ted Berg
-# Maintainer:
-# Version:
-#   $Id: voxchat.py,v 1.37 2007/05/06 16:42:55 digitalxero Exp $
-#
-# Description: nodehandler for alias.
-#
-
-__version__ = "$Id: voxchat.py,v 1.37 2007/05/06 16:42:55 digitalxero Exp $"
-
-import re, os, string, core
-
-from orpg.orpg_windows import *
-import core
-import orpg.tools.scriptkit
-import orpg.tools.predTextCtrl
-import orpg.tools.rgbhex
-import orpg.tools.inputValidator
-
-from orpg.dirpath import dir_struct
-import orpg.minidom
-import orpg.networking.mplay_client
-from orpg.orpgCore import component
-
-#
-# Good things to add:
-# 1.u'use filter' per alias  [ this should be done ]
-# 2. make aliases remember which filter they're using  [ lisbox in gtk appaears to ignore SetSelection( <= 0 )
-#
-
-
-class voxchat_handler(core.node_handler):
-    def __init__(self, xml_dom, tree_node):
-        core.node_handler.__init__( self, xml_dom, tree_node)
-        self.node = xml_dom
-        self.xml = component.get('xml')
-
-    def get_design_panel( self, parent ):
-        aliasLib = component.get('alias')
-        aliasLib.ImportFromTree(self.node)
-        return None
-
-    def get_use_panel( self, parent ):
-        aliasLib = component.get('alias')
-        aliasLib.ImportFromTree(self.node)
-        return None
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#   openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: voxchat.py
+# Author: Ted Berg
+# Maintainer:
+# Version:
+#   $Id: voxchat.py,v 1.37 2007/05/06 16:42:55 digitalxero Exp $
+#
+# Description: nodehandler for alias.
+#
+
+__version__ = "$Id: voxchat.py,v 1.37 2007/05/06 16:42:55 digitalxero Exp $"
+
+import re, os, string, core
+
+from orpg.orpg_windows import *
+import core
+import orpg.tools.scriptkit
+import orpg.tools.predTextCtrl
+import orpg.tools.rgbhex
+import orpg.tools.inputValidator
+
+from orpg.dirpath import dir_struct
+import orpg.minidom
+import orpg.networking.mplay_client
+from orpg.orpgCore import component
+
+#
+# Good things to add:
+# 1.u'use filter' per alias  [ this should be done ]
+# 2. make aliases remember which filter they're using  [ lisbox in gtk appaears to ignore SetSelection( <= 0 )
+#
+
+
+class voxchat_handler(core.node_handler):
+    def __init__(self, xml_dom, tree_node):
+        core.node_handler.__init__( self, xml_dom, tree_node)
+        self.node = xml_dom
+        self.xml = component.get('xml')
+
+    def get_design_panel( self, parent ):
+        aliasLib = component.get('alias')
+        aliasLib.ImportFromTree(self.node)
+        return None
+
+    def get_use_panel( self, parent ):
+        aliasLib = component.get('alias')
+        aliasLib.ImportFromTree(self.node)
+        return None
--- a/orpg/orpg_version.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/orpg_version.py	Wed Nov 25 12:34:04 2009 -0600
@@ -4,7 +4,7 @@
 #BUILD NUMBER FORMAT: "YYMMDD-##" where ## is the incremental daily build index (if needed)
 DISTRO = "Traipse Beta"
 DIS_VER = "Ornery Orc"
-BUILD = "091125-01"
+BUILD = "091125-02"
 
 # This version is for network capability.
 PROTOCOL_VERSION = "1.2"
--- a/orpg/templates/default_alias.alias	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/templates/default_alias.alias	Wed Nov 25 12:34:04 2009 -0600
@@ -1,33 +1,33 @@
-<aliaslib>
-    <alias name="Test" color="Default" />
-    <alias name="Test1" color="#FF0000" />
-    <filter name="Rogue or Pirate">
-        <rule match="ia" sub="'a" />
-        <rule match="(\W+)(?i)it is(\W+)" sub="\1t'is\2" />
-        <rule match="(\W+)(?i)h" sub="\1'" />
-        <rule match="(?i)his" sub="'is" />
-        <rule match="n[tkg](\W+)" sub="n'\1" />
-        <rule match="(\W+)(?i)to(\W+)" sub="\1t'\2" />
-        <rule match="(\w+)th(\W+)" sub="\1t'\2" />
-        <rule match="(\W+)([Yy])ou(\W+)" sub="\1\2ea\3" />
-        <rule match="(\W+)([Yy])our(\W+)" sub="\1\2er\3" />
-        <rule match="'+" sub="'" />
-        <rule match="th" sub="d'" />
-        <rule match="ass" sub="arse" />
-    </filter>
-    <filter name="Static Communicator">
-        <rule match="ce" sub="ssss(**shhhshh**)" />
-        <rule match="[IiOo]" sub="(**sss**)" />
-        <rule match="wi" sub="(*squack*) " />
-        <rule match="run" sub="@#$%DDD " />
-        <rule match="[Ss][Tt]" sub=";lkj%$# " />
-        <rule match="opy" sub="op.....he" />
-        <rule match="[Bb]" />
-        <rule match="the" sub="te" />
-        <rule match="ow" sub="ashh" />
-        <rule match="[Aa][Bb]" sub="bbb" />
-        <rule match="ll" sub="ya" />
-        <rule match="support" sub="(*rssshhhh*)'pt" />
-        <rule match="ey" sub="eeee" />
-    </filter>
+<aliaslib>
+    <alias name="Test" color="Default" />
+    <alias name="Test1" color="#FF0000" />
+    <filter name="Rogue or Pirate">
+        <rule match="ia" sub="'a" />
+        <rule match="(\W+)(?i)it is(\W+)" sub="\1t'is\2" />
+        <rule match="(\W+)(?i)h" sub="\1'" />
+        <rule match="(?i)his" sub="'is" />
+        <rule match="n[tkg](\W+)" sub="n'\1" />
+        <rule match="(\W+)(?i)to(\W+)" sub="\1t'\2" />
+        <rule match="(\w+)th(\W+)" sub="\1t'\2" />
+        <rule match="(\W+)([Yy])ou(\W+)" sub="\1\2ea\3" />
+        <rule match="(\W+)([Yy])our(\W+)" sub="\1\2er\3" />
+        <rule match="'+" sub="'" />
+        <rule match="th" sub="d'" />
+        <rule match="ass" sub="arse" />
+    </filter>
+    <filter name="Static Communicator">
+        <rule match="ce" sub="ssss(**shhhshh**)" />
+        <rule match="[IiOo]" sub="(**sss**)" />
+        <rule match="wi" sub="(*squack*) " />
+        <rule match="run" sub="@#$%DDD " />
+        <rule match="[Ss][Tt]" sub=";lkj%$# " />
+        <rule match="opy" sub="op.....he" />
+        <rule match="[Bb]" />
+        <rule match="the" sub="te" />
+        <rule match="ow" sub="ashh" />
+        <rule match="[Aa][Bb]" sub="bbb" />
+        <rule match="ll" sub="ya" />
+        <rule match="support" sub="(*rssshhhh*)'pt" />
+        <rule match="ey" sub="eeee" />
+    </filter>
 </aliaslib>
\ No newline at end of file
--- a/orpg/templates/metaservers.cache	Wed Nov 25 06:51:50 2009 -0600
+++ b/orpg/templates/metaservers.cache	Wed Nov 25 12:34:04 2009 -0600
@@ -1,1 +1,1 @@
-http://www.openrpg.com/openrpg_servers.php 1 2
+http://www.openrpg.com/openrpg_servers.php 1 2
Binary file plugins/images/samurai.gif has changed
--- a/start_noupdate.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/start_noupdate.py	Wed Nov 25 12:34:04 2009 -0600
@@ -5,8 +5,8 @@
 
 #Update Manager
 from orpg.orpg_wx import *
-import upmana.updatemana
-app = upmana.updatemana.updateApp(0)
+import upmana.updatemana
+app = upmana.updatemana.updateApp(0)
 app.MainLoop()
 
 #Main Program
--- a/start_release.py	Wed Nov 25 06:51:50 2009 -0600
+++ b/start_release.py	Wed Nov 25 12:34:04 2009 -0600
@@ -5,8 +5,8 @@
 
 #Update Manager
 from orpg.orpg_wx import *
-import upmana.updatemana
-app = upmana.updatemana.updateApp(0)
+import upmana.updatemana
+app = upmana.updatemana.updateApp(0)
 app.MainLoop()
 
 #Main Program