Hello Anon, Login?

When David C spent a weekend with friends, he decided to remix one of our games, DmazeD for a 7 year old and 10 year old. He was also kind enough to share his experience of using Gamecake with us through this blog post.

Intermission image

We played on the laptop, and I think they found using the arrow key really difficult! They maybe game on tablets more than keyboards - imagine arrow keys not being a core gaming competency!

They were dying quite quickly with the default settings on the game (only 7 and 10 years old remember) - but the hook of, "well, we can alter that" seemed to work better on making the game as easy as possible to beat - I wonder if they would go back to making it harder once they got bored! We did set the bear not to move at all, but then they realised they couldn't get all the sweets if the bear stood still! So 'completion' was a big driver.

I couldn't quite work out how to make the radius of the darkness bigger (and still keep their attention), so just deleting it worked there and then.

In-game screen

Altering the monster was fun. We changed it's speed to 10,100,1,0 and 0.1 - they couldn't wait to see the effect of each of those changes.

I think they were quite thrilled to see themselves in the game. They were very happy to be photographed, but the cutting out in gimp, followed by scale, copy, paste, position etc was a bit of a tall order. I did most of it. The 10 year old did do about 4 images, and got quite into the routine, but I'm not sure that she would have stuck to it without a bit of help.

Sprite sheet image 1
Sprite sheet image 2
Items sprite sheet image 2

What was cool was to show how what you had just done already effected the game, so we could have the character only with the new image when it moved up the screen for example. Save, run play, escape worked really well I thought.

I think they liked the soundtrack, also that was really accessible in terms of them thinking they could do their own - no massive orchestral skills needed, just the voice -I think that is a stroke of genius myself! Also pretty easy to just record a voice to recreate the hum.ogg (theme music).

We discussed further about his experience in terms of tweaking the speed of the chasing bear and David had this to say:

From what you just wrote I just want to say that they weren't scared by the bear, or being chased. It was just that they got caught too quickly for their liking. One of the issues I think they generally have is about sharing time on 'screens'. I suspect some of the motivation of infinite life is not having to share because the game is not finished yet.

You can find David C online at http://flavors.me/caprenter Thanks again, David!

Fork us your versions of DmazeD at https://bitbucket.org/xixs/gamecakejam.
You can play DmazeD online if your browser supports NativeClient at http://play.4lfa.com/gamecake/dmazed?play

I just spent a day fighting against this so here is the solution I ended up using.

Problem: I want to build a linux binary that stands a chance of "just working" for as many linux users as possible.

Possibly one of the ways of doing this seems to be, build against a release from a couple of years ago. That way we don't gain any dependencies on new version of libraries for people who are slow to upgrade. Instead we get dependency problems for people who are fast to upgrade, these problems however tend to be fixable and common.

chroot to the rescue, unfortunately most people that want to chroot are package manager type people rather than normal folk. Which means I tried a few examples without much luck.

So here is my example, which works for me but probably won't for you.

mk-sbuild seems OK at building a basic environment so we use that initially to deal with all the basic setup. The rest of the sbuild commands are where it fell apart for me.

mk-sbuild precise

This chugs away setting stuff up somewhere like var/lib/schroot/chroots/precise-i386

Luckily I keep my home on a separate partition to make for easier os upgrades so I can do the following to import it into that environment

mount -o bind /home /var/lib/schroot/chroots/precise-i386/home

Now we can just chroot into that like so, then cd into our home and build

sudo chroot /var/lib/schroot/chroots/precise-i386

If you dont want to be root then "adduser myname" and "su myname" will help you out and possibly even match you user id.

I can't believe this all took a day of painful failure to work out.

I also don't even know if this is useful :) Maybe the best bet is static linking and writing a lazy linking stub for libgl and libudev which are the static sticking points for me. However that is more work and may not help.

Also going back in time a few years I find clang is not happy, which is a shame as I'm considering it my main compiler nowadays.

So, a day of possibly no success, hurrah!

We are one game behind, not in making games that would be silly. No. We are one game behind telling people that we made some games.

I was planning on writing some junk about MacRL which we just declared finished and discovered that I forgot to mention that DmazeD was all grown up and available on all the app stores you can shake a stick at.

