I've been to play testing sessions from both large and indie studios, and I often see a symbol in front of UI texts during development builds. It most commonly appear in buttons texts, but can also be seen in NPC names and etc.

The symbols are typically a dollar sign ($) or a exclamation sign (!).

A game at Ubisoft for example had exclamation marks in front of every UI text:


When someone breaks Skyrim by modding, a dollar sign could be seen as well:

Skyrim $ in front of texts

What do these symbols mean / are used for? Placeholder? To be localized? Do the symbols used vary from studio to studio or is there a notation standard of some sort and different symbol mean different things?

Are there any reasons at all for the rest of us to adopt this?

  • \$\begingroup\$ @DMGregory may be able to provide a more concrete answer to this, but I think your alternate symbols just come down to the language being used. \$\endgroup\$
    – Gnemlock
    Dec 31 '16 at 1:50

These are pre-localized strings, most likely.

For localization, there will be a primary identifier (like $Spells) that is used to look-up the correct text in a big translation table loaded depending on the active language.

These identifiers are also often used to help find the correct voice or texture for in-world elements. For instance, if a wall is supposed to show a sign texture, the wall might be painted with the texture identifier $sign_1 which is then looked up in the translation table. If the table is set to French then $sign_1 possibly maps to a resource path string like /textures/localized/fr/route_dangereuse.dds while in the English table it might map to /texture/localized/en/dangerous_road.dds. (Games these days are perhaps more likely to dynamically generate the text to avoid texture pack explosion, but you get the idea.)

Using the special symbols may be part of the tooling the engine uses. For instance, if the translation for Inventory is requested but no translation is found, the system might return a marked-up result like ##Inventory## (or $Inventory) as this will make the game more usable during development but still makes untranslated text "obvious". It may also just help for any search-and-replace the developers might do for hard-coded UI strings, though that's hopefully a very rare problem in most games; this then might imply that the weird character is convention rather than a technological artifact.

Building off of @AminePaleo's answer, it's also possible that the engine has a text substitution engine that looks for certain patterns and performs the translation. e.g. Go to $location now. might parse out location as the name of an entry in the current quest. This will generally be done after localization though, since grammatical structure will be different between languages. So the game might have a string like !go_to_location which is looked up in the localization table and is Go to $location now in English, and then location is the quest's target location, whose localized English name is Seattle, so the final output after all stages of translation would be Go to Seattle now..

Most games will keep any kind of two-stage lookup like that to a minimum, though, due to the extreme difficulty in composing natural-sounding English (much less French, German, etc.) from sentence fragments (getting the English articles - a, the, an, etc. - right is itself surprisingly difficult, given that the correct article changes based on both the sentence structure and the noun in question, e.g. whether it's proper, plural, definite, uncountable, etc.).


They are probably storing all String values in a single place, so to access a value by its variable name, you need to indicate that it is a variable and not the actual value.

You can do this by adding the sign $, @ or !. For example, consider the following:

$name = "someone";
$text = "some speech";

We would say "this guy" + $name + " says" + $text, as the strings have not been implemented, yet. The output would look "this guy someone says that speech some speech".

Note that this answer is based in theory.

  • \$\begingroup\$ Welcome to GameDev! Please make sure you take a little care with your answer - try to use good grammar, spelling and punctuation, and try to stay away from commentary or discussion-like marks. In this case, your answer could be quite useful, but it was automatically flagged as low quality by the system. \$\endgroup\$
    – Gnemlock
    Dec 31 '16 at 1:30
  • \$\begingroup\$ I feel this answer could also benefit from adding that there is only one symbol; but that symbol changes between programming languages. \$\endgroup\$
    – Gnemlock
    Dec 31 '16 at 1:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.