9 Months of Silence

Not long after my last post, I got offered a job answering email! I never would have thought that would suit me, but it’s working out really well, and has done me a lot of good. Hooray for gainful employment! Money-per-hour on that is so much better than I’ve managed with software development, but of course it’s not nearly as fun. It does mean that just about all the goals I listed were immediately thrown out of the window, but it serves me right for trying to be organised.

App 2 continues to be worked on as I find time. Recently I finally started reading The Pragmatic Programmer and it’s given me a much-needed nudge to try some new techniques. Right now I’m in the middle of rewriting all database-access code to use generated code, which I’ve been chipping away at for a month now. Is it the most productive use of my time? Probably not. But it’s a useful thing to know how to do, and it is helping to make many parts of the codebase simpler and more consistent. Plus it’s fun! But then I’m weird and find refactoring code to be very enjoyable. If anyone’s interested, I’ve uploaded the input file and result here. I’m using JavaPoet which makes manipulating code much easier than messing with Strings. I haven’t included the code that actually does the generation but maybe I will when it’s doneΒ β€” I hope to use it again in future apps.

Also, a few weeks ago I entered Ludum Dare 36 with my brother. It was the first time I’ve actually worked on a game with someone else, so that was cool and frustrating in new and exciting ways! The game, Boulderama! is not something I ever would have made on my own, and it’s much more polished than anything I ever produce, so check it out if you like casual/puzzle type games. I would like to apologise in advance for the music though.

I’m also now a moderator for an online game, Growtopia. That’s been an interesting experience too! As a shy person, suddenly becoming some kind of minor celebrity is super weird. Lots of kids get super excited to meet me or talk to me, or sometimes try to confide in me about their problems. It feels like an honour to be involved in it, but it’s also completely exhausting so I tend to hide a lot.

Growtopia simultaneously fills me with ideas for multiplayer games, and how I would structure the code… and also makes me never want to make an online game. There are so many complicated issues that come up, and the pressure of having 500,000 people log in every day, who all want different things from the game, makes it really hard for the 2 developers to please them. I’m also not sure I could ever actually finish a project that big and complicated, but that’s a whole other issue!

2015/2016

It’s review-the-past-year-and-plan-the-next time! That means I basically waffle on about myself for umpteen paragraphs.

Firstly, 2015

I had several goals planned for 2015, and over the course of the year I ended-up adding some new ones and giving-up on others. I also read 19 books, and completed playing 10 videogames, which means I actually released more games than I played through.

Run 5K

Failed! After various attempts in January to March, I decided to put it off until the weather was warmer, and then… never actually got back to it. Going to attempt another exercise goal in 2016, with hopefully more success.

One Game a Month

Success! I actually released 13 games, though not all of them are particularly good or finished.

  • Spacelunky: Barely more than a prototype, just the bare bones of a procedurally-generated platformer. I did make some music for it though, which is a first.
  • Memory: Classic memory game, not much to it. I experimented with the Unity animation system, then everything broke when I later updated Unity so I never expanded it.
  • BREAKPONG: Pong, but the paddles disintegrate when hit by the ball. I really like this one actually! Name is awful though, which is a running theme with my games.
  • Food Fight!: Oh dear. A 48-hour Ludum Dare entry that only ran properly under the exact circumstances I developed it in, which is a bit rubbish. I actually thought it was quite good up until I started getting feedback. Oh well!
  • Catsteroids: I’d run out of time to do a proper game, and so I made Asteroids but with giant cat faces that go ‘meow’ at you! It’s every bit as daft as that sounds. I have no idea what anybody else thinks, but it still makes me laugh.
  • Potato Farming Manager 2000: For some reason, I decided to take my super-early, supposed-to-be-a-side-project Impressionable engine and release a game using it. To say it’s a bit rough is an understatement, though I’m still pleased it’s even playable at all. It’s a simplistic farm management game. I recently upgraded Impressionable to use an OpenGL renderer, so I might update this soon if I remember.
  • Mavis Bacon Teaches Typing: I’d just started learning to touch-type, so what better game to make than a breakfast-themed typing game parodying the apparently-fictional typing tutor Mavis Beacon? This turned out better than I had hoped, and is one of the more polished games in this list. There’s only one stage, and it suffers from suddenly becoming way too hard, but what’s there I’m happy with. I drew a bunch of breakfast items that are actually recognisable, hurrah! Probably my favourite game name, too.
  • 5-A-Day Fun Maze: I wanted to make a raycasting pseudo-3D engine for GBJam. I did, and then had no idea what to do with it, so I made a maze game about finding fruit, and then gave it a sinister tone? Not sure what I was thinking.
  • Frankenstein’s Monsters, Inc.: The game with the longest name and the most punctuation! Another 48-hour LD entry, you run your own corpse-reanimation business! Did loads of art for it, which I’m pleased with. I’m mostly happy that I managed to distil a management game into a single screen with simple drag-and-drop interactions. Made music for this!
  • Flibbertigibbet: Using the same old laptop as for Food Fight, this time I went for the lowest possible system specs, with a survival/building roguelike game that runs in a terminal. It was probably more fun to work on than actually play, however. It was a good excuse to experiment with some C techniques as I’m still fairly new to it. Named after my favourite word because I couldn’t think of any alternatives.
  • Pool: A basic English Pool game, made mostly as a starting point to then make…
  • B!lliards: My entry into ProcJam, an attempt at procedurally generating billiard/pool-table games, to limited success. I managed my time poorly and only got the bare minimum implemented, which mostly picks rules at random, producing amusing but unplayable messes.
  • Ecosystem: 48-hour Ludum Dare again! This time, a little virtual garden. It’s pretty bare, but depending on how the ratings for it go, it’s something I would like to continue working on, with the intention of it being a nice idle game to leave running and see how it develops, and enjoy the little soundscape it produces.