We missed the planed Febuary gamejam due to illness, a terrible illness. Naturally this meant that as soon as we both recovered we then spent 10x as long making a game instead.

So this game has much more effort as the other jams and it also has the new score/profile/menu code to handle local high scores. A step towards reintegration into our online score system used in all the flash games. This includes a brag option for posting spam to twitter, please use it if you like the game.

The game is a maze game, its an attempt to recreate the fear of playing 3D monster maze on a ZX81, only without the 3D (I can 3D easily, but I *choose* not to). There is only a small amount of visibility around the player to try and achieve this. Drawn simply with a full screen GLES shader blacking out all the bits I don't want you to see. I did have a nice little fuzzy video effect going on in the darkness but it got cut back due to GLES compatibility issues.

I need to work out a random number generator that doesn't require high precision numbers so can be used safely in gles pixel shaders. Surprisingly I couldn't find anything online. The main problem is the way integers work inside shaders, they lock when they get too high rather than overflow wrapping like "normal" integers. Great for color calculations but a bit annoying for random numbers since overflow is often an important part of the calculation. It is probably safe to use high precision but I don't want to rely on it and it seems like a solvable problem. Just need to spend some time and research on it. Again this is only a GLES problem, I guess most people don't really care about it.

The visible bubble in the darkness is drawn with a heartbeat, so you get regular glimpses of further away. I think this helps to up the fear. Adding a sound effect on top was tried at the start but ended up too much noise so got removed.

What this means is you are often never sure exactly where the bear is, most deaths are of the wtf BOOM variety when he jumps out of nowhere despite you being convinced hes on the other size of the maze.

The bear wanders the maze talking, the words he says come from Wim Wenders 1991 film "Bis ans Ende der Welt" search youtube for Bounty Bear if you don't believe me :)

The bear also has a tune (again taken from the same scene) depending on how close you are to the bear, his tune increases in volume and the girls tune decreases. The heartbeat of the darkness also increases with proximity so we have quite a few clues, even if you cant always see him.

All sounds in this game where created by Shi and a microphone, no turn tables or other sound systems where used.

The movement control of the girl is modeled after pac man, IE once you start moving to the right you can press up and she will keep moving right and take the next turning up. This works quite well with touchscreens and swipes (you may also swipe with a mouse if you wish) although its not as good as keys and it still needs some tweaking to make it better. Sadly touch screen controls for games are always terrible, use a keyboard if you can.

The bear AI is pretty simple, if you can see the bear, the bear takes the shortest route towards you. If you can't see the bear then the bear just wanders the maze randomly. So you can hide your head in the sand by standing still (this reduces your visibility bubble) and hoping he goes away.

Difficulty increases with each level just by increasing the speed of the bear. Your speed is increased depending on how many sweets you eat, provided you eat all of them on the previous levels you will always start the level faster than the bear. The sweets also give an increased temporary speed boost on the level where they are consumed. So make sure you eat a bunch at the start for extra safety.

Bonus score when you exit a level is given depending on how close the bear is to you at the time. There is a little bit of risk/reward going on just by making the bear chase you to the exit rather than jumping through it immediately you can gain score. That along with optionally needing to eat all the sweets in each level to keep your speed up makes for a few simple but interesting decisions in the game. Mostly you will die from choosing to take too many risks.

Score high for great success!

That is DmazeD, you should go play it now, check out the over complicated download page at


Plenty of different versions available for download from there. Win / Linux / Android / Raspberry PI they probably all work or you can try and use Chrome/NaCl to play it online :)

Last month we were initially planning a 2D version of 3D Monster Maze but that would have taken too long.

This month we suffered from a horrible illness so we decided to skip the whole 'live action intense development' entirely. On the positive side, we spent far too long fiddling around with a little game which means 3D Monster Maze in 2D is now a reality!

And so, here is a breakdown of some of the more interesting parts.

To create a maze that is randomly generated, we will first need some walls. After a ponder or two and experimentations, I came up with the following layout of wall tiles.

What I came up with for each tile was a wall going directly through its center; which is probably the most efficient way of dealing with this.
However, we still need corners and T junctions along with some other bits so it looks more robust and complete.

