๐Ÿ’ฅ TRENDING: Celeste snes demake - Collection

EDIT: I now recommend the LLVM-MOS build, it both conforms to the LoROM spec and runs at full speed everywhere, unlike the vbcc build which had a couple slowdowns.


For controls, swap "B" and "Y" in the emulator to keyboard buttons "C" and "X" respectively.


Full demake/rewrite of pico 8 celeste in c for the super nintendo, mostly complete, because it's an a complete rewrite, it runs at 60fps with a 256x256 world as opposed to 30fps 128x128, written entirely in c. As such the physics while similar feeling, are distinctively different to the original.  I think this stands as a testament that is in fact possible to write snes games in c, and have them still be performant. Being a demake some creative liberties are taken, like reinterpreting the cloud effect and making the screen shake only apply to the distant objects in the background, separated out as it's own layer.

I recommend the vbcc build because it runs faster, however the Calypsi build is the one that fits the strict rules of the Jam being LoROM, I couldn't figure out how to get VBCC to output a valid LoROM file. Should probably mention that while this is written in c, it's not using PVSNesLib, instead it's using a derivative of my original pure C demo files from my experiments with wdc816cc.


Known Issues and thoughts:
Sometimes loading a new level isn't completed correctly and the graphics end up in a glitched state. Level 12 has the most actors with collision and suffers from slowdowns. The only two compilers supported are VBCC and Calypsi, early dev versions were built using wdc816c, but given it's strict c89 requirement and the fact that it generates code slower than both calypsi and VBCC I see little reason to re c89 the entire codebase. I tried writing a simple audio driver for the spc700 using LLVM mos, very simple demo's worked, but there are a handful of issues with the compiler that are beyond the scope of this project but I suspect that in the near future it will be possible to write the audio code in c as well. I suspect that if LLVM mos ever ends up supporting the 65816 this will be able to run at full speed without a problem. 

There is no compression applied to level or tilemap data whatsoever, things are just stored directly in the rom uncompressed and it still comfortably fits within the 256kb requirement, with the sa1 I'm confident the speed problems could be alleviated and the game would also be able to run at 60fps. 


Special thanks to svambo for testing on hardware before the deadline.


Code available here

https://github.com/Phillip-May/snes-homebrew/tree/master/snes-Celeste

Download

Download
mainBankZero_llvm-mos.smc 256 kB
Download
vbcc R1 HiROM hotfix.smc 256 kB
Download
calypsi 511 LoROM hotfix.smc 256 kB

Comments

Log in with itch.io to leave a comment.

Hey, I hope you don't mind, but I featured your game in the best SNES homebrew games of 2025

It's an honor, thank you for letting me know!

Beaten on real hardware! Great job!
A few notes regarding `mainBankZero_llvm-mos.smc`: it was missing a few things that kept it from working on certain flash carts. Namely, it was initially detected as HIROM (and shows as "Unknown" in Advanced SNES ROM Utility), and it was missing a title and a header as well. Some flash carts (not fxpak) have issues with ROMs that don't have everything in order. Manually adding the data via ASRU fixed it.

(2 edits)

Yeah, I play fast and loose with headers, my calypsi header was also incomplete until someone pointed it out, thanks for testing and pointing it out though, I'll fix my llvm-mos builds accordingly! Really a side effect of me treating ROMs as a formatted code+data dump as opposed to like an actual format for shipping code

Nice job! My notebook os broked and my phone no help me ๐Ÿ˜…

Probably a stupid question but if it's having difficulties running at full speed, a common trick is to split the operations over two frames. If the original pico 8 version is also 30 FPS, do youthink if that was done in this case, it might be full speed in C? How far off is it frame wise? It's difficult to tell from playing it. It seems faster than half speed.

(1 edit)

I mean an easy solution that would help fix both the frame rate and and feel of the player physics would have been matching the originals 30fps frame rate, VBCC would be full speed basically everywhere except level 12 with as little as a 15% speedup. You can test overclock of the cpu in Mesen in scan lines and just divide by 525 for a percentage. Adding about 50 scanlines was enough to fix most slowdowns, though 80 was basically all. 

There where roms, where are they?

(+1)

My bad, when I did the hotfix 4 hours ago they got set to hidden, has been rectified and you can see the upload time as proof no further edits where made

(+1)

Looks awesome! Are there roms for this?

My bad, should work now

No worries, I just thought i had seen some earlier and was looking forward to playing it! Thanks for your hard work!

Yeah, a generous discord user tested it on hardware, so I did some last minute fixes after it didn't quite work right.

As someone who just played this on real hardware this evening via an FXPak Pro on an RGB modded SNES it looks and plays great, so thanks for doing that extra work to have it tested on the real thing :) 

I appreciate the feedback, the multicart from the game jam was just shipped to me, I'll get around to adding sound eventually, in the meantime, I've also got a mostly working nes port now :)

Awesome Work!