def spell_parse_function(field): functions = { 'school': parse_school, 'level': parse_level, 'components': parse_components, 'component': parse_components, 'saving throw': parse_saving_throw, 'saving': parse_saving_throw, 'save': parse_saving_throw, 'casting time': parse_casting_time, 'casting': parse_casting_time, 'preparation time': default_closure('preparation_time'), 'range': default_closure('range'), 'duration': default_closure('duration'), 'spell resistance': default_closure('spell_resistance'), 'sr': default_closure('spell_resistance'), 'effect': effect_closure('Effect'), 'targets': effect_closure('Targets'), 'target': effect_closure('Target'), 'area': effect_closure('Area'), 'target or area': effect_closure('Target or Area'), 'area or target': effect_closure('Target or Area'), 'target or targets': effect_closure('Target or Targets'), 'target, effect, or area': effect_closure('Target, Effect, or Area'), 'target, effect, area': effect_closure('Target, Effect, or Area'), 'target/effect': effect_closure('Target or Effect'), } return functions[field.lower()]
def item_parse_function(field, detail): functions = { 'aura': default_closure('aura'), 'cl': default_closure('cl'), 'slot': parse_item_slot, 'price': default_closure('price'), 'weight': default_closure('weight'), 'type': default_closure('item_type'), } if functions.has_key(field.lower()): return functions[field.lower()] else: return parse_item_misc(detail, field)
def parse_creature_descriptors(creature, value): real = [] for tup in value: key, val = tup if val.startswith('AC'): default_closure('ac')(creature, val[2:]) else: real.append(val) parse_creature_descriptor(creature, real.pop()) if len(real) > 0: parse_creature_classes(creature, real.pop(0)) if len(real) > 0: raise Exception("Too many descriptors: %s" % value)
def kingdom_resource_parse_function(field): functions = { 'cr': parse_cr, 'kingdom': default_closure('kingdom'), 'discount': default_closure('discount'), 'upgrades from': default_closure('upgrade_from'), 'upgrade from': default_closure('upgrade_from'), 'upgrades to': default_closure('upgrade_to'), 'upgrade to': default_closure('upgrade_to'), 'magic items': default_closure('magic_items'), 'settlement': default_closure('settlement'), 'special': default_closure('special'), 'limit': default_closure('limit'), } return functions[field.lower()]
def army_parse_function(field): functions = { 'cr': parse_xp, 'descriptor': parse_descriptor, 'hp': default_closure('hp'), 'acr': default_closure('acr'), 'dv': default_closure('dv'), 'om': default_closure('om'), 'special': default_closure('special'), 'speed': default_closure('speed'), 'consumption': default_closure('consumption'), 'tactics': default_closure('tactics'), 'note': default_closure('note'), 'resources': default_closure('resources'), } return functions[field.lower()]
def affliction_parse_function(field): functions = { 'type': parse_affliction_type, 'addiction': parse_addiction, 'price': default_closure('price'), 'damage': default_closure('damage'), 'save': default_closure('save'), 'frequency': default_closure('frequency'), 'effect': default_closure('effect'), 'effects': default_closure('effect'), 'cure': default_closure('cure'), 'onset': default_closure('onset'), 'initial effect': default_closure('initial_effect'), 'secondary effect': default_closure('secondary_effect'), } return functions[field.lower()]
def parse_creature_descriptor(creature, value): if value.startswith('AC'): default_closure('ac')(creature, value[2:]) return bsb = None if value.find('(but see below) ') > -1: value = value.replace('(but see below) ', '') bsb = " (but see below)" any_al = None if value.find('Any alignment (same as creator)') > -1: any_al = 'Any alignment (same as creator)' value = value.replace(any_al, 'Any') descsplit = value.split("(") if len(descsplit) > 1: value = descsplit.pop(0) subtype = ''.join(descsplit) subtype = subtype.replace(')', '') creature['creature_subtype'] = subtype values = value.split() if len(values) == 2: creature['alignment'] = values.pop(0) creature['creature_type'] = cap_words(values.pop(0)) elif len(values) >= 3: creature['alignment'] = values.pop(0) if any_al: creature['alignment'] = any_al if values[0] == 'alignment': creature['alignment'] = creature['alignment'] + " " + values.pop(0) if bsb: creature['alignment'] = creature['alignment'] + bsb if values[0] == 'or': alignment = creature['alignment'] alignment = alignment + " " + values.pop(0) alignment = alignment + " " + values.pop(0) creature['alignment'] = alignment creature['size'] = values.pop(0) creature['creature_type'] = cap_words(values.pop(0)) if len(values) > 0: if values[0] in ['beast', 'humanoid']: creature[ 'creature_type'] = creature['creature_type'] + " " + cap_words( values.pop(0)) if len(values) > 0: raise Exception('well f**k: %s' % (values))
def parse_creature_descriptor(creature, value): print "%s: %s" %(creature, value) if value.startswith('AC'): default_closure('ac')(creature, value[2:]) return bsb = None if value.find('(but see below) ') > -1: value = value.replace('(but see below) ', '') bsb = " (but see below)" any_al = None if value.find('Any alignment (same as creator)') > -1: any_al = 'Any alignment (same as creator)' value = value.replace(any_al, 'Any') descsplit = value.split("(") if len(descsplit) > 1: value = descsplit.pop(0) subtype = ''.join(descsplit) subtype = subtype.replace(')', '') creature['creature_subtype'] = subtype values = value.split() if len(values) == 2: creature['alignment'] = values.pop(0) creature['creature_type'] = cap_words(values.pop(0)) elif len(values) >= 3: creature['alignment'] = values.pop(0) if any_al: creature['alignment'] = any_al if values[0] == 'alignment': creature['alignment'] = creature['alignment'] + " " + values.pop(0) if bsb: creature['alignment'] = creature['alignment'] + bsb if values[0] == 'or': alignment = creature['alignment'] alignment = alignment + " " + values.pop(0) alignment = alignment + " " + values.pop(0) creature['alignment'] = alignment creature['size'] = values.pop(0) creature['creature_type'] = cap_words(values.pop(0)) if len(values) > 0: if values[0] in ['beast', 'humanoid']: creature['creature_type'] = creature['creature_type'] + \ " " + cap_words(values.pop(0)) if len(values) > 0: raise Exception('well f**k: %s' %(values))
def animal_companion_parse_function(field): functions = { 'ac': default_closure('ac'), 'cmd': default_closure('cmd'), 'attack': default_closure('attack'), 'ability scores': default_closure('ability_scores'), 'special qualities': default_closure('special_qualities'), 'special attacks': default_closure('special_attacks'), 'size': default_closure('size'), 'speed': default_closure('speed') } return functions[field.lower()]
def item_parse_function(field): functions = { 'aura': default_closure('aura'), 'cl': default_closure('cl'), 'slot': parse_item_slot, 'price': default_closure('price'), 'skill': default_closure('skill'), 'weight': default_closure('weight'), 'requirements': default_closure('requirements'), 'cr increase': default_closure('cr_increase'), 'cost': default_closure('cost'), } return functions[field.lower()]
def item_parse_function(field): functions = { "aura": default_closure("aura"), "cl": default_closure("cl"), "slot": parse_item_slot, "price": default_closure("price"), "skill": default_closure("skill"), "weight": default_closure("weight"), "requirements": default_closure("requirements"), "cr increase": default_closure("cr_increase"), "cost": default_closure("cost"), } return functions[field.lower()]
def trap_parse_function(field): functions = { 'type': default_closure('trap_type'), 'perception': default_closure('perception'), 'disable device': default_closure('disable_device'), 'duration': default_closure('duration'), 'effect': default_closure('effect'), 'trigger': default_closure('trigger'), 'reset': default_closure('reset'), } return functions[field.lower()]
def trap_parse_function(field): functions = { "type": default_closure("trap_type"), "perception": default_closure("perception"), "disable device": default_closure("disable_device"), "duration": default_closure("duration"), "effect": default_closure("effect"), "trigger": default_closure("trigger"), "reset": default_closure("reset"), } return functions[field.lower()]
def animal_companion_parse_function(field): functions = { 'ac': default_closure('ac'), 'attack': default_closure('attack'), 'ability scores': default_closure('ability_scores'), 'special qualities': default_closure('special_qualities'), 'special attacks': default_closure('special_attacks'), 'size': default_closure('size'), 'speed': default_closure('speed') } return functions[field.lower()]
def haunt_parse_function(field): functions = { 'xp': parse_xp, 'caster level': default_closure('caster_level'), 'notice': default_closure('notice'), 'hp': default_closure('hp'), 'trigger': default_closure('trigger'), 'reset': default_closure('reset'), 'effect': default_closure('effect'), 'destruction': default_closure('destruction'), } return functions[field.lower()]
def trap_parse_function(field): functions = { 'cr': parse_cr, 'type': default_closure('trap_type'), 'perception': default_closure('perception'), 'disable device': default_closure('disable_device'), 'duration': default_closure('duration'), 'effect': default_closure('effect'), 'trigger': default_closure('trigger'), 'reset': default_closure('reset'), } return functions[field.lower()]
def haunt_parse_function(field): functions = { "xp": parse_xp, "caster level": default_closure("caster_level"), "notice": default_closure("notice"), "hp": default_closure("hp"), "trigger": default_closure("trigger"), "reset": default_closure("reset"), "effect": default_closure("effect"), "destruction": default_closure("destruction"), } return functions[field.lower()]
def vehicle_parse_function(field): functions = { 'descriptor': parse_vehicle_descriptor, 'squares': default_closure('squares'), 'cost': default_closure('squares'), 'ac': default_closure('ac'), 'hardness': default_closure('hardness'), 'hp': default_closure('hp'), 'base save': default_closure('base_save'), 'maximum speed': default_closure('maximum_speed'), 'acceleration': default_closure('acceleration'), 'cmb': default_closure('cmb'), 'cmd': default_closure('cmd'), 'ramming damage': default_closure('ramming_damage'), 'propulsion': default_closure('propulsion'), 'driving check': default_closure('driving_check'), 'forward facing': default_closure('forward_facing'), 'driving device': default_closure('driving_device'), 'driving space': default_closure('driving_space'), 'decks': default_closure('decks'), 'deck': default_closure('decks'), 'weapons': default_closure('weapons'), 'crew': default_closure('crew'), 'passengers': default_closure('passengers'), } return functions[field.lower()]
def creature_parse_function(field): functions = { 'cr': parse_cr, 'size': default_closure('size'), 'hit dice': default_closure('hit_dice'), 'natural armor': default_closure('natural_armor'), 'breath weapon': default_closure('breath_weapon'), 'init': default_closure('init'), 'senses': default_closure('senses'), 'perception': perception_fix, 'aura': default_closure('aura'), 'ac': default_closure('ac'), 'hp': default_closure('hp'), 'fort': default_closure('fortitude'), 'ref': default_closure('reflex'), 'will': default_closure('will'), 'defensive abilities': default_closure('defensive_abilities'), 'defensive ability': default_closure('defensive_abilities'), 'dr': default_closure('dr'), 'immune': default_closure('immune'), 'resist': default_closure('resist'), 'sr': default_closure('sr'), 'weaknesses': default_closure('weaknesses'), 'vulnerability': default_closure('weaknesses'), 'weakness': default_closure('weaknesses'), 'sq': default_closure('special_qualities'), 'special qualities': default_closure('special_qualities'), 'speed': default_closure('speed'), 'melee': default_closure('melee'), 'ranged': default_closure('ranged'), 'special attacks': default_closure('special_attacks'), 'special attack': default_closure('special_attacks'), 'attacks': default_closure('special_attacks'), 'spell-like abilities': creature_spell_closure('spell-like abilities'), 'spell-lilke abilities': creature_spell_closure('spell-like abilities'), 'spell-like ability': creature_spell_closure('spell-like abilities'), 'bloodline spell-like ability': creature_spell_closure('bloodline spell-like ability'), 'bloodline spell-like abilities': creature_spell_closure('bloodline spell-like abilities'), 'bloodline': creature_spell_closure('bloodline'), 'arcane spell-like abilities': creature_spell_closure('arcane spell-like abilities'), 'arcane school spell-like abilities': creature_spell_closure('arcane school spell-like abilities'), 'domain spell-like abilities': creature_spell_closure('domain spell-like abilities'), 'ifrit spell-like abilities': creature_spell_closure('ifrit spell-like abilities'), 'gnome spell-like abilities': creature_spell_closure('gnome spell-like abilities'), 'sorcerer spell-like abilities': creature_spell_closure('sorcerer spell-like abilities'), 'paladin spell-like abilities': creature_spell_closure('paladin spell-like abilities'), 'rogue spell-like abilities': creature_spell_closure('rogue spell-like abilities'), 'conjurer spell-like abilities': creature_spell_closure('conjurer spell-like abilities'), 'transmuter spell-like abilities': creature_spell_closure('transmuter spell-like abilities'), 'enchanter spell-like abilities': creature_spell_closure('enchanter spell-like abilities'), 'evoker spell-like abilities': creature_spell_closure('evoker spell-like abilities'), 'dragon disciple spell-like abilities': creature_spell_closure('dragon disciple spell-like abilities'), 'shadowdancer spell-like abilities': creature_spell_closure('shadowdancer spell-like abilities'), 'spells prepared': creature_spell_closure('spells prepared'), 'adept spells prepared': creature_spell_closure('adept spells prepared'), 'bard spells prepared': creature_spell_closure('bard spells prepared'), 'cleric spells prepared': creature_spell_closure('cleric spells prepared'), 'conjurer spells prepared': creature_spell_closure('conjurer spells prepared'), 'druid spells prepared': creature_spell_closure('druid spells prepared'), 'paladin spells prepared': creature_spell_closure('paladin spells prepared'), 'ranger spells prepared': creature_spell_closure('ranger spells prepared'), 'witch spells prepared': creature_spell_closure('witch spells prepared'), 'wizard spells prepared': creature_spell_closure('wizard spells prepared'), 'necromancer spells prepared': creature_spell_closure('necromancer spells prepared'), 'enchanter spells prepared': creature_spell_closure('enchanter spells prepared'), 'diviner spells prepared': creature_spell_closure('diviner spells prepared'), 'transmuter spells prepared': creature_spell_closure('transmuter spells prepared'), 'evoker spells prepared': creature_spell_closure('evoker spells prepared'), 'illusionist spells prepared': creature_spell_closure('illusionist spells prepared'), 'abjurer spells prepared': creature_spell_closure('abjurer spells prepared'), 'spells known': creature_spell_closure('spells known'), 'bard spells known': creature_spell_closure('bard spells known'), 'sorcerer spells known': creature_spell_closure('sorcerer spells known'), 'opposition schools': creature_spell_closure('opposition schools'), 'prohibited schools': creature_spell_closure('prohibited schools'), 'd': creature_spell_closure('d'), 'domains': creature_spell_closure('domains'), 'str': default_closure('strength'), 'dex': default_closure('dexterity'), 'con': default_closure('constitution'), 'int': default_closure('intelligence'), 'wis': default_closure('wisdom'), 'cha': default_closure('charisma'), 'base atk': default_closure('base_attack'), 'atk': default_closure('base_attack'), 'cmb': default_closure('cmb'), 'cmd': default_closure('cmd'), 'feats': default_closure('feats'), 'skills': default_closure('skills'), 'racial modifiers': default_closure('racial_modifiers'), 'racial modifier': default_closure('racial_modifiers'), 'languages': default_closure('languages'), 'language': default_closure('languages'), 'gear': default_closure('gear'), 'combat gear': default_closure('combat_gear'), 'other gear': default_closure('other_gear'), 'boon': default_closure('boon'), 'space': default_closure('space'), 'reach': default_closure('reach'), 'environment': default_closure('environment'), 'environment any': parse_broken_environment, 'organization': default_closure('organization'), 'treasure': default_closure('treasure'), 'base': noop, 'special': noop, 'descriptor': parse_creature_descriptor } if field.lower().startswith('xp'): return xp_closure('field') return functions[field.lower()]
def mythic_spell_parse_function(field): functions = { 'source': default_closure('spell_source'), } return functions[field.lower()]
def talent_parse_function(field): functions = { 'element': default_closure('element'), 'elements': default_closure('elements'), 'type': default_closure('talent_type'), 'level': default_closure('level'), 'burn': default_closure('burn'), 'blast type': default_closure('blast_type'), 'damage': default_closure('damage'), 'prerequisite': default_closure('prerequisites'), 'prerequisites': default_closure('prerequisites'), 'associated blasts': default_closure('associated_blasts'), 'saving throw': default_closure('saving_throw'), 'spell resistance': default_closure('spell resistance'), '': default_closure(''), } return functions[field.lower()]
def creature_parse_function(field): functions = { 'init': default_closure('init'), 'senses': default_closure('senses'), 'perception': perception_fix, 'aura': default_closure('aura'), 'ac': default_closure('ac'), 'hp': default_closure('hp'), 'fort': default_closure('fortitude'), 'ref': default_closure('reflex'), 'will': default_closure('will'), 'defensive abilities': default_closure('defensive_abilities'), 'defensive ability': default_closure('defensive_abilities'), 'dr': default_closure('dr'), 'immune': default_closure('immune'), 'resist': default_closure('resist'), 'sr': default_closure('sr'), 'weaknesses': default_closure('weaknesses'), 'vulnerability': default_closure('weaknesses'), 'weakness': default_closure('weaknesses'), 'sq': default_closure('special_qualities'), 'special qualities': default_closure('special_qualities'), 'speed': default_closure('speed'), 'melee': default_closure('melee'), 'ranged': default_closure('ranged'), 'special attacks': default_closure('special_attacks'), 'special attack': default_closure('special_attacks'), 'attacks': default_closure('special_attacks'), 'spell-like abilities': creature_spell_closure('spell-like abilities'), 'spell-lilke abilities': creature_spell_closure('spell-like abilities'), 'spell-like ability': creature_spell_closure('spell-like abilities'), 'bloodline spell-like ability': creature_spell_closure('bloodline spell-like ability'), 'ifrit spell-like abilities': creature_spell_closure('ifrit spell-like abilities'), 'arcane school spell-like abilities': creature_spell_closure('arcane school spell-like abilities'), 'spells prepared': creature_spell_closure('spells prepared'), 'cleric spells prepared': creature_spell_closure('cleric spells prepared'), 'ranger spells prepared': creature_spell_closure('ranger spells prepared'), 'witch spells prepared': creature_spell_closure('witch spells prepared'), 'spells known': creature_spell_closure('spells known'), 'sorcerer spells known': creature_spell_closure('sorcerer spells known'), 'opposition schools': creature_spell_closure('opposition schools'), 'd': creature_spell_closure('d'), 'domains': creature_spell_closure('domains'), 'domain spell-like abilities': creature_spell_closure('domain spell-like abilities'), 'conjurer spells prepared': creature_spell_closure('conjurer spells prepared'), 'sorcerer spell-like abilities': creature_spell_closure('sorcerer spell-like abilities'), 'bloodline': creature_spell_closure('bloodline'), 'str': default_closure('strength'), 'dex': default_closure('dexterity'), 'con': default_closure('constitution'), 'int': default_closure('intelligence'), 'wis': default_closure('wisdom'), 'cha': default_closure('charisma'), 'base atk': default_closure('base_attack'), 'atk': default_closure('base_attack'), 'cmb': default_closure('cmb'), 'cmd': default_closure('cmd'), 'feats': default_closure('feats'), 'skills': default_closure('skills'), 'racial modifiers': default_closure('racial_modifiers'), 'racial modifier': default_closure('racial_modifiers'), 'languages': default_closure('languages'), 'language': default_closure('languages'), 'gear': default_closure('gear'), 'space': default_closure('space'), 'reach': default_closure('reach'), 'environment': default_closure('environment'), 'environment any': parse_broken_environment, 'organization': default_closure('organization'), 'treasure': default_closure('treasure'), 'base': noop, 'special': noop, 'descriptor': parse_creature_descriptor } if field.lower().startswith('xp'): return xp_closure('field') return functions[field.lower()]
def resource_parse_function(field): functions = { 'benefit': default_closure('benefit'), 'create': default_closure('create'), 'earnings': default_closure('earnings'), 'rooms': default_closure('rooms'), 'size': default_closure('size'), 'skills': default_closure('skills'), 'teams': default_closure('teams'), 'time': default_closure('time'), 'upgrades from': default_closure('upgrade_from'), 'upgrade from': default_closure('upgrade_from'), 'upgrades to': default_closure('upgrade_to'), 'upgrade to': default_closure('upgrade_to'), 'wage': default_closure('wage'), } return functions[field.lower()]
def settlement_parse_function(field): functions = { 'descriptor': parse_settlement_descriptor, 'corruption': default_closure('corruption'), 'crime': default_closure('crime'), 'economy': default_closure('economy'), 'law': default_closure('law'), 'lore': default_closure('lore'), 'society': default_closure('society'), 'qualities': default_closure('qualities'), 'danger': default_closure('danger'), 'disadvantages': default_closure('disadvantages'), 'government': default_closure('government'), 'population': default_closure('population'), 'notable npcs': noop, 'base value': default_closure('base_value'), 'purchase limit': default_closure('purchase_limit'), 'spellcasting': default_closure('spellcasting'), 'minor items': default_closure('minor_items'), 'medium items': default_closure('medium_items'), 'major items': default_closure('major_items'), } return functions[field.lower()]