def choose_easy_monster(monster_choice, dungeon_level, x, y):
	orc = 272
	gnoll = 273
	troll = 274
	orc_battle_master = 286


	if monster_choice == 'gnoll':
		class_component = Fighter(hp=20+(dungeon_level), mp=0, armor=0, min_damage=0,
									max_damage=2+(dungeon_level-1), xp=20+(2*(dungeon_level-1)))
		ai_component = BasicMonster()

		monster = Entity(x, y, gnoll, libtcod.desaturated_green, 'Gnoll', monster=True, alive=True, aggro=False, blocks=True,
						 render_order=RenderOrder.ACTOR, combat_class=class_component, ai=ai_component)

	elif monster_choice == 'orc':
		class_component = Fighter(hp=20+(2*dungeon_level-1), mp=0, armor=0, min_damage=0,
									max_damage=3+(dungeon_level-1), xp=35+(5*(dungeon_level-1)))
		ai_component = BasicMonster()

		monster = Entity(x, y, orc, libtcod.desaturated_green, 'Orc', monster=True, alive=True, aggro=False, blocks=True,
						 render_order=RenderOrder.ACTOR, combat_class=class_component, ai=ai_component)
	elif monster_choice == 'troll':
		class_component = Fighter(hp=30+(2*dungeon_level-1), mp=0, armor=3, min_damage=0,
									max_damage=4+(dungeon_level-1), xp=100+(5*(dungeon_level-1)))
		ai_component = BasicMonster()

		monster = Entity(x, y, troll, libtcod.darker_green, 'Troll', monster=True, alive=True, aggro=False, blocks=True, combat_class=class_component,
						 render_order=RenderOrder.ACTOR, ai=ai_component)


	return monster
