Post jam reflection


Hello! As promised, here are my thoughts after completing the 6-day game jam and making some bugfixes. It was an interesting experience.

The jams at FIT CTU

First, let me talk about the game jams at Faculty of Information Technology of Czech Technical University in Prague.

This activity is held annually, last few years it is always on Easter weekend, it happens on site in a course of 48 hours. We have a pool of smart, talented and creative students, many of them attend regularly, who explore various ideas that stem from four given ingredients (of which at least three have to be used, somehow).

This year, there had been an Easter game jam again. But, in winter semester, many students from said pool got bored and wanted the jam in winter too. So, it happened, but in a different format. And while I am regularly one of the people helping with jam organization on site, this time I have decided to have a go at game jamming too.

I had set some goals

  1. Learn a new technology. About a year ago I have noticed there is PICO-8 platform that has a very active community and some gems that shine out of various technical limitations of this fantasy console and its really well thought out development/creative environment. So I decided to give it a try.

  2. Make an interesting game. Making games is an art and trade that connects various skills - idea making, design, storytelling, writing, drama, mathematics and logic, audiovisual arts, programming, software engineering (and marketing etc.). This goal emphasizes a solid game play.

  3. Improve art skills. I don’t get to draw often. Neither I seriously tried making some music, except some experiments with Suno. I have some experience with drawing by hand, bud this is not much usable for pixel art. I have some experience with pixel art and limited color palettes from my retro game engine programming few years ago.

  4. Think smaller. While there was 6 days deadline, I had to count with some time challenges such as partying (twice), holding a lecture (one), preparing assignment for last lab (twice), evaluating semester projects, consulting final theses, getting and preparing Christmas gifts… I had found out that I had only two evenings in a week and then a weekend. So… it had to be done in 60 hours including sleeping, or about 36 hours netto (it is better to sleep than not).

  5. Have fun. I didn’t intend to win. I set to explore some crazy ideas and have fun with them.

The ingredients

These two were revealed before the jam started to spark some thought:

  • Prophecy. This was a very hard ingredient to use mechanically in a simple game. I have put it in a story bag, as I had no use for it now.

  • Inside out / Upside down. This is a very powerful ingredient, as it allows you to explore ideas that exist and try to twist them. What about taking some well known concept, and turning it upside down? This was the moment I started thinking about various classic arcade games that should be easy to do in PICO-8 and twist later.

Following two were revealed when the jam started:

  • Lighthouse / beacon. Another decorative ingredient to me. I didn’t think of any classic game with a lighthouse theme, but even then I thought about a possible game of lighthouse guard that is leading ships not to sea, but to land. But I couldn’t come with a good game play.

  • Festival. Here, it felt like another decoration, but I have converted it to carnival and started thinking about all these colorful masks, music, dancing and fireworks. Making world change when taking mask seemed intriguing to me.

Game design start

I had thought about various classic platformers. There are many platformer tutorials for PICO-8 and many great platformers in PICO-8 (Ascent is one of my most favorites), so it seemed like a good start. But then I thought about twisting the concept… and that there are already many platformers with various twists. Also platformers are quite difficult genre, considering you have to make good physics, controls (coyote time is only beginning), animated characters, good enemies and environment. It could be done, but not while learning PICO-8 and cramming it into the deadline.

So I had to go back to older / simpler games. Pong? Arkanoid? Snake! Traditional Snake doesn’t have a lot to it - there is a snake, apples (or something else to eat), walls. That’s all. How that could be made inside out? Well, the goal of Snake is eat as much apples as possible without crashing. We could make player crash the snake in some interesting ways and make it a goal (and I still think it could make a funny and interesting game). Or… we could make a snake that is not eating apples, but is scared of them instead (and find another goal).

How to make it playable? Telling player to avoid apples doesn’t lead to interesting game. It would make apples just another wall, it is clearly removal of one of the key components from the game, and something else would have to be added. But what about using “inside out” as a role reversal? You are not the snake, you are apples. And you try to scare the snake in certain way by your placement. The base idea of making a puzzle game where player puts apples in certain way to drive out snake got born.

At this moment I looked at my ingredients again. The festival gained an interest with various masks. It could give a good story background to explain this reversal. That suddenly the apples became alive during the festival and that the snake is not eating sentient beings (well, this part was changed later on). So the story got born too - the snake got into carnival, between levels it wears different masks and changes color (yes, it was planned at first).

I also thought about progression in general. That there will be simpler puzzles first, harder puzzles later. That snake has to enter the room and leave the room. And that the direction could matter, as it would allow you for better or worse start in the next level, and make you run the game more times to find the best way across. To me, this part was important, because this actually made the game replayable.

