diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ff8dbde77d..a14f298fea 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3660,9 +3660,15 @@ STR_6468 :Not Yet Known STR_6469 :Adjust smaller area of patrol area STR_6470 :Adjust larger area of patrol area STR_6471 :See-Through Vehicles -STR_6472 :Invisible Rides -STR_6473 :Invisible Scenery -STR_6474 :Invisible Paths +STR_6472 :See-Through Trees +STR_6473 :Invisible Rides +STR_6474 :Invisible Scenery +STR_6475 :Invisible Trees +STR_6476 :Invisible Paths +STR_6477 :Invisible Guests +STR_6478 :Invisible Staff +STR_6479 :Transparency Options +STR_6480 :Transparency Options ############# # Scenarios # diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 35461b82a7..91b7953f46 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -3638,7 +3638,7 @@ static void TopToolbarInitViewMenu(rct_window* w, rct_widget* widget) ToggleOption(DDIDX_VIEW_CLIPPING, STR_VIEW_CLIPPING_MENU), ToggleOption(DDIDX_HIGHLIGHT_PATH_ISSUES, STR_HIGHLIGHT_PATH_ISSUES_MENU), Separator(), - ToggleOption(DDIDX_TRANSPARENCY, STR_INVISIBLE_PEOPLE), + ToggleOption(DDIDX_TRANSPARENCY, STR_TRANSPARENCY_OPTIONS), }; static_assert(ItemIDsMatchIndices(items)); diff --git a/src/openrct2-ui/windows/Transparency.cpp b/src/openrct2-ui/windows/Transparency.cpp index 271849499e..ad6d7e718e 100644 --- a/src/openrct2-ui/windows/Transparency.cpp +++ b/src/openrct2-ui/windows/Transparency.cpp @@ -56,10 +56,12 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX WIDX_SEE_THROUGH_RIDES, WIDX_SEE_THROUGH_VEHICLES, WIDX_SEE_THROUGH_SCENERY, + WIDX_SEE_THROUGH_TREES, WIDX_SEE_THROUGH_PATHS, WIDX_INVISIBLE_GROUP, WIDX_INVISIBLE_RIDES, WIDX_INVISIBLE_SCENERY, + WIDX_INVISIBLE_TREES, WIDX_INVISIBLE_PATHS, WIDX_INVISIBLE_SUPPORTS, WIDX_INVISIBLE_GUESTS, @@ -72,7 +74,7 @@ enum WINDOW_TRANSPARENCY_WIDGET_IDX #pragma region MEASUREMENTS -static constexpr const rct_string_id WINDOW_TITLE = STR_CHEAT_TITLE; +static constexpr const rct_string_id WINDOW_TITLE = STR_TRANSPARENCY_OPTIONS_TITLE; static constexpr const int32_t WW = 249; static constexpr const int32_t WH = 300; @@ -100,26 +102,28 @@ static rct_widget window_transparency_main_widgets[] = MAIN_TRANSPARENCY_WIDGETS, MakeWidget({ 5, 48}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // General parameters group frame - MakeWidget({ 11, 63}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNDERGROUND_VIEW, STR_UNDERGROUND_VIEW), - MakeWidget({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_VIEWPORT_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), - MakeWidget({ 11, 97}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_BASE_LAND, STR_REMOVE_BASE_LAND), - MakeWidget({ 11, 114}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_VERTICAL_FACES, STR_REMOVE_VERTICAL_FACES), + MakeWidget({ 11, 63}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNDERGROUND_VIEW, STR_UNDERGROUND_VIEW), + MakeWidget({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_VIEWPORT_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), + MakeWidget({ 11, 97}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_BASE_LAND, STR_REMOVE_BASE_LAND), + MakeWidget({ 11, 114}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_REMOVE_VERTICAL_FACES, STR_REMOVE_VERTICAL_FACES), - MakeWidget({ 5, 136}, {238, 83}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // See-through parameters group frame + MakeWidget({ 5, 136}, {238, 100}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // See-through parameters group frame - MakeWidget({ 11, 151}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_RIDES, STR_SEE_THROUGH_RIDES), - MakeWidget({ 11, 168}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), - MakeWidget({ 11, 185}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), - MakeWidget({ 11, 202}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_PATHS, STR_SEE_THROUGH_PATHS), + MakeWidget({ 11, 151}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_RIDES, STR_SEE_THROUGH_RIDES), + MakeWidget({ 11, 168}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_VEHICLES, STR_SEE_THROUGH_VEHICLES), + MakeWidget({ 11, 185}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_SCENERY, STR_SEE_THROUGH_SCENERY), + MakeWidget({ 11, 202}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_TREES, STR_SEE_THROUGH_TREES), // Trees + MakeWidget({ 11, 219}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SEE_THROUGH_PATHS, STR_SEE_THROUGH_PATHS), - MakeWidget({ 5, 224}, {238, 117}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Invisible parameters group frame + MakeWidget({ 5, 241}, {238, 134}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Invisible parameters group frame - MakeWidget({ 11, 239}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), - MakeWidget({ 11, 256}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), - MakeWidget({ 11, 273}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), - MakeWidget({ 11, 290}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), - MakeWidget({ 11, 307}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PEOPLE, STR_INVISIBLE_PEOPLE), - MakeWidget({ 11, 324}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PEOPLE, STR_INVISIBLE_PEOPLE), + MakeWidget({ 11, 256}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_RIDES, STR_INVISIBLE_RIDES), + MakeWidget({ 11, 273}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SCENERY, STR_INVISIBLE_SCENERY), + MakeWidget({ 11, 290}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_TREES, STR_INVISIBLE_TREES), // Trees + MakeWidget({ 11, 307}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_PATHS, STR_INVISIBLE_PATHS), + MakeWidget({ 11, 324}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_SUPPORTS, STR_INVISIBLE_SUPPORTS), + MakeWidget({ 11, 341}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_GUESTS, STR_INVISIBLE_GUESTS), // Guests + MakeWidget({ 11, 358}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_INVISIBLE_STAFF, STR_INVISIBLE_STAFF), // Staff { WIDGETS_END }, }; @@ -127,7 +131,7 @@ static rct_widget window_transparency_main_widgets[] = static rct_widget window_transparency_rides_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget({ 5, 48}, {238, 279}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS ), // Guests parameters group frame + MakeWidget({ 5, 48}, {238, 279}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_SET_GUESTS_PARAMETERS), // Guests parameters group frame { WIDGETS_END }, }; @@ -135,7 +139,7 @@ static rct_widget window_transparency_rides_widgets[] = static rct_widget window_transparency_misc_widgets[] = { MAIN_TRANSPARENCY_WIDGETS, - MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP ), // General group + MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP), // General group { WIDGETS_END }, }; @@ -159,10 +163,12 @@ static uint64_t window_transparency_page_enabled_widgets[] = { (1ULL << WIDX_SEE_THROUGH_RIDES) | (1ULL << WIDX_SEE_THROUGH_VEHICLES) | (1ULL << WIDX_SEE_THROUGH_SCENERY) | + (1ULL << WIDX_SEE_THROUGH_TREES) | (1ULL << WIDX_SEE_THROUGH_PATHS) | (1ULL << WIDX_INVISIBLE_GROUP) | (1ULL << WIDX_INVISIBLE_RIDES) | (1ULL << WIDX_INVISIBLE_SCENERY) | + (1ULL << WIDX_INVISIBLE_TREES) | (1ULL << WIDX_INVISIBLE_PATHS) | (1ULL << WIDX_INVISIBLE_SUPPORTS) | (1ULL << WIDX_INVISIBLE_GUESTS) | @@ -255,20 +261,17 @@ public: w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL; break; case WIDX_SEE_THROUGH_RIDES: - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES) - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; - else - w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES; break; case WIDX_SEE_THROUGH_VEHICLES: - if (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES) - w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; - else - w->viewport->flags |= VIEWPORT_FLAG_SEETHROUGH_RIDES | VIEWPORT_FLAG_SEETHROUGH_VEHICLES; + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_VEHICLES; break; case WIDX_SEE_THROUGH_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; break; + case WIDX_SEE_THROUGH_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_TREES; + break; case WIDX_SEE_THROUGH_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS; break; @@ -278,6 +281,9 @@ public: case WIDX_INVISIBLE_SCENERY: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SCENERY; break; + case WIDX_INVISIBLE_TREES: + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_TREES; + break; case WIDX_INVISIBLE_PATHS: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PATHS; break; @@ -285,10 +291,14 @@ public: w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; break; case WIDX_INVISIBLE_GUESTS: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_GUESTS; break; case WIDX_INVISIBLE_STAFF: - w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + if (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS; + w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_STAFF; break; } } @@ -327,12 +337,21 @@ public: SetCheckboxValue(WIDX_SEE_THROUGH_RIDES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)); SetCheckboxValue(WIDX_SEE_THROUGH_VEHICLES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_VEHICLES)); SetCheckboxValue(WIDX_SEE_THROUGH_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)); + SetCheckboxValue(WIDX_SEE_THROUGH_TREES, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_TREES)); SetCheckboxValue(WIDX_SEE_THROUGH_PATHS, (w->viewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS)); SetCheckboxValue(WIDX_INVISIBLE_RIDES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_RIDES)); + SetCheckboxValue(WIDX_INVISIBLE_SCENERY, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SCENERY)); + SetCheckboxValue(WIDX_INVISIBLE_TREES, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_TREES)); SetCheckboxValue(WIDX_INVISIBLE_PATHS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PATHS)); SetCheckboxValue(WIDX_INVISIBLE_SUPPORTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)); - SetCheckboxValue(WIDX_INVISIBLE_GUESTS, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); - SetCheckboxValue(WIDX_INVISIBLE_STAFF, (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); + SetCheckboxValue( + WIDX_INVISIBLE_GUESTS, + (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_GUESTS) + || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); + SetCheckboxValue( + WIDX_INVISIBLE_STAFF, + (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_STAFF) + || (w->viewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)); break; } } diff --git a/src/openrct2/entity/Peep.cpp b/src/openrct2/entity/Peep.cpp index 946906d13e..0ece4f2e33 100644 --- a/src/openrct2/entity/Peep.cpp +++ b/src/openrct2/entity/Peep.cpp @@ -2737,6 +2737,14 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const { return; } + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS) && Is()) + { + return; + } + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_STAFF) && Is()) + { + return; + } PeepActionSpriteType actionSpriteType = ActionSpriteType; uint8_t imageOffset = ActionSpriteImageOffset; @@ -2753,7 +2761,7 @@ void Peep::Paint(paint_session& session, int32_t imageDirection) const uint32_t imageId = baseImageId | TshirtColour << 19 | TrousersColour << 24 | IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS; PaintAddImageAsParent(session, imageId, { 0, 0, z }, { 1, 1, 11 }, { 0, 0, z + 5 }); - auto* guest = As(); + auto* guest = As(); if (guest != nullptr) { if (baseImageId >= 10717 && baseImageId < 10749) diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index 750c065362..55c74d9858 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -53,6 +53,10 @@ enum VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 21), VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 22), VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 23), + VIEWPORT_FLAG_INVISIBLE_GUESTS = (1 << 24), + VIEWPORT_FLAG_INVISIBLE_STAFF = (1 << 25), + VIEWPORT_FLAG_SEETHROUGH_TREES = (1 << 26), + VIEWPORT_FLAG_INVISIBLE_TREES = (1 << 27), }; enum class ViewportInteractionItem : uint8_t diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 2702596917..f2814ddcbf 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3929,9 +3929,15 @@ enum : uint16_t STR_ADJUST_LARGER_PATROL_AREA_TIP = 6470, STR_SEE_THROUGH_VEHICLES = 6471, - STR_INVISIBLE_RIDES = 6472, - STR_INVISIBLE_SCENERY = 6473, - STR_INVISIBLE_PATHS = 6474, + STR_SEE_THROUGH_TREES = 6472, + STR_INVISIBLE_RIDES = 6473, + STR_INVISIBLE_SCENERY = 6474, + STR_INVISIBLE_TREES = 6475, + STR_INVISIBLE_PATHS = 6476, + STR_INVISIBLE_GUESTS = 6477, + STR_INVISIBLE_STAFF = 6478, + STR_TRANSPARENCY_OPTIONS = 6479, + STR_TRANSPARENCY_OPTIONS_TITLE = 6480, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index b47cf74b3d..24dc44b1f2 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -122,6 +122,11 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height return; } + if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_TREES)) + { + return; + } + session.InteractionType = ViewportInteractionItem::Scenery; CoordsXYZ boxLength; CoordsXYZ boxOffset{ 0, 0, height }; @@ -142,6 +147,10 @@ void PaintSmallScenery(paint_session& session, uint8_t direction, int32_t height { imageTemplate = ImageId().WithRemap(FilterPaletteID::Palette44); } + else if (sceneryEntry->HasFlag(SMALL_SCENERY_FLAG_IS_TREE) && (session.ViewFlags & VIEWPORT_FLAG_SEETHROUGH_TREES)) + { + imageTemplate = ImageId().WithTransparancy(FilterPaletteID::PaletteDarken1); + } boxLength.x = 2; boxLength.y = 2; diff --git a/src/openrct2/ride/gentle/MiniGolf.cpp b/src/openrct2/ride/gentle/MiniGolf.cpp index 95c896496f..5eaae31483 100644 --- a/src/openrct2/ride/gentle/MiniGolf.cpp +++ b/src/openrct2/ride/gentle/MiniGolf.cpp @@ -1213,7 +1213,7 @@ void vehicle_visual_mini_golf_player( return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) { return; } @@ -1255,7 +1255,7 @@ void vehicle_visual_mini_golf_ball( return; } - if (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) + if ((session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_PEEPS) || (session.ViewFlags & VIEWPORT_FLAG_INVISIBLE_GUESTS)) { return; }