Adding Custom Dialogue - coloursofnoise/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
Click to expand Table of Contents
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.txt
instead.
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
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.
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/ExampleLevelset/ExampleMapFolder/ExampleMap.bin
Autogenerated ID: ExampleLevelset_ExampleMapFolder_ExampleMap
Filled out String with Text: ExampleLevelset_ExampleMapFolder_ExampleMap= My Desired Name
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 Ahorn 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.
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.
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.
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 max480#4596 on the Celeste Discord if the generated font does not work properly.
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:
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
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.