Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Sep 05, 2015 · View creator page →

Creator of

Recent community posts

I just implemented a feature that allows changes to the code to be reloaded when you resume without restarting the whole game:

It only works when you launch with the -code-watch flag, but if you build from master try it out and let me know what you think. In order to use it you will need to write your game so that the state is stored in a global and that it doesn't reinitialize that global if it already has a value when the code loads. It only works for languages that support eval, which right now is just Lua and Fennel.

Thanks! It was fun to make.

I wear a men's large, and my teammate wears a women's medium. Can I send you the shipping address over email? You can send the PayPal to

Thanks for organizing!

Hey folks! I just posted on my blog about my experience using TIC-80 to create This is my Mech which is a comedy/adventure game I entered in the 2019 Lisp Game Jam. It won first place!

Give it a try and let me know what you think.

In the blog post I mentioned a couple downsides of using TIC-80 over love2d, though overall I think it was a better fit for this game. The first is that when you work with a collaborator on git, if one person makes a change to the sprites and another makes a change to the music, it is treated as a conflict that can't be resolved, even though the two people did not edit the same contents. I'd be interested in hearing if anyone has some workarounds for that or some ideas of how it can be fixed in the code. The other is that while the "watch" functionality is very nice, it requires restarting the game to take effect. I wonder how difficult it would be to change it so that you could trigger a reload followed by resume? This would make the flow much nicer for certain kinds of debugging.

In any case I had a blast making my first full-length game; I hope you enjoy it too.



Thanks; the new release worked!

I am running it on an Intel Core i5.

Thanks for the instructions. Maybe that should go in the readme.

After installing those packages I get "ffi-lib: couldn't open "" ( cannot open shared object file: No such file or directory)" despite the fact that I have installed the libsdl2 package with apt-get. (Debian Stable)

It's got a cute feel to it! Enjoyed reading the devlog.

I got "Illegal Instruction" trying to run the compiled binary. Trying to run from source with Racket errored out with "sdl.rkt:3:20: collection not found".

This crashes with "GLIBC_2.28 not found" so I guess it wasn't compiled right?

This crashes with:

#<THREAD "main thread" RUNNING {10007005B3}>:
  Error opening shared object "/home/duuqnd/quicklisp/dists/org.borodust.bodge/software/glfw-blob-20190331154824/x86_64/":
  /home/duuqnd/quicklisp/dists/org.borodust.bodge/software/glfw-blob-20190331154824/x86_64/ cannot open shared object file: No such file or directory.

Seems like the path is hard-coded to the path it was compiled to on your computer?

Couldn't get it to quit properly; had to kill -9 as regular kill had no effect.

This crashes with " cannot open shared object file"; I guess it got left out of the download somehow?

This crashes for me with:

WARNING: GLFW error 65543: GLX: Failed to create context: GLXBadFBConfig
Unhandled SIMPLE-ERROR in thread #<SB-THREAD:THREAD "main-thread" RUNNING
  Failed to create main window. Please, check OpenGL version. Requested: 3.3

I got "cannot import from undefined module: base" when trying to run with Chicken Scheme.

My kids won't stop playing it!

Nice job with the visuals. Spare but very cohesive. It made me sad to kill the friendlies tho.

... is that pepe the frog?

Let's see what ya got!

This is the first time I've ever done my own art; normally I use stuff from It's going better than I expected; working in very low resolution is a great way to ease into it without setting expectations too high.

Basically any code that would be valid to type in the code editor, you can type in the eval command. For instance: eval trace(table.concat({"a", "b", "c"}))

It's very useful for inspecting the state of your variables or calling functions after running your game and hitting ESC.

I realized my fix to imenu broke indentation, so maybe try pulling again. I don't have lisp-indent-offset set to anything; in fact doing so breaks the indentation further.

I love reading that you'd never used Fennel before the jam; that's so cool that you could pick it up quickly and still finish your game with 2 days to spare.

I pushed some changes to fennel-mode to get rid of byte-compiler errors; can you let me know if that fixes the indentation problems you were seeing?

