Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Encode Track Type in Track Element #15367

Closed
duncanspumpkin opened this issue Sep 7, 2021 · 8 comments
Closed

Encode Track Type in Track Element #15367

duncanspumpkin opened this issue Sep 7, 2021 · 8 comments
Labels
feature Add something new to the game. requires new save format Cannot be done until the new save format is deployed.

Comments

@duncanspumpkin
Copy link
Contributor

Describe the feature

Currently the rendering of a track element is governed by its associated ride "type" but most of the community likes to mix and match across different ride types. This is currently achevied by merging of two different rides. This though is a waste of ride indexs and means for complex building. I propose that instead the track elements rendering is governed by its track type. This would be acheived by using up the free space in the track element to add a new field TrackType (eventually renamed to TrackObjectType if we ever manage to move track drawing into object files).

https://github.com/OpenRCT2/OpenRCT2/blob/develop/src/openrct2/world/TileElement.h#L378

At present this would only use one byte of space but if we ever want to move to objects for tracks we might need to allocate two bytes.

This is obviously only possible on the NSF and also it would be gated behind some cheats. Would require a new track format as well for best compatability.

Feature type

Quality of life

@duncanspumpkin duncanspumpkin added feature Add something new to the game. requires new save format Cannot be done until the new save format is deployed. labels Sep 7, 2021
@spacek531
Copy link
Contributor

spacek531 commented Sep 7, 2021

When track type objects are added, the remove_unused_object command will have to look at all track elements. This isn't a problem, just noting it down.

@spacek531
Copy link
Contributor

spacek531 commented Sep 12, 2021

Some people have said to me they would love to be able to change the appearance of just the brakes on e.g. giga coaster or looping coaster, to mimic more modern coaster styles like Intamin LSM and Vekoma loopers. Having a simple one byte 'this appears like this ride type' field is elegant, but to me it seems like a waste to create a new track type just to change one element appearance.

@frutiemax
Copy link
Contributor

frutiemax commented Sep 14, 2021

        TRACK_PAINT_FUNCTION_GETTER paintFunctionGetter = ride->GetRideTypeDescriptor().TrackPaintFunction;
        if (paintFunctionGetter != nullptr)
        {
            TRACK_PAINT_FUNCTION paintFunction = paintFunctionGetter(trackType);
            if (paintFunction != nullptr)
            {
                paintFunction(session, ride, trackSequence, direction, height, trackElement);
            }
        }

If I understand, you think it would be better to first get the trackElement, then based on the new TrackType field in the TrackElement struct (not TrackElementDescriptor), you would decide if you draw a giga track or a corkscrew track for example?

EDIT - I'm not too sure, can you give an example?

@spacek531
Copy link
Contributor

Aren't RTDs available by ride type with GetRideTypeDescriptor(rideType)? If so, then it can just get the paint function there.

@frutiemax
Copy link
Contributor

Right now, it's a TrackType field that got added to the Ride struct. You need an additional RideType variable that would be not the same as the one in the ride struct to do it like this.

@spacek531
Copy link
Contributor

spacek531 commented Sep 14, 2021

This proposal puts a rideType byte into track elements. So it looks up the RTD for the rideType listed in the piece and paints the piece with that RTD's paint code. By default, the rideType byte is set to the ride's rideType.

frutiemax pushed a commit to frutiemax/OpenRCT2 that referenced this issue Sep 14, 2021
@duncanspumpkin
Copy link
Contributor Author

Yeah in this issue I've called it track type but yeah i realise that there is also a field at present for the track id called track type. All gets a bit confusing in naming.

@duncanspumpkin
Copy link
Contributor Author

This is now part of the game.

