You have added Y twice and omitted Z in this new GetHashCode implementation.

I believe simply adding the members together won't be distributed enough.  It should better distribute the hash code across the range of int.  You could do something like (((int)(X * 10) & 0xFF) << 24) | (((int)(Y * 10) & 0xFF) << 16) | (((int)(Z * 10) & 0xFF) << 8) | ((int)(W * 10) & 0xFF) would provide better distribution.