It all seemed like a good base, so I have decided to go with, even without complete idea (I could think about the game in pauses when not programming / drawing etc.). I had decided to start with this and iterate later.

The art

First I have loaded PICO-8 and started a clear cartridge. I must admit, it was not my first try at making something in PICO-8, so I knew some basic commands, but this time I was serious on doing it.

After loading PICO-8 I drew basic snake sprites. It took me a while (2 hours), as I was unfamiliar with some controls and drew it pixel by pixel and redid it few times. (It was later when I found out that the small pixelated window is actually quite capable tool.) I also drew an apple sprite. This was all I had done on Monday evening.

Tuesday evening I was talking to other game jam participants, discussing their ideas, not revealing I had a project of my own (as it was meant to be a surprise). When I got home, I had finished 16 mask sprites. I had thought about use of the masks, that perhaps the snake would be taking them instead of apples, but I didn’t think about it more closely.

Friday

On Friday evening I was finally done with teaching the semester at the university, back at home, set to work whole weekend. That evening I managed to get the snake moving and controlled by player. It seemed like a nightmare, as I had to represent the snake body positions, preferably using a queue structure (when moving a snake, new head gets pushed to the queue and old tail popped from the queue), and be able to draw this body using correct sprites for each segment. This damned thing took 4 hours, and I tried to do object oriented programming there, using some existing PICO-8 Lua queue code from github (buggy, by the way) and trying to wrap my head around metatables and their using in Lua. With this experience I have decided to part ways with OOP (apart from simple Lua tables) and not use any other 3rd party code. On the other hand, I came with quite ingenious solution for snake rendering which I will describe in some of the following posts.

It was about 2 a.m. when I went to sleep.

Saturday crunch and more design

Saturday was the most important day for the project and I spent it fully on the game. In the morning I made collision detection, failure screen, winning screen, score counting. The apple placement mechanics was made before the noon and I started thinking about exact rules of scaring the snake away. I wanted more compact placement, so I decided against scaring by corner and went with scaring by side and allowing passing through between two apples. Right after the noon I made the snake automatic movement (another ingenious solution was devised, I will talk about it in a follow up).

Then I have thought more about the progression and masks. I have seen that masks should change something, so I made masks swap sets of apples - yellow for red. Few more rules went into the game, mask rendering and movement with the snake head. Then, a story needed to be made, and I had decided to make cutscenes. It took me 6 hours to make sane cutscene system and the first cutscene (before 2nd level). When writing the dialogues, I made changes to story. Disguised snakeeaters were more fun and logical (as snakes eat sentient beings regularly, so sentient apples being an exception didn’t make much sense). Also, I scrapped the snake recoloring; it would detach player from the snake as they would think it is a different snake.

It was midnight and I felt I don’t have much of a game. Rules working, yes. A cutscene, ok. Tutorial screens. But nothing interesting, no juice. I had found some fireworks effect, rewrote it anyway (no, I should not really reuse someone’s code, as it mostly sucks and I am sorry for saying this). At 1 a. m. I had decided to have a go at a thing I had been delaying the most - sounds.

I have never did sound in a game. And not in PICO-8. I opened the editor and tried to set some sound. Chiptunes. More chiptunes. And only chiptunes. I was furious, pushing various knobs, finding proper instruments and tempos, but at 2 a. m. I had most sounds done and went to sleep.

Sunday finish

Sunday was the day of polishing. Intro screen done. Final screen done. Final score counting, where I have decided to make apples increasingly hurt the score and add snake length after taking the mask, done. And one and half more cutscenes.

At 1 p. m. I headed to FIT CTU building to attend a final ceremony scheduled for 4 p. m., but my game was in a bad shape. Playable, but only 6 levels. Cutscenes not finished. Some sounds not ok. And no music. And I had 2.5 hours to finish all of that.

I made last 9 game levels in about 20 minutes while sitting on a floor in a hallway. All the puzzles that you later said they were well thought and mind-boggling. 20 minutes. Yes. Then I verified that all of them were playable from all directions and changed two of them slightly and shorten snakes in another two. Game design and level design done.

Then I had finished the last cutscene - having the system for it, it went quickly.

