I’m not following exactly what you are trying to do.
I don’t think this code is correct:
$featured = new WP_Query(array("post_type"=>"post","category"=>1,"numberofposts"=>"999"));
You can do it as
$featured = new WP_Query('cat=1&posts_per_page=-1');
You don’t need to say “post_type = post” because only posts have categories so that is implied by cat=1. The syntax has always been cat=1 and not category=1. And its never been numberofposts, used to be showposts, is now posts_per_page. rather than 999 you can say -1 which means no limit to how many posts are returned.
I’m not following exactly what you are doing….
You are grabbing all the custom fields from the original post in an array, in get_post_custom. That is not a single value, its an array. Then inside the loop you are displaying posts if $custom is true. However you are comparing whether the original post’s $custom is true, not the custom fields from each post the loop is pulling in. In other words the value of $custom never changes in the loop, so its either going to be true on every single post or false on every single post, depending on the status of the post whose custom fields you originally pulled from the database before the custom query loop. every post being returned in the loop. So $custom is going to either be true or false on every single post in the loop since you aren’t looking at each post’s custom fields, only the custom field of the original post. If you are testing for just one specific custom field you are better off using get_post_meta.
The syntax for WP_query parameters is documented here
https://codex.www.ads-software.com/Function_Reference/WP_Query