I’m glad to have finally done 1GAM properly, but that said, I’ll be focusing on fewer, larger, more complete games in the future. A month isn’t enough for me to finish things satisfactorily.

Be competent at a music program

Sort-of succeeded? I managed to make a couple of little instrumentals, but didn’t really put enough time into it to make music for every game as I had hoped.

Be competent at Blender

Failed! I enrolled on an online course, but haven’t actually started yet. I ended-up putting this to one side until after I’d learned touch-typing.

Draw more

Success! Had a daily-drawing calendar and mostly did it each day, though sometimes I did get behind.

Daily Bible reading

Success! This is the first goal I added to the list later. Took a while to get into it, but I now read a chapter pretty-much every morning before I do anything else.

Learn to touch-type

Success! Another addition. After years of typing with two fingers (albeit fairly quickly with two fingers) I finally made myself learn to touch type. I used TypingStudy.com, which is a free online thing. I finished going through the lessons in November, and it’s been getting more and more natural since then.

2016

So, what about this year then?

Exercise regularly

Firstly, again, exercise. I’m not overweight (BMI around 23), but I’m a long way from any semblance of fitness. My strategy this time is to use Wii Fit, as it’s easier to motivate myself to flail around in front of the TV for 10 minutes a day than to run around in the cold where other people can see me.

Complete the Blender course

Lack of 3D ability continues to limit what games I can make, so I definitely want to learn Blender this year.

Learn to play the piano/keyboard

There’s been a MIDI keyboard lying around as long as I can remember, and I think learning to play an instrument would be useful and help with stress, so why not commit to learning it publicly on the internet? I’m naively assuming that touch-typing will help a little here, but maybe that’s just wishful thinking.

Make some Arduino things

I’ve wanted to learn electronics for years but always put it off. I’ve got an Arduino, so why not actually do something with it? If I come up with anything interesting I’ll post about it.


 

So there you go, waffling over. Have a great year!

LD34: Ecosystem

Ecosystem

Another Ludum Dare, another little game! This time, by a coincidence, there were two top-voted themes, ‘Growing’ and ‘Two Button Controls’. I went with ‘Growing’, as I’ve wanted an excuse to make a little gardening game for a while now. And so, I present to you the unimaginatively-named Ecosystem.

Ecosystem is a sandbox where you plant seeds and then watch them thrive or die out. Sculpt your little patch of dirt, water it, and see what happens. As your garden grows, it’ll develop its own ambient soundtrack.

A lot of it is very rough. The audio gets messy when there’s a lot going on. There are bugs with how things float on water. It can’t handle underground sections very well. There are only three plant types. But it feels like a good starting point – I say this a lot, but I really think this game has a lot of potential as a background game that you leave running and just tinker with occasionally.

This game also is a bit of a personal milestone. It’s my tenth Ludum Dare entry, and I’ve made a game every month this year. Next year, I’m definitely going to work on fewer, bigger projects, but it’s nice to have done One Game a Month properly once.

B!lliards

This slideshow requires JavaScript.

Last week was ProcJam 2015, and as I hinted earlier, I took last month’s Pool game and added procedural generated rules to it! The theory is that it’ll invent new and exciting billiards games, but in practice it mostly just makes a mess. I’ve called it B!lliards and you can play it from the comfort of your web browser for free. A bit of a post-mortem after the break.

(more…)

Pool

Pool

This past week I’ve made a little 2-player version of Blackball Pool in Unity. Check it out!

