def load_game(self):
        try:
            save = open("saves/main_save.xml", "r")

            # Test if there is a current saved game
            if save:
                tree_root = etree.parse("saves/main_save.xml").getroot()
                index = tree_root.find("level/index").text.strip()
                level_name = 'maps/level_' + index + '/'
                game_status = tree_root.find("level/phase").text.strip()
                turn_nb = 0
                if game_status != 'I':
                    turn_nb = int(tree_root.find("level/turn").text.strip())
                team = []
                for player in tree_root.findall("team/player"):
                    name = player.find("name").text.strip()
                    level = int(player.find("level").text.strip())
                    p_class = player.find("class").text.strip()
                    race = player.find("race").text.strip()
                    gold = int(player.find("gold").text.strip())
                    exp = int(player.find("exp").text.strip())
                    hp = int(player.find("hp").text.strip())
                    strength = int(player.find("strength").text.strip())
                    defense = int(player.find("def").text.strip())
                    res = int(player.find("res").text.strip())
                    move = int(player.find("move").text.strip())
                    current_hp = int(player.find("currentHp").text.strip())
                    pos = (int(player.find("position/x").text.strip()) *
                           TILE_SIZE,
                           int(player.find("position/y").text.strip()) *
                           TILE_SIZE)
                    state = player.find("turnFinished").text.strip()
                    inv = []
                    for it in player.findall("inventory/item"):
                        it_name = it.find("name").text.strip()
                        item = LoadFromXMLManager.parse_item_file(it_name)
                        inv.append(item)

                    equipments = []
                    for eq in player.findall("equipments/equipment"):
                        eq_name = eq.find("name").text.strip()
                        eq = LoadFromXMLManager.parse_item_file(eq_name)
                        equipments.append(eq)

                    # -- Reading of the XML file for default character's values (i.e. sprites)
                    tree = etree.parse("data/characters.xml").getroot()
                    player_t = tree.xpath(name)[0]

                    sprite = 'imgs/dungeon_crawl/player/' + player_t.find(
                        'sprite').text.strip()
                    compl_sprite = player_t.find('complementSprite')
                    if compl_sprite is not None:
                        compl_sprite = 'imgs/dungeon_crawl/player/' + compl_sprite.text.strip(
                        )

                    p = Player(name,
                               sprite,
                               hp,
                               defense,
                               res,
                               move,
                               strength, [p_class],
                               equipments,
                               race,
                               gold,
                               level,
                               compl_sprite=compl_sprite)
                    p.earn_xp(exp)
                    p.items = inv
                    p.set_current_hp(current_hp)
                    p.pos = pos
                    if state == "True":
                        p.turn_finished()

                    team.append(p)

                # Load level with current game status, foes states, and team
                self.level_id = int(index)
                level = Level(level_name, team, self.level_id, game_status,
                              turn_nb, tree_root.find("level/entities"))
                self.play(level)
                save.close()
                return
        except FileNotFoundError:
            # No saved game
            self.background_menus.append([self.active_menu, True])

            name = "Load Game"
            entries = [[{
                'type': 'text',
                'text': "No saved game.",
                'font': fonts['MENU_SUB_TITLE_FONT']
            }]]
            width = self.screen.get_width() // 2
            self.active_menu = InfoBox(name,
                                       "",
                                       "imgs/interface/PopUpMenu.png",
                                       entries,
                                       width,
                                       close_button=1)
def load_player(el, from_save):
    name = el.find("name").text.strip()
    level = el.find('level')
    if level is None:
        # If level is not specified, default value is 1
        level = 1
    else:
        level = int(level.text.strip())
    p_class = el.find("class").text.strip()
    race = el.find("race").text.strip()
    gold = int(el.find("gold").text.strip())
    exp = int(el.find("exp").text.strip()) if from_save else 0
    hp = int(el.find("hp").text.strip())
    strength = int(el.find("strength").text.strip())
    defense = int(el.find("defense").text.strip())
    res = int(el.find("resistance").text.strip())
    current_hp = int(el.find("current_hp").text.strip()) if from_save else hp
    inv = []
    for it in el.findall("inventory/item"):
        it_name = it.text.strip()
        item = parse_item_file(it_name)
        inv.append(item)

    equipments = []
    for eq in el.findall("equipment/*"):
        eq_name = eq.text.strip()
        eq = parse_item_file(eq_name)
        equipments.append(eq)

    if from_save:
        skills = [(load_skill(skill.text.strip()) if skill.text.strip()
                   not in skills_infos else skills_infos[skill.text.strip()])
                  for skill in el.findall('skills/skill/name')]
        tree = etree.parse("data/characters.xml").getroot()
        player_t = tree.xpath(name)[0]
    else:
        skills = Character.classes_data[p_class][
            'skills'] + Character.races_data[race]['skills']
        player_t = el

    # -- Reading of the XML file for default character's values (i.e. sprites)
    sprite = 'imgs/' + player_t.find('sprite').text.strip()
    compl_sprite = player_t.find('complement_sprite')
    if compl_sprite is not None:
        compl_sprite = 'imgs/' + compl_sprite.text.strip()

    p = Player(name,
               sprite,
               hp,
               defense,
               res,
               strength, [p_class],
               equipments,
               race,
               gold,
               level,
               skills,
               compl_sprite=compl_sprite)
    p.earn_xp(exp)
    p.items = inv
    p.hp = current_hp
    if from_save:
        pos = (int(el.find("position/x").text.strip()) * TILE_SIZE,
               int(el.find("position/y").text.strip()) * TILE_SIZE)
        p.pos = pos
        state = el.find("turnFinished").text.strip()
        if state == "True":
            p.end_turn()
    else:
        # Up stats according to current lvl
        p.stats_up(level - 1)
        # Restore hp due to lvl up
        p.healed()

    return p