Adding Custom Dialogue - EverestAPI/Resources GitHub Wiki

To add custom lines of Dialogue, it is important to follow the correct Mod Structure. It is also important to restart your game whenever you add or move your dialogue file (though editing its contents should apply immediately).

Note:
If you're using Notepad++, you can import a custom user defined language for Celeste Dialog .txt files.
Thanks to iSkLz on the Celeste Discord server for creating and publishing this file!
Celeste_Dialogs.xml 🔗

Table of Contents

Click to expand Table of Contents

Setting up the Dialogue File

Create a Folder named Dialog in your Mod's root folder. Example: Celeste/Mods/MyExampleMap/Dialog

In this folder you can now create a new .txt file. What you name this file depends on to what language you want to add your custom Dialogue. Files for Languages that are already present in Vanilla Celeste:

  • Brazilian Portuguese.txt
  • English.txt
  • French.txt
  • German.txt
  • Italian.txt
  • Japanese.txt
  • Korean.txt
  • Russian.txt
  • Simplified Chinese.txt
  • Spanish.txt

If you do not have "Show File Extensions" enabled, it is suggested to enable it to ensure your language file ends with .txt rather than .txt.txt.

If a Dialogue ID from the currently selected Language is called and the specific ID, and or complete file for that language is not given, Everest defaults the displayed Dialogue to use the text in English.txtinstead.

Implementation for custom Languages is the same, however be sure to check what the specific Dialogue file needs to be named.

Vanilla Dialogue Files are located at Celeste/Content/Dialog

Creating Dialogue Strings and IDs

In the Dialogue file you set up Strings and IDs for Dialogue. The game uses these IDs to look up what should be displayed in, for Example, a Message Box.

Example of a String and corresponding Dialogue ID out of the Vanilla English.txt:

CH2_THEO_B=
[THEO left normal]
Sorry about that.
Don't worry, I won't post that one.

CH2_THEO_B in this case is the ID, it should be named uniquely, as to not conflict with Vanilla Dialogue or Custom Dialogue from other mods.

Example: MAPAUTHOR_MAPNAME_JUMPDIALOG_1 instead of Jump1

[THEO left normal] is used to determine what Dialogue Portrait and Dialogue Box should be used.

THEO in this case means that the Text will display Theo's Dialogue Box and Dialogue Portrait. This can naturally be changed to use to different Character's assets. To add custom portraits see here

left is the orientation of the Dialogue Portrait, in this case it would appear on the left side of the Dialogue Box.

normal is what expression the Dialogue Portrait should use. What expressions are available for a specific character, can be seen ingame by using the portraits command in the Debug Mode Console.

These Attributes can be completely left out, which is useful when an Entity does only display text, and not a Dialogue Box, for Example.

The rest of the Dialogue is the actual lines of text that will appear ingame when the ID is called. Here, text commands can also be used. To see a list of some available commands for modifying the displaying of text ingame and what exactly they do, check the top of the Vanilla English.txt. Other Commands are used throughout the game but aren't documented, like * which makes the displayed text shake. Be sure that you don't use the trigger command though, as it heavily hardcoded. If you are in dire need of more advanced Cutscenes, check Cruor's Lua Cutscenes Mod 🔗.

If you want to translate your text into another Language, create the same ID in the corresponding Language's Dialogue File. What text will be displayed, depends on the currently selected Language.

Using Generated IDs

Certain Dialogue IDs are generated and used by the game based on folder structure and filenames. These are done for Chapter Names, Checkpoint Names, Crystal Heart Poems etc. To get these IDs to display the desired text, simply copy the ID the game gives you into your Dialogue File and set it to the desired Text. Example for a Chaptername:

Map .bin file location: Celeste/Mods/MyExampleMap/Maps/ExampleLevelset/ExampleMapFolder/ExampleMap.bin
Autogenerated ID: ExampleLevelset_ExampleMapFolder_ExampleMap
Filled out String with Text: ExampleLevelset_ExampleMapFolder_ExampleMap= My Desired Name

Displaying Custom Dialogue In-Game

For the Autogenerated IDs this not needed as the game already calls them to be displayed.

However in maps different Entities and Triggers can also use custom Dialogue IDs to display text. Examples include:

  • Minitextbox Trigger
  • Everest Dialog Cutscene
  • Everest Custom NPC

