(Last updated: June 19, 2019)

Just a page to generate graphs from Borderlands 2/TPS BPDs and Kismets. If you don't know what a BPD or Kismet is, this probably isn't for you, but you can check out some basic information at the BLCMods Wiki. Many thanks to LightChaosman for the data which powers this generator!

Generate A Graph

Note: PNG graphic output supports a max. width of about 32k pixels. Graphics which would be larger than that will scale down, sometimes into illegibility. Stick with SVG output for extremely large graphs.


Selecting a level here will allow the tree to follow Kismet sequence events within the specified level.


Warning: The Kismet graphing abilities seem pretty solid to me, but I wouldn't be surprised if there are edge cases I've missed. Please let me know if any graphs error out, or are doing anything weird!

Option Reference

For the most basic functionality (which is all most people are ever going to need), simply paste the BPD name into the main textbox, choose the game, and hit "Generate." As of August 13, 2018, you can also put in a Kismet sequence start point to graph those. For instance, some valid start points:

The graph should let you know whenever it would "call out" to an external event, whether it's to another BPD or a Kismet sequence. In some cases, it can know the BPD name to display, in which case it will show you (see the screenshot below). By default, it won't actually "follow" any of these links, though.

In order to have the graph follow into event links as much as possible (which will often be into Kismet sequences), choose a level in which the BPD or Kismet will be running. This way, the grapher can know which Kismets are available to link to.

Finally, when graphing into Kismets, sometimes the sequence links will take the grapher out of the class that it started in. For instance, the graph of Distillery_Boss.TheWorld:PersistentLevel.Main_Sequence.SeqEvent_LevelLoaded_1 starts out in the main class Distillery_Boss.TheWorld:PersistentLevel.Main_Sequence. So long as Rotgut Distillery is chosen as the level to work in, the tree will end up showing that it branches out to other sequences into classes such as Distillery_Mission3.TheWorld:PersistentLevel.Main_Sequence. In order to actually follow those links, rather than just stopping at the class change, check the "Allow following Kismets through class boundaries" checkbox.

Output Reference

Graph of base Amp shield BPD Graph of a Kismet sequence from the Christmas Headhunter Pack

Green nodes are the initial Events in EventData2 which kick off the BPD trees. The number in brackets is the index in the BehaviorSequences array which the event lives. If the main BehaviorSequence has a name, it will be here. The Event name itself is always shown after a period. The second index in brackets is the index of the event inside the EventData2 index.

Blue nodes are Kismet sequence objects, and the darker blue, square-corner ones are Kismet sequence events. The lighter blue nodes are other sequence objects. The event name will be included where relevant.

Other nodes are behaviors from the BehaviorData2 array. The number in brackets is the index of the behavior.

Inbetween the behavior name and the optional variables (see below), there may be some extra data provided, depending on the behavior type. Most behavior types won't report anything special, but a few will. I am open to suggestions as to more data which would be usefully provided in the graph.

Variables are inside the nodes, underneath the title of the node. Output variables are prefixed by Out:, input variables are prefixed by In:, and context variables are prefixed by Ctx:.

  • The left-hand side of the variable (before "via") is the relevant entry in the VariableData array, with its index in brackets. If the VariableData entry is named, the name will appear there as well. The data type is always shown.
  • The right-hand side of the variable (after "via") is two components:
    • First, the relevant entry in the ConsolidatedVariableLinkData array, with its index in brackets. The name will always be shown there.
    • Secondly (after the comma), the index in the ConsolidatedLinkedVariables array which points to the actual variable.

The links between the behaviors will have a few labels attached right where they leave their parent node. The first number is the order in which they are called, starting with zero. The second number, in brackets, is the index of the ConsolidatedOutputLinkData entry being used to provide the link. The third line will be the "Link ID." Some Behaviors will require certain IDs for the links to work properly, so this should give you a feel for what the IDs are. (See my BPD Number Calculator page for information on how those relate to the values you'll see in the BPDs themselves.) Then, an optional fourth entry may appear under that, prefixed with a lowercase "d", which will specify a delay before triggering the next behavior.

Links which refer back to events will be colored in green if it's heading towards a BPD Event, or blue if it's heading towards a Kismet sequence event. If a RemoteCustomEvent links to an event name which isn't present in this BPD, the link will be shown in a node which looks a bit like an arrow pointing to the right. Those nodes will be light red for event names which appear to be invalid generally, and gold for events which explicitly link to other BPDs.

"Broken" BPDs

As of the newest DLC update (Commander Lilith and the Fight for Sanctuary), the data for six specific BPDs is partially missing, and prevents them from being graphed. This is because some BPD subobjects are apparently dynamically-named, and the number suffix can vary depending on when the level is loaded, so the dumps don't include those objects anymore. I currently don't really have any plans to fix this, but just for reference, here are the broken BPDs:


The code (and data) for this page exist at github: https://github.com/apocalyptech/borderlands-bpd. The code is licensed under the 3-clause BSD license. Feel free to run it locally yourself, if you like, or even host it elsewhere. I intend to keep hosting this on my own site, but should it ever go dark, having mirrors is always nice.



June 19, 2019
  • Updated data which includes Mt. Scarab Research Center
  • Added note about six currently-broken BPDs
June 18, 2019
  • Added data for DLC5 (Commander Lilith) - missing map info for Mt. Scarab Research Center, though
December 31, 2018
  • Fixed a bug which was preventing BPDs without BehaviorProviderDefinition in their name from being graphed properly
August 30, 2018
  • Fixed a bug which would prevent broken BPDs from graphing properly
August 29, 2018
  • Added data reporting in some more BPD behavior nodes: ChangeRemoteBehaviorSequenceState, SimpleAnimPlay, SimpleAnimStop
  • Show disabled BPD events in graph (only affects ten BPDs across both BL2 and TPS)
  • Added Link IDs to BPD Links
August 28, 2018
  • Added VarName reporting for sequence variables
  • Added data reporting in some BPD behavior nodes: ChangeInstanceDataSwitch, ChangeUsability, Delay, IsSequenceEnabled, and event names
  • Fixed a bug preventing PNG images from being generated
August 20, 2018
  • Added link to Kismet/BPD Basics Wiki page
August 19, 2018
  • Fixed Kismet sequence over-reporting of full classnames, when graphing entire sequence
  • Default to SVG output
  • Graphs will open in new tab
  • Option to not show kismet variables
August 17, 2018
  • Allow fully-qualified objects to be passed in as name (with object type and quotes)
  • Show linked kismet variables as separate nodes
  • Fix error on full-kismet graphs where nodes could be drawn twice
August 16, 2018
  • Added ability to graph entire Kismet sequence, rather than having to choose a start point
  • Added PNG/SVG output dropdown
August 13, 2018
  • Allow graphing of Kismet sequences as well
  • BPDs can link to Kismet sequence events, if a level is chosen to operate in
August 10, 2018
  • Added EventData2 index to Event nodes
  • Link RemoteCustomEvent Behaviors where possible
  • Updated BL2 BPD data to BLCMM's latest -- there were a few things missing, I think
August 6, 2018
  • Updated TPS BPD data to BLCMM's data, rather than my own -- more complete definitions in a variety of cases
August 3, 2018
  • Added a link to the freshly-uploaded source at Github
July 13, 2018
  • Correctly display delays which aren't whole numbers
July 2, 2018
  • Use text labels for variables rather than arrows
  • Added LightChaosman credit for data -- should've had that in for awhile!
June 28, 2018
  • Changed to rectangles rather than ellipses for the nodes
June 19, 2018
  • Initial post