Skip to content

Node names and gameplay objects

MonoGame / XNAGameplay dataApplies toSTUNTBOOST

STUNTBOOST’s levels carry their gameplay in the names of the Blender objects, exported as glTF node names. The game’s content pipeline parses each name (SE.Pipeline.ParsedName) into a visible name, type flags and a code. Every one of the 23,799 node names in the 159 level parts parses to the same result under an independent reader of the grammar as under the game’s own parser: visibility, collision aggregate, bake shadows, inner name and code. Proven · STUNTBOOST

{hide} {name} {type} {= {Class(args)} {.Property or Method(args)} } {.001}, every part optional. Sourced · StuntboostTools

  • Name and code. With an =, the name is what precedes the first =, and the code is the rest from the = on, kept whole (a Blender .NNN suffix after the code stays part of it). Without an =, the name ends at its first .; what follows, normally Blender’s .NNN, is dropped. Proven · STUNTBOOST
  • Type characters are read backwards from the end of the node name (the name up to its first .), in any order, until another character; as many characters as were read come off the end of the name. When the same kind appears twice, the one nearer the start wins. Proven · STUNTBOOST
Character Meaning Nodes in the 159 parts Confidence
_ invisible, in the game and in the bake 19,745 Observed · STUNTBOOST
* visible in the bake but not baked to 0 Observed · STUNTBOOST
° invisible in the bake 744 Observed · STUNTBOOST
< solid collision 18,632 Observed · STUNTBOOST
# transmissive: a trigger, passed through 1,288 Observed · STUNTBOOST

The counts are of the characters read at the end of the nodes’ names. Observed · STUNTBOOST A solid collision node that is also invisible is written _<; an invisible trigger _#. Sourced · StuntboostTools

  • Code. A C#-like chain of calls without spaces and without new: a class, then property setters or methods, each Name or Name(args), arguments split at top-level commas (Vector3(1,0,0),x is two). No class (code starting with =., or none) means Entity(). A trailing three-digit .NNN is Blender’s duplicate suffix and not a call. Proven · STUNTBOOST
  • Hide prefixes in Blender: / hides the object before export (it can still affect the bake, as a shadow helper), // excludes it from the bake and from the export. Sourced · StuntboostTools

Parsing never fails: a name is what it says; what the game makes of an unknown class is the game’s own matter. A node with an unknown class shows as a red wireframe box in the game. Sourced · StuntboostTools

The class is the first call after the =. The levels use it as follows (counts of nodes whose code starts with the class):

Class Nodes Meaning Confidence
Woosh 1,384 Observed · STUNTBOOST
Transparent(a) 619 a drawn-transparent node with alpha a, see level materials Observed · STUNTBOOST
BackfaceShadowCaster() 553 drawn only into the static shadows; every room’s ceiling Observed · STUNTBOOST
Booster(speed) 274 a boost pad; the speed is the exporter’s CM/S modifier Sourced · StuntboostTools
Checkpoint 269 a checkpoint trigger Inferred
BoomboxButton 180 an interactive prop (a boombox button) Inferred
RoomKill 142 Observed · STUNTBOOST
Spawn(<name>[,n]) 133 a spawn point; a custom map needs =Spawn(start) or =Spawn() Sourced · StuntboostTools
DoorHandle, Door 115, 36 interactive door props Inferred
CDCaseTransparent, CassetteCaseTransparent, TransparentBowl 99, 96, 56 transparent props Inferred
Detour 94 a shortcut detour (the pipeline’s Cuts data) Inferred
LightSwitch, PowerButtonStrip, PowerButtonPC, PCSpeakerKnob, PCScreenGlass 93, 80, 52, 56, 27 room props Inferred
Text 90 text drawn in the level Inferred
Drum, Cymbal, Boombox, TurntableArm 72, 31, 30, 44 interactive props Inferred
Goal 57 the finish Inferred
SetBakedLighting() 56 marks a level drawn from its baked lighting Observed · STUNTBOOST
PreviewCamera 56 the camera of the level’s preview Inferred
Skybox 56 marks the skybox part Observed · STUNTBOOST
Sun, CustomSunRegion 55, 29 the sun, and regions with another sun Inferred
CheckpointSpawn 55 a spawn after a checkpoint Inferred
HiddenCollectible 54 a collectible Inferred
Kill 42 a kill volume Inferred
EyeGlass, EyePupil, EyeTriggerMesh 30, 30, 27 the eyes of the Eyes levels Inferred
SignTrigger, GoalCameraPoints, RestartTut, LvlBowlsBowl 29, 28, 28, 36 Inferred

Gameplay objects in the level glTFs include boosters (#=Booster(speed)), doors with handles, drums, cymbals and turntables, and collectibles. Observed · STUNTBOOST

The lap goal and mandatory checkpoint assets of the tools (lap_goal, checkpoint_mandatory) mark laps: a lap goal activates only after every mandatory checkpoint. Sourced · StuntboostTools

By its name, in this order: an invisible node (_) is never drawn; a node with a BackfaceShadowCaster call is drawn only into the static shadows; a node whose name contains Transparent is drawn sorted back to front; otherwise it is drawn. A _< collision node is never drawn. Observed · STUNTBOOST 870 nodes over all levels contain Transparent. Observed · STUNTBOOST

The exporter also reads names on collections (bake_group for a bake map, bake_size=X for UV scale, rename=from|to, append_prop=Code, swap_collision_materials=C_Kill, prevent_join, outline_max_thickness=X, outline_shift, outline_shift_relative, outline_shrink, delete_collisions), vertex groups (bake_size=0.2) and modifiers (//name ignored, /name removed after the bake). A // or / prefix on a collection excludes it. Sourced · StuntboostTools

The classes with no stated meaning

Woosh (1,384 nodes), RoomKill and several props have no meaning stated in the tools’ documentation; what the game does for each class is in its code and has not been tabulated.