Last updated: 31MAY2022
Finally! A port of Celeste is now available on retro handhelds, so you can natively play this little platforming gem.
The installation process is a little trickier than other (PortMaster) solutions, due to the fact that the game requires closed-source libs that cannot be redistributed. Thankfully, it’s pretty easy to add them yourself, which we’ll do in this guide. Note that you will also need to be running PortMaster on your device in order to install certain mono files which will allow sound to work properly.
Update (29MAY2022): This guide now works on RK3326 devices as well as the RG503, when running on a compatible firmware like ArkOS, JELOS, and AmberELEC! Below is a list of devices that should be able to run the game. Big thanks to developer JohnnyOnFlame for getting this port up and running; please consider buying him a coffee for his hard work.
Anbernic RG552 (AmberELEC, JELOS)
Anbernic RG503 (JELOS, ArkOS, TheRA) *when available
Anbernic RG351P (AmberELEC, JELOS, ArkOS wuMMLe fork)
Anbernic RG351M (AmberELEC, JELOS, ArkOS wuMMLe fork)
Anbernic RG351V (ArkOS, TheRA, AmberELEC, JELOS)
Anbernic RG351MP (ArkOS, TheRA, AmberELEC, JELOS)
PowKiddy RGB10 (ArkOS)
GameForce Chi (ArkOS)
ODROID Go Advance (ArkOS)
ODROID Go Super (The RetroArena, RetroOZ)
PowKiddy RGB10 Max (The Retro Arena, RetroOZ)
For best results, make sure you are running the most recent version of ArkOS, AmberELEC, or JELOS, and the latest version of PortMaster. The Anbernic RG552 will provide the best gaming experience (see notes below).
Note that the “Final” version of ArkOS for the RG351P and RG351M will not support the game due to an outdated SDL2 library. However, wuMMLe’s fork of ArkOS may be updated in the future to support it. In the meantime, I recommend using JELOS or AmberELEC for those two devices instead, since they are in active development.
Purchase the itch.io version of Celeste
Due to DRM issues, the Steam version of Celeste will not work with this setup. Additionally, the game is not available on GOG, and the Humble version literally just gives you a Steam code (I found this out the hard way, after buying this game for the fourth time across all of my various gaming platforms!). Instead, you will need to get the itch.io version. If you have purchased either of these bundles previously, you will already have the game in your library.
Bundle for Ukraine
Bundle for Racial Justice and Equality
Once you have purchased the game, you will want to download the Linux version. The file will be named “celeste-linux.zip” and will be 867MB.
Compile the data files
Next, we will need to gather our Celeste Package and some necessary lib files. Note that you will need to have 7zip installed on your computer for this next step, and file extensions will need to be visible. You also need to install Portmaster onto your device if you haven’t already.
- You can grab the Celeste Package here, then save this somewhere on your computer.
- Extract the Celeste Package using 7zip, it should have a folder named “celeste” and another file named “Celeste.sh”. Place those somewhere handy, like your Desktop.
- Go to fmod.com and create a free account. Next, go to this page and download the Linux version of the fmod engine. The file will be named “fmodstudioapi20206linux.tar.gz” and will be 72MB.
- Right-click on the fmodstudioapi20206linux.tar.gz file and go to 7Zip > Extract Here. This will create a file named “fmodstudioapi20206linux.tar”; now, right-click on THAT file and select 7zip > Extract Here. In the pop-up window you will get an error about creating symlinks, you can ignore it and select “Close”. You will be left with a folder named fmodstudioapi20206linux.
- Inside that fmod folder, you need to grab these two files:
- fmodstudioapi20206linux > api > core > lib > arm64 > libfmod.so.13.6 (1219KB in size)
- fmodstudioapi20206linux > api > studio > lib > arm64 > libfmodstudio.so.13.6 (1201KB in size)
- Back in your “celeste” folder (the one you extracted from the Celeste Package), you should find a folder named “libs”. Inside that folder, place the two libfmod files. Next, change their file extensions from “.13.6” to just “.13”, so that they should look like the following:
Add the Celeste game files
Finally, let’s add the Celeste game files to the appropriate folder.
- Open your “celeste” folder, then open the “gamedata” folder.
- Extract the celeste-linux.zip folder that you downloaded from Itch.io, and place the contents (including Celeste.exe) in the gamedata folder
- Insert the SD2 card from your RG552 (AmberELEC or JELOS), then open the ports folder. Inside, place the “celeste” folder and the Celeste.sh file.
- Eject the SD card and place it into your RG552. Boot the device up.
- On your device, open PortMaster and install the shell files for Timespinner or Owlboy; this will add a special mono file needed for Celeste. PortMaster is included in JELOS, but you will need to manually install it if using AmberELEC. Here is their page on it.
- Open the Celeste file and have fun. Note that the first time you boot the game it will parse through all of the data files one time, which will take a minute or two. After that it won’t happen again.
Here are some notes from the developer regarding RK3326 devices:
- Some effects were lowered in complexity or removed to get perf. to an acceptable level, those can be tweakdd via the new options menu.
- Performance on RK3326 dips into low 50s in boss fights, and has a few hard drops into the 25s in areas that aren’t mechanically complex, I’m nearly 60% done with Farewell and up until then performance seems more than great when it actually matters.
- If you are on ArkOS or RetroOZ and getting an error that prevents you from saving your game progress, download this updated mono package and place it somewhere on your SD2 card (like in your Ports folder). Then boot up the device, and go to Options > File Manager (or 351FILES for RetroOz), and move the mono file from your Ports folder to
/opt/system/Tools/PortMaster/libs(and delete any mono file that’s already inside). This should fix the saving issue.
How it was achieved
Developer JohnnyOnFlame left a really fascinating list of work he did to get the game working on low-end (RK3326) devices, here is a summary if you are interested:
- A series of patches to create lower graphical setting profiles. https://github.com/JohnnyonFlame/FNAPatches/blob/master/CelestePatches.cs
- An utility to compress Celeste textures using ASTC4x4. https://github.com/JohnnyonFlame/celeste-repacker
- Patches to allow the game to load these textures . https://github.com/JohnnyonFlame/FNA3DHacks/commit/90e3b4c223af4f0d553856ae103d24d3b1b0986b and https://github.com/JohnnyonFlame/FNAPatches/blob/master/CelestePatches.cs#L396
- An FMOD 1.x wrapper was to allow compatability with FMOD 2.x (since FMOD 1.x isn’t available for ARM64) https://github.com/JohnnyonFlame/FNAPatches/blob/master/fmodstudio_fix.c
26 thoughts on “Guide: Celeste on Retro Handhelds”
Thanks for the guide! One little thing that should be mentioned: The native resolution of Celeste is 320 x 180 pixels. So it’d look great on 320 x 240 screens like the TrimUI or on 640 x 480 ones like the Miyoo Mini. Sadly, most of the RK3326 devices are clones of the OGA and share its 480 x 320 screen, on which Celeste is either tiny (when playing pixel perfect) or butt ugly (when smoothing-scaling to full screen). The 854 x 480 of the OGS and its clone are also not good. The only RK3326 device that this game scales well on seems to be the Gameforce RK3326. So, let’s hope for a Miyoo Mini port. 😉
Something went wrong here… maybe system related?
I’m running AmberElec (=351ELEC) Pineapple Forest Nov 2021 version on my RG351M.
I bought and DL’d the itch.io Linux version, and followed the guide as well as I could. Only difference was the fmodstudioapi20206linux.tar.gz that had been updated to …20207 , I guess that is not the culprit.
Also installed Owlboy and the mono file. The initial parsing took some minutes, as you said it would. Then the Celeste launcher sent me back to Ports screen.
Then when I (try to) start Celeste I see black screen with text “Loading… please wait”, and after a sec it throws me back to the Ports screen.
I found a errolLog.txt in the savedata folder of Celeste. It seems to have an entry for each (failed) launch. I try to paste the log entry. Any ideas?
(The comment section here does not allow the error code, but it starts like this:)
> System.TypeInitializationException: The type initializer for ‘Microsoft.Xna.Framework.FNAPlatform’
> threw an exception. —> System.EntryPointNotFoundException: SDL_GameControllerRumbleTriggers
> assembly: type: member:(null)
> at (wrapper managed-to-native) SDL2.SDL.SDL_GameControllerRumbleTriggers(intptr,uint16,uint16,uint)
…got it fixed, it really did require a more recent pre-release version of AmberElec. The latest release from November 2021 just did not cut it.
After updating Celeste starts and runs great! Thank you for the guide!!!
I just installed this image on my SD-card:
Can I now install Celeste as well using this guide or do I need to dedicate another SD-card to a different firmware to do that? Possibly dumb question but hey I’m new.
^I’m using an RG351P btw (in case it matters?).
It does if you’re on ArkOS because the SDL2 library is only on 184.108.40.206 on the P and the M, but the game requires SDL2 – 220.127.116.11. If you’re skilled enough, one could download the update files manually for the MP and the V from G.H. and extract the ‘libSDL2-2.0.so.0.18.2.rotated’ file from the arkosupdate04232022.zip archive (in home\ark\sdl2-64\), rename it to ‘libSDL2-2.0.so.0.18.2’ by removing ‘rotated’ from the name, then place the file into the lib folder where LD_LIBRARY_PATH= points to. Also, make a second copy of that file and name it ‘libSDL2-2.0.so.0’ in case it looks for a symbolic link to the library. Then you won’t need to wait for the update to ArkOS or find a way to install it into the system and it should work on the P and M w/ArkOS.
For RG351M and RG351P on ArkOS:
If you’re on ArkOS using a RG351P or RG351M, follow the entire guide Russ has here above first until after you get mono from Timespinner or Owlboy. Once you’ve obtained mono from Timespinner or Owlboy, DO NOT remove your memory card from your computer and DON’T run Celeste yet.
Extract the contents of this file into the ‘celeste/libs’ folder where you put libfmod.so.13 and libfmodstudio.so.13 earlier.
Now remove your memory stick, place it into your RG351M or RG351P, and then run Celeste from the ports menu.
The version that’s available on itch.io is 18.104.22.168 and is 846mb instead of 867mb. Is this the right one or do I have to do more hunting for the right one?
I just tried following this (used a newer version of FMOD, 7 instead of 6). The first time I tried in on my RG351MP it went through all the files, but now it only goes back to the main ports section instead of starting the game. Any thoughts?
DId you find a solution? I’m trying to get it to work rn.
Now working on the wummle fork of ArkOS for the RG351P or M 🙂
I have the same symptoms.
Does anyone know a solution??
Heya, I just went through this last night but couldn’t get it to work. Whenever I started the game it would say “Now Loading…” and then try to load the files, but then it would immediately kick back to the Ports screen. After a few hours I figured out the issue.
To anyone who used a Mac to put files onto the SD card, even through Samba:
Mac makes an invisible file starting with a ‘.’ (period character) for every file it copies. These files were getting read by the patcher as if they were the base files, but are essentially empty metadata files. To fix the issue I used the file manager on my RG351M, went through every file in the gamedata folder, and deleted every file starting with a period character in every folder. This took me about 45 minutes since there are a few thousand files to delete.
As soon as I did this, the game started loading as intended.
EDIT: If you’re copying the files on a Mac, just run this command after copying the files to the SD card:
dot_clean -v -m /Volumes/GAMES
I just discovered this command built into all Macs to clean all the “._” files I spoke of in my last update.
not sure about all operating systems but on my RG351p the tools section has an option to remove . files
This is great, I have completed all the a-sides now and it worked perfectly. However, the Celestial Resort B-side there was a room where it became very jerky and laggy and I couldn’t get past without assist mode, I tried the various display options. Probably won’t carry on now as dont want to make it really far only to reach unplayable sections. No complaints though, was great to play just the A-sides but thought i’d mention this bug, presumably as this isn’t on postmaster yet it is still in testing? i’m on RG351 Amberelec
I finally managed to get this running with all the handy tips on this page. One small problem though…
The Screen is flipped 90 degrees! 🙂
I’m using the latest version of Portmaster on Arkos 2.0 with a RG351v – I was hoping to take advantage of the great screen on this device.
Does anyone know if it’s because these instructions are out of date or there is additional config needed? I followed the instructions to the letter and the comments. The only that would have been different was the version of FMOD being a couple version higher (the latest).
Would this work on a Retroid Pocket 2+?
I am currently following this instruction but the specific libfmod files aren’t there? They say 13.12 not 13.6 and they are different sizes to what’s listed on this site(?). Do I still do the same thing but with these files instead (and if so which ones)?
Nvm I guess it was an update… Now I have an issue as I’m running ArkOS Wummle fork. How do I proceed?
And now I’m replying to myself… Just trying to do it the same way you did. Copying as we speak. Wish me luck I’ve been wanting to play Celeste for a LONG time.
OK I’ve gotten as far as getting Celeste on there it seems (?) but when I select it I have two options. One that says “libpayit2” and one that says “play-celeste”. Choosing either just kicks me back to the ArkOS/ports menu after a short while of the screen going black. What do I do?
I’m dumb… I didn’t scroll down to launch from the correct place I just launched from the top. It’s updating now…
Nvm I’m just dumb. I launched the game from the top (where the name appeared in yellow) and not from down in the menu. It seems to be updating now.👍
Well crap it didn’t work it STILL kicked me out (after going through a lengthy period of showing me a bunch of code). What now please?