Coder Social home page Coder Social logo

doomarkable's Introduction

DOOMarkable

rm1 rm2 opkg launchers

This is a doom port intended for the reMarkable 1.

ย 

Demo Video on rM 1 | Demo Video on rM 2 (not recommended)

What's mainly used and how it's done

It is composed out of a lot of different compontents:

  • doomgeneric-rs - Rust bindings for doomgeneric
    • doomgeneric - An awesome and easy to use doom port made by @ozkl
  • libremarkable - Drawing to the display and reading inputs
  • blue-noise - An amazing dithering algorithm to fake grayscale output

The meat of the work was to port doom to rust (doomgeneric-rs) and dithering the image and doing that as fast as possible! The dither speed was achived through forcing better optimizations and caching the code. The dithering is actually done at compile time for a 320x200 source image and the results (for upscaling 4x) are put into the generated binary itself. The binary then just needs to decompress this and look up the results for each pixel.

Current state

The game currently runs at about 11-14 FPS on the device. It's not using the low latency drawing even though it's pretty simple to use since the image has no gray shades. The reason is that using an A2-Like refresh has less artifacts and ghosting. I personally find this worth the extra latency when playing.

The game currently runs fine but there are still some things to do:

  • Making it easy to get the game resources (semi done)
  • Properly exit the game without requiring killing the process
  • Adjusting gamma to make dithered visuals clearer for certain rooms
  • Add an battery indicator (this sucks a lot of juice ..ahem.. blood)
  • Package it up for toltec and inclusion in launchers
  • Consider a smaller size for the rM 2, so the eink software driver doesn't die trying to update that many dots

How to run

  • Download the latest binary from the release page (the file without any extension)
  • Copy the file to e.g. /home/root on your reMarkable (e.g. using FileZilla or WinSCP)
  • Find an appropriate IWAD file (game resources) and put it in /home/root (more details)
  • Log into the device using ssh (e.g. with Putty) and go into your chosen directory
  • Make the binary executable by running chmod +x doomarkable
  • Ensure no other UI is running (e.g. stop the default UI with systemctl stop xochitl and start it later using start instead of stop)
  • Run the binary: ./doomarkable (on the rM 2, you'll need rm2fb and prefix that command with rm2fb-client)
  • DOOM should now run on your device. If the game doesn't come up, view the output for any errors or enable debugging by adding RUST_LOG=debug before the command

doomarkable's People

Contributors

linuscde avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

doomarkable's Issues

Bump libremarkable version

From #4 (comment)

This is on my rM2 with keyd running and the folio connected, but after forgetting to run with rm2fb-clien. The app never quits, but never displays. Running with rm2fb-client works as expected. I thought I didn't need to for things built with libremarkable.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.