This resulted in a layout that tries hard to only include each tile once whilst placing them in a natural setting. This makes it easy to draw any sort of walls over the top and give the game a bit of texture.

There are only two tiles that are duplicated in the layout. Here, I have marked them in red along with a chequered pattern that shows exactly where the tiles are. The red tiles and the blank tiles are never used.

Now we can draw some simple walls and produce a little maze. All well and good but randomizing it will make it a little more interesting, don't you think? After much head scratching, fiddling and guess work I came up with the following algorithm. Pay attention now.

1. Start with a maze full of single cells, ie. no cell is attached to any other cell.

2. Each cell is 2x2 characters of empty space surrounded by walls. (3x3 area per cell or 4x4 if you count the overlap.)

3. Go through each row and each column of cells and knock down a random number of walls in a straight line. This creates a basic shape for the maze.

4.The following three actions are then performed repeatedly.

i. Go through each cell and check that it has at least 2 missing walls, if it doesn't then randomly knock down walls until it does.

ii. Go through each cell and check if it has any corner pieces that have had all of their walls removed, if any corner does then randomly restore a wall. This prevents very small wall islands from forming.

iii. Finally make sure every cell is connected to every other cell. Build connected groups of cells and then randomly knock down a wall from each group until only one group remains.

5. Perform all the 3 checks until no new changes are made, at each point we may randomly break one of the previous constraints so this ensures that all 3 constraints are met simultaneously.

Here's an example of mazes created by this technique. As you can see, it makes for some rather pleasant Pacman-style mazes.

More images can be found at -> http://imgur.com/a/uxmvy

And of course the source code -> https://bitbucket.org/xixs/gamecakejam/src/tip/dmazed/lua/dmazed/cells.lua

Huzzah! We now have a maze for the game to take place in and it only took 10x longer than any other gamecakejam!

Initially planing a 2d version of 3d monster maze, to see if it is possible to demake a ZX81 game.

Instead we ended up settling on something like pengo, because plans never work, ever.

Decided not to stress the time too much this time, just keep going until it was playable and I think that makes it the most gamelike of the games so far. I'm still not smart enough to have prepared some kind of gameplayengine in advance so this took just over four hours to get it all together. At least this time I fiddled with the gameplay side until I was happy with it though.

If you notice lots of pauses near the start it is because I didin't even have a cup of coffee ready. Had to go back and forth to the kitchen and boil the kettle 2 or 3 times before I even had a hot drink to keep me going. This is probably the biggest failing of the jam so far, we really need some sort of maid to provide tea and biscuits and maybe a ham sandwich on demand. Or at least order pizza next time.

I really want this to run well on the raspberry PI and currently this is not the case, mostly it just needs the code to do less generic bumf. Which although acceptable on a PC is a tad too verbose for the PIs poor little ARM chip. To this end the day after the jam I finally switched the ARM build from vanilla Lua to the wonderful LuaJIT which gives a nice average 4x speedup of everything. This act alone makes the game playable on the PI for now.

Still plenty of room to speed things up, for instance drawing text on the screen is incredibly expensive compared to what it should be. As you can see by pressing ~ to bring down the console and seeing the whole thing crawl to its knees just from rendering a few characters.

Silly me.

This is all the drawing side of the game BTW so the game logic runs in less than a millisecond then the drawing chugs away for literally fractions of a second. Terrible I know, but there is no shortage of things I can do to make it faster and they will all happen given enough time. It is just really nice to have some things running already so that when the engine does go faster the games instantly improve :)

Play the NaCl build online at http://play.4lfa.com/gamecake/hunted please read http://play.4lfa.com/gamecake for important NaCl setup tips.

Play on any android device by installing from https://play.google.com/store/apps/details?id=com.wetgenes.hunted

Play on a Raspberry Pi by installing from http://store.raspberrypi.com/projects/hunted

Hack the source at https://bitbucket.org/xixs/gamecakejam/src/tip/hunted

Grab a zip with binaries for windows ( XP ), linux ( Ubuntu ) and the Raspberry Pi ( Raspbian ) at https://bitbucket.org/xixs/public.gamecakejam/downloads

