diff --git a/src/openrct2/world/Wall.cpp b/src/openrct2/world/Wall.cpp index a332f96226..f2b7a0f80e 100644 --- a/src/openrct2/world/Wall.cpp +++ b/src/openrct2/world/Wall.cpp @@ -71,7 +71,7 @@ static bool WallCheckObstructionWithTrack(rct_scenery_entry * wall, { sint32 trackType = trackElement->properties.track.type; sint32 sequence = map_element_get_track_sequence(trackElement); - sint32 direction = (edge - map_element_get_direction(trackElement)) % 4; + sint32 direction = (edge - map_element_get_direction(trackElement)) & MAP_ELEMENT_DIRECTION_MASK; rct_ride * ride = get_ride(trackElement->properties.track.ride_index); if (TrackIsAllowedWallEdges(ride->type, trackType, sequence, direction)) @@ -223,7 +223,7 @@ static bool WallCheckObstruction(rct_scenery_entry * wall, entry = get_large_scenery_entry(entryType); tile = &entry->large_scenery.tiles[sequence]; { - sint32 direction = ((edge - map_element_get_direction(mapElement)) % 4) + 8; + sint32 direction = ((edge - map_element_get_direction(mapElement)) & MAP_ELEMENT_DIRECTION_MASK) + 8; if (!(tile->var_7 & (1 << direction))) { map_obstruction_set_error_text(mapElement); diff --git a/src/openrct2/world/footpath.c b/src/openrct2/world/footpath.c index 59d5168b27..3b22c79426 100644 --- a/src/openrct2/world/footpath.c +++ b/src/openrct2/world/footpath.c @@ -1208,7 +1208,7 @@ static void loc_6A6D7E( break; case MAP_ELEMENT_TYPE_ENTRANCE: if (z == mapElement->base_height) { - if (entrance_has_direction(mapElement, ((direction - map_element_get_direction(mapElement)) % 4) ^ 2)) { + if (entrance_has_direction(mapElement, ((direction - map_element_get_direction(mapElement)) & MAP_ELEMENT_DIRECTION_MASK) ^ 2)) { if (query) { neighbour_list_push(neighbourList, 8, direction, mapElement->properties.entrance.ride_index, mapElement->properties.entrance.index); } else { @@ -1288,7 +1288,7 @@ static void loc_6A6C85( if (!(FlatRideTrackSequenceProperties[trackType][trackSequence] & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { return; } - uint16 dx = (direction - map_element_get_direction(mapElement)) % 4; + uint16 dx = (direction - map_element_get_direction(mapElement)) & MAP_ELEMENT_DIRECTION_MASK; if (!(FlatRideTrackSequenceProperties[trackType][trackSequence] & (1 << dx))) { return; } diff --git a/src/openrct2/world/map.c b/src/openrct2/world/map.c index fb6a3bfafa..72149930fb 100644 --- a/src/openrct2/world/map.c +++ b/src/openrct2/world/map.c @@ -280,7 +280,7 @@ sint32 map_element_get_direction(const rct_map_element *element) sint32 map_element_get_direction_with_offset(const rct_map_element *element, uint8 offset) { - return ((element->type & MAP_ELEMENT_DIRECTION_MASK) + offset) % 4; + return ((element->type & MAP_ELEMENT_DIRECTION_MASK) + offset) & MAP_ELEMENT_DIRECTION_MASK; } sint32 map_element_get_terrain(const rct_map_element *element) diff --git a/test/testpaint/compat.c b/test/testpaint/compat.c index c60d88242f..3588969651 100644 --- a/test/testpaint/compat.c +++ b/test/testpaint/compat.c @@ -130,7 +130,7 @@ int map_element_get_direction(const rct_map_element *element) { } int map_element_get_direction_with_offset(const rct_map_element *element, uint8 offset) { - return ((element->type & MAP_ELEMENT_DIRECTION_MASK) + offset) % 4; + return ((element->type & MAP_ELEMENT_DIRECTION_MASK) + offset) & MAP_ELEMENT_DIRECTION_MASK; } rct_map_element *map_get_first_element_at(int x, int y) {