From 271e6837e930b097ad012a68f3598d99b8b46cdd Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 25 Jul 2017 17:02:38 +0200 Subject: [PATCH] Refactor byte_F4414E into separate local bools --- src/openrct2/ride/track_design.c | 52 +++++++++++++++++++----------- src/openrct2/ride/track_design.h | 23 ++++++------- src/openrct2/windows/track_place.c | 2 +- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/openrct2/ride/track_design.c b/src/openrct2/ride/track_design.c index f9a2c47c82..270693a35c 100644 --- a/src/openrct2/ride/track_design.c +++ b/src/openrct2/ride/track_design.c @@ -53,7 +53,6 @@ rct_xyz16 gTrackPreviewMin; rct_xyz16 gTrackPreviewMax; rct_xyz16 gTrackPreviewOrigin; -uint8 byte_F4414E; bool byte_9D8150; static uint8 _trackDesignPlaceOperation; static bool _trackDesignDontPlaceScenery; @@ -61,6 +60,12 @@ static money32 _trackDesignPlaceCost; static sint16 _trackDesignPlaceZ; static sint16 _trackDesignPlaceSceneryZ; +// Previously all flags in byte_F4414E +static bool _trackDesignPlaceStateEntranceExitPlaced = false; +static bool _trackDesignPlaceStateSceneryUnavailable = false; +static bool _trackDesignPlaceStateHasScenery = false; +static bool _trackDesignPlaceStatePlaceScenery = true; + static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength); static map_backup *track_design_preview_backup_map(); static void track_design_preview_restore_map(map_backup *backup); @@ -553,10 +558,10 @@ static sint32 track_design_place_scenery(rct_td6_scenery_element *scenery_start, { for (uint8 mode = 0; mode <= 1; mode++) { if ((scenery_start->scenery_object.flags & 0xFF) != 0xFF) { - byte_F4414E |= BYTE_F4414E_HAS_SCENERY; + _trackDesignPlaceStateHasScenery = true; } - if (byte_F4414E & BYTE_F4414E_DONT_PLACE_SCENERY) { + if (!_trackDesignPlaceStatePlaceScenery) { continue; } @@ -719,13 +724,14 @@ static sint32 track_design_place_scenery(rct_td6_scenery_element *scenery_start, uint8 entry_type, entry_index; if (!find_object_in_entry_group(&scenery->scenery_object, &entry_type, &entry_index)){ entry_type = scenery->scenery_object.flags & 0xF; - if (entry_type != OBJECT_TYPE_PATHS){ - byte_F4414E |= BYTE_F4414E_SCENERY_UNAVAILABLE; + if (entry_type != OBJECT_TYPE_PATHS) + { + _trackDesignPlaceStateSceneryUnavailable = true; continue; } - if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER){ - byte_F4414E |= BYTE_F4414E_SCENERY_UNAVAILABLE; + if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) { + _trackDesignPlaceStateSceneryUnavailable = true; continue; } @@ -741,7 +747,7 @@ static sint32 track_design_place_scenery(rct_td6_scenery_element *scenery_start, } if (entry_index == object_entry_group_counts[OBJECT_TYPE_PATHS]){ - byte_F4414E |= BYTE_F4414E_SCENERY_UNAVAILABLE; + _trackDesignPlaceStateSceneryUnavailable = true; continue; } } @@ -884,7 +890,7 @@ static sint32 track_design_place_scenery(rct_td6_scenery_element *scenery_start, } break; default: - byte_F4414E |= BYTE_F4414E_SCENERY_UNAVAILABLE; + _trackDesignPlaceStateSceneryUnavailable = true; continue; break; } @@ -958,7 +964,7 @@ static sint32 track_design_place_maze(rct_track_td6 *td6, sint16 x, sint16 y, si cost = game_do_command(mapCoord.x, bl | rotation << 8, mapCoord.y, rideIndex, GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, 0, 0); } if (cost != MONEY32_UNDEFINED){ - byte_F4414E |= BYTE_F4414E_ENTRANCE_EXIT_PLACED; + _trackDesignPlaceStateEntranceExitPlaced = true; } break; case 0x80: @@ -977,7 +983,7 @@ static sint32 track_design_place_maze(rct_track_td6 *td6, sint16 x, sint16 y, si cost = game_do_command(mapCoord.x, bl | rotation << 8, mapCoord.y, rideIndex | (1 << 8), GAME_COMMAND_PLACE_RIDE_ENTRANCE_OR_EXIT, 0, 0); } if (cost != MONEY32_UNDEFINED){ - byte_F4414E |= BYTE_F4414E_ENTRANCE_EXIT_PLACED; + _trackDesignPlaceStateEntranceExitPlaced = true; } break; default: @@ -1249,7 +1255,7 @@ static bool track_design_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint _trackDesignPlaceCost = cost; return 0; } - byte_F4414E |= BYTE_F4414E_ENTRANCE_EXIT_PLACED; + _trackDesignPlaceStateEntranceExitPlaced = true; break; } while (!map_element_is_last_for_tile(map_element++)); } else { @@ -1268,7 +1274,7 @@ static bool track_design_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint else { _trackDesignPlaceCost += cost; - byte_F4414E |= BYTE_F4414E_ENTRANCE_EXIT_PLACED; + _trackDesignPlaceStateEntranceExitPlaced = true; } } break; @@ -1299,10 +1305,15 @@ static bool track_design_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint */ sint32 place_virtual_track(rct_track_td6 *td6, uint8 ptdOperation, bool placeScenery, uint8 rideIndex, sint32 x, sint32 y, sint32 z) { - byte_F4414E = (!placeScenery) ? BYTE_F4414E_DONT_PLACE_SCENERY : 0; + // Previously byte_F4414E was cleared here + _trackDesignPlaceStatePlaceScenery = placeScenery; + _trackDesignPlaceStateEntranceExitPlaced = false; + _trackDesignPlaceStateSceneryUnavailable = false; + _trackDesignPlaceStateHasScenery = false; + _trackDesignPlaceOperation = ptdOperation; if (gTrackDesignSceneryToggle) { - byte_F4414E |= BYTE_F4414E_DONT_PLACE_SCENERY; + _trackDesignPlaceStatePlaceScenery = false; } _currentRideIndex = rideIndex; @@ -1395,14 +1406,14 @@ static bool track_design_place_preview(rct_track_td6 *td6, money32 *cost, uint8 _currentTrackPieceDirection = 0; sint32 z = place_virtual_track(td6, PTD_OPERATION_GET_PLACE_Z, true, 0, mapSize, mapSize, 16); - if (byte_F4414E & BYTE_F4414E_HAS_SCENERY) { + if (_trackDesignPlaceStateHasScenery) { *flags |= TRACK_DESIGN_FLAG_HAS_SCENERY; } z += 16 - _trackDesignPlaceSceneryZ; bool placeScenery = true; - if (byte_F4414E & BYTE_F4414E_SCENERY_UNAVAILABLE) { + if (_trackDesignPlaceStateSceneryUnavailable) { placeScenery = false; *flags |= TRACK_DESIGN_FLAG_SCENERY_UNAVAILABLE; } @@ -1513,7 +1524,7 @@ static money32 place_track_design(sint16 x, sint16 y, sint16 z, uint8 flags, uin if (!(flags & GAME_COMMAND_FLAG_APPLY)) { _trackDesignDontPlaceScenery = false; cost = place_virtual_track(td6, PTD_OPERATION_1, true, rideIndex, x, y, z); - if (byte_F4414E & BYTE_F4414E_SCENERY_UNAVAILABLE) { + if (_trackDesignPlaceStateSceneryUnavailable) { _trackDesignDontPlaceScenery = true; cost = place_virtual_track(td6, PTD_OPERATION_1, false, rideIndex, x, y, z); } @@ -1909,4 +1920,9 @@ static void track_design_preview_clear_map() map_update_tile_pointers(); } +bool track_design_are_entrance_and_exit_placed() +{ + return _trackDesignPlaceStateEntranceExitPlaced; +} + #pragma endregion diff --git a/src/openrct2/ride/track_design.h b/src/openrct2/ride/track_design.h index 24547fb0a7..9a361259b3 100644 --- a/src/openrct2/ride/track_design.h +++ b/src/openrct2/ride/track_design.h @@ -19,6 +19,8 @@ #include "../common.h" #include "../object.h" +#include "../rct12.h" +#include "../rct2.h" #include "../world/map.h" #include "vehicle.h" @@ -92,7 +94,7 @@ typedef struct rct_track_td6 { uint8 track_flags; // 0x06 }; uint8 version_and_colour_scheme; // 0x07 0b0000_VVCC - rct_vehicle_colour vehicle_colours[32]; // 0x08 + rct_vehicle_colour vehicle_colours[RCT2_MAX_CARS_PER_TRAIN]; // 0x08 union{ uint8 pad_48; uint8 track_spine_colour_rct1; // 0x48 @@ -127,14 +129,14 @@ typedef struct rct_track_td6 { uint8 intensity; // 0x5C uint8 nausea; // 0x5D money16 upkeep_cost; // 0x5E - uint8 track_spine_colour[4]; // 0x60 - uint8 track_rail_colour[4]; // 0x64 - uint8 track_support_colour[4]; // 0x68 + uint8 track_spine_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x60 + uint8 track_rail_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x64 + uint8 track_support_colour[RCT12_NUM_COLOUR_SCHEMES]; // 0x68 uint32 flags2; // 0x6C rct_object_entry vehicle_object; // 0x70 uint8 space_required_x; // 0x80 uint8 space_required_y; // 0x81 - uint8 vehicle_additional_colour[32]; // 0x82 + uint8 vehicle_additional_colour[RCT2_MAX_CARS_PER_TRAIN]; // 0x82 uint8 lift_hill_speed_num_circuits; // 0xA2 0bCCCL_LLLL void *elements; // 0xA3 (data starts here in file) size_t elementsSize; @@ -179,13 +181,6 @@ enum { TRACK_DESIGN_FLAG_VEHICLE_UNAVAILABLE = (1 << 2), }; -enum { - BYTE_F4414E_ENTRANCE_EXIT_PLACED = (1 << 0), - BYTE_F4414E_SCENERY_UNAVAILABLE = (1 << 1), - BYTE_F4414E_HAS_SCENERY = (1 << 2), - BYTE_F4414E_DONT_PLACE_SCENERY = (1 << 7) -}; - enum { PTD_OPERATION_DRAW_OUTLINES, PTD_OPERATION_1, @@ -197,13 +192,11 @@ enum { }; extern rct_track_td6 *gActiveTrackDesign; -extern uint8 gTrackDesignPlaceFlags; extern bool gTrackDesignSceneryToggle; extern rct_xyz16 gTrackPreviewMin; extern rct_xyz16 gTrackPreviewMax; extern rct_xyz16 gTrackPreviewOrigin; -extern uint8 byte_F4414E; extern bool byte_9D8150; extern bool gTrackDesignSaveMode; @@ -235,4 +228,6 @@ void track_design_save_select_map_element(sint32 interactionType, sint32 x, sint bool track_design_save(uint8 rideIndex); bool track_design_save_to_file(const utf8 *path); +bool track_design_are_entrance_and_exit_placed(); + #endif diff --git a/src/openrct2/windows/track_place.c b/src/openrct2/windows/track_place.c index b7ff212204..7c36eec6d2 100644 --- a/src/openrct2/windows/track_place.c +++ b/src/openrct2/windows/track_place.c @@ -332,7 +332,7 @@ static void window_track_place_tooldown(rct_window* w, rct_widgetindex widgetInd audio_play_sound_at_location(SOUND_PLACE_ITEM, mapX, mapY, mapZ); _currentRideIndex = rideIndex; - if (byte_F4414E & BYTE_F4414E_ENTRANCE_EXIT_PLACED) { + if (track_design_are_entrance_and_exit_placed()) { window_ride_main_open(rideIndex); window_close(w); } else {