Skip to content

Show something on the minimap

Designer · 15 min · No code

Result: an actor of yours, such as a treasure chest, a landmark or a camp, shows on the minimap with its own icon. Or one of the shipped markers looks different.

Before you start

  • Read Minimap.
  • An icon image, white on transparent, around 32–64 px. White icons take their colour from the row's Tint; a coloured icon (like the quest !) uses a white tint.

How markers work

Every marker is an actor that has registered with the minimap as a kind, which is a XenoCore.Map.Marker.* gameplay tag. What a kind looks like is one row of UserInterface/HUD/Minimap/DT_XenoCore_MapMarkers. XenoCore's enemies and NPCs register themselves.

Kind Who uses it
XenoCore.Map.Marker.Monster Every living XenoCore enemy
XenoCore.Map.Marker.UniqueMonster A living enemy with Unique Monster ticked
XenoCore.Map.Marker.QuestGiver An NPC whose quest is offerable or ready to hand in
XenoCore.Map.Marker.Shop An NPC with a Shop Table
XenoCore.Map.Marker.QuestTarget Whatever the tracked quest still needs, including the NPC a Talk To NPC step names and the XenoCore Quest Location a Reach Location step names (set by the minimap, never registered)

Change how a shipped marker looks

  1. Open UserInterface/HUD/Minimap/DT_XenoCore_MapMarkers.
  2. Select the row and change:
Column What it does
Icon The image. Its own size is ignored
Tint Multiplies the icon's colour
Size Size on the minimap. The shipped sizes were measured on XC1 against the circle's width: a monster 8, a quest tag 30 (it draws about 20 × 28, being portrait inside its square icon), the arrow 24
Rotate With Actor Turn with the actor's facing (an arrow), or stay upright (a dot, a sign)
Clamp To Rim Stay pinned to the edge, pointing the way, when out of range. For objectives
Draw Order Higher draws on top
Pulse When Engaged For enemies: pulse while the enemy is fighting the party
Label On Full Map On the L3 view, print the actor's name beside the icon (an NPC's Display Name)
Label This kind's line in the L3 view's legend - the only marker text the player reads (the shipped enemy rows say Enemy and Unique Enemy). Empty = not in the legend
Tint By Enemy Danger For enemies: multiply Tint by the enemy's level colour against the party leader, the same ladder as its lvl.N label (Project Settings › XenoCore Enemies › Level Label › Level Colour Bands). Leave Tint white so the ladder's colours show true
  1. Save. Play to see it.

Add a new kind of marker

1. Add the tag

  1. Open Project Settings › Project › Gameplay Tags and click Add New Gameplay Tag.
  2. Name it XenoCore.Map.Marker.<YourKind>, for example XenoCore.Map.Marker.Chest, add a comment saying what it marks, and set Source to your own tag source (for example MyGameTags.ini), not XenoCore's, so a template update cannot remove it.
  3. Click Add New Tag.

2. Add its row

  1. Drag your icon file into your own folder, for example MyGame/UI/Minimap. Open it and set Level Of Detail › Texture Group to UI and Mip Gen Settings to NoMipmaps. Save.
  2. In DT_XenoCore_MapMarkers, click Add, and name the row after the kind (e.g. Chest).
  3. Set Kind to your tag. Expand Icon and set its Image to your texture. Then set Tint, Size and the rest as above.
  4. Save. DT_XenoCore_MapMarkers is a shipped asset: note your row for template updates.

3. Make your actor register

In your actor's Blueprint, open the Event Graph:

  1. From Event BeginPlay, add Get Map Markers (category XenoCore › Map), then Register Marker with Actor = Self and Kind = your tag.
  2. From Event End Play, add Get Map Markers, then Unregister Marker with Actor = Self.

The marker now follows the actor wherever it goes. To stop showing it, for example once a chest is opened, call Unregister Marker at that moment. To change what it shows as, call Register Marker again with the new kind.

A kind with no row draws nothing

If no row in DT_XenoCore_MapMarkers has your tag as its Kind, the actor is not drawn. The Output Log says so once, naming the actor and the tag: Minimap: <actor> is registered as <tag>, but DT_XenoCore_MapMarkers has no row for that kind.

For programmers: a kind that changes every frame

XenoCore's enemies and NPCs implement IXenoCoreMapMarkerSource and answer which kind to show each frame, or none: a dead enemy, an NPC whose quest is taken. A Blueprint actor cannot implement that interface, so it registers a fixed kind and re-registers when that changes.

Test it

  1. Place your actor a few metres from the player start in Maps/L_XenoCore_Gym and press Play.
  2. It appears on the minimap (top right) where it stands, with your icon, tint and size.
  3. Walk away from it: it slides to the edge and leaves the circle (or stays pinned to the rim, if Clamp To Rim is on).
  4. Press L3 (or M): it appears on the full-screen map too, and in the legend if the row has a Label.

If it doesn't work

What you see Cause Fix
Nothing, and a Minimap: ... has no row line in the log The row's Kind is not your tag Set Kind exactly. Row names do not matter, the Kind does
Nothing, and no log line The actor never registered Check Register Marker runs (BeginPlay) and Actor is Self
A blank square The row has no Icon, or the icon's alpha is solid Set Icon; use a white-on-transparent image
The marker stays after the actor is gone No Unregister Marker on End Play Add it. The minimap drops destroyed actors on its own, but a hidden one stays