Custom loops of CustomPress custom post types

I used to use plain old categories for my custom content and then I'd use a shortcode I'd written that looks like this to display a short listing of these posts:

function catposts_shortcode_cb( $atts ){
    extract( shortcode_atts( array(
		'num' => 3,
		'cat' => 5
	), $atts ) );

    // get the posts
    $posts = get_posts(
        array(
            'numberposts' => $num,
            'category' => $cat
        )
    );

    // no posts?
    if( empty( $posts ) ) return '';

    $out = '<h3><a href="/blog">Recent Posts</a></h3>';
    foreach( $posts as $post ){

        $categories = get_the_category_list(', ', null, $post->ID);
        $author_id = $post->post_author;
        $author_name = get_the_author_meta( 'user_nicename' , $author_id );
        $the_time = get_the_time('F jS, Y', $post->ID);

        if ( has_post_thumbnail($post->ID) ) {
            $post_image = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'large');
            $out .= sprintf(
                '<div class="post-listing"><div class="post-image" style="background-image:url(\'%s\');"></div><h4><a href="%s" title="%s">%s</a></h4><p>%s</p><div class="clearfix"></div><div class="post-meta">By %s | Posted in %s <a class="more" href="%s" title="%s">Read More &raquo;</a></div></div>',
                $post_image[0],
                get_permalink( $post ),
                esc_attr( $post->post_title ),
                esc_html( $post->post_title ),
                esc_html( $post->post_excerpt ),
                esc_html( $author_name ),
                //$the_time,
                $categories,
                get_permalink( $post ),
                esc_attr( $post->post_title )
            );
        } else {
            $out .= sprintf(
                '<div class="post-listing"><h4><a href="%s" title="%s">%s</a></h4><p>%s</p><div class="post-meta">By %s | Posted in %s <a class="more" href="%s" title="%s">Read More &raquo;</a></div></div>',
                get_permalink( $post ),
                esc_attr( $post->post_title ),
                esc_html( $post->post_title ),
                esc_html( $post->post_excerpt ),
                esc_html( $author_name ),
                //$the_time,
                $categories,
                get_permalink( $post ),
                esc_attr( $post->post_title )
            );
        }
    }
    $catlink = get_category_link($cat);
    $catname = get_the_category_by_ID($cat);
    return $out . '<p style="font-size:16px;font-weight:600;text-transform:uppercase;"><a href="' . $catlink . '">Read More Posts About ' . $catname .' &raquo;</a></p>';
}
function catposts_register_shortcode(){
    add_shortcode( 'catposts', 'catposts_shortcode_cb' );
}
add_action( 'init', 'catposts_register_shortcode' );

My question is: How can I write a custom loop shortcode like this for a custom post type I've created with CustomPress?