Log In  


Cart [#46864#] | Copy | Code | 2017-11-30 | Link

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
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 Im quite happy with the monster designs and animations I think they have personality.

This was my first Pico-8 / Lua game so wasnt 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 Id 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.

Ive 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. Its 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.


roguelike puzzle action
P#46862 2017-11-30 05:06



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


@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


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


@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


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


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

P#46906 2017-12-01 03: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


@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


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

Log in to post a comment


New User | Account Help
:: New User
About | Contact | Updates | Terms of Use
Follow Lexaloffle:        
Generated 2017-12-11 05:56 | 0.228s | 1835k | Q:26