Burnout Paradise/Executable

From Burnout Wiki

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:

  1. Creates the job scheduler and loads the autotest file if present;
  2. Initializes the memory map;
  3. Begins rendering/display output;
  4. Allocates memory based on the memory map;
  5. Initializes debug memory;
  6. Default constructs the game module;
  7. Creates the global update, resource, and dispatch IO buffers;
  8. Runs BrnGameModule::Construct() (separate from the earlier default constructor);
  9. Loops BrnGameModule::Prepare() until prepared;
  10. Loops BrnGameModule::Update() until bool BrnGameModule::mbHasGameTerminated is set to indicate the game should exit;
  11. Loops BrnGameModule::Release() until released;
  12. Runs BrnGameModule::Destruct();
  13. 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