def METHOD_NAME(save_key, caster, args, embed):
    """
    Runs a caster's saving throw, building on an existing embed and handling most arguments.
    Also handles save bonuses from ieffects if caster is a combatant.
    :type save_key: str
    :type caster: cogs5e.models.sheet.statblock.StatBlock
    :type args: utils.argparser.ParsedArguments
    :type embed: disnake.Embed
    :return: The total of each save.
    :rtype: SaveResult
    """
    if save_key.startswith("death"):
        save = Skill(0)
        stat_name = stat = "Death"
        save_name = "Death Save"
    else:
        try:
            save = caster.saves.get(save_key)
            stat = save_key[:3]
            stat_name = verbose_stat(stat).title()
            save_name = f"{stat_name} Save"
        except ValueError:
            raise InvalidArgument("That's not a valid save.")
    # -title
    if args.last("title"):
        embed.title = args.last("title", "").replace("[name]", caster.get_title_name()).replace("[sname]", save_name)
    elif args.last("h"):
        embed.title = f"An unknown creature makes {a_or_an(save_name)}!"
    else:
        embed.title = f"{caster.get_title_name()} makes {a_or_an(save_name)}!"
    # ieffect handling
    if isinstance(caster, init.Combatant):
        # -sb
        args["b"] = args.get("b") + caster.active_effects(mapper=lambda effect: effect.effects.save_bonus, default=[])
        # -sadv/sdis
        sadv_effects = caster.active_effects(
            mapper=lambda effect: effect.effects.save_adv, reducer=lambda saves: set().union(*saves), default=set()
        )
        sdis_effects = caster.active_effects(
            mapper=lambda effect: effect.effects.save_dis, reducer=lambda saves: set().union(*saves), default=set()
        )
        if stat in sadv_effects:
            args["adv"] = True  # Because adv() only checks last() just forcibly add them
        if stat in sdis_effects:
            args["dis"] = True
    result = _run_common(save, args, embed, rr_format="Save {}")
    return SaveResult(rolls=result.rolls, skill=save, skill_name=stat_name, skill_roll_result=result)