Why is the `if else` not working?

Assuming you’re using the function is_category_or_sub() as given on http://valendesigns.com/wordpress/is-category-or-subcategory-wp-function/

That function takes category id as the argument, not the slug. The string “gamenews” here when type-casted to an integer becomes 0 which is an ancestor for every other category. Can you try changing the function code to this-

// If is category or subcategory of $cat
if (!function_exists('is_category_or_sub')) {
    function is_category_or_sub($cat = 0) {
            if(is_numeric($cat)) {
                $cat_id = $cat;
            } elseif(is_string($cat)) {
                $cat = get_term_by('slug', $cat, 'category');
                $cat_id = $cat->term_id;
            } else {
                return false; // neither id nor slug
            }
            foreach (get_the_category() as $cat) {
                if ($cat_id == $cat->cat_ID || cat_is_ancestor_of($cat_id, $cat)) return true;
            }
            return false;
    }
}

This function now supports both id & slug