For the complete documentation index, see llms.txt. This page is also available as Markdown.

GameStrings.xml

Client-resident display text - add strings to the game without patching the client

Text the client puts on screen itself. The whole table is sent to every client at login, so any server config can show new text by referencing an id here instead of editing the client's Text.bmd and reshipping the client.

File Location

Data/GameStrings.xml

Loaded at GameServer startup, alongside Message.xml. /reload common (or reload.common in the Server Manager) reloads it on the server, but the copy sent to clients at login is not rebuilt by it - run /reload plugins after it, then players relog to see the new text.

Not the same as Message.xml

The two files look similar and are not interchangeable.

GameStrings.xml

Who resolves the id

GameServer

client

What crosses the wire

the finished, formatted line

the whole table, once at login

Format specifiers (%d, %s)

expected - the server fills them in

not allowed - copied verbatim

Typical use

event notices, siege announcements, system chat

recipe titles, group labels, window text

If the client has to have the string in hand before it can draw a frame, it belongs here. If the server decides when to say something and sends it, it belongs in Message.xml.

Schema

<GameStrings>
    <String Id="10500" Text="Manticore Armor Part" />
</GameStrings>
Attribute
Effect

Id

Reference id. Must be between 10000 and 65535. Ids outside that range are skipped at load with a red [GameStrings] log line. Referenced by other configs

Text

Display text. Up to 127 characters. No format specifiers

Id Ranges

The client's Text.bmd can never hold an id above 9999, so 10000 is where this table starts and the two ranges cannot collide.

Range
Owner

0 - 9999

Client Text.bmd (GlobalText). A config referencing one of these still resolves against the client, exactly as before

10000 - 65535

This file

Anywhere a config takes a text id, either range works. Existing configs that point at Text.bmd ids keep working untouched - nothing needs migrating.

A suggested layout inside the 10000+ range (convention only, nothing enforces it):

Range
Use

10000 - 10099

General / shared labels

10100 - 10399

Chaos mix recipe titles, descriptions, advice

10400 - 10999

Chaos mix source group labels

11000 +

Future systems

Consumers

Config
Attributes

<Display> NameText1-3, DescText1-3, AdviceText1-3; <Source> NameText

Inscription Recipes.xml (Data/Plugins/Inscription/)

Same <Display> / <Source> attributes as ChaosMix recipes

Some ids are read by the client directly, by fixed number. Editing their text changes what players see; deleting them leaves an empty label.

Shipped ranges:

Range
Used for

10000

Lucky Coin window "Register All" button

10001 - 10007

MU Helper "Auto Recovery" page labels (Elite Potion, SD Potion, Elf Recover / SD Support rows, "Off")

10500

Chaos mix source label "Manticore Armor Part"

11000 - 11001

Elemental jewelry tooltip lines

11100 - 11101

Repair refused messages

11200 - 11278

Inscription system: recipe texts, the Inscription tab's reasons, results and window labels

11300 - 11307

Recipe Book categories. A recipe's <Display Category="N"> shows id 11300 + N (11300 = Other)

11310 - 11335

Chaos window and Recipe Book labels, plus recipe names that used to share one text

Keep these ids when you edit the file. Add your own text in free ranges (for example 10100-10499 or 12000+).

Important Behavior

Entries are copied verbatim. A % in the text renders literally as % on screen - the client does no formatting. The GameServer logs a warning at startup for any entry containing %. Use Message.xml for anything that needs values substituted in.

A missing id is an authoring bug, not a crash. If a config references an id that isn't in this file, the GameServer logs references missing string Id <n> at startup naming the config that did it, and the client draws an empty string in its place. Check the startup log after editing.

Ids below 10000 are rejected on load, with a log line, so a typo like 1500 instead of 10500 cannot silently shadow a Text.bmd entry. Ids above 65535 are rejected the same way - that is the highest id the client wire format can carry.

Duplicate ids are rejected, keeping the first entry, with a log line.

Common Issues

Symptom
Cause

Text renders as literal %d

Format specifier in a GameStrings entry - move it to Message.xml

Blank text where a label should be

Referenced id missing from this file - check the GameServer startup log

Entry seems ignored

Id below 10000 or above 65535, or a duplicate of an earlier entry - all are logged at startup

Text cut short

Longer than 127 characters. Consumers with their own tighter limits truncate further; chaos mix source labels clamp to 63

Last updated