bool affected_by_substitute(u8 substitute_bank)
{
    if (battle_participants[substitute_bank].status2.substitute)
    {
        if (!(hitmarker & HITMARKER_IGNORE_SUBSTITUTE || disable_structs[substitute_bank].substitute_hp == 0
              || (check_ability(bank_attacker, ABILITY_INFILTRATOR) && bank_attacker != substitute_bank)
              || find_move_in_table(current_move, sound_moves)))
        {
            return true;
        }
    }
    return false;
}
u8 affected_by_substitute(u8 substitute_bank)
{
    if (battle_participants[substitute_bank].status2.substitute)
    {
        if (!(hitmarker & HITMARKER_IGNORE_SUBSTITUTE || disable_structs[substitute_bank].substitute_hp == 0
              || (has_ability_effect(bank_attacker, 0, 1) && battle_participants[bank_attacker].ability_id == ABILITY_INFILTRATOR && bank_attacker != substitute_bank)
              || find_move_in_table(current_move, &sound_moves[0])))
        {
            return true;
        }
    }
    return false;;
}