Burnout Paradise/Executable
This page and its subpages detail the Burnout Paradise executable with the goal of providing a complete overview of the game's classes. This includes documentation of member functions, classes/structures, enumerations, variables, constants, and other relevant information. All game versions on all platforms are targeted, though due to the sheer amount of data involved, the latest versions (1.9 and Remastered) are the primary focus.
Ideally, this documentation goes hand in hand with decompilation projects such as b5-decomp with the wiki giving an broad overview of the code being implemented.
Filename
Game | Platform | File name |
---|---|---|
Burnout Paradise Burnout Paradise: The Ultimate Box |
PlayStation 3 | EBOOT.BIN |
Burnout Paradise | Xbox 360 | default.xex BURNOUTUPDATE.XED (if updated) |
Burnout Paradise: The Ultimate Box | Xbox 360 | DEFAULT.XEX BURNOUTUPDATE.XEX BURNOUTUPDATE.XED (if updated) |
Burnout Paradise: The Ultimate Box | PC | BurnoutParadise.exe |
Burnout Paradise Remastered | PlayStation 4 | eboot.bin |
Burnout Paradise Remastered | Xbox One | Burnout_External_Xbox_One.exe |
Burnout Paradise Remastered | PC | BurnoutPR.exe |
Burnout Paradise Remastered | Switch | main |
DRM
On most platforms, Burnout Paradise and Paradise Remastered contain no DRM beyond that provided by the console.
On PC, the original disc game uses SecuROM, while the Steam version uses Steam's DRM. The EA/Origin version originally used SecuROM but was updated in 2017 to replace that with EA's own DRM.
Burnout Paradise Remastered on PC uses Denuvo in combination with the Origin/EA DRM. This is also the case on Steam, but even though the executable itself is unchanged, Steam is still required to launch the game due to license checks which interface with EA.
Every DRM used by both games has been bypassed. Remastered's Denuvo implementation lasted until July 2024 but was ultimately cracked.
Overview of main()
As with all C++ programs, the game starts with a main function, int main(int lnArgc, char* lapcArgv[]
, contained in GameSource/Main/BrnMain.cpp. It does the following:
- Creates the job scheduler and loads the autotest file if present;
- Initializes the memory map;
- Begins rendering/display output;
- Allocates memory based on the memory map;
- Initializes debug memory;
- Default constructs the game module;
- Creates the global update, resource, and dispatch IO buffers;
- Runs
BrnGameModule::Construct()
(separate from the earlier default constructor); - Loops
BrnGameModule::Prepare()
until prepared; - Loops
BrnGameModule::Update()
untilbool BrnGameModule::mbHasGameTerminated
is set to indicate the game should exit; - Loops
BrnGameModule::Release()
until released; - Runs
BrnGameModule::Destruct()
; - Exits the application.
The game module
Game Module Information on BrnGame::BrnGameModule, the base module of Burnout Paradise. |
The instance of BrnGame::BrnGameModule
that main()
constructs is pointed to by the global gpBurnoutGame
. Everything about the game (save those few things created prior to its construction) stems from this.
The game module does not typically manage low-level aspects of the game, instead delegating those responsibilities to the submodules it spawns, such as the renderer, world, director, GUI, effects, sound, and network modules, along with others not listed here. Often, these submodules spawn submodules of their own, creating a distinct hierarchy.
Submodules
Director Module Information on BrnDirector::DirectorModule, the camera module. |
Effects Module Information on BrnEffects::EffectsModule, the effects module. |
Game Data Module Information on BrnResource::GameDataModule, the module that manages game assets. |
Game State Module Information on BrnGameState::GameStateModule, the module that manages game-related events (progression, takedowns, training, etc.). |
GUI Module Information on BrnGui::GuiModule, the GUI module. |
Input Module Information on CgsInput::InputModule, the user input module. |
Network Module Information on BrnNetwork::BrnNetworkModule, the network module. |
Renderer Module Information on BrnRendererModule, the renderer module. |
Replay Module Information on BrnReplays::ReplayModule, the replay module. |
Root Sound Module Information on BrnSound::Module::RootSoundModule, the sound module. |
World Module Information on WorldModule, the world module. |
Finding the game module
The location of gpBurnoutGame
is not difficult to find, but can be tedious. One of the easier ways that applies to all game versions is to find the racecars (gpBurnoutGame->mWorldModule.mRaceCarEntityModule.maRaceCars
) and backtrack from there. Since this is one of the first members of the racecar entity module and that itself is the first submodule in the world module, only the renderer module and autotest manager need to be covered to reach the start of the game module.
An easy way to find the player racecar, which should always be first in the array, is to search with the rival id 0, current vehicle id, and current wheel id. This would be, for example, 0000000000000000 A7E60F1A3A360000 2F3137067D2D3000 for the Cavalry on PS3/X360 or 0000000000000000 0000363A1A0FE6A7 00302D7D0637312F on other systems.
For most versions of the game, the start of the game module should be under 0x14000 less than the player racecar's address. On Remastered PC, the difference is 0x10FA0, and on PS3 1.0 the difference is 0x12140. There are no strings or IDs that would make it easy to identify, but it can be confirmed by the 32-bit integer at offset 8 (offset 0xC on 64-bit platforms) being 6 (E_MANAGERPREPARESTAGE_DONE
).
Once the address of the game module is confirmed, search for it. The first static result is gpBurnoutGame
.
Known locations of gpBurnoutGame
PlayStation 3
Retail
Version | Address |
---|---|
BLAS50039 (original disc) | 0x10446D90 |
BLES00073 (original disc) | |
BLUS30061 (original disc) | |
BLES00074 (original disc) | 0x1047EF10 |
BLJM60053 (original disc) | 0x1047EF90 |
v1.3 | 0x00E696E0 |
v1.4 | 0x00E4E4E0 |
NPEB00043 (PSN) | 0x00E4ECE4 |
NPHB00052 (PSN) | |
NPUB30040 (PSN) | |
v1.5 (update to original disc version) | 0x00E4E650 |
v1.5 (update to PSN version) | 0x00E4EF54 |
BLES00455 (The Ultimate Box disc) | 0x00E67470 |
BLES00462 (The Ultimate Box disc) | |
BLJM60133 (The Ultimate Box disc) | |
BLUS30250 (The Ultimate Box disc) | |
v1.6 | |
v1.7 | 0x00E8B7F0 |
v1.8 | 0x00E9CEE8 |
v1.9 | 0x00EC2B08 |
Demo
Version | Address |
---|---|
NPEB90048 | 0x1047F1A0 |
NPUB90062 | |
NPHB00026 | 0x1047F230 |
NPJB90066 |
Development builds
Version | Address |
---|---|
2007-08-31, CL 53972 | 0x102F3EA0 (internal) |
2007-09-04, CL 54725 | 0x102DD570 (artist) 0x101E4770 (external) 0x102F4CF0 (internal) |
2007-09-28, CL 58803 | 0x103F01A0 (internal) |
B5SClean59580 2007-10-03, CL 59580 |
0x102DF6B0 (external) |
B5SClean69036-10 October07 Matt Benson 2007-10-10, CL 60936 |
0x1054F560 (artist) 0x10445C00 (external) 0x10567000 (internal) 0x10463100 (perftesting) |
2007-10-12-0125_61591_67243 2007-10-12, CL 61591 |
0x10550510 (artist) 0x10446B60 (external) 0x10567F70 (internal) |
B5 Final 2007-10-21, CL 62760 |
0x10550750 (artist) 0x10446D90 (external) 0x10568250 (internal) 0x10464400 (perftesting) |
B5 Demo 1610-63297 2007-10-30, CL 63297 |
0x1047EDF0 (external) 0x105B0230 (internal) |
Burnout Paradise - Review Build 2007-10-31, CL 63412 |
0x10446D90 (external) 0x10578250 (internal) |
B5FinalFIGS 2007-12-13, CL 65052 |
0x1047EF10 (external) 0x105B0460 (internal) |
Xbox 360
Retail
Version | Address |
---|---|
Original disc (US) 20B57926, NTSC, 2007-10-31 |
0x82CA5CA0 |
Original disc (UK) 1B7D0C5B, PAL, 2007-10-31 | |
Games on Demand 295D0BC6, NTSC, 2007-10-31 | |
Original disc (FIGS) 24EF448B, PAL, 2007-12-13 |
0x82CE5EA0 |
Original disc (Japan) 2B99A9CE, NTSC-J, 2007-12-13 | |
Original disc (Asia) 1E51ADC2, NTSC-J, 2007-12-17 |
0x82CB5D20 |
v1.3 | 0x88C2BCF4 |
v1.4 | 0x88C377F4 |
The Ultimate Box disc 7CCD18F1, 2008-11-14 |
0x88C7E9DC |
v1.6 | |
v1.7 | 0x88C8F424 |
v1.8 | 0x88CA4514 |
v1.9 | 0x88CB510C |
Demo
Version | Address |
---|---|
Demo (global) 371792AF, 2007-11-12 |
0x82CC5020 |
Demo (Japan) 331D4667, 2007-12-06 |
0x82CB4D20 |
Development builds
Version | Address |
---|---|
FranchiseBuild 2006-11-13, CL 21320 |
0x82A98270 (artist) 0x82E80770 (internal) |
2007-02-22, CL 32426 | 0x82D9FF00 (artist) 0x82A3AA40 (external) 0x82E9C5E0 (internal) |
Screenshot 2007-11-02 |
0x82C85E70 |
Burnout_tcartwright 2008-01-30, CL 66212 |
0x830102D0 (artist) 0x82D1F85C (external) 0x832958D0 (internal) |
PC
The Ultimate Box
Version | Address |
---|---|
1.0.0.0 | 0x010F3EC0 |
1.0.0.1 | |
1.1.0.0 | 0x0110212C (disc, Origin/EA) 0x010F7A2C (Steam) |
Remastered
Version | Address |
---|---|
1.0.0.0 | 0x013FC8E0 |
PlayStation 4
Version | Address |
---|---|
CUSA10851 v1.00 | 0x01B7EFA0 |
CUSA10866 v1.00 | |
v1.01 | 0x01AF19A0 |
v1.02 | 0x01AF1A20 |
v1.03 | 0x01AE1F20 |
Switch
Version | Address |
---|---|
v1.0.0 | main+0x012C8968 |
Namespaces
Short list of the game's namespaces (Brn* and Cgs* only).
- BrnDebugChecks
- BrnDirector
- BrnDispatchBinSharedMemory
- BrnEffects
- BrnFlapt
- BrnGame
- BrnGameMainFlowController
- BrnGameState
- BrnGraphics
- BrnGui
- BrnHW
- BrnJuice
- BrnMassive
- BrnMath
- BrnNetwork
- BrnParticle
- BrnPhysics
- BrnProgression
- BrnRendererPS3GcmCommandBufferHelper
- BrnReplays
- BrnResource
- BrnSound
- BrnStreetData
- BrnTrigger
- BrnVehicle
- BrnWheel
- BrnWorld
- BrnWorldIO
- CgsAlgorithms
- CgsAttribSys
- CgsContainers
- CgsCore
- CgsFileSystem
- CgsFsm
- CgsGraphics
- CgsInput
- CgsLanguage
- CgsMemory
- CgsModule
- CgsNetwork
- CgsNumeric
- CgsPhysics
- CgsResource
- CgsSceneManager
- CgsSound
- CgsSystem
- CgsWorld
Major libraries
Some of the more relevant external libraries the game uses.
- Apt
- AttribSys
- Blaze (Remastered only)
- DirtySDK
- ICE
- Juice
- Lion
- Nicotine
- Snd9