Ejemplo n.º 2
0
    def place_entities(self, room, entities, max_monsters_per_room, max_items_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)

        # Get a random number of items
        number_of_items = randint(0, max_items_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(8,32)
            y = randint(7,31)

            # Check if an entity is already in that location
            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 4, 'o', libtcod.yellow, 'Orc', blocks=True,
                                     render_order=RenderOrder.ACTOR, strength=4, fighter=fighter_component, ai=ai_component)
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 4, 'T', libtcod.cyan, 'Troll', blocks=True, fighter=fighter_component,
                                     render_order=RenderOrder.ACTOR, strength=10, ai=ai_component)

                entities.append(monster)

        '''
Ejemplo n.º 3
0
    def place_entities(self, room, entities, max_monsters_per_room):
        """ places a random number of monsters in each room """
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.position_x == x and entity.position_y == y]):
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'o', libtcod.desaturated_green, 'Orc', blocks=True,
                                     render_order=RenderOrder.ACTOR, fighter=fighter_component, ai=ai_component)
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()
                    
                    monster = Entity(x, y, 'T', libtcod.darker_green, 'Troll', blocks=True, fighter=fighter_component,
                                     render_order=RenderOrder.ACTOR, ai=ai_component)

                entities.append(monster)
Ejemplo n.º 4
0
    def place_entities(self, room, entities, max_monsters_per_room,
                       max_items_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)
        number_of_items = randint(0, max_items_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()
                    monster = Entity(x,
                                     y,
                                     'o',
                                     libtcod.desaturated_green,
                                     "Orc",
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()
                    monster = Entity(x,
                                     y,
                                     'T',
                                     libtcod.darker_green,
                                     "Troll",
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)

                entities.append(monster)

        for i in range(number_of_items):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                item_component = Item(use_function=heal, amount=4)
                item = Entity(x,
                              y,
                              "!",
                              libtcod.violet,
                              "Healing Potion",
                              render_order=RenderOrder.ITEM,
                              item=item_component)

                entities.append(item)
Ejemplo n.º 5
0
 def place_entities(self, room, entities, max_monsters_per_room):
     number_of_monsters = randint(0, max_monsters_per_room)
     for i in range(number_of_monsters):
         x = randint(room.x1 + 1, room.x2 - 1)
         y = randint(room.y1 + 1, room.y2 - 1)
         if not any([
                 entity
                 for entity in entities if entity.x == x and entity.y == y
         ]):
             if randint(0, 100) < 80:
                 fighter_component = Fighter(hp=10, defense=0, power=3)
                 ai_component = BasicMonster()
                 monster = Entity(x,
                                  y,
                                  'o',
                                  libtcod.desaturated_green,
                                  'Orc',
                                  blocks=True,
                                  fighter=fighter_component,
                                  ai=ai_component)
             else:
                 fighter_component = Fighter(hp=16, defense=1, power=4)
                 ai_component = BasicMonster()
                 monster = Entity(x,
                                  y,
                                  'Y',
                                  libtcod.darker_green,
                                  'Troll',
                                  blocks=True,
                                  fighter=fighter_component,
                                  ai=ai_component)
             entities.append(monster)
Ejemplo n.º 6
0
def create_entity(x , y, monster_choice):
    if monster_choice == 'orc':
        fighter_component = Fighter(hp=20, defense=0, power=4, xp=35)
        ai_component = BasicMonster()
        monster = Entity(x, y, 'o', libtcod.desaturated_green, 'Orc', blocks=True, render_order=RenderOrder.ACTOR,
                         fighter=fighter_component, ai=ai_component)
    elif monster_choice == 'troll':
        fighter_component = Fighter(hp=30, defense=2, power=8, xp=100)
        ai_component = BasicMonster()
        monster = Entity(x, y, 'T', libtcod.darker_green, 'Troll', blocks=True, render_order=RenderOrder.ACTOR,
                         fighter=fighter_component,
                         ai=ai_component)
    elif monster_choice == 'bat':
        fighter_component = Fighter(hp=10, defense=1, power=2, xp=10)
        ai_component = BasicMonster()
        monster = Entity(x, y, 'b', libtcod.darker_gray, 'Bat', blocks=True, render_order=RenderOrder.ACTOR,
                         fighter=fighter_component,
                         ai=ai_component)
    elif monster_choice == 'goblin':
        fighter_component = Fighter(hp=30, defense=2, power=3, xp=50)
        ai_component = BasicMonster()
        monster = Entity(x, y, 'g', libtcod.green, 'Goblin', blocks=True, render_order=RenderOrder.ACTOR,
                         fighter=fighter_component,
                         ai=ai_component)

    else:
        fighter_component = Fighter(hp=1, defense=1, power=1, xp=1)
        ai_component = BasicMonster()
        monster = Entity(x, y, '^', libtcod.darker_magenta, 'Figment', blocks=True, render_order=RenderOrder.ACTOR,
                         fighter=fighter_component,
                         ai=ai_component)
    return monster
Ejemplo n.º 7
0
def place_entities(room, entities, max_monsters_per_room, colors):
    # Get a random number of monsters.
    number_of_monsters = randint(0, max_monsters_per_room)

    for i in range(number_of_monsters):
        # Choose a random location in the room.
        x = randint(room.x1 + 1, room.x2 - 1)
        y = randint(room.y1 + 1, room.y2 - 1)

        if not any(
            [entity
             for entity in entities if entity.x == x and entity.y == y]):
            if randint(0, 100) < 80:
                fighter_component = Fighter(hp=10, defense=0, power=3)
                ai_component = BasicMonster()
                monster = Entity(x, y, 'o', colors.get('desaturated_green'), \
                                 'Orc', blocks=True, render_order=RenderOrder.ACTOR, fighter=fighter_component, \
                                 ai=ai_component)
            else:
                fighter_component = Fighter(hp=16, defense=1, power=4)
                ai_component = BasicMonster()
                monster = Entity(x, y, 'T', colors.get('darker_green'), \
                                 'Troll', blocks=True, render_order=RenderOrder.ACTOR, fighter=fighter_component, \
                                 ai=ai_component)
            entities.append(monster)
Ejemplo n.º 8
0
    def place_entities(self, room, entities, max_monsters_per_room,
                       max_items_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)
        number_of_items = randint(0, max_items_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                if randint(0, 100) < 80:
                    orc = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'o',
                                     libtcod.desaturated_green,
                                     'Orc',
                                     blocks=True,
                                     fighter=orc,
                                     ai=ai_component,
                                     render_order=RenderOrder.ACTOR)
                else:
                    troll = Fighter(30, 3, 10)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'T',
                                     libtcod.darker_green,
                                     'Troll',
                                     blocks=True,
                                     fighter=troll,
                                     ai=ai_component,
                                     render_order=RenderOrder.ACTOR)

                entities.append(monster)

        for i in range(number_of_items):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                item = Entity(x,
                              y,
                              '!',
                              libtcod.violet,
                              'Healing Potion',
                              render_order=RenderOrder.ITEM)

                entities.append(item)
Ejemplo n.º 9
0
    def place_entities(self, room, entities, max_monsters_per_room, max_items_per_room):
        number_of_monsters = randint(0, max_monsters_per_room) # generates a random no. monsters between these bounds
        number_of_items = randint(0, max_items_per_room)

        for i in range(number_of_monsters): # chooses a random location in the room to spawn each monster below
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            """ Creating the monsters"""
            if not any([entity for entity in entities if entity.x == x and entity.y == y]): # checking no overlap for placement of entities
                if randint(0, 100) < 80:  # used to determine the frequency of diff enemies appearing, 80% chance here it's an 'o'
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'o', libtcod.desaturated_chartreuse, 'Orc', blocks = True,
                                     render_order=RenderOrder.ACTOR, fighter = fighter_component, ai = ai_component) # calls the Entity class
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'T', libtcod.darker_green, 'Troll', blocks = True,
                                     render_order=RenderOrder.ACTOR, fighter = fighter_component, ai = ai_component)

                entities.append(monster)

        """Creating the items"""
        for i in range(number_of_items):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                item_chance = randint(0, 100)

                if item_chance < 70:
                    item_component = Item(use_function=heal, amount=4)
                    item = Entity(x, y, '!', libtcod.violet, 'Healing Potion', render_order=RenderOrder.ITEM,
                                  item=item_component)

                elif item_chance < 80:
                    item_component = Item(use_function=cast_fireball, targeting=True, targeting_message=Message(
                        'Left-click a target tile for the fireball, or right-click to cancel.', libtcod.light_cyan),
                                          damage=12, radius=3)
                    item = Entity(x, y, '#', libtcod.red, 'Fireball Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)

                elif item_chance < 90:
                    item_component = Item(use_function=cast_confuse, targeting=True, targeting_message=Message(
                        'Left-click an enemy to confuse it, or right-click to cancel.', libtcod.light_cyan))
                    item = Entity(x, y, '#', libtcod.light_pink, 'Confusion Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)

                else:
                    item_component = Item(use_function=cast_lightning, damage=20, maximum_range=5)
                    item = Entity(x, y, '#', libtcod.yellow, 'Lightning Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)

                entities.append(item)
Ejemplo n.º 10
0
    def place_entities(self, room, entities, max_monsters_per_room, max_items_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)
        number_of_items = randint(0, max_items_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'o', libtcod.desaturated_green, 'Orc', blocks=True,
                                     render_order=RenderOrder.ACTOR, fighter=fighter_component, ai=ai_component)
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'T', libtcod.darker_green, 'Troll', blocks=True, fighter=fighter_component,
                                     render_order=RenderOrder.ACTOR, ai=ai_component)

                entities.append(monster)

        for i in range(number_of_items):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                item_chance = randint(0, 100)

                if item_chance < 70:
                    item_component = Item(use_function=heal, amount=4)
                    item = Entity(x, y, '!', libtcod.violet, 'Healing Potion', render_order=RenderOrder.ITEM,
                                  item=item_component)
                elif item_chance < 80:
                    item_component = Item(use_function=cast_fireball, targeting=True, targeting_message=Message(
                        'Left-click a target tile for the fireball, or right-click to cancel.', libtcod.light_cyan),
                                          damage=12, radius=3)
                    item = Entity(x, y, '#', libtcod.red, 'Fireball Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)
                elif item_chance < 90:
                    item_component = Item(use_function=cast_confuse, targeting=True, targeting_message=Message(
                        'Left-click an enemy to confuse it, or right-click to cancel.', libtcod.light_cyan))
                    item = Entity(x, y, '#', libtcod.light_pink, 'Confusion Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)
                else:
                    item_component = Item(use_function=cast_lightning, damage=20, maximum_range=5)
                    item = Entity(x, y, '#', libtcod.yellow, 'Lightning Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)
                entities.append(item)
Ejemplo n.º 11
0
    def place_entities(self, room, entities, max_monsters_per_room, max_items_per_room):
        number_of_monsters = randint(0, max_monsters_per_room)
        number_of_items = randint(0, max_items_per_room)
            ############################################################################################# enbbemy spawning
        for i in range(number_of_monsters):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == x and entity.y == y ]): # what the  F**K is with this syntax (it's looking to see if there are any entities in that spot)
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp = 10, defense = 0, power = 3)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'o', libtcod.desaturated_green, 'orc', blocks=True,render_order = RenderOrder.ACTOR, fighter=fighter_component, ai = ai_component) # makes mostly orcs
                else: 
                    fighter_component = Fighter(hp = 16, defense = 1, power = 4)
                    ai_component = BasicMonster()
                    monster = Entity(x, y, 'T', libtcod.darker_green, 'troll', blocks=True,render_order = RenderOrder.ACTOR, fighter=fighter_component, ai = ai_component) #sometimes trolls
                entities.append(monster) #adds monster to the list of entities
#####################   ITEM GENERATION   ###############################################################################
        for i in range(number_of_items):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)
            if not any([entity for entity in entities if entity.x == x and entity.y == y ]):
                item_chance = randint(0, 100) ### this is where the type of item is determined. sub-type is per item
# 00-70
                if item_chance >= 0 and item_chance <= 30: #################################################################################################################################
#      potions
                    type_chance = randint(0,100) ## kind of potion that spanws
                ## 00-100 lesser healing pot
                    if type_chance >= 0 and type_chance <= 100: 
                        item_component = Item(use_function=heal, amount=4)
                        item = Entity(x,y,'!', libtcod.violet, 'Lesser Healing Potion', render_order =RenderOrder.ITEM, item=item_component)
# 71-100
                else:
#      scrolls
                    type_chance = randint(0,100)
                ## 00-60 Minor lightning
                    if type_chance >= 0 and type_chance <= 60: 
                        item_component = Item(use_function=cast_lightning, damage=20, maximum_range=5)
                        item = Entity(x,y,'#', libtcod.light_yellow, 'Scroll of Minor Lightning', render_order =RenderOrder.ITEM, item=item_component)
                ## 61-80 Minor Fireball
                    if type_chance >= 61 and type_chance <= 80: 
                        item_component = Item(use_function=cast_fireball,targeting=True,targeting_message=Message('Left click to target a tile, right click to canel', libtcod.light_cyan), damage=12, radius =3)
                        item = Entity(x,y,'#', libtcod.light_red, 'Scroll of Minor Fireball', render_order =RenderOrder.ITEM, item=item_component)
                ## 81-100 Minor Fireball
                    if type_chance >= 81 and type_chance <= 100: 
                        item_component = Item(use_function=cast_confuse,targeting=True,targeting_message=Message('Left click to target a tile, right click to canel', libtcod.light_cyan), duration = 10)
                        item = Entity(x,y,'#', libtcod.light_blue, 'Scroll of Momentary Confusion', render_order =RenderOrder.ITEM, item=item_component)
                entities.append(item)
Ejemplo n.º 12
0
def spawn_ogre(x, y):
    monster = Entity(x, y, render_order=RenderOrder.ACTOR, components={
        'ai': BasicMonster(),
        'fighter': Fighter(hp=25, defense=1, power=6, xp=75),
    })
    monster.set_appearance('O', tcod.desaturated_green, "Ogre")
    return monster
Ejemplo n.º 13
0
def spawn_troll(x, y):
    monster = Entity(x, y, render_order=RenderOrder.ACTOR, components={
        'ai': BasicMonster(),
        'fighter': Fighter(hp=30, defense=2, power=8, xp=100),
    })
    monster.set_appearance('T', tcod.darker_green, "Troll")
    return monster
Ejemplo n.º 14
0
def spawn_dragon(x, y):
    monster = Entity(x, y, render_order=RenderOrder.ACTOR, components={
        'ai': BasicMonster(),
        'fighter': Fighter(hp=35, defense=4, power=12, xp=300),
    })
    monster.set_appearance('D', tcod.light_flame, "Red Dragon")
    return monster
Ejemplo n.º 15
0
def spawn_orc(x, y):
    monster = Entity(x, y, render_order=RenderOrder.ACTOR, components={
        'ai': BasicMonster(),
        'fighter': Fighter(hp=20, defense=0, power=4, xp=35),
    })
    monster.set_appearance('o', tcod.desaturated_green, "Orc")
    return monster
Ejemplo n.º 16
0
def create_naked_mole_rat_queen(x, y):
    chance = -1
    while chance < 0:
        chance = 0
        for i in range(6):
            chance += randint(1, 10)
        chance -= 30
    hp = 30 + chance
    defense = 2
    power = int(hp / 10)
    xp = calculate_xp(hp, defense, power)
    fighter_component = Fighter(hp, defense, power, xp)
    ai_component = BasicMonster()
    if hp == 30:
        name = 'Perfect Dire Naked Mole Rate Queen'
    elif hp >= 20:
        name = 'Dire Naked Mole Rat Queen'
    else:
        name = 'Naked Mole Rat Queen'

    return Entity(x,
                  y,
                  'n',
                  libtcod.sepia,
                  name,
                  blocks=True,
                  render_order=RenderOrder.ACTOR,
                  fighter=fighter_component,
                  ai=ai_component)
Ejemplo n.º 17
0
    def create_monster_entity(self, x, y, entity_data, equipment=None):
        """
        Create a monster entity at specific coordinates on the game map.

        Monster can have equipment (none by default).
        """
        fighter_component = Fighter(**entity_data['kwargs'])
        ai_component = BasicMonster()
        inventory_component = None
        equipment_component = None

        if equipment:
                inventory_component = Inventory((len(equipment)))
                equipment_component = Equipment()

        char, color, name = entity_data['entity_args']

        monster_entity = Entity(x, y, char, color, name, blocks=True,
                                render_order=RenderOrder.ACTOR, fighter=fighter_component,
                                ai=ai_component, inventory=inventory_component, equipment=equipment_component, description=entity_data['description'])

        if equipment:
            for item in equipment:
                equipment = self.create_item_entity(x, y, item, is_equippable=True)
                monster_entity.inventory.add_item(equipment)
                monster_entity.equipment.toggle_equip(equipment)

        return monster_entity
Ejemplo n.º 18
0
def spawn_kobold(x, y):
    monster = Entity(x, y, render_order=RenderOrder.ACTOR, components={
        'ai': BasicMonster(),
        'fighter': Fighter(hp=10, defense=0, power=3, xp=25),
    })
    monster.set_appearance('k', tcod.desaturated_green, "Kobold")
    return monster
Ejemplo n.º 19
0
def spawn_orc(*args, **kwargs):
    entities = kwargs.get("entities")
    target_x = kwargs.get("target_x")
    target_y = kwargs.get("target_y")

    fighter_component = Fighter(hp=20, defense=0, power=4, speed=150, xp=35)
    ai_component = BasicMonster()
    orc = Entity([],
                 target_x,
                 target_y,
                 'o',
                 libtcod.desaturated_green,
                 'Orc',
                 blocks=True,
                 render_order=RenderOrder.ACTOR,
                 fighter=fighter_component,
                 ai=ai_component)

    entities.append(orc)

    results = []
    results.append({
        "consumed":
        False,
        "message":
        Message("A conjured orc springs into the room!", libtcod.yellow),
    })

    return results
Ejemplo n.º 20
0
    def place_entities(self, room, entities, max_monsters_per_room, max_items_per_room):
        number_of_monsters = randint(0, max_monsters_per_room)
        number_of_items = randint(0, max_items_per_room)

        # Monsters
        for i in range(number_of_monsters):
            rand_x = randint(room.x1 + 1, room.x2 - 1)
            rand_y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == rand_x and entity.y == rand_y]):
                if randint(0, 100) < 80:
                    o_f_comp = Fighter(10, 0, 3)
                    o_ai_comp = BasicMonster()
                    monster = Entity(rand_x, rand_y, 'o', libtcod.desaturated_green, 'Orc', True, RenderOrder.ACTOR, o_f_comp, o_ai_comp)
                else:
                    t_f_comp = Fighter(16, 1, 4)
                    t_ai_comp = BasicMonster()
                    monster = Entity(rand_x, rand_y, 'T', libtcod.darker_green, 'Troll', True, RenderOrder.ACTOR, t_f_comp, t_ai_comp)

                entities.append(monster)

        # Items
        for i in range(number_of_items):
            rand_x = randint(room.x1 + 1, room.x2 - 1)
            rand_y = randint(room.y1 + 1, room.y2 - 1)
            if not any([entity for entity in entities if entity.x == rand_x and entity.y == rand_y]):
                item_chance = randint(0, 100)

                if item_chance < 60:
                    item_heal_comp = Item(use_function=itm_heal, amount=4)
                    item = Entity(rand_x, rand_y, '!', libtcod.violet, 'Healing Potion', render_order = RenderOrder.ITEM, item=item_heal_comp)
                elif item_chance < 75:
                    item_component = Item(use_function=cast_fireball, targeting=True, targeting_message=Message(
                        'Left-click a target tile for the fireball, or right-click to cancel.', libtcod.light_cyan),
                                          damage=12, radius=3)
                    item = Entity(rand_x, rand_y, '#', libtcod.red, 'Fireball Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)
                elif item_chance < 90:
                    item_component = Item(use_function=cast_confusion, targeting=True, targeting_message=Message(
                        'Left-click an enemy to confuse it, or right-click to cancel.', libtcod.light_cyan))
                    item = Entity(rand_x, rand_y, '#', libtcod.light_pink, 'Confusion Scroll', render_order=RenderOrder.ITEM,
                                  item=item_component)
                else:
                    item_scroll_lightning_comp = Item(use_function=cast_lightning, damage=20, maximum_range=5)
                    item = Entity(rand_x, rand_y, '#', libtcod.yellow, 'Lightning Scroll', render_order = RenderOrder.ITEM, item=item_scroll_lightning_comp)

                entities.append(item)
Ejemplo n.º 21
0
    def place_monsters(self, room, entities, max_monsters_per_room):
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            x,y = room.random_point()

            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                if randint(0, 100) < 80:
                    combat_component = Combat(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x, y, 'o', libtcod.desaturated_green, 'Orc', blocks=True, render_order = RenderOrder.ACTOR, combat=combat_component, ai=ai_component)
                else:
                    combat_component = Combat(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()
                    monster = Entity(x, y, 'T', libtcod.darker_green, 'Troll', blocks=True, render_order = RenderOrder.ACTOR, combat=combat_component, ai=ai_component)

                entities.append(monster)
Ejemplo n.º 22
0
    def place_entities(self, room, entities, max_monsters, max_items):
        # Get random number for monsters
        num_monsters = randint(0, max_monsters)
        num_items = randint(0, max_items)

        for i in range(num_monsters):
            # Pick a random location in the room
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 +1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                if randint(0, 100) < 80:
                    fighter_comp = Fighter(hp=10, defense=0, power=3)
                    ai_comp = BasicMonster()

                    monster = Entity(x, y, 'O', libtcod.desaturated_green, 'Orc', blocks=True,
                                     render_order=RenderOrder.ACTOR, fighter=fighter_comp, ai=ai_comp)
                else:
                    fighter_comp = Fighter(hp=16, defense=1, power=4)
                    ai_comp = BasicMonster()

                    monster = Entity(x, y, 'T', libtcod.darker_green, 'Troll', blocks=True,
                                     render_order=RenderOrder.ACTOR, fighter=fighter_comp, ai=ai_comp)
                entities.append(monster)

        for i in range(num_items):
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([entity for entity in entities if entity.x == x and entity.y == y]):
                item_chance = randint(0, 100)

                if item_chance < 70:
                    item_comp = Item(use_function=heal, amount=4)
                    item = Entity(x, y, '!', libtcod.violet, 'Healing Potion',
                                  render_order=RenderOrder.ITEM, item=item_comp)

                else:
                    item_comp = Item(use_function=lightning_attack, damage=20, max_range=5)
                    item = Entity(x, y, '#', libtcod.Color(255, 255, 0), 'Lightning Scroll', render_order=RenderOrder.ITEM,
                                  item=item_comp)

                entities.append(item)
Ejemplo n.º 23
0
    def place_entities(self, room, entities, max_monsters_per_room):
        #Get a random numbers of Monster
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            #choose a random location in the room
            x = randint(room.x1 + 1, room.x2 -
                        1)  # -1 because entity will be in area of wall if not
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                if randint(0, 100) < 50:
                    fighter_component = Fighter(hp=25, defense=1, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     "S",
                                     libtcod.yellow,
                                     "Snotling",
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)

                else:

                    fighter_component = Fighter(hp=40, defense=3, power=4)
                    ai_component = BasicMonster()
                    monster = Entity(x,
                                     y,
                                     "G",
                                     libtcod.darker_green,
                                     "Grot",
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)

                entities.append(monster)
    def place_entities(self, room, entities, max_monsters_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            # Choose a random location for the monster
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)
            # Now check for to see if an entity exists in that location.
            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                # This makes an 80% chance of getting an Orc.
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'o',
                                     libtcod.desaturated_green,
                                     'Orc',
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'T',
                                     libtcod.darker_green,
                                     'Troll',
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)

                entities.append(monster)
Ejemplo n.º 25
0
def component(name):
    # TODO: Change this into a proper factory
    component_map = {
        "PLAYER": Fighter(hp=60, defense=2, power=5, magic=1),
        "ORC": Fighter(hp=10, defense=0, power=3, xp=35),
        "TROLL": Fighter(hp=16, defense=1, power=4, xp=100),
        "BASIC": BasicMonster(),
        "INVENTORY": Inventory(26),
        "EQUIPMENT": Equipment()
    }
    return component_map[name]
Ejemplo n.º 26
0
    def place_entities(self, room, entities, max_monsters_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            # Choose a random part of the room
            (x, y) = (randint(room.x1 + 1,
                              room.x2 - 1), (randint(room.y1 + 1,
                                                     room.y2 - 1)))

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                if randint(0, 100) < 80:
                    compAiBasicMonster = BasicMonster()
                    compFighterOrc = Fighter(hp=16, defense=0, power=2)
                    monster = Entity(x,
                                     y,
                                     'o',
                                     libtcod.desaturated_green,
                                     'Orc',
                                     True,
                                     fighter=compFighterOrc,
                                     ai=compAiBasicMonster,
                                     render_order=RenderOrder.ACTOR)
                else:
                    compFighterTroll = Fighter(hp=16, defense=1, power=4)
                    compAiBasicMonster = BasicMonster()
                    monster = Entity(x,
                                     y,
                                     'T',
                                     libtcod.darker_green,
                                     'Troll',
                                     True,
                                     fighter=compFighterTroll,
                                     ai=compAiBasicMonster,
                                     render_order=RenderOrder.ACTOR)

                entities.append(monster)
Ejemplo n.º 27
0
    def place_entities(self, room, entities: List[Entity],
                       max_monsters_per_room: int):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(room.x + 1, room.x + room.width - 1)
            y = randint(room.y + 1, room.y + room.height - 1)

            if not any(
                [entity for entity in entities if entity.x == x and entity.y]):
                if randint(0, 100) < 80:
                    fighter_component = Fighter(hp=10, defense=0, power=3)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'o',
                                     Color.FOREST_GREEN,
                                     'Orc',
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)
                else:
                    fighter_component = Fighter(hp=16, defense=1, power=4)
                    ai_component = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'T',
                                     Color.DARK_GREEN,
                                     'Troll',
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=fighter_component,
                                     ai=ai_component)

                entities.append(monster)
Ejemplo n.º 28
0
    def place_entities(self, room, entities, max_monsters_per_room):
        # Get a random number of monsters
        number_of_monsters = randint(0, max_monsters_per_room)

        for i in range(number_of_monsters):
            # Choose a random location in the room
            x = randint(room.x1 + 1, room.x2 - 1)
            y = randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                if randint(0, 100) < 80:
                    f = Fighter(hp=10, defense=0, power=3)
                    a = BasicMonster()
                    monster = Entity(x,
                                     y,
                                     'o',
                                     curses.color_pair(11),
                                     'Orc',
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=f,
                                     ai=a)
                else:
                    f = Fighter(hp=16, defense=1, power=4)
                    a = BasicMonster()
                    monster = Entity(x,
                                     y,
                                     'T',
                                     curses.color_pair(3),
                                     'Troll',
                                     blocks=True,
                                     render_order=RenderOrder.ACTOR,
                                     fighter=f,
                                     ai=a)

                entities.append(monster)
Ejemplo n.º 29
0
    def place_entities(self, room, entities, max_monsters_in_room):
        numb_of_monsters = random.randint(0, max_monsters_in_room)

        for _ in range(numb_of_monsters):
            # Choose a random location in the room
            x = random.randint(room.x1 + 1, room.x2 - 1)
            y = random.randint(room.y1 + 1, room.y2 - 1)

            if not any([
                    entity
                    for entity in entities if entity.x == x and entity.y == y
            ]):
                if random.randint(0, 100) < 80:
                    fighter_comp = Fighter(hp=10, defense=0, power=3)
                    ai_comp = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'O',
                                     tcod.desaturated_green,
                                     'Orc',
                                     blocks=True,
                                     fighter=fighter_comp,
                                     ai=ai_comp)
                else:
                    fighter_comp = Fighter(hp=16, defense=1, power=4)
                    ai_comp = BasicMonster()

                    monster = Entity(x,
                                     y,
                                     'T',
                                     tcod.darker_green,
                                     'Troll',
                                     blocks=True,
                                     fighter=fighter_comp,
                                     ai=ai_comp)

                entities.append(monster)
Ejemplo n.º 30
0
 def make(self, level, boss):
     monster = Entity(
         0,
         0,
         'g',
         tcod.dark_green,
         'Goblin Warrior',
         True,
         render_order=RenderOrder.ACTOR,
         fighter=super().get_fighter(level),
         purse=Purse(initial=random.randint(2 * level, 6 * level)),
         level=level,
         ai=BasicMonster())
     return monster