About j_stirk (twitter: @j_stirk)


Ludum Dare 28

j_stirk's Trophies

j_stirk's Archive

Only One World – Postmortem

Posted by (twitter: @j_stirk)
Monday, December 16th, 2013 6:51 pm

I am pretty ecstatic. I have finally released a game, and people are playing it – Only One World.


Technically this is my 2nd LD, but I bailed out really early on my first attempt (other commitments + work + illness).

The theme was hard, but I enjoyed it. As soon as I thought of “only one world” as a concept, I knew I wanted to build something Civilisation-inspired. The Civ games (and, by association, SMAC) are games which I always remember as awesomely fun, but they’re games which I’m glad I played as a kid – thinking back, a lot of my understanding of the world, history, science and politics was built upon a foundation that the original Civ built. The idea of “only one world” seemed like it needed this kind of  treatment.

As I worked through what would and wouldn’t be feasible, the business aspect got melded in, and the conflict changed from “kill everyone with the planet intact” to “keep everyone alive, and the planet really hates you”. I knew I wanted to keep the map small to make it feel like you had very limited resources, and things could go awry quickly.

I am particularly proud of how the pollution and inundation spreads over the map. That’s something I was expecting to be painfully slow to process and buggy, but it worked out really nicely. I can see how I could easily adapt that to other needs too.

What Worked

I knew I had commitments over both Saturday and Sunday, so before the event I sat down and drafted a spreadsheet of what time I was available, sleeping, and things like that. I will definitely do that again. Having that spreadsheet not only gave me a work journal, but it also let me look and assess my priorities, make sure I wasn’t getting bogged down (too much) and that I was confident I had enough time to ship something. I also made sure that my partner knew about LD, and she was supportive of it. This meant I had my full focus to give to the project.

When I was planning the concept, I also set up a spreadsheet of features with rough estimates and priorities. I could easily see what would and wouldn’t fit in the time, and by keeping it updated with what was done, and how long I had left, I could make decisions to shift things around. Corporate takeovers, forestry, structural improvements, nuclear meltdown, tech levels and animated tiles were all original ideas which were slowly cut as I was able to give them better estimates, and other things took priority.

In the past I haven’t tended to write turn based games. I am very, very glad I used that for this game, rather than trying anything realtime. Not only was it way simpler, but it meant I could ignore a lot of performance concerns because they weren’t running every single cycle. Plus, I think structuring a turn based game has given me ideas on how I can better interleave processing in the game loop for the future too.

For the first time in a long time, I just wrote code and tried to ignore the structure too much. Being a professional developer (for web and mobile apps, not games) there is obviously a big benefit to writing well structured, easy to maintain code. In a game jam, however, time is of the essence, and there’s really no need to worry about it. Other things, like keeping everything in git, are professional habits that I would definitely not throw away.

I was surprised how much more fun working on the game was when I had enough of the graphics to feel like it was fun to work with, but not spending time on all of them until I was done. Plenty of structures, icons, etc. didn’t make the final cut, so it would have been a waste to work on them too early. However, some of the core sprites really made working on the game fun in itself, and this stopped me from getting frustrated as easily. Plus, it led me into a graphical style that I could use for all the other effects.

Pyxel Edit + Texture Packer was a freaking amazing combo. I’ll be using them more in the future.

When it came to balancing the structures, I used a spreadsheet and solved for the costs using Decision Modelling techniques I read about. This worked really, really well and meant I could see how the structures performed, tweak their values and re-solve to get the new build costs. It also meant I could use the build costs to decide how to change the structure properties to be more balanced. They weren’t balanced when I finally shipped, but I think the technique is really valuable, and faster than guesswork.

Having Saturday and Sunday night away from the computer were really, really good for the jam. By having the evenings off it meant I was refreshed when I picked it back up the next day. I spent all day Monday (7am-midnight) and the last few hours of that I was not really feeling it. Plus, this morning I really wasn’t that excited about pushing hard to put new features in – I was getting a bit burned out.

JRuby + Slick2d. I’ve been playing with lots of other things like Unity, Gamemaker, JMonkeyEngine and the like lately, but I’m glad I suck with this setup. Although making the Win32 and OSX packages was a bit scary (other recent attempts at doing that have been OK, but buggy), I was comfortable with it, and knew my way around it. Obviously it’s not as performant as other things, but I was able to Ship It!

 What Didn’t Work

