Skip to main content

Gameplay tags

The framework ships the vocabulary it has to understand itself, and nothing else. Everything under the roots below that is not listed here is yours to declare.

Geometry — Mount.Entry.*

Which side of a mount a door is on. These are not game vocabulary — they are facts about a shape, and the framework computes them itself when it picks which door you walk to. Shipping them means an animation set authored in one project reads the same in the next.

Tag
Mount.Entry.LeftThe mount's −Y side.
Mount.Entry.RightThe mount's +Y side.
Mount.Entry.FrontThe mount's +X side: bonnet, prow, the head end of a horse.
Mount.Entry.RearThe mount's −X side: tailgate, stern.
Mount.Entry.TopFrom above: a turret hatch, an open-top buggy, a roof.

An entry point with no side tag gets one derived from where it is: whichever of the mount's local axes the offset points along most strongly, with Z winning only when the point is clearly above.

Roles — Mount.Role.*

Tag
Mount.Role.DriverThe seat that steers this mount. The only role the framework acts on.
Mount.Role.PassengerAny seat that does not. The default.

Games add their own leaves: Mount.Role.Gunner, Mount.Role.Navigator. The framework passes them to animation selection and to your code, and does nothing else with them.

Phases — Mount.Phase.*

What an animation set entry is keyed on.

Tag
Mount.Phase.EnterGetting in.
Mount.Phase.ExitGetting out.
Mount.Phase.ShuffleMoving between seats.
Mount.Phase.SeatedSettling into the seat — a one-shot, not the seated loop.

An entry tagged with the parent Mount.Phase covers every phase under it, which is how a single "any transition" fallback is expressed.

Protocol — Mount.Event.*

What an anim notify hands back. These are a contract with your montages.

TagWhat the framework does
Mount.Event.AttachAttaches the rider. On the server, takes the seat.
Mount.Event.DetachDetaches and places the rider. On the server, frees the seat.
Mount.Event.FinishedEnds the transition early.
Mount.Event.DoorOpenCalls SetSeatDoorOpen(Seat, true) on the mount.
Mount.Event.DoorCloseCalls SetSeatDoorOpen(Seat, false).

A tag you declare under Mount.Event is delivered to OnMountEvent on both the rider and the mount, and nothing else happens to it. That is the whole extension mechanism for transition moments.

Access — Mount.Access

A root only. Whether a seat is locked to a faction, a key item or a quest state is a question only your game can answer, so declare your own leaves under it:

; Config/DefaultGameplayTags.ini
[/Script/GameplayTags.GameplayTagsSettings]
+GameplayTagList=(Tag="Mount.Access.PoliceVehicle",DevComment="Only police may drive it")
+GameplayTagList=(Tag="Mount.Access.HasKeys",DevComment="Granted by the key item")

Then put a query in the seat's Required Rider Tags and answer GetRiderTags from wherever your game keeps them. See Access rules.

Using them in C++

#include "System/EDMountingTags.h"

Seat->RoleTag = EDMountingTags::Mount_Role_Driver;
EntryPoint.SideTag = EDMountingTags::Mount_Entry_Left;

if (EventTag.MatchesTagExact(EDMountingTags::Mount_Event_Attach)) { ... }

The variable name mirrors the tag with . replaced by _.

All of them are native tags, declared with UE_DEFINE_GAMEPLAY_TAG_COMMENT, so they are registered before any asset loads and cannot be missing from a project's tag table.