I think it was missing an explicit require of lisp-mode?

Great job; the quips really help add a lot of character and make you care more about the game.

I took a look at the source and I believe this has the distinction of being the largest public Fennel codebase in the world; congrats!

Nailed the retro feel; nice work. Could you include a link to the source in the description?

This crashed for me at first when running from source, but then I ran "raco pkg install lens" and then it worked! You should probably either include that in the source or make the instructions clearer that it's required before it will work.

I'm using tiled ( for the maps in my game and have found it very useful to allow quickly creating levels. But there are a few things I found helpful I thought I'd share in case others are using Tiled.

The first is that we have a number of object layers which indicate where specific enemies and other things should be spawned, but the markers in the map are just indicators, so we want those layers to be invisible. While I'm working on the maps I want the layers to be visible, but I'd always forget to make them invisible before exporting the map, so they'd show up in the game where they don't make any sense. What I ended up doing was toggling the visibility in code right after loading the map instead, so I don't have to do it in Tiled.

The other thing I found really helpful was adding a linting phase to the map loading. I have enemy objects which have a property telling the game which patrol path it should follow. The patrol path is an object defined in the patrols layer, but it's easy to make a typo or something and have weird errors down the line, so I do an explicit check to confirm that the patrol it points to is present during map load time to make errors more obvious.

I'm generating the love file and appimage myself and using the old shell script version of love-release to handle the mac and windows builds.

(1 edit)

Looks promising. If you want to make executables for various platforms instead of just source tarballs, feel free to crib from my Makefile; it can do Windows exes, Mac apps, and GNU/Linux AppImage builds from love2d games.

I'm hoping to collaborate on a TIC game with a friend, but I'm having trouble figuring out a good way to do that. Is it best to just keep code in separate files in a source control repository and run `tic80` from that directory, then use `require` in your cartridge and not keep any actual code in there until you're ready to publish, or is there a better way?

The new eval command could be helpful for the kinds of things you'd use a debug mode for. Hit esc; run `eval trace(player.status)` or even use eval to replace the definition of a function and then `resume` to see what effect it has.

If anyone's following along here, this was added:

One of the big things I miss from coding games in LÖVE is the ability to interact with my games while they're running. It's invaluable for debugging to be able to just pause the game and inspect and change the contents of various game state tables.

Imagine if when you press ESC to get to the console you could run a command like `lua print(` to see the contents of a game's table, or run `lua = 481` and then run `lua TIC()` to see the effect your change has on gameplay. (If we want to get really fancy we could add a `resume` command, but let's not get ahead of ourselves.)

First of all, is this a good idea? I understand that having support for multiple languages complicates this. I could take a shot at implementing this for the languages that run on the Lua runtime (including MoonScript and Fennel) but implementing it for JS or Wren is beyond me. If it's agreed to be a thing worth doing I'd be happy to put in the work to see it since interactive development is very important to me, and it's difficult for me to work without it since I've been so spoiled.

Part 2 is up now!

Let's just say it was a week where I had a lot of free time! Business trip took me out of town so I had each night alone in a hotel room with nothing to do but jam. The music and art are both Creative Commons-licensed works I found on which is a wonderful resource!

This is a lot more fun than it looks like at first glance! It would help a lot if the instructions were visible from within the game, and maybe if there were a way to write notes within the game as well. But I enjoyed it once I got over the confusion; quite a good brain teaser.

Thanks! Rover markers are coming in version 2.

Hey folks; I wrote up a little post-jam devlog. This is just part 1; hope to follow it up in a few days.

My kids loved this one; eventually they got to the point where they just tried to see how long they could play without getting any cheese at all.

Great work on the graphics; really nailed the pixel-art vibe!

The frog guy is hilarious; love the voice-overs. The controls were pretty frustrating, they responded sluggishly, and I never did figure out how to talk to any of the characters the frog tells you to talk to.

Neat idea and execution. Makes me want to go and read thru the devlog!