The story behind this is that a few weeks ago, I had the idea of making a crazy golf game where players build their own courses out of clip-together parts and then share them with other players. As much as I’d like to make that right now, it’s way beyond my ability, so I put it to one side. Shortly after, I had another idea: a procedurally generated billiards game, where the table shape and the rules could be invented by the computer or specified by the player. I made a start on it, but quickly realised I needed to know 3D modelling before I could do it justice. I’ll be doing a course on that soon so I’ll finally be able to make 3D games using more than just Unity prefabs. Hooray!

Which brings us to this week! I’d just finished the part of App 2 that I was working on, and wanted to devote this week to 1GAM, so for a lack of any other ideas I put together a basic 2D pool game. No AI, no audio, and it’s no pretty, but it’s a start. ProcJam 2015 is coming up so I might use that to experiment with rules generation.

Flibbertigibbet

What happens when I’m away for a fortnight with my low-spec laptop and haven’t made a game for 1GAM? Turns out it’s this:

Flibbertigibbet

Flibbertigibbet (I couldn’t think of an actually good name, so used favourite word instead.) is a Minecraft-inspired roguelike. You mine, you build, and you craft β€” all from the comfort of your 80×25 character, 8-colour terminal window. It’s nowhere near as complete as I’d hoped, but I’ll definitely be tinkering with it in the future. It’s just so fun to work on!

Part of what’s made it so fun is that it’s been almost entirely my own code. All I’m using library-wise is PDCurses for terminal stuff, and some simplex noise code I found online because I was in a hurry. Otherwise, I’ve been free to write it in whatever weird way I want! πŸ˜€ Whether this results in code that is actually good remains to be seen, but it’s lovely not having to conform to someone else’s idea of what makes sense.

It’s pretty limited right now though. First on the list for improvements would be to replace the terminal with a graphical window that I can fully control. Mostly I’d like more colours, and to show more on screen at once – 80×25 is pretty cramped. I never got around to making the world keep generating as you move around either, and the world it does generate isn’t that interesting. There’s not even any combat or death yet, so it’s hardly even a roguelike! I’ve got a big list with a bunch of other things, so this is only the beginning for my terribly-named ASCII adventure.

Frankenstein’s Monsters, Inc. Post-Mortem

The Ludum Dare 33 results came out earlier this week, and it went really well for me. I beat my previous bests in 5 of 8 categories. I placed 87th in the Theme category, with 4.04/5 – my first score over 4. So yeah, I’m pretty happy. πŸ˜€ You can still play Frankenstein’s Monsters, Inc. on Itch.io.

I’m far from an expert on game jams, but I thought I’d do a post-mortem to share my experiences:

What went well

  • I spent some time before the jam considering each of the 20 possible themes and writing down ideas for them. I do this every LD if I have time – it’s a fun game-design exercise, but also means that I can get started right away and not stress about having no ideas. (Except when the winning theme is one I had no ideas for, which has happened before.)
  • I recognised that my idea was too big, and simplified it before I began. The biggest change was reducing the game down to a single screen. Had I divided things up into multiple windows or screens that you switched between, it would have taken longer to make and been more confusing to play.
  • I got things working quickly. The game was essentially complete by the end of Saturday, leaving Sunday for balance and polish. Much of the art was still rough stick-figures, and the balance was off, but the game fundamentally worked, and I could have submitted it then. I’ve found this is really important for motivation – I’ve given up in previous game jams when it’s Saturday evening and my game isn’t coming together (even though I probably could have completed it).
  • I prioritised what needed doing. I can’t remember where I got this from, but I always make a TODO list with a ‘Need’ column and a ‘Want’ column. (Sometimes also a ‘Like’ column for really unnecessary but cool ideas.) Working through the Need list first really helps me to focus. Even after I’d simplified the game as I mentioned above, there were still big features that didn’t make it in – if I’d not prioritised the really important tasks, I would not have produced a finished game.
  • I used familiar tools. I know it’s not fashionable to use Java, but I’m now familiar enough with it and the library I use (libGDX) that I can work quickly without spending a lot of time reading documentation. As for software tools – IntelliJ, GIMP, and to a lesser extent FL Studio – I’ve used enough that I could concentrate on making the game, not learning to use them.
  • I actually made some music! I still don’t know what I’m doing music-wise, but spent half an hour or so cobbling-together some notes in a reasonable-sounding order. It’s something I’m trying to get better at, didn’t take that much time, and greatly improves the overall feel of the game. Certainly better than silence.

