Exemple #1
0
def get_game_variables(constants):
    # Player creation
    fighter_component = Fighter(hp=100, defense=1, power=3)
    inventory_component = Inventory(26)
    equipment_component = Equipment()

    level = Level(level_up_base=constants['level_up_base'], level_up_factor=constants['level_up_factor'])
    player = Entity(0, 0, '@', libtcod.white, 'Player', blocks=True, render_order=RenderOrder.ACTOR,
                    fighter=fighter_component, inventory=inventory_component, level=level, equipment=equipment_component)
    entities = [player]

    starter_weapon = dagger(0, 0)

    player.inventory.add_item(starter_weapon)
    player.equipment.toggle_equip(starter_weapon)

    # Map creation
    game_map = GameMap(constants['map_width'], constants['map_height'])
    game_map.make_map(constants['max_rooms'], constants['room_min_size'], constants['room_max_size'],
                      constants['map_width'], constants['map_height'], player, entities)

    message_log = MessageLog(constants['message_x'], constants['message_width'], constants['message_height'])

    game_state = GameStates.PLAYERS_TURN

    return player, entities, game_map, message_log, game_state
Exemple #2
0
def leather_pants(x, y):
    equippable_component = Equippable(EquipmentSlots.LEGS, defense_bonus=1)
    return Entity(x,
                  y,
                  'l',
                  libtcod.dark_amber,
                  'Leather pants',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #3
0
def leather_helmet(x, y):
    equippable_component = Equippable(EquipmentSlots.HEAD, defense_bonus=1)
    return Entity(x,
                  y,
                  'h',
                  libtcod.dark_amber,
                  'Leather helmet',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #4
0
def sword(x, y):
    equippable_component = Equippable(EquipmentSlots.MAIN_HAND, power_bonus=3)
    return Entity(x,
                  y,
                  '/',
                  libtcod.sky,
                  'Sword',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #5
0
def axe(x, y):
    equippable_component = Equippable(EquipmentSlots.MAIN_HAND, power_bonus=4)
    return Entity(x,
                  y,
                  'p',
                  libtcod.sky,
                  'Axe',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #6
0
def dagger(x, y):
    equippable_component = Equippable(EquipmentSlots.MAIN_HAND, power_bonus=2)
    return Entity(0,
                  0,
                  '-',
                  libtcod.sky,
                  'Dagger',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #7
0
def shield(x, y):
    equippable_component = Equippable(EquipmentSlots.OFF_HAND, defense_bonus=1)
    return Entity(x,
                  y,
                  '[',
                  libtcod.darker_orange,
                  'Shield',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #8
0
def iron_ring_force(x, y):
    equippable_component = Equippable(EquipmentSlots.FINGER, power_bonus=2)
    return Entity(x,
                  y,
                  'o',
                  libtcod.darker_orange,
                  'Iron ring of force',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #9
0
def iron_ring_life(x, y):
    equippable_component = Equippable(EquipmentSlots.FINGER, max_hp_bonus=15)
    return Entity(x,
                  y,
                  'o',
                  libtcod.darker_orange,
                  'Iron ring of life',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #10
0
def lightning_scroll(x, y):
    item_component = Item(use_function=cast_lightning,
                          damage=20,
                          maximum_range=5)
    return Entity(x,
                  y,
                  '#',
                  libtcod.yellow,
                  'Lightning Scroll',
                  render_order=RenderOrder.ITEM,
                  item=item_component)
Exemple #11
0
def leather_armor(x, y):
    equippable_component = Equippable(EquipmentSlots.BODY,
                                      defense_bonus=2,
                                      max_hp_bonus=25)
    return Entity(x,
                  y,
                  'a',
                  libtcod.dark_amber,
                  'Leather armor',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #12
0
def iron_armor(x, y):
    equippable_component = Equippable(EquipmentSlots.BODY,
                                      defense_bonus=4,
                                      max_hp_bonus=50)
    return Entity(x,
                  y,
                  'a',
                  libtcod.dark_amber,
                  'Iron armor',
                  equippable=equippable_component,
                  render_order=RenderOrder.ITEM)
Exemple #13
0
def create_troll(x, y):
    fighter_component = Fighter(hp=30, defense=2, power=8, xp=100)
    ai_component = BasicMonster()
    return Entity(x,
                  y,
                  'T',
                  libtcod.darker_green,
                  'Troll',
                  True,
                  render_order=RenderOrder.ACTOR,
                  fighter=fighter_component,
                  ai=ai_component)
Exemple #14
0
def create_orc(x, y):
    fighter_component = Fighter(hp=20, defense=0, power=4, xp=35)
    ai_component = BasicMonster()

    return Entity(x,
                  y,
                  'o',
                  libtcod.desaturated_green,
                  'Orc',
                  True,
                  render_order=RenderOrder.ACTOR,
                  fighter=fighter_component,
                  ai=ai_component)
Exemple #15
0
def confusion_scroll(x, y):
    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))
    return Entity(x,
                  y,
                  '#',
                  libtcod.light_cyan,
                  'Confusion scroll',
                  render_order=RenderOrder.ITEM,
                  item=item_component)
Exemple #16
0
def fireball_scroll(x, y):
    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_red),
        damage=12,
        radius=3)
    return Entity(x,
                  y,
                  '#',
                  libtcod.red,
                  'Fireball Scroll',
                  render_order=RenderOrder.ITEM,
                  item=item_component)
Exemple #17
0
    def make_map(self, max_rooms, room_min_size, room_max_size, map_width,
                 map_height, player, entities):
        rooms = []
        num_rooms = 0

        # Tracks room centers
        center_of_last_room_x = None
        center_of_last_room_y = None

        for r in range(max_rooms):
            r  # r is here to stop linting errors

            # random width and height
            w = randint(room_min_size, room_max_size)
            h = randint(room_min_size, room_max_size)
            # random position without going out of the boundaries of the map
            x = randint(0, map_width - w - 1)
            y = randint(0, map_height - h - 1)

            # "Rect" class makes rectangles easier to work with
            new_room = Rect(x, y, w, h)

            # run through the other rooms and see if they intersect with this one
            for other_room in rooms:
                if new_room.intersect(other_room):
                    break
            else:
                # this means there are no intersections, so this room is valid

                # "paint" it to the map's tiles
                self.create_room(new_room)

                # center coordinates of new room
                (new_x, new_y) = new_room.center()

                center_of_last_room_x = new_x
                center_of_last_room_y = new_y

                if num_rooms == 0:
                    # this is the first room, where the player starts at
                    player.x = new_x
                    player.y = new_y

                else:
                    # all rooms after the first:
                    # connect it to the previous room with a tunnel

                    # center coordinates of previous room
                    (prev_x, prev_y) = rooms[num_rooms - 1].center()

                    # flip a coin (random number that is either 0 or 1)
                    if randint(0, 1) == 1:
                        # first move horizontally, then vertically
                        self.create_h_tunnel(prev_x, new_x, prev_y)
                        self.create_v_tunnel(prev_y, new_y, new_x)
                    else:
                        # first move vertically, then horizontally
                        self.create_v_tunnel(prev_y, new_y, prev_x)
                        self.create_h_tunnel(prev_x, new_x, new_y)

                # finally, add monsters & append the new room to the list
                self.place_entities(new_room, entities)

                rooms.append(new_room)
                num_rooms += 1

        stairs_component = Stairs(self.dungeon_level + 1)
        down_stairs = Entity(center_of_last_room_x,
                             center_of_last_room_y,
                             '>',
                             libtcod.white,
                             'Stairs',
                             render_order=RenderOrder.STAIRS,
                             stairs=stairs_component)
        entities.append(down_stairs)
Exemple #18
0
def healing_potion(x, y):
    # Healing potion
    item_component = Item(use_function=heal, amount=40)
    return Entity(x, y, '!', libtcod.violet, 'Healing Potion', render_order=RenderOrder.ITEM,
                  item=item_component)