Log In  

Cart #46864 | 2017-11-30 | Code ▽ | Embed ▽ | No License

A mixture of two genres – a Roguelike and a Tetris-style game – based on a prototype I made with a friend (@ollie_read) in 8 hours during a "Crafts and Gin" Game Jam back in 2012.

• 10 levels
• Procedural generation
• Musicality!
• Old-school gameplay
• But actually winnable though

Arrow keys to move/rotate/drop blocks, X + arrows to move rogue and fight monsters.

Full instructions can be found in game. I hope you enjoy it.


This version of the game took a long time to make – more than 40 coding sessions during evenings/weekends of July-November 2017. I had the core game fully working within a few sessions, and the rest has literally been set dressing and "polish" (it still looks like programmer art!). Presentation is quite pompous in places, e.g. a full menu system; this is simply because I wanted to make the game as "finished" as possible (I teach game dev so I want to set a good example).

In order to fit the standard 10x20 grid (plus 4 invisible rows for spawning blocks) on the screen, I had to use 6x6 pixel sprites for each cell rather than the easier option of a map of 8x8 pixel cells. Making clear pixel art in 6x6 tiles is hard, but I’m quite happy with the monster designs and animations – I think they have personality.

This was my first Pico-8 / Lua game so wasn’t sure how restrictive the CPU or token/char count would be in practice. I was worried it would struggle with drawing so many sprites but seems okay? (stat() was showing about 10% CPU at worst). Token budget was more than enough too, but I only realised this once I had carefully implemented most of the critical content – so in general the code is unnecessarily dense. I was disappointed at first that it would easily fit into the restrictions, but then I noticed that I’d gone well over the limit for the compressed .p8.png format, which added a nice little challenge towards the end. Had two runs at crunching - the first involved me hard-coding a load of values and adding short function references, but this meant that I would have to retest the entire game thoroughly to check I hadn't broken anything, so instead I rolled back and just minimised the comments :)

A warning for beginners: Tetris clones might seem like an ideal "basic" project to work on, but I found there are lots of unforeseeable logic problems/exceptions, and quite a few subtle UX tricks that you have to do to make the game "feel" right (some I've done, some I haven't). So beware, I guess.

I’ve got it so the music is in sync with the GFX, but I have had to implement procedural music in order to do this. Originally I had a song that I played at a set tempo and synced up with the monsters "dancing", but if the Pico-8 loses focus (e.g. to desktop) the audio continues to play while the GFX freezes, so the music goes out of sync. Also noticed that pausing and unpausing the game seemed to cause the Pico-8 to throw the sync out by 2 ticks. In the end I created separate instruments as SFX and made my own "song" by triggering them on certain ticks. It’s no accident that the game follows a 12-bar blues pattern; finally my GCSE music lessons paid off.

With so much RNG it was hard to balance, especially while preserving the luck-factor of a roguelike. This meant that I had to complete several runs each time I changed something, to allow for fluctuations in RNG. The longer I've worked on it, the more I've lost all objective sense of how difficult it is, but it is definitely winnable. I hope you guys enjoy it anyway; do let me know how you get on.


P#46862 2017-11-30 05:06 ( Edited 2018-08-26 01:22)


i managed to reach 10 in a few plays,
but died from filling up

i basically managed to get through each level by ignoring monters completely. floor 10 was fast enough so you need to clear some monsters up.
mostly i avoided fights cause youll always be underleveled by a lot and fighting is not super affordable

seems pretty balanced overall btw


P#46872 2017-11-30 12:13 ( Edited 2017-11-30 17:13)

@frescogusto Haha thanks! Glad you like it :)

Avoiding monsters is a totally legit strategy, though not something I tested much. The challenge there is that the monsters become very dangerous so you have to be more accurate but still quick. If you're good at making lines and have a good run it's possible to actually get ahead of the monsters - this is normally what I rely on.

Hope you see the end. I made sure it was achieveable after a little practice because there's so much hot shit to play on this bbs every day that I only have a narrow window.

Thanks for the feedback :)

P#46874 2017-11-30 14:29 ( Edited 2017-11-30 19:29)

really, really good, an instant classic!

on gameplay:

I can relate on the tetris part ;) but you should really fix the square rotation. wall kicks would be a nice addition but it's not a deal breaker (we're spoiled nowadays).