The last boss fight remained. Music. I am not a musician. I don’t have absolute pitch. And I am partially deaf. Only 1 hour remained and there was no time neither energy to learn some MIDI import tools etc. I had to do the music myself. I had experimented with trackers before, but getting to know how the music actually works in PICO-8 took me a while. Individual track patterns are SFXs actually, and they can be edited like a track in a tracker, or in that chart tool that shows by default. This slightly changed the way I thought about sounds in PICO-8, as I have seen there are some effects available that could improve some sounds (namely I was not satisfied with fireworks sound at all). So by working on music, I also touched up and finalized sound effects. As for the music, I wanted three tracks - calm background for thinking, calmer and melodic for cutscenes, festival-ish for snake movement. I had started with some basic rhythms, then I had added some “melody” (if slowly changing full-tones in vibrato can be called that) in a “safe” C major / A minor scale.

Then an itch.io upload (and I was in a big hurry, and my PICO-8 was unable to store screenshots or GIFs… later I found out it was a problem with Czech directory name for “Desktop” not matching what PICO-8 expected; PICO-8 authors probably don’t know about xdg-users-dir) and I was done. Exhausted, having to stay there, streaming and presenting participant games, discussing… and next day morning leaving for Christmas to my parents.

What I got from all of this?

First, I accomplished all my goals.

  1. I learned PICO-8. I still don’t consider myself a master, but I managed to do quite interesting things with it. It is really a powerful tool; once you have code ready, you may create content for your game quite quickly and concentrate more on a game design itself. And I have an advice for anyone who want to try learning a new technology together with a new programming language in a game jam: Do a simple game, and don’t ever reuse someone else’s code/library while you are still learning the language. I mean it seriously; other people who are providing code snippets are programming in a certain way that may not suit you who are learning yet, and you will end up trying to comprehend three things at once instead of just two. I did this mistake with the object oriented queue; I kept it (with small modifications), but I spent same amount of time making it work with my code as if I were going to write it myself and I have decided to do without object oriented approach in the rest of code. Of course when having more time and more experience with Lua many code refactors lie before me, but that’s not the point of the jam.

  2. I made an interesting game that you all can play. It was a matter of well thought design choices that spurred something called mind-boggling and fun. I managed to put something that motivates player to replay the game and try better. I managed to place a good set of challenges stemming from simple rules. I managed to place some story, although given some reviews it might have been presented differently. The achievement is that now I know I can actually make such game.

  3. I improved some of my art skills. I had to do some pixel art drawing, but not much, so I consider doing pixel art still a challenge. But I got some practice. What I am more proud of, are my sound and music skills. I still don’t consider myself a musician and I think that #1 place in Audio category in the jam is a fluke, but I definitely gained a confidence and audio no longer scares me. If I were going to make this game again (and I certainly will do), I would have done art faster a better. (As I am writing these lines, I am already experimenting with better than default PICO-8 palette and working on some level/story backgrounds.)

  4. I kept my work small enough. Of course when thinking about the game design, I thought of more variants and more things that could be done with the Snake game. But I had split the design into tiers (something along must have / should have / may have), set priorities and tried to make something playable first. Although it seems I had not much of a game, I had something to deliver on saturday night already - just add the levels and consider it done, just not as polished and without any sounds. I was cutting some features as I went through (for example there was a snake length setting mechanics planned, but it was scrapped), but I am satisfied with the jam-final product.

  5. I had fun. Although I wrote on multiple occasions about my exhaustion, I had fun all the time. When I thought of all these strange and crazy ideas for a game. When I ran my first snake and I spent few minutes twisting him in various ways. When I wrote my first dialogue and I tried to come with some jokes. When I played with sounds. When I devised some levels. When I was playtesting. When I was making music and swinging my head in a rhythm. When I presented the game to others. After all, game is something meant to be fun, both making it and playing it. Making games is an adventure to unexplored and uncoquered lands. If I weren’t having fun, the jungle of exhaustion would beat my will to reach the top of finished game mountain. If you are making game and not having fun doing it, you are making wrong game.

And I also found out, that

  • I have some weaknesses in story telling which I should work on,

  • I would probably never do game jam again in one of the most demanding weeks of the year,

  • The game I made has some potential to explore.

What now?

The jam version of the game is done. But I like the game and I think it should be worked on. Art should be improved, mainly the graphics. And there could be more content. Technically speaking, there is space for another 17 levels (and with some smart hacking, even more) and about two more cutscenes and tutorials. Game design speaking there are quite a few ideas to explore and make into puzzles. So, what will happen over following weekends:

  • Few posts about some technical solutions in Snakyval. I am considering writing about: Snake movement and rendering, the masks and the cutscene system.

  • Announcement of v1.1, its features and release date.

  • Release of a v1.1.

Get Snakyval

Leave a comment

Log in with itch.io to leave a comment.