OpenRCT2

OpenRCT2 is a recreation of RollerCoaster Tycoon 2 (RCT2) in open-source C code, incorporating some features from the original RollerCoaster Tycoon (RCT1) that do not exist in other RollerCoaster Tycoon games, while also fixing some issues and improving upon some details in the official games, as well as adding a functional multiplayer feature that allows several players to co-build a single park.

OpenRCT2 is free software, licensed under the GNU General Public License v3.0.

The link to the download page can be found at the bottom of this article.

Architecture
OpenRCT2 is an attempt to decompile RollerCoaster Tycoon 2 into C code. RCT2 was originally written in MASM and Visual C++ where functions related to interfacing with the operating system were written in C (supposedly 1%), with the rest of the game being written in pure x86 assembly. OpenTTD, which is an open-source recreation of Transport Tycoon Deluxe, was developed using a similar procedure&mdash;the original game was decompiled into C, which allowed for the addition of thousands of features to the original game.

RCT2 uses the third version of Chris Sawyer's RollerCoaster Tycoon engine, which shares some code with Transport Tycoon. This is reflected in the usage of OpenTTD 0.1 code such as the windowing system and graphics rendering. While the version of the engine used in Chris Sawyer's Locomotion is newer than the one used in RCT2, OpenRCT2 uses RCT2's game engine to make the decompilation process easier.

In order to decompile the game gradually without introducing new bugs, every single procedure in RCT2 must be re-written individually in C. To test the accuracy of the re-written procedures, the decompiled C procedures are compiled into a DLL file (openrct2.dll) which exports an entry procedure mimicking the WinMain function in RCT2. The original executable rct2.exe has been patched so that openrct2.dll and WinMain are in the DLL import table and the WinMain export procedure in openrct2.dll is called at the start of the WinMain procedure in rct2.exe before returning. With this system implemented, starting rct2.exe calls the new DLL as part of its initialization; the DLL can then run all the decompiled code whilst still being able to read / write to the rct2.exe memory model and run rct2.exe procedures.

The project therefore acts as a patch to RCT2, allowing each procedure to be gradually implemented while simultaneously adding new features where possible. Until all procedures of the original game are re-written in C, the project must remain a DLL which is called from the patched rct2.exe.