I'm at odds with the fighting system. Since there's already the tetris mechanic, maybe it could be simplified a little or made more obvious? how do you know the monsters level? hearts + shields seem redundant to me. Maybe just hearts would be enough? I can't really "calculate" what I'm up against. I just attack and at some point I die. or maybe it's just me, but I had no problem with Desktop Dungeon or DungeonUp, for instance.

I have no idea what some potions do (luck,echo...). I know It's undocumented on purpose, but I didn't notice any feedback so I really have no clue...

on user interface:

I often end up skimming through the menus right after dying (attacking, thus already pressing x) so you should wait till btn x is false before you start polling btnp x (*)

suggestion on help screen: have left/right arrow to navigate, x to exit
about attacking: "you will always win etc..." is not clear, I clearly died while attacking. I got it, but I had to re-read that part several times. I think it could be re-phrased better (that's related to my attacking issues above though).

all in all, really good, I could buy a hd version on steam!

(*) side note, I wish we had an option in the API to disable the btnp repeat (it's like a quickshot II turbo with auto-fire always on for old geezers like me)

P#46879 2017-11-30 16:36 ( Edited 2017-11-30 21:47)

@ultrabrite this is really good feedback, thanks for playing.

Tetris stuff: I don't like that the square rotates weirdly, and code wise this is similar to a wall kick so 2 birds 1 stone. The tetris part was some of the first code I implemented so it's really tight - even the fact that the "stick" is 4x1 required a special case. I'm at the character limit but if I do a significant update I'll try to fix the square at least.

Combat stuff: the hearts/shields thing came from an idea in the prototype that hearts were one-offs but shields can be picked up and lost. Not the case here but kept in for legacy reasons and tried to mitigate by having an enemy type that goes straight for the heart, but agree that it can feel a bit redundant for the most part. I experimented with a few layouts for the hud with this, in conjunction with the level system, though this was the most "readable" I could get it without going pixel-pushing mad. Maybe the mechanic itself is unreadable so the hud is on the back foot to begin with? Confusing but at least has a happy side effect that it adds to the tension ;)

Desktop dungeons is ace! I loved the alpha more than the final version, and it certainly influenced this game a bit. The potions in Rogueris are all 4 letters but I recently considered doing my own variant of IAMAWAL etc :)

Potions can sometimes be beneficial to the player, not the rogue...

Btnp() and "always win": good points, will add to the list.

Left/right on menus: this was the plan before, but until recently I had an options screen that used left/right so the UX would have been inconsistent. Have removed that menu now though, so your point is valid, will add to the list.

Mine was a Cheetah 125+ ;)

Thanks again for the really helpful feedback!

P#46885 2017-11-30 17:39 ( Edited 2017-11-30 22:39)

It took me about 10 minutes to get addicted. I wonder if I'll ever beat it? Why do I keep playing roguelikes. D:

Seriously this is a fantastic game.

P#46892 2017-11-30 23:02 ( Edited 2017-12-01 04:02)

@Connorses thanks! You will beat it, no problem :)

P#46906 2017-12-01 03:07 ( Edited 2017-12-01 08:07)

Brilliant gameplay - love it!

(and fitting 2 games within the token/compressed limit is quite a feat)

P#46966 2017-12-03 17:09 ( Edited 2017-12-03 22:09)

@freds72 Thanks! The compressed limit was actually much tighter than the tokens, which surprised me. I still had a few tricks up my sleeve - though thankfully I didn't have to start hardcoding constants and shortening variable names, as this would have made the code impenetrable going forward...

P#47028 2017-12-04 11:14 ( Edited 2017-12-04 16:14)

Have a look at picotool: this does an amazing job at "compressing" a cart and can easily be used as part of a "build chain".
More to come on that, I'll publish a write up once my next game is out :)

P#47061 2017-12-04 17:00 ( Edited 2017-12-04 22:00)

Cart #47344 | 2017-12-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This is also pretty fun with 2 players..

[EDIT: Input bug fixed]

P#47341 2017-12-13 14:38 ( Edited 2017-12-13 22:02)

@freds72 Will check this out - thanks :)

