JSRL, now with TypeScript support

I backported TypeScript support from Emerald Woods into JSRL, so you can now use it to create roguelikes with TypeScript out of the box.

Unlike Emerald Woods, which has had a gradual transition to TypeScript (because it’s so big), for JSRL I decided to migrate it completely in a single machete blow, with an additional pass to use proper typed classes instead of functions.

The reason why there are still many variables typed as any is that some modules were modeled as raw objects instead of classes, and typifying them will require some additional work.

JSRL, now with Graphics! + the story so far [0.0.4]

You can now create graphical (tile-based) roguelikes using JSRL. Check it out at https://github.com/slashman/jsrl which is also now set as a repo template so you can create yours more straightforwardly!

A tutorial is coming soon. The demo at http://slashie.net/jsrl was also updated to the GFX version.

The character-based display is (and will forever be) still supported. OF COURSE.

A Timeline

I also took some time to dive into the history of the project and back-version it (for no helpful reason other than history), so here goes a timeline of JSRL

  • March 2013 – Rodney is released for the 7DRL Challenge. The demo of the unicodetiles lib by tapio000 was super cool, so I created a traditional roguelike game using it.
  • March 2017 – During the development of my 7DRL, PokemonRL, I decided to create a JSBoilerRL “a template project other people will be able to use to create their roguelikes in JS. It’s powered by unicodetiles.js producing similar output as my 2013 7drl, Rodney.”
  • November 2017 – The initial version of JSRL (0.0.1) is released as a standalone project (since it had only lived as part of the PokemonRL repository) and is immediately used for Rogue Program.
  • August 2018 – An attempt to create a trailer for Roguelike Celebration 2018 using JSRL is made, but was deemed not to be cinematic enough.
  • March 2020 – JSRL is used as a foundation for Emerald Woods. No changes are backported into it.
  • October 202 – JSRL is used for the Roguenet client. No changes are backported into it.
  • March 2021 – JSRL is used for Rainy Day. JSRL v0.0.2 is released, adding support to load static maps. (backported from the development of Rainy Day)
  • March 2022 – JSRL is used for SpelunkyRL. No changes are backported into it.
  • November 19, 2022 – Version 0.0.3 featuring Electron packaging (dev pushed forward by wazoo) and viewport scaling (backported from Emerald Woods) is released
  • November 26, 2022 – Version 0.0.4 featuring tile graphics using Pixi.JS is released, in preparation for Emerald Woods’ graphical version.

Trailer for the Roguelike Celebration 2018

The Roguelike Celebration is happening again this year, October 6 and 7. I will be flying to SanFran to assist and also give a talk about the History of Roguelikes.

Had an idea running on my head for a while to make a “trailer” for the event (no one asked me for it). At first, I thought of creating a playable classic roguelike using my JSRL roguelike template. I actually did create the foundations for it (as in walk in a predefined map), but it lacked the cinematic potential for a short trailer. In any case, I integrated the “torch” effect from the unicodetiles.js example into JSRL, which may be useful. You can check out the integration here.

Screen Shot 2018-08-10 at 7.30.17 AM

Then I had another idea and I just couldn’t be at peace until I implemented it. I think it occurred to me a day while driving and listening to the Mega Man III OST. I thought I had found the perfect tune for it. So, even in a busy week with lots of work, I just had to do it.

The trailer features the awesome speakers’ lineup in a “robot-masters” NES Megaman stage selected style.

I implemented it using JavaScript and Phaser, you can check the source code here and the demo running live here

Of course, there’s little structure to the project since it was meant to be a quick job (and is also pretty simple). Most of the relevant logic can be found in a single Object, the Game state. I set up a stage with a black background and the gray strip, as well a Sprite object for the character and 4 text fields. I used a Megaman 10 font (I had found another one for Megaman 2 but for some reason, it could not be loaded as a web font), I performed a simple centering function based on each line’s character count to keep the characters as sprites in the grid (thus getting a bit close to being a NES “background sprite”?).

There was also a simple “particle” animation in the background, instead of stars they were small @ signs because, you know, roguelike. I used the same color palette used on the Roguelike Celebration logo for them.

Of course, the most fun part was doing the pixel art for the speakers. I used a bunch of Mega Man 2 robot masters as a base and then I proceeded on tweaking them for each speaker. The ones I know in person where easier, for the others I had to do a bit of stalki Internet research, I hope I managed to capture their likeness.

Finally, I reused the “Retro TV with scanlines” from Cat Cafe.


JSRL – JavaScript boilerplate roguelike released

Well, I decided to release this based on my work this year on Monster Trainer Roguelike; one of my first mistakes was spending time during the 7DRL to build a simple generic roguelike engine as a basis for the game… the question is, I never released it in such simple form! I decided to release it as I think it may be helpful for devs to use as a starting point for their roguelike or character based games!

It’s now in github at https://github.com/slashman/jsrl, you can also check the online demo here

If you are curious what kind of games can be created from it, check Monster Trainer Roguelike


What is this about

A very bare bones roguelike with a character based display


  • Player can walk around
  • Raycasting Field of View algorithm
  • Player can move between persistent levels
  • Enemies move around chasing the player
  • Player can pick up, drop and use items (including using items on a given direction)
  • Player remembers visited maps
  • A simple Being class based on Races definitions, with “random” and “follow player” intents
  • A simple Item class based on Item Type definitions
  • Infrastructure for Level Generation
  • Line wrap text boxes

How to use

  • Clone the repo
  • Delete .git
  • Create awesoem gaem


Uses unicodetiles for IO – http://tapiov.net/unicodetiles.js/