Log In  


Cart [#37216#] | Copy | Code | 2017-02-06 | Link

Here's our latest game we made as Tic Tac Toad. Please enjoy!


Life has been tough on mining colony w4ge-514v3, but you are tougher. Don the helmet of Spaceman 8 and mine the labyrinthine busom of icy spacerocks for gems and haul them back to company collectors. The oxygen supply is scarce and depleting fast, so you have to keep your visits brief. Luckily, your trusty hummingbird-class jetpack is highly manouverable, and will get you to the exit quickly.

Use the hard-earned credits to upgrade your gear in the shop at the end of each day. How much can you earn in a week? Will you even survive or will greed get the best of you? Only one way to find out!


Code & Design by kometbomb
Graphics & Sound by iLKke

P#35231 2017-01-08 04:39


Phew so glad this is finally out :D

The struggle for tokens was real!

P#35234 2017-01-08 05:06


My best was $465.

This a really well-made game!

P#35260 2017-01-08 12:59


Thanks! It was definitely very fun to make it. PICO-8 is magic that way. :)

P#35262 2017-01-08 13:37


This is a first class game, great mechanics, wonderful graphics. It's a pleasure to the eyes to play! Can't wait for your future collaborations!

P#35381 2017-01-10 04:47


There is some really impressive programming in this game. I especially love how all the physics in the game work exactly as you expect it to. Everything "feels" right, and I'm especially impressed with how you were able to get the the mechanic of tethered objects getting snagged on things to be so realistic.

Also, the shop screen is adorable.

Thanks for adding another gem to the Pico 8 library!

P#35382 2017-01-10 05:09


This game is incredible, just got through my first week. I know to get the compass earlier on next time :) Kudos on a great game Kometbomb! Any chance we could see a version where we could play on after the week is done?

P#35386 2017-01-10 07:12


amazing! very addictive! but quite hard and unforgiving. think of the children! ;)

a few bugs:
- painful stomping on the game over screen.
- collision bug on sharp corners, guy and gems can get stuck there.
- should be "rebreather & oxygen tanks" give you time to explore" and "rocket boost helps you lift heavy gems", right?

a few peeves:
- why does dropping a gem take so long? feels way better on a single btnp().
- I spend most of my time searching for the exit. shouldn't I spawn near it ? didn't I enter through it ? give me a limited compass from the start? btw a gps would be handy in the bigger mazes ;)
- I often hit the exit with my freshly dead body! maybe give me one 'choking' second before I can't be saved?
(could be a nice "YES! I made it!" moment)
- that's too short! why stop me at the weekend ? my gear is brand new and I'm having fun!

that's easily one of the best games on pico8, and something I would gladly pay for. but easy/normal/hard modes would be welcome.

P#35388 2017-01-10 10:03


Echoing all the comments suggesting an 'endless' mode. Also all of @ultrabrite's sentiments - this is definitely one of the best games ever released for Pico-8, but there are a few small things that could improved, seemingly pretty easily(?) Keep up the great work!

P#35389 2017-01-10 10:19


Thank you for the comments, everyone!

Endless mode sounds like a good idea, I hope we can find some tokens to add even that simple a feature! There is certainly capacity in the maze generator for many more levels, though they will of course start to repeat itself a bit. Definitely something we will think about.

About the bugs: the "stomping" i.e. the guy bouncing over and over is there because I simply ran out of tokens to add a check that stops the action behind the game over screen even though the screen freezes! The skull helmet thing was a quite late addition so needed to cut some corners.

The collision is a bit buggy - it needs an extra pass that somehow pushes the objects outwards. Now it just puts them back to the previous spot that was no colliding with anything and adds some bounce. Again, probably need to cut something to make it fit!

The difference between the tank and the rebreather is that oxygen tank gives you more O2 so you have more time overall... but the rebreather only gives you more time to explore, the O2 will run out as fast as before when you are actually carrying a gem. Thus the tank helps you to carry stuff just like the boost, and the rebreather doesn't. :) But yeah, it's a bit misleading (and can't explain it away with tokens...).

Dropping a gem takes a while because you can tap the same button to switch compass modes. Maybe the delay could be shorter or it could be switched to the other button.

Hitting exit with the dead body... that might be fun and there actually is a check that checks if you are dead and stops you completing the level in case you just manage to almost exit. So, removing that check might give me more tokens to add something else (endless mode!!)

Thanks for the insights, we at the TTT HQ are quite happy that people like the game. :)

P#35390 2017-01-10 10:54


