DATCSODATCSO is a utility I wrote for the aging game Roller Coaster Tycoon 3, easily the most popular release from this game series.

Skip this paragraph if you prefer the nitty gritty.

Many years ago some rather ingenious players managed to reverse engineer a number of critical files that RCT3 uses during game play. Armed now with a basic understanding of a few game objects, additional utilities began popping up that allowed those with 3D modeling and texturing skills to export objects from mainstream 3D apps like Blender and 3DS Max and import them into the game. This opened up a whole world of possibilities as RCT3 theme parks became more elaborate and realistic. The most created and imported item today is called a “Custom Scenery Object”. A CSO contains externally built 3D models and custom textures and you can use them to decorate your own RCT3 theme parks.

NET Framework 3.5 req’d



Q: How do I use it?
A: DATSCO is a stand-alone command-line application. Download DATCSO and put it in any folder on your computer. Open a standard command prompt and change directories to where you put the program. Then run DATCSO.exe -help to get the list of input arguments you can use. I’ve created a Youtube video that walks through the process of downloading and using DATCSO. If you need additional assistance, the launch thread is here.

Q: What does DATCSO do?
A: It scans game “.DAT” files and attempts to discern what CSOs the DAT file is referencing.

Q: Why do I want it?
A: Someone has created a stand-alone building structure that can be added to any RCT3 park. They exported it from the game via a standard RCT3 .DAT file and uploaded it somewhere on the innerweb. When you download the DAT file and attempt to place the custom building inside one of your own RCT3 parks, you find that the building is missing walls, roof sections, and basically looks like Swiss Cheese (That’s if RCT3 doesn’t actually crash). The reason the game crashes or the structure is missing stuff is because the structure was created using custom scenery objects instead of the scenery objects built in to the original game. If you haven’t already downloaded and installed the custom scenery objects, which may not even be able to find anywhere online considering how old the game is or how fast domain names happen to disappear, you will never see the building structure as the designer intended. DATCSO will, at the very least, list the CSO’s that are in use inside the DAT file so you have somewhere to start.

Q: How does DATCSO work?
A: DATCSO is a stand-alone .NET console application written with C#. It requires the NET 3.5 framework to function. It reads the RCT3 DAT file into a byte array, strips non-printing characters from the stream, and parses the remaining bytes for references to the default install location of CSO’s — in this case “C:\<program files>\Atari\RollerCoaster Tycoon 3 Platinum\style\Themed”. When it finds all CSO references, it will print to the screen the unique CSOs in use for the DAT file, and saves this same information to a log file for your future reference.

Q: Is it perfect? Does it work every time?
A: Short answer is “probably not”. The app will work without a problem, but knowing for a fact that you’ve found every single CSO reference? Meh… your mileage may vary. RCT3 DAT files (and most other files in the game) are encoded. If the specific encoding mechanism for DAT files had been reverse engineered by now, this process would be pretty straight forward and there would already be utilities out there to handle this. Sadly, the encoding algorithm for DAT files is not known and as far as anyone knows, active “hacking” of RCT3 stopped many, many years ago.

Q: Where is the log file saved?
A: Log file is saved in the same directory as the DATCSO executable. It’s named, cryptically, DATCSO.log.

Q: Why .NET and not some kind of scripting utility?
A: Honestly, I started out with a VB Script. Problem with a lot, not most, but a lot, of scripting engines is their lack of lower-level file functionality and strong variable typing. The VB script I wrote ended up being about 300 lines long and couldn’t find every CSO reference (due to the file encoding). I managed to rewrite this functionality using about 30 lines of code with C#. It’s much faster (which is a big deal if you have hundreds of DAT files to parse), and doesn’t suffer from the same inconsistent results as a script does.

Q: Why can’t I just open the DAT file in a text editor like notepad or notepad++?
A: Actually, you can, and one of the reasons I wrote this utility is because it looks like CSO references are stored in the DAT file with ASCII. However, snagging all the CSO references and eliminating duplicates is a time consuming activity, particularly if you have a lot of DAT files to read through. So… go ahead… grab your 5 favorite RCT3 building structure DAT files and start writing down all the CSO references for each file. DATCSO will be done with all of them before you can even open notepad.

Sample of log file output
Sample of log file output
Sample of console output
Sample of console output

2 thoughts on “DATCSO”

  1. You’re awesome! I guess without this I would’ve NEVER been able to track down the stuff I had used for my re-discovered long-term project. Thank you so much!!


Leave a Reply

Your email address will not be published. Required fields are marked *