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
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) '''
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)
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)
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)
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
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)
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)
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)
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)
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)
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
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
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
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
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)
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
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
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
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)
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)
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)
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)
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]
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)
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)
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)
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)
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