What went wrong

  • No sound effects. I find sound effects quite difficult to do, and so kept putting off recording them. There’s also the issue of how to make them work in a game where you can be producing several monsters per second – how can I have sound effects without them overlapping and just becoming a horrible mess of distortion? So I made excuses, and audio was the lowest rating.
  • Last-minute checking. The last thing I did to the game was add detail to the background, and in doing so I made the text really difficult to read in some places. If I’d paid more attention it could have been clearer.
  • Odd balance. The monsters and human workers are almost equally effective in terms of work-per-cost, so the choice between them is a bit meaningless. The public outrage also scales in a way I’m not fully happy with – to decrease it costs money, which means selling monsters, but selling monsters increases it – but at the time I was just happy that the game was winnable but still challenging. If I was to spend more time developing it, I’d definitely need to reconsider how everything interacts.
  • No animations. Entirely a time issue. I wanted to have animate the departments that are working, for visual feedback and to make things more lively. Ran out of time, which means that the Jacob’s Ladder in the top-right looks like unfinished knitting.

LD33: Frankenstein’s Monsters, Inc.

Frankenstein's Monsters, Inc.

Last night I submitted my Ludum Dare 33 entry, Frankenstein’s Monsters, Inc. which besides being a bit of a mouthful, is a fairly minimal management game about running a monster-building business. The theme was ‘You Are the Monster’, and I think you’ll agree that digging-up bodies and sewing them together is pretty monstrous. I say it’s minimal because your controls are only to drag monsters and job applicants to assign them to a department, drag monsters to sell them, and click on buttons to spend money.

It was a lot of fun to work on! I’m happy with how it’s turned-out too – the only thing I didn’t get time for is more art, especially some animations for when each department is working, and more variety for monsters. It started out overambitious, but I managed to simplify the design a lot before I started. I even had time to do some music:

As with any jam game, there are things I’d like to add to it. My original idea gave the monsters statistics which affect how much money they’re worth and how effective they are at different jobs. In that way, you’d be able to gradually level-up your production quality as well as its speed. You’d have a PR department which would slowly reduce outrage over time, which would allow outrage to ramp up without being unbalanced. I also have some ideas about selling monsters – that they’d be sold automatically but only when there was demand, and you would increase demand by assigning workers to a marketing/sales department. I’d like to change how human workers behave too – at the moment, they’re 4 times as effective as monsters and 4 times the cost, so there’s no reason not to hire them as soon as they’re available. So, two different directions it could go in, really! Either more of an “idle game” that runs by itself, or a more detailed business simulation.

The Ludum Dare page is here, or you can go play it here.

GameBoy Jam 4: 5-A-Day Fun Maze

5-A-Day Fun Maze

The past week and a half, between other things, I’ve made a silly little browser game for the 4th GameBoy Jam. It’s a 3D maze game about healthy eating, called 5-A-Day Fun Maze, which is kind of a joke about terrible educational games, and kind of just a terrible game, but there you go.

This is a good example of what happens when I don’t have a plan. I wanted to do a ray-tracer (Old-school 3D rendering where you fire an imaginary ray through the screen until it hits a wall, then draw a vertical line there based on the distance. It’s what early 3D games used.) so I did so, and then realised I had no idea what the game would be. I arbitrarily drew a strawberry so I could have entities as well as walls, still had no idea, and so it became about collecting fruit. The whole healthy-eating thing grew from there.

The game itself is just a maze, so not that interesting. It’s a ‘perfect maze’ in that there are no loops, so you can follow the left (or right) wall and eventually find all the fruit without difficulty. There is a compass in the corner to help you orient yourself if you do get lost though.

One thing I do quite like is the eating animation: simple, but it works! It also begs the question “Why are we looking out of the player’s mouth?” to which the answer is “Because.”

Omnomnom

Ludum Dare

This weekend is going to be Ludum Dare 33! I hope to take part, but there’s less pressure now that I already have a game for August. Been feeling pretty burnt-out lately, so we’ll see.

Automating Inkscape to Export Android Drawables

Developing for Android, you need to provide a lot of copies of each image you use, for mdpi, hdpi, xhdpi, xxhdpi, and even xxxhdpi screens – possibly even more in the future! Even if you create your images as vectors rather than hand-pixelling them, it’s still time-consuming to get Inkscape, a free vector drawing application, to export the 5 or so different bitmap files. Fortunately, Inkscape has some automation features built-in – for example, you can tell it to generate a PNG from an SVG via the command line:

inkscape source.svg -w 32 -h 32 -e dest.png

I’ve created a little Windows batch file that will take all the SVG files in a directory, and then create all the various sizes of PNG from it and put them in the right places. It’s available here on GitHub. It’s Windows-only, and expects a certain directory structure, but it should work if you’re using the default project setup from IntelliJ or Android Studio. If not, you should be able to tweak it.

One thing to note is that Inkscape does take a second or so to do each export, and that time unfortunately adds-up when you’re doing 5 exports per file, on potentially dozens of files. If I get around to creating a Gradle script that only exports the SVGs that have changed, I’ll make sure to post that as well.