Features
OpenRCT2 adds several features that are not available in RCT1 and RCT2, including:


 * Support for high resolution displays
 * Support for 64-bit operating systems
 * Windowed / borderless fullscreen / regular fullscreen mode toggle
 * Incorporation of features unique to RCT1 within the RCT2 environment, such as:
 * Using the mountain tool during gameplay
 * The option to sort rides by track type (e.g. the Twister, Stand-Up Twister, Floorless and Hyper-Twister Roller Coasters are all re-categorised as Steel Twister Roller Coaster, with their individual vehicle types selectable from a built roller coaster's Vehicles tab)
 * Enabling both Powered Launch operating modes for all roller coaster types with the Powered Launch operating mode
 * Steep hill/drop and flat-to-steep and steep-to-flat track pieces for the Junior Roller Coaster
 * Booster track piece for roller coaster types that had them (such as the Junior Roller Coaster, Looping Roller Coaster, Corkscrew Roller Coaster and all Steel Twister Roller Coaster variants)
 * Improved guest path-finding AI
 * Increasing the selectable region in landscaping tools to 64 tiles square
 * Enabling the scatter tool for scenery objects during gameplay
 * A brand new tool, unseen in both RCT1 & 2, allowing the player to get a copy on an in-game scenery object selected instantly for placement, with the same color pattern as the original selected object.
 * Adding the following features into the Scenario Editor:
 * Map sizes of up to 254 tiles square
 * 3 map generator tools to create random terrain and topography
 * Enabling land ownership/rights availability/purchase on tiles at the edge of the map
 * Making "Have Fun!" a selectable objective
 * Custom menu screens
 * A chromatically customisable user interface
 * Hardware-accelerated graphics (on graphics cards that support hardware acceleration)
 * Night Mode toggle (causes the game to periodically dim the park environment to simulate nighttime; illumination from light sources can also be toggled for computers with hardware-accelerated graphics cards)
 * Online multiplayer
 * An FPS counter
 * Multilingual translations, an improvement of the translations already present in the original games, and a conversion of the language strings to individual text files available for easy editing
 * Twitch TV integration (guests in a park are named as viewers in a Twitch TV stream)
 * A built-in cheat function, which enables such cheats as:
 * Construction while the game is paused
 * Lift/launch speeds up to 255 mph/410 kmh
 * Rides with 31 trains and/or 255 cars per train
 * Player-triggered guest generation
 * Extra cash
 * Forced Park Ratings
 * Ride renewal
 * Player-triggered ride breakdowns/fixes
 * Disabling of random ride breakdowns
 * Resetting of a ride's crash status
 * Changing the scenario objective to "Have Fun!"
 * Completing the scenario objective (including "Have Fun!")
 * Access to Scenario Editor options
 * A built-in console that enables advanced features/cheats such as the editing of available objects

Development
Development of OpenRCT2 was started on 2 April 2014 by Ted 'IntelOrca' John, with the project making steady development progress due to the efforts of other volunteers contributing towards its development.

As of 16 August 2014, the project was estimated to have reached approximately 25% completion of its target goal of having the game run on 100% C code.

The first stable release of OpenRCT2, labelled 0.0.2, was released on 21 June 2015.

OpenRCT2 0.0.5, released on 27 December 2016, was the first release version of OpenRCT2 that is able to run without needing RCT2.exe to be present, although it still required files from the \data and \ObjData folders in order to load scenarios bundled with the official game. 0.0.5 was also the first release where 64-bit versions of the game are made available.

As of the release of OpenRCT2 0.0.6 on 29 January 2017, much of the original game's windowing system, graphics rendering and basic game loop have been fully decompiled and, in addition to its compatibility with the files from RCT2, OpenRCT2 also features partial compatibility with .SC4 scenarios and .SV4 save files imported directly from RCT1, while incorporating some features exclusive to RollerCoaster Tycoon Classic.

Project development is split into two branches: the "develop" branch is updated a few times daily, incorporating fixes or additions approved for addition into future versions of the game, while the "master" branch is updated once every few months, incorporating all fixes and additions made on the "develop" branch since the previous "master" branch release. The use of SDL2 to replace operating system calls from the engine allows for cross-platform development.

The primary aim of OpenRCT2 is to completely decompile RCT2 into C so that cross-platform support, new features, and new gameplay can be added in a fashion similar to OpenTTD.

Distribution
As OpenRCT2 is free software, no payment is required to obtain a copy of it.

OpenRCT2 can be built on most modern computers, and this is the recommended method of obtaining the game. The source code for OpenRCT2 and instructions on how to build a copy of it are available on the OpenRCT2 GitHub Page.

Automated builds are also available from the pseudo-official OpenRCT2 website's download page.

A separate program known as the OpenRCT2 Launcher also installs and automatically updates a copy of OpenRCT2, while featuring the ability to customise some OpenRCT2 settings that are not immediately visible, such as a customisable default window size.

Limitations and Known Issues
OpenRCT2 is not a standalone game and requires the official data files from RCT2 to function, although the original rct2.exe executable and, by extension, a working installation of RCT2, is no longer needed from OpenRCT2 0.0.5 onwards. In its current state, OpenRCT2 maintains full compatibility with any game saved in RCT2, and most games saved in OpenRCT2 can be loaded in RCT2 with few issues. For this reason, games saved in OpenRCT2 are subject to the same engine limitations in RCT2, such as the following maximum limits:
 * 255 rides and shop/stalls in a park
 * 255 staff in a park
 * 1,000 guests in a queue line
 * 8,192 game years
 * 10,000 objects in a game
 * the same (seemingly variable) sign/banner limit

The above limitations in OpenRCT2 are expected to disappear if and when new file formats for scenarios, tracks and saved games will be introduced at a later date, when OpenRCT2's feature set is completed.

Due to the architecture of OpenRCT2, very few additional issues exist in relation to its ability to open scenarios, tracks and saved games created in RCT2. However, as the feature set of OpenRCT2 is not complete, the addition of new features may cause unexpected glitches and/or problems during gameplay.

The project's GitHub page has an issue tracker where known problems discovered by the developers and the community-at-large are raised for further action and ultimately resolved by its pool of contributors.

Links

 * Official Site
 * Pseudo-Official Site&mdash;provides more comprehensive information and links about OpenRCT2
 * Feature List
 * Downloads Page
 * OpenRCT2 Launcher&mdash;installs and automatically updates OpenRCT2
 * GitHub Page
 * current progress/milestone
 * Facebook Wall
 * Subreddit
 * YouTube playlist of the OpenRCT2 Podcast/talk with the devs
 * Screenshots of older builds of OpenRCT2, hosted on Imgur:
 * Cheat windows
 * Large land tool area
 * High resolution
 * Resizable window
 * RCT2 Subreddit
 * IntelOrca's website