diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index a2ee663217..120a5e6def 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -686,8 +686,7 @@ void window_guest_viewport_init(rct_window* w) if (w->viewport != nullptr) { // Check all combos, for now skipping y and rot - if (focus.coordinate.x == w->viewport_focus_coordinates.x - && (focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK) == w->viewport_focus_coordinates.y + if (focus.coordinate.x == w->viewport_focus_coordinates.x && focus.coordinate.y == w->viewport_focus_coordinates.y && focus.coordinate.z == w->viewport_focus_coordinates.z && focus.coordinate.rotation == w->viewport_focus_coordinates.rotation) return; @@ -713,8 +712,7 @@ void window_guest_viewport_init(rct_window* w) int32_t height = view_widget->height() - 1; viewport_create( - w, screenPos, width, height, 0, - { focus.coordinate.x, focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK, focus.coordinate.z }, + w, screenPos, width, height, 0, { focus.coordinate.x, focus.coordinate.y, focus.coordinate.z }, focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, focus.sprite.sprite_id); if (w->viewport != nullptr && reCreateViewport) { diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index b1a39281fb..5cfc4e0672 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -778,7 +778,7 @@ static std::unique_ptr _trackDesign; // Cached overall view for each ride // (Re)calculated when the ride window is opened struct ride_overall_view { - int16_t x, y, z; + int32_t x, y, z; uint8_t zoom; }; @@ -1641,7 +1641,7 @@ static void window_ride_init_viewport(rct_window* w) if (w->viewport != nullptr) { if (focus.coordinate.x == w->viewport_focus_coordinates.x - && (focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK) == w->viewport_focus_coordinates.y + && focus.coordinate.y == w->viewport_focus_coordinates.y && focus.coordinate.z == w->viewport_focus_coordinates.z && focus.coordinate.rotation == w->viewport_focus_coordinates.rotation && focus.coordinate.zoom == w->viewport_focus_coordinates.zoom && focus.coordinate.width == w->width @@ -1677,7 +1677,7 @@ static void window_ride_init_viewport(rct_window* w) int32_t height = view_widget->height() - 1; viewport_create( w, screenPos, width, height, focus.coordinate.zoom, - { focus.coordinate.x, focus.coordinate.y & VIEWPORT_FOCUS_Y_MASK, focus.coordinate.z }, + { focus.coordinate.x, focus.coordinate.y, focus.coordinate.z }, focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, focus.sprite.sprite_id); w->flags |= WF_NO_SCROLLING; diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index d84bea4ae4..0ea71170ca 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -203,9 +203,9 @@ constexpr auto WINDOW_SCROLL_UNDEFINED = std::numeric_limits::max(); struct coordinate_focus { int16_t var_480; - int16_t x; // 0x482 - int16_t y; // 0x484 & VIEWPORT_FOCUS_Y_MASK - int16_t z; // 0x486 + int32_t x; // 0x482 + int32_t y; // 0x484 + int32_t z; // 0x486 uint8_t rotation; // 0x488 uint8_t zoom; // 0x489 int16_t width; @@ -230,7 +230,6 @@ enum VIEWPORT_FOCUS_TYPE : uint8_t VIEWPORT_FOCUS_TYPE_COORDINATE = (1 << 6), VIEWPORT_FOCUS_TYPE_SPRITE = (1 << 7) }; -#define VIEWPORT_FOCUS_Y_MASK 0x3FFF struct viewport_focus { diff --git a/src/openrct2/interface/Window_internal.cpp b/src/openrct2/interface/Window_internal.cpp index 9b3140dee4..0883a17f6c 100644 --- a/src/openrct2/interface/Window_internal.cpp +++ b/src/openrct2/interface/Window_internal.cpp @@ -30,7 +30,7 @@ void rct_window::ScrollToViewport() else { newCoords.x = viewport_focus_coordinates.x; - newCoords.y = viewport_focus_coordinates.y & VIEWPORT_FOCUS_Y_MASK; + newCoords.y = viewport_focus_coordinates.y; newCoords.z = viewport_focus_coordinates.z; } diff --git a/src/openrct2/paint/sprite/Paint.Sprite.cpp b/src/openrct2/paint/sprite/Paint.Sprite.cpp index ce2027f94b..08cd5a01d1 100644 --- a/src/openrct2/paint/sprite/Paint.Sprite.cpp +++ b/src/openrct2/paint/sprite/Paint.Sprite.cpp @@ -24,13 +24,8 @@ * Paint Quadrant * rct2: 0x0069E8B0 */ -void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t y) +void sprite_paint_setup(paint_session* session, int32_t x, int32_t y) { - if ((x & 0xe000) | (y & 0xe000)) - { - return; - } - if (gTrackDesignSaveMode || (session->ViewFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES)) { return; diff --git a/src/openrct2/paint/sprite/Paint.Sprite.h b/src/openrct2/paint/sprite/Paint.Sprite.h index 1c038aa53a..a2f6d7e60e 100644 --- a/src/openrct2/paint/sprite/Paint.Sprite.h +++ b/src/openrct2/paint/sprite/Paint.Sprite.h @@ -14,7 +14,7 @@ struct paint_session; -void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t y); +void sprite_paint_setup(paint_session* session, int32_t x, int32_t y); template void PaintEntity(paint_session* session, const T* entity, int32_t imageDirection); diff --git a/src/openrct2/world/SpriteBase.h b/src/openrct2/world/SpriteBase.h index a6ce07253c..09194f2800 100644 --- a/src/openrct2/world/SpriteBase.h +++ b/src/openrct2/world/SpriteBase.h @@ -30,18 +30,18 @@ struct SpriteBase uint8_t sprite_height_negative; uint16_t sprite_index; uint16_t flags; - int16_t x; - int16_t y; - int16_t z; + int32_t x; + int32_t y; + int32_t z; // Width from centre of sprite to edge uint8_t sprite_width; // Height from centre of sprite to top uint8_t sprite_height_positive; // Screen Coordinates of sprite - int16_t sprite_left; - int16_t sprite_top; - int16_t sprite_right; - int16_t sprite_bottom; + int32_t sprite_left; + int32_t sprite_top; + int32_t sprite_right; + int32_t sprite_bottom; uint8_t sprite_direction;