* Add initial interface.
* Implement move operator in MemoryStream
* Add pod array serialisation traits.
* Add push_back with move semantics to CircularBuffer
* Initial implementation of GameStateSnapshots
* Add GameStateSnapshots to Context.
* Add mp_desync console command.
* Compare sprite data and fill change list.
* Minor changes.
* Proof of concept.
* Calculate offset instead of using offsetof
* Implement game state difference detection
* Update mp_desync console command.
* Fix identification of sprite remove/add.
* Fix crash when only one peep in park when using mp_desync
* Output state differences into user directory desync folder.
* Add desync debugging as an option.
* Add information to network status when a desync report was created.
* Cast to proper type for %llu.
* Update xcode project
* Add more information to the diffed data.
* Remove client-only relevant fields.
* Cleanup.
* Add better name output for misc sprites
* Add srand0 and tick information to the output
* Bump up network version
* Cleanup
* Set desync_debugging to false as default
* Apply suggestions
For a static constant integer value, it's stylistically clearer to use constexpr instead of const. The resulting variable is implicitly const, but is also guaranteed to have a compile-time-computable value.
Use snprintf instead of _itoa as it's not available on all platforms. Also change the format specifies for unsigned variables to %u instead of %i, to be more correct...
Introduce a named constant for the width of a tab in the Guest window, and touch the places that set the window width to add it to the minimum window width when the debugging tab is enabled, so that the tab doesn't render off the side of the window.
Add a new tab to the Guest window which we can use to display debug information and tools for guests. At the moment it's blank and always visible; next step is to make it only show up when debugging tools are enabled.
In OpenRCT2, when vehicles roll backward on a long, flat track piece,
they would eventually change their direction of movement and move
forward instead, after their velocity reached -4095. The acceleration
due to rolling resistance and drag changes to 0 at that point, which
caused the "implicit boost" up to a velocity of ~+32k (close to 2km/h)
to trigger.
The behavior is different in vanilla RCT2, where vehicles just keep on
very slowly rolling backwards.
This commit disables the "implicit forward boost" for vehicles rolling
backward to mimic vanilla RCT2 behavior.
The multiplayer toolbar button is the same globe used for the
multiplayer option on the title screen, since it seems like
a nicer (and better?) looking option than the two riders.
Also conflicts less with the new sync icons.
This fixes the problem where the ride entrance hut
banner would show a nonsense number after auto-named
rides based on the amount the text had scrolled.
For some reason, all signs report "Sign" as their text
before actually being modified. This also happens with the
tile inspector, so for now I'm not terribly worried about it
Changes some things to use STR_BANNER_TEXT_FORMAT and removes
instances of " - - " attached to other strings in the
localization files.
This can be used in the future to show the messages on
a sign or banner via a tooltip without having to
duplicate those messages without " - - ".
re: OpenRCT2/OpenRCT2#8593
Modifies the code for tooltip displays to show the
string assigned to a banner. It also uses the
color assigned to the sign (by sheer coincidence).
As of right now I do not think that it works for
non-banner signs (such as the 3D landscapes or
scrolling signs etc), but it works for the typical
case of banners, as well as "No entry" banners.
re: OpenRCT2/OpenRCT2#8593
These strings use high IDs right now and are probably
not entirely suited for direct inclusion. There is also
some duplication in that "No entry" had to be unique,
as the actual no entry string is "No entry - -".
* First pass at action.
* Version 2. Do all the work in Network.cpp
* Mark game command as complete
* Make requested changes
* Increment of network version
* Fix#9054: remove gSceneryTileElement by returning it within GameActionResult
* fixing Clang-format issues
* fixing clang-format
lets try this again...
* fixing clang-format
alright should be good this time
* fixing clang-format issues
using automatic clang-formatting
* initializing tileElement
* Changed calls to tile_element_height to tile_element_water_height
* Changes to calls to tile_element_height
* Removed tile element_height, map_get_highest_land_height, and map_get lowest_land_height
3 functions removed due to relocation.
* Added function tile_element_height back to map.cpp
Added tile_element height back to map.cpp. Was unnecessarily deleted.
* Update Map.h
* water_height changes
* Update Scenario.cpp
* Update Scenario.cpp
* Fix 8800: applied clang format
* Removed unnecessary ANDs
This issue was caused by the ghost for banners, which already create an entry on the banner. The game command is then received while the ghost still exists, giving the placed banner another ID.
This fix is basically a copy of the fix that is also `game_do_command_p` that tackles this same issue.
Remove the widget_invalidate() call after changing a guest's
guest_heading_to_ride_id, because that call fails a debug assertion if
the guest window is open and the currently active tab is not the
"overview" tab. In Release builds (if assertion is disabled),
widget_invalidate() might access the widgets array out of bounds.
Instead, introduce a new flag PEEP_INVALIDATE_PEEP_ACTION for
window_invalidate_flags in the peep struct and set that flag. The guest
window update function then makes sure to invalidate the label if the
flag is set.
The flag could be used in other places to reduce libopenrct2 dependency
on window_*() calls (see #6808), but this commit only cares about cases
where the assertion would fail.
When you try to mirror a track design that has a path object type that isn't loaded it will try to pass an uninitialised variable as the index of the path object. This will cause a bad pointer to be generated. Fix was to auto set it to zero and to be super careful reset it again to zero in the case when its not available