From 00583d12e62c307a580c088529e994150405d7f8 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Tue, 10 Feb 2015 19:13:37 +0000 Subject: [PATCH] Fix #751. Main bug caused by doing subtraction before factoring in zoom --- src/interface/viewport.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/interface/viewport.c b/src/interface/viewport.c index ffbdeb12f5..21ae7f1535 100644 --- a/src/interface/viewport.c +++ b/src/interface/viewport.c @@ -339,8 +339,11 @@ void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){ //return; uint8 zoom = (1 << viewport->zoom); - sint16 x_diff = (viewport->view_x - x) / zoom; - sint16 y_diff = (viewport->view_y - y) / zoom; + // Note: do not do the subtraction and then divide! + // Note: Due to arithmatic shift != /zoom a shift will have to be used + // hopefully when 0x006E7FF3 is finished this can be converted to /zoom. + sint16 x_diff = (viewport->view_x >> viewport->zoom) - (x >> viewport->zoom); + sint16 y_diff = (viewport->view_y >> viewport->zoom) - (y >> viewport->zoom); viewport->view_x = x; viewport->view_y = y;