@enargy Good call! Actually for about 90% of the dev time on RogueRis the controls were exactly like this: ESDF for blocks and arrow keys for the rogue. This was also how it was in the prototype, which allowed some really good couch co-op and frantic communication. However, I changed it really late on in the project for a couple of reasons:

1) The default Pico-8 controls are ESDF, rather than the far more natural WASD, so I felt that before people even started playing they would be uncomfortable with the controls, and it would take unnecessary explaining/justification. I tried editing the JS wrapper to override the default ESDF controls with WASD and this worked but didn't cancel out the Pico-8 defaults, so for example pressing S would move both down AND left. In my original post I said that a LOT of time was spent on polish etc - this is the kind of thing I meant. ESDF would cause too many people to ask "why" so I had to think of an alternative.

2) The WASD + arrows setup kind of assumes the player is using a keyboard - It seems quite a few users have gamepads, bespoke hardware etc (or at least I wouldn't want to exclude those people), so it would cause even more awkward controller scenarios if I used it. For me the "true" Pico-8 experience ignores the features of the PC running it and maybe acts more like an arcade cabinet.

Anyway thank you for playing and for taking the time with the mod - it definitely nails the control scheme I was aiming for, but couldn't implement on Pico-8. If I had one criticism, it seems that the ESDF controls stop working after the first block in the webplayer? Haven't had time to check the cart version (am running a Game Jam this week!)


P#47343 2017-12-13 16:44 ( Edited 2017-12-13 21:44)

@elneil: Thank you for your dev notes, I like reading stuff like that

Ah good catch on p2 inputs failing after the first block -- the new version in my post fixes that issue.

P#47345 2017-12-13 17:05 ( Edited 2017-12-13 22:05)

This is perhaps the most unique blend of genres I have ever seen.

P#55691 2018-08-25 21:03 ( Edited 2018-08-26 01:03)

Rogue is and will always have a special place in my heart. There are many variations, some with graphics, some with depth.

I must admit - I've never actually seen one that involves TETRIS ! What a twist ! :)

Nicely written. Clean interface, very professional. Gold star and added to 💜Favorites.

P#55692 2018-08-25 21:22 ( Edited 2020-02-02 02:20)

Hey, cool game! I am a big fan of Tetris, so I found this to be an interesting take. I finally managed to beat it after like 5 tries, but I have to admit, I changed rotate to O because up was really awkward for me. This change helped a lot, and I was actually able to keep pace with the monster levels, something I couldn't do before.

I agree about the wallkicks and square rotating also being a little out of the ordinary.

Other than that, really fun game and I will be playing it a lot :D

P#60653 2019-01-07 05:10

Very nice idea!

P#62466 2019-03-03 19:43

My wife has an alternate title suggestion for this game:

"Blocks fall, everyone dies"

P#62640 2019-03-06 23:58 ( Edited 2019-03-06 23:58)

Reminds me of a 4-bit Shovel Knight: Pocket Dungeon

P#105514 2022-01-22 16:20

Coming back to PICO-8 after awhile, and I tried playing this game to find it wasn't working anymore. Turned out to just be some syntax issues, so uploading the fixed build for others who want to play this gem :)

Cart #zizapibogi-0 | 2023-11-12 | Code ▽ | Embed ▽ | No License

P#137304 2023-11-12 05:40

So fun. I love the way the gamplay sfx blend into the soundtrack! Games like this are why we love pico8. An idea: Add a bomb tile that lights when touched and explodes tiles = rogue-tris-bomberman triple hybrid

P#137482 2023-11-15 17:12 ( Edited 2023-11-15 19:37)

@elneil I'm getting an error when I try to play this in-browser. Can you fix it? Thanks!

P#141704 2024-02-20 21:50

@TideGear look a few posts above

P#141708 2024-02-20 23:19

@kozm0naut Thanks! That's a good temporary solution, but I'd like to have this game work from my favorites.

P#141715 2024-02-21 03:46

@TideGear @SHiLLySiT Thanks for still playing this. I can't guarantee that I'll be able to get round to it but if you let me know what errors/problems there are/were I'll try to dig out the code and see if I can make a 1.2.

P#142196 2024-02-29 13:21

@elneil @SHiLLySiT Strange... It's working now. It may have been something fixed by the new PICO-8 update! Regardless, thanks for your response.

P#142273 2024-03-01 18:30

[Please log in to post a comment]