#settings #config-file #rt3

bin+lib rt3conf

An unofficial tool for configuring Railroad Tycoon 3

1 unstable release

0.1.0 Jan 11, 2021

#552 in Configuration

Custom license

25KB
377 lines

rt3conf

The rt3conf program is an unofficial tool for configuring Railroad Tycoon 3. With it you can run the game at modern screen resolutions that are not possible to select in the settings. It can also be used to turn off settings that crash the game to the point where you cannot open the game to undo the setting.

Railroad Tycoon is trademarked by Take-Two Interactive Software, Inc., and this software is not affiliated with them in any way.

Usage

Open a terminal (cmd.exe on Windows) and navigate to where you want the engine.cfg file to be generated. Enter the following and press enter to get a configuration file with resolution set to 800 x 600 and hardware texture and lighting turned off:

C:\path-you-choose>rt3conf

Note that hardware texture and lighting is turned off by default because it can cause a crash on newer machines with Nvidia graphics cards.

The engine.cfg file should then be copied to where Railroad Tycoon 3 stores the configuration files, e.g. C:\Program Files (x86)\Steam\steamapps\common\Railroad Tycoon 3\Data\Configuration for Steam and C:\Program Files (x86)\GOG Galaxy\Games\Railroad Tycoon 3\Data\Configuration for GOG.

You can even generate a configuration file with resolutions that cannot be chosen in the settings. For example, enter the following to generate a configuration file with the screen resolution of 1920 x 1200:

C:\path-you-choose>rt3conf -x 1920 -y 1200

Note that the settings will say 640 x 480. It is often possible to verify that your monitor is running at the correct resolution by pressing one of the buttons on your monitor.

You can see all the available options by using the -h or --help option.

Installation

You can download rt3conf from the Release page.

The easiest way to use the executable is to place it in the same folder as where you want the engine.cfg file generated. Otherwise you have to put it somewhere that is in your PATH environment variable.

You can alternatively enter cargo install rt3conf in the terminal if you have the Rust programming language installed. Then the executable is placed in a directory that is part of the PATH environment variable, and you can run it from any directory.

Building

If you want to build rt3conf from the source code then you first need to install the Rust programming language. Then download the source code from GitHub or clone it with git. Finally open a terminal and use the cargo build command to build the source code:

c:\src\rt3conf>cargo build --release

The binary is placed in the directory target/release.

You can get Cargo to build and install the binary in a single step with the install command, for example:

c:\src\rt3conf>cargo install --path .

The rt3conf binary is now added to the PATH and can be executed from anywhere.

Reverse Engineering Fields

The configuration files contain fields that control the configuration settings. The configuration files are binary so there is no explanation of what each field does. The function of each field was reversed engineered by changing a setting in the game and then observing the changes to the files. I used wxHexEditor to find the changes. It has a feature to compare the contents of two binary files.

There are two configuration files engine.cfg and game.cfg. I have only implemented the settings in the engine.cfg but may also add game.cfg at some point. I have private notes about which settings are stored in game.cfg so I would know not to look for them in engine.cfg.

There is clearly some data in engine.cfg that is not accessible from the game's settings. I suspect most of these settings were used by the developers and not meant for the users. The unaccessible settings are referred to as fieldx in the code (where x is a number). It should be possible to reverse engineer these last fields by changing a value at a time and opening the game to see the effect. Another option is to attach a debugger, watch the memory for reads and look at what happens in the disassembly.

Dependencies

~1.6–2.4MB
~44K SLoC