def METHOD_NAME(self) -> None:
    trainer: Optional[NPC]
    if self.npc_slug is None:
        trainer = self.session.player
    else:
        trainer = get_npc(self.session, self.npc_slug)
    assert trainer, "No Trainer found with slug '{}'".format(
        self.npc_slug or "player"
    )
    mother_id = uuid.UUID(trainer.game_variables["breeding_mother"])
    father_id = uuid.UUID(trainer.game_variables["breeding_father"])
    mother = trainer.find_monster_by_id(mother_id)
    if mother is None:
        logger.debug("Mother not found in party, searching storage boxes.")
        mother = trainer.find_monster_in_storage(mother_id)
    father = trainer.find_monster_by_id(father_id)
    if father is None:
        logger.debug("Father not found in party, searching storage boxes.")
        father = trainer.find_monster_in_storage(father_id)
    if mother is None:
        logger.error(
            f"Could not find (mother) monster with instance id {mother_id}"
        )
        return
    if father is None:
        logger.error(
            f"Could not find (father) monster with instance id {father_id}"
        )
        return
    # matrix, it respects the types[0], strong against weak.
    # Mother (Water), Father (Earth)
    # Earth > Water => Child (Earth)
    if mother.types[0].slug.water:
        if father.types[0].slug.earth:
            seed = father
        else:
            seed = mother
    elif mother.types[0].slug.fire:
        if father.types[0].slug.water:
            seed = father
        else:
            seed = mother
    elif mother.types[0].slug.wood:
        if father.types[0].slug.metal:
            seed = father
        else:
            seed = mother
    elif mother.types[0].slug.metal:
        if father.types[0].slug.fire:
            seed = father
        else:
            seed = mother
    elif mother.types[0].slug.earth:
        if father.types[0].slug.wood:
            seed = father
        else:
            seed = mother
    else:
        seed = mother
    # retrieve the basic form
    for element in seed.history:
        if element.evo_stage.basic:
            seed_slug = element.mon_slug
    # continues the creation of the child.
    child = monster.Monster()
    child.load_from_db(seed_slug)
    child.set_level(5)
    child.set_moves(5)
    child.set_capture(formula.today_ordinal())
    child.current_hp = child.hp
    # child gets random father's moves
    father_moves = len(father.moves)
    replace_tech = random.randrange(0, 2)
    child.moves[replace_tech] = father.moves[
        random.randrange(0, father_moves - 1)
    ]
    trainer.add_monster(child, len(trainer.monsters))
    msg = T.format("got_new_tuxemon", {"monster_name": child.name})
    open_dialog(self.session, [msg])