My first implementation of the commodities market was crazy complex, didn’t work, and I had to throw away about 2 hours of work. I should have gone for the simplest thing. In fact, I think the market implementation I have in the release is still too complex – I should have scrapped anything with prices changing and just made it a simple 1:1 return on investment ratio. It would be simpler for players, and far simpler for the AI to work out. Currently, the shifting price means players are often confused about why they’re suddenly losing money, and the AI makes ridiculous decisions about what to build.

My AI implementation is also too complex, and isn’t anywhere near as well along as I had hoped after 3 hours. The AI can’t do anything interesting, and just feels stupid because it’s trying to be too clever, but uses bogus data. I know AI is hard, but I think my mistake was starting too complex, rather than starting simple and adding smarts from there.

Rather than cramming some basic sounds in at the last minute, I think I should have left them out entirely, or only put them in really, really sparsely. After release I was watching my partner play it on the other side of the room, and even I was getting annoyed by the high pitched noise when you get a notification. I think I need to make sure that I plan better so anything that is new has enough play testing time before release. That said, I’m glad I did include at least some sounds, because that’s something that I’m really not comfortable with yet.

Thinking I could work late and get up at 6am. Whilst LD has been great to get my sleeping patterns back on track, cutting this much code as well as personal commitments was pretty draining. Next time I think I need my plan to be more pessimistic about that kind of thing.

I’m not sure I ate much. At all on Monday. This is probably not particularly healthy.

Minor Mistakes

  • Crap, I left the FPS counter on.
  • Crap, I didn’t explain any of the icons, including the global warming meter.
  • Crap, nothing explains what’s happening when land starts to get inundated with water and goes underground.
  • Crap, It’s really not obvious how to tell when things will make money.
  • Crap, I really didn’t explain much of anything very well.
  • I knew I didn’t have time to complete a better menu or load, save and reset, but at least some kind of loading screen or the like would have been nice.

Progress Report

Posted by (twitter: @j_stirk)
Sunday, December 15th, 2013 1:02 pm

I’m really happy with how I am progressing on the jam. I took the theme as “You’ve only got one planet”, and I am making a Civilisation-inspired business sim game with elements of environmental catastrophe. The idea is that you are not just competing to make profit, but the more pollution, etc. makes the land get inundated more quickly, damages your ability to feed everyone, etc.

So far I have the main simulation working and I am happy with it. I’m particularly happy with how the graphics are turning out, because that’s definitely not my strong suit. (Pyxel Edit is awesome)

Today is going to be improving some of the mechanics, and getting competitor AI in place, plus making some sounds and *maybe* some music if I really have enough time.

YOGO 2013-12-16 06-48-47

Jam. Jam. Jam.

Posted by (twitter: @j_stirk)
Thursday, December 12th, 2013 3:16 pm

I’m in for my second LD.

I failed completely last time due to life. I’m not sure this weekend will be much better, but I’m going to give it a stab.

Language: JRuby
Libraries: Slick2D
IDE: MacVim all the way
GFX: Pyxel, Acorn
Sounds: bfxr, Audacity

I’ll be pushing everything up to https://github.com/jstirk/ludum-dare-28 throughout the event.

End of Saturday night in Australia

Posted by (twitter: @j_stirk)
Saturday, August 24th, 2013 6:55 am

So I’ve been working on my jam for about 9hrs now, give or take a bit of time for dinner and the like. Timezones worked well here in Australia (everything started at 11am), but I didn’t get to start cutting code until 3pm.

I’ve got the main bits in place to drive events in the game, just with placeholder graphics and plenty of notes jotted down. Last thing I’ve done tonight is to start culling ideas so I can actually get something shippable done in time. I’m not really confident it’s going to be a very fun game, but I’ve been having fun putting it together. My original plan was more of a story/sandbox style project, but I think that was a bit ambitious, and I’m going to have to change to more of a puzzle game. Maybe.

WIP code is up at https://github.com/jstirk/ludum-dare-27 , although it’s probably in a pretty shabby state to fire up yourself unless you have mad Ruby-fu 😉


I’m Jammin’. Kinda.

Posted by (twitter: @j_stirk)
Friday, August 23rd, 2013 1:34 pm

Hi all. This is my first LD. I’m working around life this weekend, so I’ll be jamming it up. Well, at least as much as I can :)

I’ve been coding for 20 years now, the last 10 years professionally, and I’ve always tinkered with writing games. I’ve never completed a game so that someone else could play it though! I hope to change that this weekend!

Language: JRuby with Slick2D and LWJGL
IDE: MacVim all the way
GFX: Acorn

I’ll post a public GitHub repo once I get rolling, and I’ll likely be timelapsing my progress.

[cache: storing page]