-
Notifications
You must be signed in to change notification settings - Fork 7
Install Olympus 🔗 (the installer and mod manager) and Everest 🔗 (the mod loader).
Most people host their mods on GameBanana 🔗, but you can also find finished and work-in-progress mods posted in the #modding_showcase
and #modding_wip
channels of the Celeste Discord 🔗.
No. See here for more information.
Yes, follow the Linux install instructions 🔗.
✔️ The Steam, Epic Games, and itch.io versions can be modded.
❌ The Microsoft / Xbox Store version cannot be modded.
For more information see this post 🔗 from the Celeste Discord 🔗 (Paraphrased here):
- The game is encrypted on a per-user license basis, meaning no mods without cracking the game, even to just replace maps or text.
- It is built using the Universal Windows Platform 🔗 and .NET Native 🔗, meaning the mod loader would have to be completely rewritten.
- In short, UWP Celeste is as locked down as the Xbox version. Neither the Celeste devs nor the Modding Community can change this.
Note that on Windows there are actually two versions of the game available, XNA and FNA, with slightly different behaviour; on Steam you can opt in to the FNA version by selecting the "opengl" beta.
Make a copy of the Saves
folder.
For the platform-specific location of this folder, look here 🔗.
As some readers might already know, Celeste is written in C#, which is one language in the .NET ecosystem. The base game, in addition to previous versions of Everest, used to run on an older .NET runtime called .NET Framework. .NET Core Everest however, as the name implies, runs a more modern runtime, simply called ".NET" (which used to be called .NET Core - blame MS for not being able to properly name things).
Switching runtimes offers numerous advantages; see the following (paraphrased) list of advantages from the initial announcement:
For players:
- full backwards compatibility with mods
core
-branch Windows installs run as 64 bit instead of 32 bit processes. This means that the 4GB memory limit is no longer present, Celeste can now take advantage of all the RAM in your system!- big performance improvements on all platforms: load times have been reported as being up to halved (first starts may take longer because Everest needs to rebuild the relinker cache)**
For modders:
- ability to use up-to-date cross-platform tooling to for your mods, including debuggers
- access to modern .NET API improvements like e.g. fast
Span
sreorg
MonoMod is being used instead of the old legacy MonoMod, increasing performance and stability of hooks- full technical consistency across all platforms. Mods made on one platforms should now always work on all other platforms out of the box, instead of sometimes encountering API differences / other compatibility issues
Everest versions 4465 and above are running on .NET Core Everest, while 4449 and below are considered legacy. Make sure to update Everest if you haven't played for a while.
If you encounter any issues, let us know in the #modding_help
channel over at official Celeste Discord server 🔗!
Lönn 🔗, the community made map making program. It is a visual editor, with full support for modded entities.
Lönn can be installed through Olympus 🔗 (recommended), or manually by following the instructions on the README page 🔗.
Once you have Everest installed, you can play your map simply by saving the .bin
file from Lönn into the Mods folder inside your Celeste install folder.
However, it is recommended to follow the Mod Structure guide, since it allows you to do things like add custom assets, change your map's name in-game, and much more.
While Celeste loads, Everest merges all custom assets with the ones from the base game. When it does, it does not keep track of the mod that the assets came from.
This means that if two mods have a file in the same location relative to the mod folder, one will overwrite the other. This also applies to vanilla assets, and it is heavily discouraged to overwrite vanilla assets (textures, maps, dialog, etc) because it can be difficult to pin down which mod is overwriting them.
ℹ️ Some files are handled specially by Everest, and conflicting ones will be merged together rather than overwritten. This includes dialog files and top-level spritebanks.
Check the Mod Structure and Map Metadata pages, your question will likely be answered there.
See the list of base-game Entities for the commonly used names (The Celeste Fandom wiki is unreliable).
Read the Stylegrounds guide.
- Check for a wiki page that covers it (check the sidebar too!):
Dialog, Tilesets, Portraits, Music/Audio - Make sure to check the Mod Structure and Map Metadata pages too
- Look for an existing custom entity 🔗 that does what you want
- Ask in the
#modding_help
channel on the Celeste Discord 🔗
In short, a session flag is something that can be enabled or disabled.
When starting a level, all flags start disabled and can be turned on/off with flag triggers, some custom entities, and within Lua Cutscenes 🔗.
Flags are particularly useful for two things:
- When you enable a flag it stays enabled until the player exits or restarts your level so you can use it to make something happen only once.
- Many things react to flags being enabled or disabled, like flag switch gates or stylegrounds, which makes it possible to easily create new interactions between different helpers.
The easiest to play around with flags is with the Lever and Lamp from the Pandora's Box mod. By setting the flag property of both entities to the same thing, you can toggle the session flag by flipping the lever, and the lamp will react accordingly.
There are many different decompilers 🔗 that can be used to look at Celeste's code, commonly used are dnSpy 🔗 and ILSpy 🔗.
While dnSpy lets you modify Celeste's code directly, it's not really a feasible way to distribute mods to others.
Everest uses MonoMod 🔗, which allows methods to be "hooked", or detoured, at runtime. If you do find something that must be patched by Everest, ask for help in the #modding_help
channel on the Discord server.
Set up your code mod, then try modifying vanilla code, making custom entities, or writing your own cutscenes. This wiki assumes an existing knowledge of the C# programming language.
Older Code mods need to be migrated to properly work on .NET Core versions of Everest - see the migration guide for details on how to do this.
Home
Contributing
FAQ
Useful Links
Your First Custom Map
Your First Texture Pack
Mod Setup
Custom Maps
Texture Packs
Uploading Mods
Generated Dialog Keys
Reference Code Mod🔗
Vanilla Audio IDs
Character Portraits
Mod Structure
Debug Mode
Command Line Arguments
Environment Variables
Install Issues
Common Crashes
Latency Guide
everest.yaml Setup
Mapping FAQ
Map Metadata
Vanilla Metadata Reference
Adding Custom Dialogue
Overworld Customisation
Entity & Trigger Documentation
Custom Entity List🔗
Camera
Ahorn Scripts
Custom Tilesets
Tileset Format Reference
Stylegrounds
Reskinning Entities
Skinmods
Decal Registry
Chapter Complete Screen
Custom Portraits
Adding Custom Audio
Advanced Custom Audio
Code Mod Setup
Making Code Mods
Mod Settings
Everest Events
Understanding Input
Logging
Cross-Mod Functionality
Recommended Practices
Core Migration Guide
Lönn Integration🔗
Custom Events
Adding Sprites
Adding Preexisting Audio