empty_opposite_corner now uses transformations and enums rather than conditional logic