full checkmate (not fully bugtested)