DESTINY 2

The build

Sunrise targets one build: the Steam PC client, build 86657, stamped 2020-08-23. Every fact in these pages is about that build unless the page says otherwise. Other builds are used for names and cross-checks only.

Build 86657

propertyvalue
build number86657
build string86657.20.08.23.1800.d2_rc___release
build date2020-08-23, 18:00
branchd2_rc
configurationtiger_final, game type tiger_release_final
base content version86657-2-6791813
content revision / content build19492 / 84840
newest package build time2020-08-25
package format version38
seasonSeason of Arrivals, in the Shadowkeep era, the last season before Beyond Light
distributionSteam, app 1085660, content depot 1085661
platformPC, 64-bit Windows, Direct3D 11
copyright string(C) 2020 Bungie

The date comes from the build string. The executable’s link time is the same day. The package headers carry eight different content build numbers. The highest one, 86657, is the build itself.

The depot manifest

Sunrise uses these Steam depot manifests. The installer and the install guide download exactly these.

depotholdsmanifestmanifest date
1085661the shared Windows files71801229032321168722020-09-08
1085662the English language files22103321663603422872020-08-20

Each other language has its own depot and manifest. The installer lists them.

This is one of the last manifests before Beyond Light, not the last one. Later updates shipped on 2020-09-22 and in November 2020. The manifest dates come from a public record of Steam manifests.

What the build does not have

absentnote
BattlEyeanticheat was not yet part of this build
PlayFabadopted years later; this client never uses it
crossplay identity servicesadded later
Bungie class RTTIthe only RTTI in the image belongs to Havok, CRI and the C runtime
plain-text log stringsevery log format string is obfuscated
launch switchesthe client reads no command line, and no environment variable controls it
a bungie.net REST APIall live services are Demonware; see Network stack

The naming donor: PS4 build 87221

One other Destiny 2 build is used as a reference. It is not a target. An address, a structure offset or a vtable slot number never carries from one build to another without a check.

Build 87221 is 564 builds and 18 days newer than build 86657. Its build string is 87221.20.09.10.1506.d2_live. It carries full RTTI for 3,060 classes, and its log strings can be decoded as plain text.

Four measures place it in the same protocol generation as build 86657:

measure8722186657
wire class ids (0x8080xxxx)all 500500
Demonware source treeD2_12D2_12
bdLobby service idsthe same 7171
activity message idsthe same 59 names on the same ids59

Its content fits the same point in time. It has season pass and seasonal artifact strings and no Beyond Light Stasis string.

What transfers:

  • Class names. Build 86657 has no Bungie RTTI, so class names come from here.
  • 1,917 log lines are identical to those in build 86657, character for character.
  • Struct offsets on the ActivityClient. Seven offsets were checked and all seven match. Only that one class was checked.

What does not transfer:

  • Addresses, vtable slot numbers and class sizes. The PS4 compiler emits two destructor slots where the PC compiler emits one, so slot numbers shift.
  • Field names. Neither build carries any.

Differences from newer builds

Content

  • The Destiny Content Vault later removed much of the 2020 content from the live game. The build 86657 install still holds it.
  • Beyond Light is a hard engine break. Package format details, tag class hashes, struct offsets and enum values all changed after it. A package reader needs a separate pre-Beyond Light path for this build. See Packages.

Where mission scripts run

Bungie said in September 2020 that Beyond Light moved mission scripting from the Mission Host to the Physics Host. Build 86657 comes before that change. A design based on a later build can put mission logic in the wrong process. See The Activity Host protocol.

Differences from Destiny 1

Destiny 1 and Destiny 2 share the Tiger engine. They share the package container family and the FNV-1 name hash. The Destiny 1 facts below come from two sources: Bungie’s GDC 2015 talk on the Destiny mission architecture, and the shipped Destiny 1 binary.

Treat every Destiny 1 fact as a hypothesis for build 86657. It becomes a fact only when this build shows it.

What carries over

Destiny 1status on build 86657
The Activity Host is a light process that runs the mission scriptdesign guide; not verified
Clients send Sense data and receive Auth dataverified: message 6 is Sense, client to host; message 5 is Auth, host to client
Private missions and public bubbles have separate topology and lifetimedesign guide
Mission state is small, driven by sensors, and persistentdesign guide
The Activity Host hands out entity index leases and authority masks; the physics peer owns simulationthe same message family exists by name
The client joins the Activity Host first, then waits for entity indicesnot verified

Destiny 1 names an activity-physics join state in its RTTI. That state waits for a physics session and reconciles peer slots. It runs no physics, AI or combat code. That supports a small physics host endpoint, not a server-side simulation.

What does not carry over

  • Message ids. The lease messages have different ids in each game.
  • Message bodies and bit layouts.
  • The 10 Hz rate, memory figures and console host placement from the talk.
  • Sensor names, state layouts and trust rules.
messageDestiny 1 idbuild 86657 id
free_entity_indices2021
purge_abandoned_entity_slots2425
advance_replication_epoch4244

In 2017 Bungie said Destiny 2 moved the Physics Host from player consoles to its data centers, beside the Mission Host. That is a second placement change between the two games.

Open questions

  • Whether the package build time of 2020-08-25, two days after the executable, means a later content patch shipped with the same executable.
  • Whether PS4 build 87221 struct offsets hold beyond the ActivityClient.
  • The exact Destiny 1 layouts for the authority mask messages, and whether build 86657 uses the same join order.