Skip to content

Bakkes/CPPRP

Repository files navigation

CPPRP

Rocket League replay parser written in C++. The project has been tested on Ubuntu (only tested 64 bit) and Windows (32 and 64 bit).

CPPRPTest currently contains only internal test things/benchmarking, so probably not very relevant.

CPPRP

The core library is CPPRP, and should be built as a dynamic/static library so it can be included in other projects. From testing, the library should be able to parse all replays up to and including Rocket League v1.66. I've ran tests on a set of 10k replays from between mid 2017 till august 2019. Out of this set, 6 could not be parsed (for unknown reasons). I've also ran some random sampling tests on the (now defunct) RocketLeagueReplays replay dump, and on those there seems to be 99.6% coverage.

CPPRPJSON

Uses CPPRP to parse the replay and then serializes the replaydata to JSON. Currently, it is able to serialize any and all fields, except for some relating to the client's loadout (WIP). Also the code's a mess but it's still a WIP.

Functionality

CPPRPBM is a BakkesMod plugin which will be able to play certain parts of the replay back ingame (unfinished). CPPRPTest contains some tests and is probably not set up to work on other computers at the moment. LoadoutExtractor is a binary which prints out camera settings for all the players in the replay as well as share codes for the loadouts which can be imported in BakkesMod.

Scripts

Since C++ doesn't have reflection, but we still need to generate a lot of code for the parsing/serialization logic, I wrote some preprocessor scripts which outputs code to automatically parse certain classes/properties.

Usage

The CPPRPJSON accepts the following arguments

-i  --input     Path to the input file
-o  --output    Path to write output json to
-ho --header    When passed, will only parse and output the header
    --stdout    Will print the JSON output to the terminal
    --print     Same as --stdout

Some notes: if -i or --input isn't specified, it will take the first loose argument, so you can do CPPRPJSON test.replay if -o or --output is not given, it will automatically print json output to the terminal.

TODO

  • Better organize this readme