RLBot v5 (Beta) Overview
RLBot v5 is the next major version of the RLBot framework, bringing a host of reliability improvements and new features compared to v4.
RLBot v5 is now in pre-release and nearly feature-complete, meaning people can start adopting it. Note that the various language interfaces are still in development and may see breaking changes.
Windows Installer: DOWNLOAD
Any updates to RLBot v5 and the language interfaces will be announced in the RLBot Discord #announcements channel.
- If you find bugs, please report them on Github.
- If you run into issues with v5, you can find help on Discord, either in the appropriate language channel or in the #framework-dev channel. There is also a "v5" tag in #rlbot-help.
- If you have feedback/request for v5, please let us know on Github in the #framework-dev channel.
In the remainder of this document we will cover:
- Our reasoning for creating v5 and an overview of its architecture GOTO
- A list of features completed/reworked/todo/removed in v5 (beta) GOTO
- A guide on breaking changes and how to transition from v4 to v5 GOTO
- Links to v5 language interfaces and more GOTO
Why v5?
RLBot v4 has been incredibly user-friendly, feature-rich, and stable. It was made in 2018 when RLBot was still using DLL injection. Later, in 2019, the collaboration with Psyonix and the official API was introduced. Since then, there have only been minor changes and new features, which prove how well-designed v4 was. In fact, v5 is not that different from v4. It is primarily a rewrite and an opportunity to fix the flaws of v4 that have been revealed over the years. So here are the main reasons we made v5:
- The closed-source part of v4 is doing more than just communication with the Psyonix API. This has long prevented the community from fixing certain bugs themselves. Therefore, we are extracting that functionality into the open-source part of RLBot, making the closed-source part exclusively about communication with the API.
- The closed-source part of v4 is written in C++. By rewriting the backend of RLBot in C#, we hope that more people feel comfortable contributing to it.
- No more DLLs. You may not be aware, but most bots still use a DLL to communicate directly to the RLBot backend. In v5, the transition to web sockets is finally complete and this allows the bot interfaces to be improved (e.g. Python type hints are not a hack anymore).
- All languages can start matches in v4, but the logic for launching Rocket League and bots was only implemented in Python (and partially Rust). This discouraged people from writing match starters (GUI, autoleague, etc) in languages other than Python (even CleoPetra, written in Java, uses a Python process to start matches). Therefore, we are moving this logic to the backend for v5, such that more languages can benefit from it.
- We are freeing ourselves from design choices made under the restrictions of the DLL injection.
- The Psyonix API made a few extra features available to us, but we never integrated them in v4. They are integrated in v5.
- Python is very slow. The rewrite in C# has made this clear.
- The
.cfgfile format has no standard. We are changing to the similar.tomlformat.
So while the changes to the functionality and interface are minor, the architecture and the framework's internal code is very different. We hope these changes will make it enjoyable to work with and contribute to RLBot moving forward.
Features of v5
[Legend: ✅=done, ✨=new, 🛠=reworked/changed, ⛔=removed]
- ✅🛠 First-class Windows & Linux support
- No plans for MacOS, as there's no way to run Rocket League without a full VM
- ✅🛠 All bots connect to core directly via the sockets flatbuffer spec
- Adding new language support is much easier - if your language can write/read a TCP socket, it's possible! Bonus points if your language is one of the many supported by FlatBuffers
- ✅🛠 Any language can start/stop/manage a match; the logic for launching Rocket League and bots is now in RLBotServer.
- ✅🛠 All config files now use the standard
tomlformat. Example: necto/bot.toml - ✅ Hiveminds
- ✅ Scripts
- ✅🛠 The bot configuration's
python_filehas been replaced withrun_commandandrun_command_linux- On Linux, if
run_command_linuxisn't specified, v5 will attempt to runrun_commandunder Wine
- On Linux, if
- ✅✨ Multi-ball support for when there's more/less than 1 ball in a game
- ✅✨ New mutator options
- Knockout, Dropshot, Hoops, Snow Day, Heatseeker, and more game modes
- Start with one, two, four, or six balls
- Max 1 through 100+ goals (any number supported)
- Many ball types: Beach ball, anniversary ball, spooky cube, haunted dropshot ball, Ekin, egg, player-seeking, score-absorb, and more
- Curve ball, beach ball curve, or magnus futbol ball physics
- Small, default, or medium ball size
- Lowish or default ball bounciness
- Reverse gravity; low, high, or super high gravity
- Ball gravity independent of car gravity
- Tactical rumble, haunted ball beam, batman rumble, grappling only, haymaker only (note: reading rumble items is still unavailable)
- Boost strength 1x, 1.5x, 2x, 3x, 5x, or 10x
- Max time 5, 10, 11, or 20 minutes
- Territory mutator
- Stale ball timer (unlimited or 30 seconds)
- Jump mutators (grounded, 2/3/4 jumps, unlimited, or no jump)
- Dodge timer adjustments (1.25s, 2s, 3s, or unlimited)
- Input restriction (backwards only)
- Demolish on ball contact
- ✅✨ Freeplay matches. Useful for using Rocket League's freeplay-exclusive features
- ✅ Rendering
- ✅✨ Rendering can be toggled for individual bots
- ✅✨ Bots and scripts can request rendering to be enabled/disabled via
RenderingStatusmessages - ✅✨ New
RenderAnchors. Attach rendering to the location and rotation of a car or ball plus both an absolute and local offset. No re-rendering required and it is smooth. - ✅✨
Rect2DandRect3Drender types for drawing rectangles - ✅✨
PolyLine3Dis now properly efficient (not implemented as multipleLine3Ds) - ✅✨ Text alignment options (
TextHAlign/TextVAlign) - Example: video posted on Discord
- ✅ Game state manipulation (aka state setting)
- ✅ Updated ball prediction algorithm for better accuracy in all game modes that use a ball
- ✅✨ Support for Psyonix Beginner bots
- ✅✨ More customizable Psyonix bots
- ✅✨ Override a bot name/loadout (without editing the bot configuration)
- Use cases include: Spawning specific Psyonix bots or give Nexto your in-game name to troll friends
- ✅🛠 Generated loadouts are now created by your bot instead of a separate loadout generator script
- ✅✨ Hot-swap your bot's loadout. Respawn your bot's car with a different loadout on command without
restarting the match or interfering with the other bots
- Only enabled when state setting is also enabled
- ✅✨ New data available per player:
- Last known player input
has_double_jumpedandhas_dodgedare now separately tracked fieldsair_state— tracksOnGround,Jumping,DoubleJumping,Dodging, orInAirdodge_timeout,dodge_elapsed,dodge_dir— detailed dodge informationlatest_touch— the last time and which ball the player touchedaccolades— a list of awards earned in the previous tick (e.g. EpicSave, Demolition, PoolShot, LowFive, HighFive)- See the flatbuffer schema for the full list
- ✅🛠 Match comms and quick chat have been combined into
MatchComms with an optionaldisplaystring so both bots and humans can understand the message- ⛔ Quick chat messages are no longer restricted to hardcoded options
- ✅🛠 The
team_onlyfiltering finally works. No more spying on enemy chats
- ✅🛠 RLBot waits for all processes to fully boot before starting the match; this can be toggled per-bot
- ✅🛠 RLBot can be instructed to not launch certain bots (they must be started manually)
- ✅✨ IPv6 support for connecting to RLBotServer across networks
- ✅✨ Ping mechanism for connection health checking
- ✅🛠 Performance metrics (missed responses by bots). Displayed automatically only when there are problems. Percentages appear when RLBot or a bot runs below 100%.
- ✅✨ NoLaunch launcher option — start Rocket League yourself and have RLBot connect to it
- ⛔ Non-standard tick rates (standard is 120hz)
- All bots are expected to run at 120hz. If you need more time, engineer your bot around this (e.g. an extra asynchronous thread for complex algorithms).
- ⛔ DropshotTileInfo
- This functionality was lost with the introduction of the Psyonix API and is removed v5. But it might return.
On top of all that, the framework is also significantly faster.
Breaking Changes / Migration
The migration guide for the Python interface gives a good overview of the breaking changes and what to do instead so we refer to that: https://github.com/RLBot/python-interface/wiki/Migration
Links and Resources
Below you can find links to the implementation of RLBot v5, the language interfaces, and related documentation. This wiki will continue to be updated as the framework evolves.
RLBot v5 framework:
- RLBot/launcher (RLBot v5 installer)
- RLBotServer.exe:
- RLBot/core
- RLBot/bridge (closed-source)
- RLBot/flatbuffer-schema
- RLBot/GUI
Language interfaces: