Skip to content

Troubleshooting

olmopje edited this page Sep 14, 2026 · 3 revisions

Troubleshooting

Ordered roughly by how often each one actually happens.

"No properties" when I edit an MCF node in Game Master

Script [Attribute(...)] fields are prefab data. Game Master's properties panel reads editor attributes, which are a separate system. A node with rich script attributes shows an empty panel until editor attributes are written for it.

A Game Master value snaps back to 0 when I reopen the panel

A slider-backed editor attribute writes a float. Reading it back with GetInt() gives you 0 every time. This is a code fix — CreateFloat plus Math.Round(var.GetFloat()) — not something you can configure around.

Something works in Workbench and breaks with real players

A Workbench play session is server and client at once, and hides every replication bug. Run it in the Peer Tool (the dropdown beside the Play button) with a real second client before believing it.

The usual specific cause: a Game Master edit sent as a broadcast rather than an RplProp. A broadcast reaches whoever is connected at that moment; a player who joins later, or who streams the object in later, permanently sees the old value.

Text appears for everyone when I set an Audience

FACTION and PLAYER are plumbed but unproven. GROUP is not implemented at all and deliberately falls back to everyone with a warning, rather than silently hiding messages. Recipe steps (PLAY_TEXT_LINE:) always go to everyone — the step syntax has no room for an audience, so use a Text Line node when a line needs one.

The game crashes when a player opens the map

The Game Mode Setup wizard generates a MapEntity with empty map texture fields. Fill both in. This is a vanilla issue, not an MCF one.

Workbench refuses a second GameMode

A world has exactly one. Do not drag a GameMode prefab in — use Plugins → Game Mode Setup, then add the MCF components to the GameMode entity it created.

The dedicated server dies with "Unable to start replication"

Local Host is holding UDP 2001. Stop it before starting the dedicated server.

Escape closes my play session instead of my menu

Escape is not a way out in the Workbench — it stops the session. Every MCF screen has a visible close button for this reason.

I cannot get out of the laptop or the map board

Both have a way out that does not depend on a key binding.

  • The laptop: open the launcher and take Shut down, beside Lock screen.
  • The map board: CLOSE BOARD on the strip of paper over the map.

Escape works as well on both, wherever your bindings reach the screen. The map board is the one place it often does not: that screen runs in MapContext, which is what makes the map pan and zoom at all, and MapContext defines no escape action. That is why the button is there.

Freehand drawing on the map is not saved

The drawing is held by the server, on an entity MCF spawns for it. If it is not there, strokes are collected, sent, and dropped. Look for this near the start of the log:

[MCF] Operations systems spawned, map drawing is held by the server

No line means the Operations half of Intelligence did not start on that game mode, and nothing about the map will save. A warning naming the prefab appears in its place.

The map board shows no roads or buildings

The map picks its detail layer from the zoom, and the default map props hide buildings and minor roads on the coarse layers — that is vanilla's behaviour, not the board's. Zoom in. If detail never appears at any zoom, the board is stuck on one layer; the map board grid line in the log reports which one.

A board looks different on two machines

Compare the map board grid line from both logs. The same widthM with a different ppu is correct — the boards show the same ground and their windows have different numbers of pixels. A different widthM means the view has not replicated yet; set=false on both means nobody has ever moved that board, and each machine is showing the middle of the world on its own.

Turning the trace off

It is on by default because the framework is young enough that you want it. For a production server that would rather not have the chatter:

MCF_Core_Log.SetEnabled(false);

Warnings and errors ignore that switch, so validation problems still surface.