# Rustic Mountain Core A rust library for emulating the physics and graphics of the 2015 game jam release of Celeste Classic # Install ``` cargo add rustic-mountain-core ``` # Basic Usage (eg, creating a port) ``` fn main(){ // consts are not included in the core library. see examples here: https://github.com/CoolElectronics/rustic-mountain/blob/main/standalone/src/consts.rs let mut engine = Celeste::new( consts::MAPDATA.into(), consts::SPRITES.into(), consts::FLAGS.into(), consts::FONTATLAS.into(), ); let pallete: [(u8, u8, u8); 16] = [ (0, 0, 0), (29, 43, 83), (126, 37, 83), (0, 135, 81), (171, 82, 54), (95, 87, 79), (194, 195, 199), (255, 241, 232), (255, 0, 77), (255, 163, 0), (255, 236, 85), (0, 228, 54), (41, 173, 255), (131, 118, 156), (255, 119, 168), (255, 204, 170), ]; loop { // advance the game logic engine.next_tick(); // render the screen engine.draw(); // screen buffer is a 128x128 array for (i, col) in engine.mem.graphics.iter().enumerate() { // look up rgb color from pallete let color = pallete[*col as usize]; let xpixel = i % 128; let ypixel = i / 128; // do rendering to screen here } engine.mem.buttons[0] = is_left_arrow_pressed; engine.mem.buttons[1] = is_right_arrow_pressed; engine.mem.buttons[2] = is_up_arrow_pressed; engine.mem.buttons[3] = is_down_arrow_pressed; engine.mem.buttons[4] = is_jump_pressed; engine.mem.buttons[5] = is_dash_key_pressed; // constrain to 30fps ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30)); } } ``` # Advanced usage Most methods and fields are marked public, so the game can be messed with and extended easily. For example, you can iterate over the `celeste.objects` vector to find the player position, create your own maps, etc, etc. I'm not making docs, just read the code the main parts is only a little over 1k lines