Watch it being made live online

For an alternative view on the jam, see http://esyou.com/blog/487007

Join us at http://play.4lfa.com/tv/gamecakejam.tv next month (13th Feb 2100-2400 gmt) to chat and watch us do more of the same.

The plan was to make Cloids - The miracle toilet that cures your haemorrhoids, well with a bit of artistic licence thats exactly what we made.

Well actually we really wanted to make "Dance! Dance! Hitler!" but we ended up with this.

Yet another asteroids type game. This time however it has a control scheme that is designed to work with touch screen devices so we could put it on googles android market. Strange how that works really, we can run the same code across multiple platforms but we need to think carefully about design of the input and game in order to be able to actually play it on some devices. Can't say I am over joyed about apples continued success in this war on buttons, yeah I blame them for this problem. Above all it is scary to think that the spectrums dead flesh keyboard would be considered a step up for many of todays popular computer devices.

So yeah, touch screen, place finger on screen or press mouse button to shoot if you have a mouse. Shooting causes recoil so is also your only means of movement. Bust everything on the screen to win. Got a bit of bouncy flocking type stuff going on for the "Grapes" you must remove. This is based on an old flash game we made called Clownoids which is basically the same game, only better. Clownoids was based on my memories of playing one of the sub games in Batalyx that had a shoot with recoil mechanic. Clownoids also turned into EsTension which is somewhat more interesting.

Again we ran over time a little, despite having a generic project to start with. The deadline of three hours is pretty brutal. Mostly it is anoying that there is no time to iterate over the code/ideas. It really is a case of write the first thing that pops into my head and then move on. Next time I am totally going to have a mostly complete project setup and then just tweak a game out of it.

The doing so much from scratch is just a killer when working to such a tight deadline, no time to think.

So, behold Cloids in all its glory, please take it for the rough prototype that it is and have a fiddle with it. The whole point of making these is so we can release everything, the code the graphics the sounds as free to play and free to use. I mean really really free for anyone to use however they wish. Change the graphics, fix the bugs, remove the bits where my brain broke and I stated writing upside down code in the wrong language, just do whatever you want with it.

Play the NaCl build online at http://play.4lfa.com/gamecake/cloids see http://play.4lfa.com/gamecake for NaCl setup tips.

Play on any android device by installing from https://play.google.com/store/apps/details?id=com.wetgenes.cloids

Hack the source at https://bitbucket.org/xixs/gamecakejam/src/tip/cloids

Watch it being made live online

Again we setup a text to speech engine to pipe the typed chat over the video as audio, the kids seem to like it that way so we will keep doing it.

Join us at http://play.4lfa.com/tv/gamecakejam.tv next month (9th Jan 2100-2400 gmt) to chat and watch us do more of the same.

This time round took even longer than we had hoped and yet again there wasn't much time to add any real gameplay, things just got thrown together and it all kind of worked. Mostly.

Play the result online at http://play.4lfa.com/gamecake/lemonhunter

Hack the source at https://bitbucket.org/xixs/gamecakejam/src/tip/lemonhunter

Watch it being made live online

This time I hacked together a TTS interface to the chat piped into. Naturally what you hear is the kids spamming like the crazie and ignoring us. Not sure that is any better than us not talking? Maybe next time will be better.

Maybe we need an MC to talk over everything but really I don't think its that possible to make the act of game development into an interesting spectator sport :) Its just about recording the act of creation under pressure for documentary reasons.

We thought we where more prepared this time round but actually it seemed to not go as well. Managed to hit some hickups and fail to get any code working a number of times. In my defense we both had terrible colds at the time so yet again it was SUCCESS!!!

Play the result online at http://play.4lfa.com/gamecake/gagano

Hack the source at https://bitbucket.org/xixs/gamecakejam/src/tip/gagano

Watch it being made live online

This time we talked, some of the time, not sure that goes too well as its quite annoying at our end.

The first, the original, the bratwurst.

Play the result online at http://play.4lfa.com/gamecake/aroids

Hack the source at https://bitbucket.org/xixs/gamecakejam/src/tip/aroids

Watch it being made live online

This was the first attempt so to be honest I'm surprised it worked at all :)