Hello! Wonderful and funny game!
I'm learning how to use this awesome pico-8 for making my games and I'm looking inside the heart of the games and there are some things that crashes my mind.
The first one is the incredible title game. In the code I looked in to know how did you do without that sprites and saw a function call "decode". Is something for art made in .c extension or something like this?
second is... I see in some games, on the map editor you draw random tiles on places where don't look logic but works as well. How do you do that?

P#35391 2017-01-10 11:18


1.) Thanks. :)

2.) The title screen (and the shop and all other large graphics) are done with iLKke's Pillbox (I think it's not out yet). This means the gfx are just a series of instructions like "draw a rectangle at x,y" and this can be compressed very efficiently. The decode() function takes such compressed data and then outputs a table that has coordinates and widths and heights for the image elements ("pillboxes"). This list can then be drawn on screen reasonably fast. It is very easy to scale the coordinates as well, they don't get blocky like scaled sprites will. It is not as fast as using map() or spr(), though. Ask iLKke about the tool if you're interested. :)

Also, I would like to underline that everything nice you see in the game is by iLKke.

3.) All of the map data is generated on the fly. I have a relatively simple routine that creates mazes and then upscales them while adding some random variations. The data is then converted to a PICO-8 map, trying to find the correct tiles for corners and so on. Each level in the game has its own parameters for this level generator that basically tell how large the maze should be, how many gems there are etc. Basically, what you see in the map editor is actually some random stuff left in there and also the shared data from the sprite banks 2 and 3.

P#35394 2017-01-10 12:04


Thank you for your quick and clarify response. Then if I reset card the map will change, do it?
I will study a bit more of this engine.

P#35395 2017-01-10 12:09


Every map will be different every time. :) In fact, check out this gif (sorry I can only find it in an old tweet of mine):


P#35396 2017-01-10 12:50


And the thing I'm trying to say is more like "Celeste" cartridge.
If you look into the sprite/map editor, you will see some random and colour sprites that Idk what are them since sprite 128

P#35400 2017-01-10 13:20


This is bloody glorious. Great work.

P#35414 2017-01-10 16:37


Nice work (as usual)! Got to $1245 instead of working on my own game :)

The oxygen mechanic is kind of strange - as I understand after playing a while, you use different amounts of oxygen depending on whether you're carrying a gem or not. Rebreathers only help when you're not, oxygen tanks, when you do?

It feels like this could be simplified to one more straightforward oxygen item - maybe to save some tokens for other stuff? :)

P#35415 2017-01-10 16:53


This is scarily addictive. Super impressive job.

P#35417 2017-01-10 17:06


had a look at the code and ended up reclaiming tokens,
mostly in the pillarbox decode (awesome stuff btw):

(135 tokens gained)

function pillbox(x,y,w,h,c,re)
-- fix negative size
--if (h<0) y,h=y+h,-h --not happening here?
--if (w<0) x,w=x+w,-w
local x2,y2=x+w,y+h
local r
--// rounded --or else
if re!=0 then
if h<w then

function num(s,i)
local c=sub(s,i,i)
for i=1,#enc_chars do
if sub(enc_chars,i,i)==c then
return i-1

function decode(s)
local o = {}
for i=1,#s,7 do
local e=num(s,i+4)
local f=num(s,i+5)
local g=num(s,i+6)
local x=num(s,i)*2+e%2
local y=num(s,i+1)*2+band(e/2,1)
--local y=num(s,i+1)*2+e/2%2--wrong mantissa
if (g%2>0) x=-x
if (g%4>1) y=-y
f/2%15,--(color->mantissa ignored)
f%2 })
return o

function drawpb(p,z)
for e in all(p) do

P#35423 2017-01-10 19:18


Given the crew behind this, it's not surprising how polished this is...but nonetheless, top of the pops to both of you. A showcase game for Pico-8 for sure!

Really makes me wish I had a true pixel artist to work with...

After playing only for a second did I have flashbacks to the pain and frustration Solar Jetman gave me as a kid...but now, that's not so bad :)

I'm not very good at this yet but it's mostly because the controls keep tripping me up...my brain wants the D-pad to control the direction the jetpack fires, not the direction I want the dude to go. I just gotten untrain my brain.

And it's solid on the PocketCHIP too, so this will be one I can play on break at work too.

Bravo, gents, bravo!

P#35425 2017-01-10 20:32


Thanks for all the kind words, peeps <3

@ultrabrite cheers for the optimization! I will include the decoder with Pillbox when I get it ready for release, hopefully soon

