Porting Celeste Classic

Hey y'all!

I am interested in making a port of Celeste Classic (Pico-8) to the Playdate. I assume that is something that could be done, but I have no idea where to start. Anyone have any resources/suggestions to get started on it?


@hteumeuleu is working on that exact thing in the Discord. You can see his progress in the #development-logs channel. Maybe you could ask him how he is porting the code from Pico-8.

Hey there! I'm indeed working on a port of Celeste Classic at the moment. I'm barely a month in, but you can check my work in progress code here: GitHub - hteumeuleu/celeste: A port of Celeste Classic to Playdate (WIP)

The way I started was by grabbing the Lua from the original, and polyfilling any PICO-8 function in Lua with the Playdate SDK. You can see this in my pico-8.lua file. From there, I realized two things:

  1. A lot of things become visually hard to read in black and white.
  2. The game runs at about 10 fps on device.

So I'm now looking into making the game visually better for the Playdate’s contraints. And also getting it to run at 30 fps. This means I'm redoing a lot of things over, like manually redrawing sprites with a clean outline, or recoding parts that are too CPU intensive in the original (like collision checks).

Anyway feel free to ask if you have any question.



That's pretty awesome! I can't wait for it to be able to run well on device (once I get my device). Looks like you are doing a better job at this than I would! :playdate_heart:

1 Like

@hteumeuleu Do you happen to have a build I could check out? I'm getting the error error: source\Scripts/Game.lua:4: No such file: ./celeste.lua when trying to build it..

That's weird, I've got no problem compiling the main branch (I'm on macOS). This looks like a path import issue that may be due to differences of the SDK on each OS. Try changing the imports path on Game.lua to their full path (so "data.lua" becomes "Scripts/data.lua"`).

Thanks! I'm on Windows and that seemed to fix it. Thanks for doing such a great job on this!