def load_monster(self, doc): color = doc.get('color', None) if color is None: color = libtcod.red elif hasattr(color, 'upper'): color = getattr(libtcod, color) else: color = libtcod.Color(*color) ai_class = doc.get('ai_class', BasicMonster) cls_data = {} if ai_class is not BasicMonster: cls_data = {} if hasattr(ai_class, 'items'): nm = ai_class.pop('class_name', 'monsters.BasicMonster') cls_data.update(ai_class) ai_class = nm module, clas = ai_class.rsplit('.',1) module = __import__(module) ai_class = getattr(module, clas) death_func = getattr(ai_class, 'death', monster_death) print 'loading', doc Game.register_monster_type( (lambda doc: lambda map,level,con,x,y: objects.Object( map, con, x,y, doc['char'], doc.get('name_fmt', '%s the %s') % ( libtcod.namegen_generate(doc['namegen_class']).capitalize(), doc['race_name'].capitalize() ), color, True, fighter=objects.Fighter( hp=doc['hp'], defense=doc['defense'], power=doc['power'], death_function=death_func ), ai=ai_class().load_data(cls_data), level=level ) )(doc), doc['spawn_chance'])
fighter=objects.Fighter( hp=doc['hp'], defense=doc['defense'], power=doc['power'], death_function=death_func ), ai=ai_class().load_data(cls_data), level=level ) )(doc), doc['spawn_chance']) Game.register_monster_type( lambda map,level, con,x,y: objects.Object(map, con, x,y, '\x02', '%s the Orc' % libtcod.namegen_generate('Fantasy male'), libtcod.blue, True, fighter=objects.Fighter(hp=10, defense=2, power=3, death_function=monster_death), ai=AdvancedMonster(), level=level ), 8) Game.register_monster_type( lambda map,level, con,x,y: objects.Object(map, con, x,y, '\x01', '%s the Troll' % libtcod.namegen_generate('Norse male'), libtcod.orange, True, fighter=objects.Fighter(hp=16, defense=1, power=4, death_function=monster_death), ai=AdvancedMonster(), level=level ), 2)