function __callback(bytes32 _queryId, string _result, bytes _proof) public onlyOraclize {
        uint rollId = uint(keccak256(_queryId));
        address player = rollIdToGameAddress[rollId];

        
        if (player == address(0)) {
            failedRolls[rollId] = rollId;
            return;
        }

        if (oraclize_randomDS_proofVerify__returnCode(_queryId, _result, _proof) != 0) {
            cleanupErrorGame(player, 0, rollId);

        } else {
            uint randomNumber = (uint(keccak256(_result)) % NUM_DICE_SIDES) + 1;
            processDiceRoll(player, randomNumber);

        }

        delete rollIdToGameAddress[rollId];
    }