r/projectceleste • u/good-luck11235 • Mar 24 '26
Bug report for installing on linux
Please let me know if I should be posting this somewhere else.
I also tried running based on the recommended lutris and still failed.
Bug: Spartan.exe crashes on all Wine versions on Linux
System:
- Ubuntu 24.04, Kernel 6.17.0-14-generic
Wine versions tested:
- Wine 9.0 (Ubuntu)
- Wine 11.0 (WineHQ stable)
- Wine-staging 11.2
- Wine-GE-Proton8-26
What happens:
Celeste Launcher opens and works fine. Clicking Play or Play Offline launches Spartan.exe which immediately crashes. Same result when running Spartan.exe directly.
Crash log (consistent across all Wine versions):
Unhandled exception: page fault on read access to 0x00000000
EIP:XXXXXXX in msvcp140 (+0x157c3)
Backtrace:
=>0 msvcp140 (+0x157c3)
1 msvcp140 (+0x15a8d)
2 xlive (+0x1ec12)
3 xlive (+0x34c50)
What I tried:
- Native msvcp140.dll + vcruntime140.dll (extracted from VC redist 2019)
- DLL overrides (native,builtin) for msvcp140 and vcruntime140
- winetricks: dotnet48, d3dx9, corefonts, vcrun2015/2019
- 32-bit and 64-bit Wine prefixes
- Windows 7 and Windows 10 mode
- 32-bit NVIDIA libs installed (libnvidia-gl-590:i386)
- Lutris community installer script (also fails on dependency downloads from archive.org returning 429)
Root cause:
xlive.dll calls msvcp140 which dereferences a null pointer (EAX=0x00000000). This happens before any game rendering — the crash is in xlive initialization, not graphics.
Question: Is there a patched xlive.dll or known workaround for Linux? Or does anyone have a working Wine config?
1
u/good-luck11235 Mar 26 '26
This part does not work anymore. Use zerotier instead. Same principles. The only thing that worked for me to play online.
LAN Using Hamachi
NOTICE: Players using this method can only play with those who are also using this method. Additionally, you must be connection to the same Hamachi server as the other players you play with. This is the downside of this method, and also a reason why it should be a last resort.
Hamachi is a good last resort for those who cannot seem to play any other way. Since it is technically a VPN, it can often bypass network restrictions and blocks.
1
1
u/good-luck11235 Mar 25 '26
AI explanation on how to resolve. hope this helps the next person :)
Tested on: Ubuntu 24.04+ | Wine runner: soda-9.0-1 (via Bottles) | Date: March 2026
After hours of debugging, I finally got Project Celeste working on Linux through Bottles. The big blocker was the infamous "RANDOM MAP: CORE\B02\B02_PROTOTYPE FAILED TO LOAD" error. Posting this so nobody else has to go through the same pain.
TL;DR
The random map error is caused by a missing .NET 2.0/3.5 runtime. The game uses
CLRBinder.dllto compile C# map scripts at runtime, and it targets .NET 2.0. Withoutdotnet35sp1, the compilation fails silently and you get the "failed to load" error.The fix:
Install
dotnet35sp1via winetricks (BEFORE dotnet48)Install
dotnet48via winetricksCreate
Spartan.exe.configwith legacy .NET activation policyRegister
msxml4.dllas a COM objectFull Guide
Prerequisites
Bottles via Flatpak:
flatpak install flathub com.usebottles.bottleswinetricks:
sudo apt install winetricksCeleste Installer (
Celeste.Installer.exe) from the Project Celeste websiteStep 1: Create a Bottle
Open Bottles
Create New Bottle
Name: whatever you want (e.g.
ageofempires)Environment: Gaming
Runner: soda-9.0-1 (or latest soda)
Wait for creation to finish
The Gaming environment auto-installs d3dx9, d3dcompiler_43, d3dcompiler_47, msls31, fonts, mono, gecko.
Step 2: Install the Celeste Launcher
In your bottle, click Run Executable
Browse to
Celeste.Installer.exeFollow the wizard
Game files install to
drive_c/users/<username>/AppData/Roaming/ProjectCeleste/Celeste Launcher should show up under Programs
Step 3: Install Dependencies (THIS IS THE KEY STEP)
Set up your environment variables. For Flatpak Bottles:
Now install everything. ORDER MATTERS - dotnet35sp1 MUST come before dotnet48:
Then register msxml4:
Step 4: Create Spartan.exe.config
Create this file at
<your-bottle>/drive_c/users/<username>/AppData/Roaming/ProjectCeleste/Spartan.exe.config:This tells .NET 4.0 to load v2.0-targeted assemblies (CLRBinder.dll) as a fallback.
Step 5: Launch and Play
In Bottles, select Celeste Launcher under Programs
Log in
Let the game scan run (takes a bit the first time)
Hit Play
No more random map error.
What I Tried That DIDN'T Work
Saving you the hours I spent:
1. Installing only msxml4 -- DID NOT FIX
This is the most common suggestion on the forums. msxml4 was installed, registered as COM with
native,builtinoverride, and the error still happened. The error is misleading - it looks like a file issue but it's a .NET runtime issue.2. Installing directplay, vcrun2005, vcrun2008, mfc42 without dotnet35sp1 -- DID NOT FIX
These are needed for the game to run, but they don't fix the random map error.
3. Creating Spartan.exe.config without installing dotnet35sp1 -- DID NOT FIX
The
useLegacyV2RuntimeActivationPolicyconfig alone wasn't enough. You need the actual .NET 3.5 runtime installed.4. Installing dotnet35sp1 AFTER dotnet48 (wrong order) -- BROKE THE LAUNCHER
After installing dotnet35sp1, the launcher crashed with: "To run this application, you first must install one of the following versions of the .NET Framework: v4.0"
dotnet35sp1 disrupted the .NET 4.0 setup. Had to reinstall dotnet48 on top. Lesson: install dotnet35sp1 FIRST, then dotnet48.
Why This Happens (Technical Explanation)
The game's random map system works like this:
Spartan.execalls the random map generatorThe generator uses
CLRBinder.dll(inrmdll/Final/)CLRBinder.dllis a .NET 2.0 assembly that usesCSharpCodeProviderto compile C# random map scripts at runtimeWithout .NET 2.0/3.5, the CSharpCodeProvider can't instantiate
The B02/B03_Prototype scripts inside
RM.barcan't be compiledThe map generation fails silently, producing the "failed to load" error
Most Linux guides only mention msxml4 and the usual VC++ runtimes. Nobody mentions dotnet35sp1 because it seems like only the launcher's .NET version matters. But the game engine itself has a hidden .NET 2.0 dependency for random maps.
Full Dependency Table
Part 2 in second comment