![]() * add data to Track.cpp add data to TrackData.cpp add import helper functions fix Booster value import booster as 256 export booster as 100 add vehicle subposition data add SV4 import add TD4 import add TD6 import use track_type_t when importing TD6 add TD6 export change peep tracktype type to auto fix SV4 track element import fix import of booster speed add None enum to TrackElemType move _legacy RideConstruction functions to Ride.cpp change _currentPossibleRideConfigurations to use track_type_t fix booster track category add booster string tto expand _currentTrackCurve to 32 bits expand track_curve_chain to 32 bits update get_track_element et al. to handle 16 bit track types run clang-format remove unused #includes from _legacy.cpp Revert "remove unused #includes from _legacy.cpp" This reverts commit 4c4d4b06edb0c130314789d8fe371246be246c9f. Revert "update get_track_element et al. to handle 16 bit track types" This reverts commit 73920dafd4a6c9e7c9f0c7ee1098d493f8f5d262. Revert "move _legacy RideConstruction functions to Ride.cpp" This reverts commit 2d83a75c1477d387ad77a7a5085f37a28f72a589. update _legacy functions for 16-bit track types update ride_construction_reset_current_piece behavior with new enum fix declaration of _currentTrackCurve to match other track tcurve vars remove unused include from T4Importer.cpp move SCT to 256 part 1: RideConstruction.cpp move SCT to 256 part 2: TrackData.cpp move SCT to 256 part 3: Ride.h/Ride.cpp move SCT to 256 Part 4: revert changes to S4Importer.cpp, T4Importer.cpp fix stations appearing as curves fix too many initializers in TrackData.cpp move SCT to 256 part 5: S6/T6 importing and exporting move SCT to 256 part 6: simplify RCT12.cpp functions fix comments in S6Exporter.cpp, S6Importer.cpp fix clang-format on S6Importer.cpp add missing data to TrackData.cpp revert new functions for checking if track type is a booster revert unused include change trackType to auto and add comment to S6Exporter.cpp move track type aliasing from TrackDesign.cpp to T6Import.cpp, T6Export.cpp add comment about sv6 vehicle.track_type static cast to uint8_t in T6Exporter.cpp` set type to auto when setting value to _currentTrackCurve revert moving function in S6Importer.cpp fix value names in RideData.cpp revert cahnge to uint16_t return for GetTrackType() in RCT12.cpp fix GetTrackType return type for real add changelog entry bump network version cast alternate track type to track_type_t static_cast tuple input value in _legacy.cpp change _currentTrackCurve to uint32 use TrackElemType::Count to determine length of subposition array perform some changes remove padding from rct_trackdefinition fix alternative type check remove _boosterTrackSelected add missing condition for booster speed add comments for TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop add missing comments to RideData.cpp remove extra entry simplify some things fix formatting remove redundant checks todo: fix building the track piece use TrackElemType::None more remove git.txt * bump network version * make conditional more explicit w/ parentheses * move booster check to RCT12.cpp * implement getters and setters for vehicle track type and direction * fix formatting * rename RCT12TrackTypeIsBooster to RCT2TrackTypeIsBooster * add whitespace in RCT2.h * change the thing I thought I changed * move booster check function to RCT2.cpp * move function into if condition * fix scope issues with setters |
||
---|---|---|
.github | ||
.vscode | ||
OpenRCT2.xcodeproj | ||
cmake | ||
data | ||
debian | ||
distribution | ||
resources | ||
scripts | ||
src | ||
test | ||
.clang-format | ||
.codecov.yml | ||
.commitlint.json | ||
.dockerignore | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
CMakeLists.txt | ||
CMakeLists_mingw.txt | ||
CMakeSettings.json | ||
CONTRIBUTING.md | ||
OpenRCT2.entitlements | ||
contributors.md | ||
licence.txt | ||
openrct2.common.props | ||
openrct2.exe | ||
openrct2.proj | ||
openrct2.sln | ||
openrct2.targets | ||
readme.md | ||
shell.nix |
readme.md
OpenRCT2
An open-source re-implementation of RollerCoaster Tycoon 2. A construction and management simulation video game that simulates amusement park management.
Download
Latest release | Latest development build |
---|---|
Chat
Chat takes place on Discord. You will need to create a Discord account if you don't yet have one.
If you want to help make the game, join the developer channel.
If you need help, want to talk to the developers, or just want to stay up to date then join the non-developer channel for your language.
If you want to help translate the game to your language, please stop by the Localisation channel.
Language | Non Developer | Developer | Localisation |
---|---|---|---|
English | |||
Nederlands |
Contents
- 1 - Introduction
- 2 - Downloading the game (pre-built)
- 3 - Building the game
- 3.1 - Building prerequisites
- 3.2 - Compiling and running
- 4 - Contributing
- 4.1 - Bug fixes
- 4.2 - New features
- 4.3 - Translation
- 4.4 - Graphics
- 4.5 - Audio
- 4.6 - Scenarios
- 5 - Licence
- 6 - More information
- 7 - Sponsors
1. Introduction
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2 (RCT2). The gameplay revolves around building and maintaining an amusement park containing attractions, shops and facilities. The player must try to make a profit and maintain a good park reputation whilst keeping the guests happy. OpenRCT2 allows for both scenario and sandbox play. Scenarios require the player to complete a certain objective in a set time limit whilst sandbox allows the player to build a more flexible park with optionally no restrictions or finance.
RollerCoaster Tycoon 2 was originally written by Chris Sawyer in x86 assembly and is the sequel to RollerCoaster Tycoon. The engine was based on Transport Tycoon, an older game which also has an equivalent open-source project, OpenTTD. OpenRCT2 attempts to provide everything from RCT2 as well as many improvements and additional features, some of these include support for modern platforms, an improved interface, improved guest and staff AI, more editing tools, increased limits, and cooperative multiplayer. It also re-introduces mechanics from RollerCoaster Tycoon that were not present in RollerCoaster Tycoon 2. Some of those include; mountain tool in-game, the "have fun" objective, launched coasters (not passing-through the station) and several buttons on the toolbar.
2. Downloading the game (pre-built)
OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bought at either Steam or GOG.com. If you have the original RollerCoaster Tycoon and its expansion packs, you can point OpenRCT2 to these in order to play the original scenarios.
OpenRCT2.org offers precompiled builds and installers of the latest master and the develop branch. There is also a cross platform Launcher available that will automatically update your build of the game so that you always have the latest version.
Flathub offers flatpaks for Linux distributions that support this application distribution system:
Some Linux distributions offer native packages already. These packages are usually third-party, but we're trying to resolve issues they are facing.
- ArchLinux AUR: openrct2-git and openrct2
- Ubuntu PPA:
develop
branch (nightly builds) - openSUSE OBS: games/openrct2
- Gentoo (main portage tree): games-simulation/openrct2
- NixOS (
nixos-unstable
channel): openrct2 - Fedora 28 i386/amd64: openrct2
Some *BSD operating systems offer native packages. These packages are usually third-party, but we're trying to resolve issues they are facing.
- FreeBSD: games/openrct2
- OpenBSD: games/openrct2
3. Building the game
3.1 Building prerequisites
OpenRCT2 requires original files of RollerCoaster Tycoon 2 to play. It can be bought at either Steam or GOG.com.
Windows:
- Visual Studio 2019 (Enterprise / Professional / Community (Free))
- Desktop development with C++
macOS:
- Xcode 10+
The program can also be built as a command line program using CMake. This type of build requires:
- Xcode Command Line Tools
- Homebrew
- CMake (available through Homebrew)
Linux:
- sdl2 (only for UI client)
- freetype (can be disabled)
- fontconfig (can be disabled)
- libzip (>= 1.0)
- libpng (>= 1.2)
- speexdsp (only for UI client)
- curl (only if building with http support)
- nlohmann-json (>= 3.6.0)
- openssl (>= 1.0; only if building with multiplayer support)
- icu (>= 59.0)
- zlib
- gl (commonly provided by Mesa or GPU vendors; only for UI client, can be disabled)
- duktape (unless scripting is disabled)
- cmake
- innoextract (optional runtime dependency; used for GOG installer extraction during setup)
Refer to https://github.com/OpenRCT2/OpenRCT2/wiki/Building-OpenRCT2-on-Linux#required-packages-general for more information about installing the packages.
3.2 Compiling and running
Windows:
-
Check out the repository. This can be done using GitHub Desktop or other tools.
-
Open a new Developer Command Prompt for VS 2019, then navigate to the repository (e.g.
cd C:\GitHub\OpenRCT2
). -
To build the 64-bit version, use
msbuild openrct2.proj /t:build /p:platform=x64
.To build the 32-bit version, use
msbuild openrct2.proj /t:build /p:platform=Win32
. -
Run the game,
bin\openrct2
Once you have ran msbuild once, further development can be done within Visual Studio by opening openrct2.sln
. Make sure to select the correct target platform for which you ran the build in point #3 (Win32
for the 32-bit version, x64
for the 64-bit version), otherwise the build will fail in Visual Studio.
Other examples:
set platform=x64
msbuild openrct2.proj /t:clean
msbuild openrct2.proj /t:rebuild /p:configuration=release
msbuild openrct2.proj /t:g2
msbuild openrct2.proj /t:PublishPortable
macOS:
Xcode:
The recommended way of building OpenRCT2 for macOS is with Xcode. The Xcode build will create a self-contained application bundles which include all the necessary game files and dependencies. Open the project file OpenRCT2.xcodeproj in Xcode and build from there. Building this way will handle the dependencies for you automatically. You can also invoke an Xcode build from the command line using xcodebuild
.
CMake:
A command line version of OpenRCT2 can be built using CMake. This type of build requires you to provide the dependencies yourself. The supported method of doing this is with Homebrew. Once you have Homebrew installed, you can download all the required libraries with this command:
brew install cmake duktape freetype icu4c libpng libzip nlohmann-json openssl pkg-config sdl2 speexdsp
Once you have the dependencies installed, you can build the project using CMake using the following commands:
mkdir build
cd build
cmake ..
make
ln -s ../data data
Then you can run the game by running ./openrct2
.
Detailed instructions can be found on Building OpenRCT2 on macOS using CMake.
Linux:
The standard CMake build procedure is to install the required libraries, then:
mkdir build
cd build
cmake ../ # set your standard cmake options, e.g. build type here - For example, -DCMAKE_BUILD_TYPE=RelWithDebInfo
make # you can parallelise your build job with e.g. -j8 or consider using ninja
DESTDIR=. make install # the install target creates all the necessary files in places we expect them
You can also use Ninja in place of Make, if you prefer, see Wiki for details.
Detailed instructions can be found on Building OpenRCT2 on Linux.
4. Contributing
OpenRCT2 uses the gitflow workflow. If you are implementing a new feature or logic from the original game, please branch off and perform pull requests to develop
. If you are fixing a bug for the next release, please branch off and perform pull requests to the correct release branch. master
only contains tagged releases, you should never branch off this.
Please read our contributing guidelines for information.
4.1 Bug fixes
A list of bugs can be found on the issue tracker. Feel free to work on any bug and submit a pull request to the develop branch with the fix. Mentioning that you intend to fix a bug on the issue will prevent other people from trying as well.
4.2 New features
Please talk to the OpenRCT2 team first before starting to develop a new feature. We may already have plans for or reasons against something that you'd like to work on. Therefore contacting us will allow us to help you or prevent you from wasting any time. You can talk to us via Discord, see links at the top of this page.
4.3 Translation
You can translate the game into other languages by editing the language files in data/language
directory. Please join discussions in the #localisation channel on Discord and submit pull requests to OpenRCT2/Localisation.
4.4 Graphics
You can help create new graphics for the game by visiting the OpenGraphics project. 3D modellers needed!
4.5 Audio
You can help create the music and sound effects for the game. Check out the OpenMusic repository and drop by our #open-sound-and-music channel on Discord to find out more.
4.6 Scenarios
We would also like to distribute additional scenarios with the game, when the time comes. For that, we need talented scenario makers! Check out the OpenScenarios repository.
5. Licence
OpenRCT2 is licensed under the GNU General Public License version 3.
6. More information
Similar Projects
OpenLoco | OpenTTD | openage | OpenRA |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Chris Sawyer's Locomotion | Transport Tycoon Deluxe | Age of Empires 2 | Red Alert |
7. Sponsors
Companies that kindly allow us to use their stuff:
DigitalOcean | JetBrains | Backtrace |
---|---|---|
![]() |
![]() |
![]() |
Hosting of various services | CLion and other products | Minidump uploads and inspection |