separate conditional into hold and discard
complete unified play/discard api