To set an Object to use a set Dialog ID right click them in Lönn to open up the Entity Properties Menu Here you will likely see Dialog ID or something of similar nature. Copy your ID into the field, click update, save your map and your changes should now be present ingame.

Code Mods can also setup Custom Objects that allow for Custom Dialogue IDs to be used. If you want to use Custom Dialog in your own Code Mods, check this page.

Custom Emotes

Emotes are small images that you can use in-game in any place dialog is normally displayed. To add some, drop images in Graphics/Atlases/Gui/emoji in your mods folder. To then start using your new emote, simply write :emote_name: in your English.txt, where emote_name refers to the name of your emote file, minus the extension.

Custom Font Loading

If you happen to have Japanese, Chinese or Korean dialogue in particular, you might notice that some characters are missing when you view your dialogue in-game. That's because Celeste only ships with partial fonts. In this case, this will help you.

Using the online tool

To make the process simpler, you can use this online tool 🔗 in order to generate custom fonts or to get missing Japanese, Chinese or Korean characters.

Feel free to ping maddie480 on the Celeste Discord 🔗 if the generated font does not work properly.

Manually using BMFont

First, make sure your dialog file is saved using the UTF-8-BOM encoding. You can specify the encoding in the Save As dialog in Notepad.

Adding characters to the game's font

In order to feed the game with extra characters, you will have to generate pictures of them and a fnt file that describes them:

  • Download BMFont 🔗.
  • Load a configuration matching what the game expects 🔗, using Options > Load configuration.
  • Select Options > Font settings, then select the font matching your language (you might have to download and install them first, Noto fonts are available here 🔗):
    • Chinese: Noto Sans CJK SC Medium
    • Japanese: Noto Sans CJK JP Medium
    • Korean: Noto Sans CJK KR Medium
    • Russian: Noto Sans Med
    • Other languages: Renogare
  • Select Edit > Clear all chars from font then Edit > Select chars from file, then pick your dialog file. This will make sure all characters used in your dialog file, and only them, are exported.
  • Select Options > Save bitmap font as, then save your file with a unique name (mynickname_mymodname.fnt). You should get a fnt file and a few png files as a result (mynickname_mymodname_0.png, mynickname_mymodname_1.png...)
  • Rename the fnt file to (depending on the language):
    • chinese.fnt
    • japanese.fnt
    • korean.fnt
    • russian.fnt
    • renogare64.fnt
  • Drop the fnt and png files into Mods/yourmod/Dialog/Fonts

When the game starts up, you should see something similar to this in the console or in log.txt, telling you that the missing characters have been successfully added to the game's font:

[PixelFont] Loading font: D:\SteamLibrary\steamapps\common\Celeste\Content\Dialog\Fonts\korean.fnt
[PixelFont] => vanilla font file
[PixelFont] => mod font file from ExtendedVariantMode
[PixelFont] ==> Imported 15 new characters

Adding a completely custom font for the game

You might be interested by this if you want a "custom font" language, or want to translate Celeste to a language with a different alphabet. The procedure is very similar to the one from the previous section:

  • Download BMFont 🔗.
  • Load a configuration matching what the game expects 🔗, using Options > Load configuration.
  • Select Options > Font settings, then select the font you want.
  • Select Edit > Clear all chars from font then Edit > Select chars from file, then pick your dialog file. This will make sure all characters used in your dialog file, and only them, are exported.
  • Select Options > Save bitmap font as, then save your file with a unique name (mynickname_mymodname.fnt). You should get a fnt file and a few png files as a result (mynickname_mymodname_0.png, mynickname_mymodname_1.png...)
  • Drop the fnt and png files into Mods/yourmod/Dialog/Fonts
  • In your dialog file, edit this line, and replace "Renogare" with your actual font name (not the name you gave to the fnt file).
	FONT=Renogare,64

When the game starts up, you should see something similar to this in the console or in log.txt, telling you that the font was loaded:

[PixelFont] Loading font: D:\SteamLibrary\steamapps\common\Celeste\Content\Dialog\Fonts\comic_sans.fnt
[PixelFont] => mod font file from CelesteInComicSans

For a working language mod with a custom font, check this example mod 🔗. It gives you Celeste in Comic Sans. Yeah, I know.

⚠️ **GitHub.com Fallback** ⚠️