Skip to content

CoolElectronics/rustic-mountain

Repository files navigation

the pico-8 classic you all know and love, now with fearless concurrency

Rustic Mountain

github crates.io

A reimplementation of Celeste Classic in rust, with ports to windows and linux, android and the web

official ports

other ports

to compile standalone:

git clone https://github.com/CoolElectronics/rustic-mountain
cd rustic-mountain
cargo build

to compile for web:

cargo install wasm-pack
git clone https://github.com/CoolElectronics/rustic-mountain
cd rustic-mountain/web
wasm-pack build --target web

to compile for android:

cargo install cross
git clone https://github.com/CoolElectronics/rustic-mountain
cd rustic-mountain/librustic
cross build --target aarch64-linux-android --release
cp ../target/aarch64-linux-android/release/librustic_mountain_lib.so ../android/app/libs/arm64-v8a/
cp ../target/aarch64-linux-android/release/librustic_mountain_lib.so ../android/app/libs/armeabi/
cp ../target/aarch64-linux-android/release/librustic_mountain_lib.so ../android/app/libs/jniLibs/

# open android studio and build normally, or do it with gradle idk

tuileste

image this is an experimental port with to the linux terminal. to use it:

git clone https://github.com/CoolElectronics/rustic-mountain
cd rustic-mountain/tuileste
cargo run

the controls are extremely scuffed because of the limitations of terminals. use a modern terminal like kitty or konsole. pressing any of the arrow keys will hold them down for 10 frames, so you'll have to sort of press and unpress it every 10 frames if you want to hold it down. have fun

as usual, z+x for jump and dash, arrow keys to move, f to skip level, 'q' to make a savestate, 'e' to load a savestate

librustic

a headless API is exposed through the "core" crate, so you can import it into any rust project, or compile to a shared object for FFI use in any programming language
this feature is used in morespriteshorn to simulate celeste physics inside of the love2d engine

DISCLAIMER:

despite my best efforts, this is not a 100% faithful port. expect some of the more subtle quirks of celeste to not work as expected

since the goal was to achieve a 1:1 translation of the lua code, this isn't best practice rust and is full of things that should probably not be done

inspired by ccleste and pyleste

ported from smalleste.p8

special thanks to the celeste classic discord server