Gymnasiast added a commit that referenced this issue Dec 2, 2021
Gymnasiast added a commit that referenced this issue Apr 25, 2022
- Headline feature: [#10664] New save format with increased limits.
- Feature: [#714] Allow up to 255 trains per ride.
- Feature: [#2253] Path surfaces and railings can be mixed and matched, like in RCT1.
- Feature: [#2766] The Fruity Ices Stall can now be recoloured, like in RCT1.
- Feature: [#4933] Allow map sizes of 999 × 999 (up from 254 × 254).
- Feature: [#7660] Custom music objects that are distributed with the save.
- Feature: [#8407] Ride platforms can be made invisible.
- Feature: [#12793] Add Excitement/Intensity/Nausea ratings to Ride List view with sorting.
- Feature: [#13858] Flatride bases can be made invisible.
- Feature: [#14676] [Plugin] Allow plugins to store data in .park files.
- Feature: [#15367] Individual track elements can now be drawn as another ride type.
- Feature: [#15901] [Plugin] Add ‘map.getAllEntitiesOnTile’ to API.
- Feature: [#16029] [Plugin] Add ‘TrackElement.rideType’ to API.
- Feature: [#16097] The Looping Roller Coaster can now draw all elements from the LIM Launched Roller Coaster.
- Feature: [#16132, #16389] The Corkscrew, Twister and Vertical Drop Roller Coasters can now draw inline twists.
- Feature: [#16144] [Plugin] Add ‘ImageManager’ to API.
- Feature: [#16707] [Plugin] Implement intransient plugins.
- Feature: [#16707] [Plugin] New API for current mode, ‘map.change’ hook and toolbox menu items on title screen.
- Feature: [#16731] [Plugin] New API for fetching and manipulating a staff member’s patrol area.
- Feature: [#16800] [Plugin] Add lift hill speed properties to API.
- Feature: [#16806] Parkobj can load sprites from RCT image archives.
- Feature: [#16831] Allow tertiary colours for small and large scenery objects.
- Feature: [#16872] [Plugin] Add support for custom images.
- Improved: [#3517] Cheats are now saved with the park.
- Improved: [#10150] Ride stations are now properly checked if they’re sheltered.
- Improved: [#10664, #16072] Visibility status can be modified directly in the Tile Inspector’s list.
- Improved: [#16251] Plugin API handles null values better.
- Improved: [#16251] openrct2.d.ts: mark ‘callback’ argument of queryAction and executeAction as optional.
- Improved: [#16251] openrct2.d.ts: change ‘network.status’ to ‘network.mode’ in network API docs.
- Improved: [#16251] openrct2.d.ts: added previously undocumented ‘GroupBoxWidget.text’ property.
- Improved: [#16251] openrct2.d.ts: removed unused ‘LabelWidget.onChange’ property.
- Improved: [#16258] Increased image limit in the engine.
- Improved: [#16408] Improve ‘--version’ cli option to report more compatibility information.
- Improved: [#16740] Allow staff patrol areas to be defined with individual tiles rather than groups of 4x4.
- Improved: [#16764] [Plugin] Add hook ‘map.save’, called before the map is saved.
- Improved: [#16925] The queue length of 1000 guests is lifted, and a warning for too long queues is added instead.
- Change: [#14484] Make the Heartline Twister coaster ratings a little bit less hateful.
- Change: [#16077] When importing SV6 files, the RCT1 land types are only added when they were actually used.
- Change: [#16424] Following an entity in the title sequence no longer toggles underground view when it’s underground.
- Change: [#16493] Boat Hire and Submarine Ride support costs now match their visual appearance.
- Change: [#16710] Changed default view of Guest List to ‘Thoughts’ and selected tab will default to ‘Summarised’ (when opened from the menu).
- Change: [#16859] Guests with umbrellas no longer always avoid going into a Maze.
- Change: [#16912] Tired or nauseated guests will no longer jump in a Maze.
- Fix: [#6767] Black screen after Alt-Tabbing back into the game.
- Fix: [#11752] Track pieces with fractional cost are too cheap to build.
- Fix: [#12556] Allow game to run without audio devices.
- Fix: [#12774] [Plugin] Scripts will not be re-initialised when a new scenario is loaded from within a running scenario.
- Fix: [#13336] Can no longer place Bumble Bee track design (reverts #12707).
- Fix: [#14155] Map Generator sometimes places non-tree objects as trees.
- Fix: [#14674] Recent Messages only shows first few notifications.
- Fix: [#14920] Ghosts for rides and shops do not auto-elevate when obscured.
- Fix: [#15413] Modifying park rating with plugins desyncs park rating history from actual park rating.
- Fix: [#15571] Non-ASCII characters in scenario description get distorted while saving.
- Fix: [#15830] Objects with RCT1 images are very glitchy if OpenRCT2 is not linked to an RCT1 install.
- Fix: [#15909] Text can overflow in ‘Select ride design’ windows.
- Fix: [#15947, #15960] Removing a flat ride results in an error message and duplicate structures.
- Fix: [#15998] Cannot set map size to the actual maximum.
- Fix: [#16007] Scenario Editor “Entry Price” appears to the right of the value field.
- Fix: [#16008] Tile Inspector can select elements from last tile without reselecting it.
- Fix: [#16024] Go-Karts with more than 32 vehicles do not colour themselves correctly.
- Fix: [#16026] Newly created rides with “Disable vehicle limits” cheat always get 32 trains with 12 cars each.
- Fix: [#16063] Object Selection preview for objects with glass is broken.
- Fix: [#16075] Exporting track designs saves scenery in incorrect locations.
- Fix: [#16087] The Looping Roller Coaster booster is now always drawn correctly.
- Fix: [#16140] The ‘Follow this’ option is now disabled when the ride view is set to ‘overall’ or a station.
- Fix: [#16162] Go Karts speeds are not correctly randomised, they only go very fast or very slow.
- Fix: [#16188] Medium-size banked turns on the Twister and Vertical Roller Coaster have incorrect support placement (partly original bug).
- Fix: [#16264, #16572] Placing saved track design crashes game.
- Fix  [#16308] Crash when trying to place down a ride on Android.
- Fix: [#16327] Crash on malformed network packet.
- Fix: [#16449] [Plugin] Viewport doesn't hide when switching tabs.
- Fix: [#16450] Banner style not copied when using tile inspector.
- Fix: [#16535] Entering construction mode unblocks all paths.
- Fix: [#16542] “Same price throughout park” status not correctly imported for RCT1 saves.
- Fix: [#16572] Crash when trying to place track designs.
- Fix: [#16591] [Plugin] ‘setInterval’ and ‘setTimeout’ is not disposed when map unloads.
- Fix: [#16711] [Plugin] ‘Car.rideObject’ overflowing with more than 256 ride types.
- Fix: [#16779] Fix case where title music doesn't unmute properly.
- Fix: [#16808] Incorrect track design serialisation causing vehicle object replacement.
- Fix: [#16869] Soft Toy Stall cannot be recoloured, but shows a recolouring option anyway (original bug).
- Fix: [#16995] Native Linux dialog windows do not open if the path contains single quotes.
- Fix: [objects#165] Glitch when Bengal Tiger Cars go through a corner.
rik-smeets pushed a commit to rik-smeets/OpenRCT2 that referenced this issue Jun 11, 2022
- Headline feature: [OpenRCT2#10664] New save format with increased limits.
- Feature: [OpenRCT2#714] Allow up to 255 trains per ride.
- Feature: [OpenRCT2#2253] Path surfaces and railings can be mixed and matched, like in RCT1.
- Feature: [OpenRCT2#2766] The Fruity Ices Stall can now be recoloured, like in RCT1.
- Feature: [OpenRCT2#4933] Allow map sizes of 999 × 999 (up from 254 × 254).
- Feature: [OpenRCT2#7660] Custom music objects that are distributed with the save.
- Feature: [OpenRCT2#8407] Ride platforms can be made invisible.
- Feature: [OpenRCT2#12793] Add Excitement/Intensity/Nausea ratings to Ride List view with sorting.
- Feature: [OpenRCT2#13858] Flatride bases can be made invisible.
- Feature: [OpenRCT2#14676] [Plugin] Allow plugins to store data in .park files.
- Feature: [OpenRCT2#15367] Individual track elements can now be drawn as another ride type.
- Feature: [OpenRCT2#15901] [Plugin] Add ‘map.getAllEntitiesOnTile’ to API.
- Feature: [OpenRCT2#16029] [Plugin] Add ‘TrackElement.rideType’ to API.
- Feature: [OpenRCT2#16097] The Looping Roller Coaster can now draw all elements from the LIM Launched Roller Coaster.
- Feature: [OpenRCT2#16132, OpenRCT2#16389] The Corkscrew, Twister and Vertical Drop Roller Coasters can now draw inline twists.
- Feature: [OpenRCT2#16144] [Plugin] Add ‘ImageManager’ to API.
- Feature: [OpenRCT2#16707] [Plugin] Implement intransient plugins.
- Feature: [OpenRCT2#16707] [Plugin] New API for current mode, ‘map.change’ hook and toolbox menu items on title screen.
- Feature: [OpenRCT2#16731] [Plugin] New API for fetching and manipulating a staff member’s patrol area.
- Feature: [OpenRCT2#16800] [Plugin] Add lift hill speed properties to API.
- Feature: [OpenRCT2#16806] Parkobj can load sprites from RCT image archives.
- Feature: [OpenRCT2#16831] Allow tertiary colours for small and large scenery objects.
- Feature: [OpenRCT2#16872] [Plugin] Add support for custom images.
- Improved: [OpenRCT2#3517] Cheats are now saved with the park.
- Improved: [OpenRCT2#10150] Ride stations are now properly checked if they’re sheltered.
- Improved: [OpenRCT2#10664, OpenRCT2#16072] Visibility status can be modified directly in the Tile Inspector’s list.
- Improved: [OpenRCT2#16251] Plugin API handles null values better.
- Improved: [OpenRCT2#16251] openrct2.d.ts: mark ‘callback’ argument of queryAction and executeAction as optional.
- Improved: [OpenRCT2#16251] openrct2.d.ts: change ‘network.status’ to ‘network.mode’ in network API docs.
- Improved: [OpenRCT2#16251] openrct2.d.ts: added previously undocumented ‘GroupBoxWidget.text’ property.
- Improved: [OpenRCT2#16251] openrct2.d.ts: removed unused ‘LabelWidget.onChange’ property.
- Improved: [OpenRCT2#16258] Increased image limit in the engine.
- Improved: [OpenRCT2#16408] Improve ‘--version’ cli option to report more compatibility information.
- Improved: [OpenRCT2#16740] Allow staff patrol areas to be defined with individual tiles rather than groups of 4x4.
- Improved: [OpenRCT2#16764] [Plugin] Add hook ‘map.save’, called before the map is saved.
- Improved: [OpenRCT2#16925] The queue length of 1000 guests is lifted, and a warning for too long queues is added instead.
- Change: [OpenRCT2#14484] Make the Heartline Twister coaster ratings a little bit less hateful.
- Change: [OpenRCT2#16077] When importing SV6 files, the RCT1 land types are only added when they were actually used.
- Change: [OpenRCT2#16424] Following an entity in the title sequence no longer toggles underground view when it’s underground.
- Change: [OpenRCT2#16493] Boat Hire and Submarine Ride support costs now match their visual appearance.
- Change: [OpenRCT2#16710] Changed default view of Guest List to ‘Thoughts’ and selected tab will default to ‘Summarised’ (when opened from the menu).
- Change: [OpenRCT2#16859] Guests with umbrellas no longer always avoid going into a Maze.
- Change: [OpenRCT2#16912] Tired or nauseated guests will no longer jump in a Maze.
- Fix: [OpenRCT2#6767] Black screen after Alt-Tabbing back into the game.
- Fix: [OpenRCT2#11752] Track pieces with fractional cost are too cheap to build.
- Fix: [OpenRCT2#12556] Allow game to run without audio devices.
- Fix: [OpenRCT2#12774] [Plugin] Scripts will not be re-initialised when a new scenario is loaded from within a running scenario.
- Fix: [OpenRCT2#13336] Can no longer place Bumble Bee track design (reverts OpenRCT2#12707).
- Fix: [OpenRCT2#14155] Map Generator sometimes places non-tree objects as trees.
- Fix: [OpenRCT2#14674] Recent Messages only shows first few notifications.
- Fix: [OpenRCT2#14920] Ghosts for rides and shops do not auto-elevate when obscured.
- Fix: [OpenRCT2#15413] Modifying park rating with plugins desyncs park rating history from actual park rating.
- Fix: [OpenRCT2#15571] Non-ASCII characters in scenario description get distorted while saving.
- Fix: [OpenRCT2#15830] Objects with RCT1 images are very glitchy if OpenRCT2 is not linked to an RCT1 install.
- Fix: [OpenRCT2#15909] Text can overflow in ‘Select ride design’ windows.
- Fix: [OpenRCT2#15947, OpenRCT2#15960] Removing a flat ride results in an error message and duplicate structures.
- Fix: [OpenRCT2#15998] Cannot set map size to the actual maximum.
- Fix: [OpenRCT2#16007] Scenario Editor “Entry Price” appears to the right of the value field.
- Fix: [OpenRCT2#16008] Tile Inspector can select elements from last tile without reselecting it.
- Fix: [OpenRCT2#16024] Go-Karts with more than 32 vehicles do not colour themselves correctly.
- Fix: [OpenRCT2#16026] Newly created rides with “Disable vehicle limits” cheat always get 32 trains with 12 cars each.
- Fix: [OpenRCT2#16063] Object Selection preview for objects with glass is broken.
- Fix: [OpenRCT2#16075] Exporting track designs saves scenery in incorrect locations.
- Fix: [OpenRCT2#16087] The Looping Roller Coaster booster is now always drawn correctly.
- Fix: [OpenRCT2#16140] The ‘Follow this’ option is now disabled when the ride view is set to ‘overall’ or a station.
- Fix: [OpenRCT2#16162] Go Karts speeds are not correctly randomised, they only go very fast or very slow.
- Fix: [OpenRCT2#16188] Medium-size banked turns on the Twister and Vertical Roller Coaster have incorrect support placement (partly original bug).
- Fix: [OpenRCT2#16264, OpenRCT2#16572] Placing saved track design crashes game.
- Fix  [OpenRCT2#16308] Crash when trying to place down a ride on Android.
- Fix: [OpenRCT2#16327] Crash on malformed network packet.
- Fix: [OpenRCT2#16449] [Plugin] Viewport doesn't hide when switching tabs.
- Fix: [OpenRCT2#16450] Banner style not copied when using tile inspector.
- Fix: [OpenRCT2#16535] Entering construction mode unblocks all paths.
- Fix: [OpenRCT2#16542] “Same price throughout park” status not correctly imported for RCT1 saves.
- Fix: [OpenRCT2#16572] Crash when trying to place track designs.
- Fix: [OpenRCT2#16591] [Plugin] ‘setInterval’ and ‘setTimeout’ is not disposed when map unloads.
- Fix: [OpenRCT2#16711] [Plugin] ‘Car.rideObject’ overflowing with more than 256 ride types.
- Fix: [OpenRCT2#16779] Fix case where title music doesn't unmute properly.
- Fix: [OpenRCT2#16808] Incorrect track design serialisation causing vehicle object replacement.
- Fix: [OpenRCT2#16869] Soft Toy Stall cannot be recoloured, but shows a recolouring option anyway (original bug).
- Fix: [OpenRCT2#16995] Native Linux dialog windows do not open if the path contains single quotes.
- Fix: [objects#165] Glitch when Bengal Tiger Cars go through a corner.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature Add something new to the game. requires new save format Cannot be done until the new save format is deployed.
Projects
None yet
Development

No branches or pull requests

3 participants