Skip to content
You're reading the docs for Railroader 0.6 (the MoW Update), currently available on the Experimental branch.

Identifiers

Railroader uses domain/name identifiers throughout the modding system to uniquely name packs, definitions, and assets.

The first part of every identifier is the domain, which identifies the author. Your domain should be unique to you — we recommend using your username or reverse DNS domain (e.g., myhandle, com.example).

Format: lowercase a-z, digits 0-9, hyphens -, periods .

Reserved domains, don’t use these: rr, steam-*, core, builtin. These belong to the base game and its infrastructure. Pick a domain that’s unique to you.

Every asset pack has a unique identifier in domain/pack-name format, declared in the pack’s Info.json.

{
"identifier": "myhandle/antarctic-freight"
}

Each definition (car, locomotive, prop, load, etc.) declared in Definitions.json has its own identifier in the same domain/name format:

{
"identifier": "myhandle/my-boxcar",
"definition": {
"kind": "Car",
...
}
}

A definition’s domain is typically the same as its pack’s domain, but this is not required.

Individual assets within a pack (models, textures, materials, audio) are referenced by combining the pack’s domain with the asset’s base filename:

domain/asset-name

For example, if you have my-engine.prefab in your somebody/my-engine-pack asset pack, the asset identifier is somebody/my-engine.

Only assets at the root of the pack source directory get an identifier this way. See Binary Assets for more.

To reference an asset within the same pack, use . as the domain:

"modelIdentifier": "./my-boxcar-model"

To reference an asset from another pack, use that pack’s domain:

"truckIdentifier": "rr/truck.buckeye.edt"

Not every name is a domain/name identifier. A definition also names things inside itself — a component id and a style class — and both can only include the same characters, because both have to be sayable in a style selector:

Format: ASCII letters A-Z/a-z, digits 0-9, hyphens -, underscores _

Nothing else. Spaces separate one class from the next rather than belonging to either, and dots and # are the selector syntax’s own punctuation, so "Number Board Decal" is three classes and not one name. Unlike a domain, case is free — selectors match case-insensitively, so numberBoard and .NUMBERBOARD name the same class.

A component may carry more than one style class, separated by spaces, and each entry between them has to be a name: "lettering shopDate" is two classes, while "lettering," has a stray comma naming nothing.

Railroader loads asset packs from multiple locations. Pack identifiers must be unique across locations — only ModDev packs can override an existing pack identifier. See Installing Mods for how players install and manage mods, or Asset Packs for the ModDev override behavior used during pack development.