From f9be3c00467a1dced2caf347b49ec73327731ccf Mon Sep 17 00:00:00 2001 From: Tomas Dittmann Date: Sun, 25 Jun 2017 11:17:25 +0200 Subject: [PATCH] Identify _trackDesignPlaceSceneryZ and fix #259 Add the SceneryZ-value to the TrackZ value to compute the correct value for window_track_place_get_base_z(). Fixes issue #259. --- distribution/changelog.txt | 1 + src/openrct2/ride/track_design.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index d61a7ac150..500581e639 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -8,6 +8,7 @@ - Feature: OpenRCT2 now starts up on the display it was last shown on. - Feature: [#5611] Add support for Android - Improved: Mouse can now be dragged to select scenery when saving track designs +- Fix: [#259] Money making glitch involving swamps (original bug) - Fix: [#739] Crocodile Ride (Log Flume) never allows more than five boats (original bug) - Fix: [#837] Can't move windows on title screen to where the toolbar would be - Fix: [#1705] Time Twister's Medieval entrance has incorrect scrolling (original bug) diff --git a/src/openrct2/ride/track_design.c b/src/openrct2/ride/track_design.c index fe5ff7abcf..0ed399bc30 100644 --- a/src/openrct2/ride/track_design.c +++ b/src/openrct2/ride/track_design.c @@ -59,7 +59,7 @@ static uint8 _trackDesignPlaceOperation; static bool _trackDesignDontPlaceScenery; static money32 _trackDesignPlaceCost; static sint16 _trackDesignPlaceZ; -static sint16 word_F44129; +static sint16 _trackDesignPlaceSceneryZ; static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength); static map_backup *track_design_preview_backup_map(); @@ -696,8 +696,8 @@ static sint32 track_design_place_scenery(rct_td6_scenery_element *scenery_start, if (_trackDesignPlaceOperation == PTD_OPERATION_GET_PLACE_Z) { sint32 z = scenery->z * 8 + _trackDesignPlaceZ; - if (z < word_F44129) { - word_F44129 = z; + if (z < _trackDesignPlaceSceneryZ) { + _trackDesignPlaceSceneryZ = z; } } @@ -1281,7 +1281,7 @@ sint32 place_virtual_track(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, sint32 gTrackPreviewMin = (rct_xyz16){ x, y, z }; gTrackPreviewMax = (rct_xyz16){ x, y, z }; - word_F44129 = 0; + _trackDesignPlaceSceneryZ = 0; uint8 track_place_success = 0; if (td6->type == RIDE_TYPE_MAZE) { track_place_success = track_design_place_maze(td6, x, y, z, rideIndex); @@ -1311,8 +1311,11 @@ sint32 place_virtual_track(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, sint32 map_invalidate_map_selection_tiles(); } - if (bl == 3) { - return _trackDesignPlaceZ; + if (bl == 3) + { + // Change from vanilla: originally, _trackDesignPlaceSceneryZ was not subtracted + // from _trackDesignPlaceZ, causing bug #259. + return _trackDesignPlaceZ - _trackDesignPlaceSceneryZ; } return _trackDesignPlaceCost; } @@ -1368,7 +1371,7 @@ static bool track_design_place_preview(rct_track_td6 *td6, money32 *cost, uint8 *flags |= TRACK_DESIGN_FLAG_HAS_SCENERY; } - z += 16 - word_F44129; + z += 16 - _trackDesignPlaceSceneryZ; sint32 operation = PTD_OPERATION_GET_COST; if (byte_F4414E & BYTE_F4414E_SCENERY_UNAVAILABLE) {