@morningtoast maybe you should just ask people to collab, you'd be surprised :)

P#35438 2017-01-11 01:56


@kometbomb when I was working on my entry for Collab16 2, I learned a TON of very valuable little tips for shaving tokens off, provided by all the people here and in the Discord. Many of them don't require refactoring the code much.

For example, you can do stuff like: dget"0" for 2 tokens, instead of dget(0) which is 3. The same works for any internal function that takes a single argument (btn, btnp, sfx, etc.)

You can see some other optimizations in my entry here, such as how I initialize variables: https://github.com/josefnpat/pico8collab16/blob/master/collab_2/lua/09.lua

I've thought about writing a tool that optimizes code automatically with these little tweaks. I'm not sure though if it would be something people would be interested in except those who make games large enough where they struggle with the token limit.

P#35462 2017-01-11 12:34


@ultrabrite: Thanks, this will be more than enough for that endless mode and other fixes! Hats off.

@Scathe: Is that dget"0" thing just clever parser abuse or is there a case where it makes sense in Lua? Useful tips, thanks!

P#35466 2017-01-11 13:04


I'm pretty sure it's just parser abuse and doesn't work at all in "real" Lua. More or less a bug that'll likely never get fixed because fixing it would break a lot of legacy games.

P#35467 2017-01-11 13:06


This is an amazing game. To me it feels a lot like solar jetman, which is one of my favorite games ever.

If you don't mind, I'd like to ask you a question.

I've been looking at the code and I'm puzzled because I don't understand how you got collisions with non-squared tiles since you don't seem to be doing anything special besides the usual mget() fset().

However, somehow it handles collisions with "triangular" tiles.

How do you do it?

P#35645 2017-01-14 02:11


@UnsignedFoo: Sorry forgot to answer but I think you are seeing the shared data (sprite banks 2 and 3 overlap with the lower half of the map - try drawing in the last sprites and see what happens in the map!).

@makz: Collisions are still "blocky", I don't check for tile shapes. The collision is checked against a single point in the sprite so it's not that evident that the empty tile pixels also collide with the sprites (they overlap). The tiles have a "normal vector", that is the tiles have the sprite flags set so that you always know which way is outwards from the tile (the flags form a 3-bit direction) so e.g. the collision with diagonal tiles works like how you would expect it to work. Maybe that also adds to the illusion? (BTW, it doesn't do reflection vector calculation but it works fine enough)

P#35653 2017-01-14 03:59


This is really wonderful!

P#35710 2017-01-14 20:17


Added that endless mode. I.e. the game continues after weekend, until you die - just like in real life. Also fixed some collision issues, hopefully.

P#36844 2017-01-29 05:57


hum. the game still stops at weekend, the gems still stick on corners, the compass looks like an older version. did you post the right cart?

P#36847 2017-01-29 10:46


Oops! It should be the latest version now.

P#36852 2017-01-29 11:04


My best was 1190$

Good Game!

P#37153 2017-02-04 17:14


Thanks! That's a fine score. I think my best is in the $1300 range or something like that.

P#37175 2017-02-05 11:29


Thanks for replying!

but the game still stops at the end of the week, is that normal?

P#37183 2017-02-05 15:23


Great game, only made $515 for now. I don't know if anybody already said this, game threw some runtime error at the end:

line 224: attempt to get length of local 'str' (a nil value)
in text line 224
in ? line 1317
in _draw line 1802

P#37189 2017-02-05 17:43


OK I guess I still managed to upload the wrong file! It should continue indefinitely.

P#37211 2017-02-06 03:46


It didn't update if you updated it today. The version listed here is from January 29th.

P#37213 2017-02-06 08:11


I think I overwrote the fixes with an earlier file at some point and then uploaded it. I just tested and I got to the next week (no errors either). The 1.2 version I just put up should finally be that version 1.1 claimed to be!

P#37217 2017-02-06 10:56


Pico-8 games are definitely getting more complex and genuinely good games on their own. This one is a new favorite for me :D

P#37316 2017-02-09 14:47


Not sure if it has been mentioned, but the compass didn't reset to show the exit after dropping a gem.

P#37414 2017-02-13 06:28


You can use the other button to switch compass modes, perhaps it's not that well explained. Makes sense that it should change the mode when dropping a gem though.

P#37476 2017-02-15 02:42

Log in to post a comment


New User | Account Help
:: New User
About | Contact | Updates | Terms of Use
Follow Lexaloffle:
Generated 2017-02-21 12:02 | 0.241s | 2097k