> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/data/gamestrings.md).

# 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](/docs/data/message.md). `/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.

|                                | [Message.xml](/docs/data/message.md)            | 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

```xml
<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                                                                       |
| --------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| [ChaosMix\_Recipes.xml](/docs/data/plugins/chaosmix/recipes.md) | `<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 |
