From befd430e596dd18db8d0ee13a1d05aac197a9754 Mon Sep 17 00:00:00 2001 From: hexdec Date: Mon, 11 Aug 2014 22:58:40 +0200 Subject: [PATCH] Decompiled window_zoom_in and window_zoom_out. --- src/window.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/window.c b/src/window.c index 3e34e4fd35..569463783c 100644 --- a/src/window.c +++ b/src/window.c @@ -909,7 +909,22 @@ void window_rotate_camera(rct_window *w) */ void window_zoom_in(rct_window *w) { - RCT2_CALLPROC_X(0x006887A6, 0, 0, 0, 0, (int)w, 0, 0); + rct_viewport* v = w->viewport; + + // Prevent zooming more than possible. + if (v->zoom <= 0) { + return; + } + + v->zoom--; + + v->view_width /= 2; + v->view_height /= 2; + + w->saved_view_x += v->view_width >> 1; + w->saved_view_y += v->view_height >> 1; + + RCT2_CALLPROC_X(0x006EB13A, 0, 0, 0, 0, (int)w, 0, 0); } /** @@ -918,7 +933,25 @@ void window_zoom_in(rct_window *w) */ void window_zoom_out(rct_window *w) { - RCT2_CALLPROC_X(0x006887E0, 0, 0, 0, 0, (int)w, 0, 0); + rct_viewport* v = w->viewport; + + // Prevent zooming more than possible. + if (v->zoom >= 3) { + return; + } + + v->zoom++; + + int width = v->view_width; + int height = v->view_height; + + v->view_width *= 2; + v->view_height *= 2; + + w->saved_view_x -= width / 2; + w->saved_view_y -= height >> 1; + + RCT2_CALLPROC_X(0x006EB13A, 0, 0, 0, 0, (int)w, 0, 0); } /**