Testing 1 .. 2 .. 3

This is a test, like most things in life. Move along.

Nothing to see here.

Pixel Art is Hard

Damn, pixel art is hard. I wanted to give it another go - my past attempts have not been good enough for me to even post. So an evening has gone by, following a few tutorials and trying to design a character I want for a future game Pobo - Galactic Explorer. After hours and hours of pushing pixels onto the screen I get this:

Static and walking. It's um, good for me and probably good enough. Does make me realize quite how much time and effort artists put into these things. Kudos guys.

Hour Oriented Game Development

So, I had a few drinks yesterday evening, a rarity for me. Mostly to celebrate my wife getting offered a new job - woo woo. I'd been ranting at work about how mindless clicking games are so successful when other better games (putty of course ;)) go unappreciated. I had an inkling of an idea about bubbles and lines between them (I realised later this was probably derived from talking to Cas about what he was doing). Anyway, back to the drink, few glasses of wine later I'm spouting my normal nonsense on IRC and I start coding this idea up without really thinking about it. At the start I decided every hour I'd check progress, if it wasn't working out or it stopped being fun I'd just go back to my isometric project (see below).

Well, this hourly thing works for me. It was really fun pushing to see how much could be stuffed in within an hour. I guess this is how the Ludum Dare competitors feel. This is how it went:

Hour 1 - Making it work

Development started at about 11pm. I knew the game idea revolved around bubbles appearing on the screen. I'd talked to Cas about it earlier (see above) and one of things he'd mentioned in the past was how to get the bubbles to push each other aside. First, lets spawn some bubbles. Create a basic slick state based game, default state and a class representing the bubble. The bubbles can draw them selfs and can be updated, for a change I allowed the bubbles to return an indication whether they'd changed size or not. This made the game loop very easy - loop through all the bubbles updating them, if none of them changed size spawn another.

The next step was a bit more complicated. When a bubble grows it needs to push the others out of the way. I took my normal discrete collision based approach. Limit the bubble to a 1 pixel growth. After the growth check for collision. If anything collides with the bubble that has grown move it away from the grower and add it to the list of pushed bubbles. While there are still pushed bubbles pick the first one and repeat. This was the first brute force approach that came to mind and it seems to work fine.

So, the first hour was spent fiddling with setup and boilerplate classes, getting some rendering and basic logic in. Assessment after the first hour was that watching the growing and pushing red circles was enticing, especially in my now growingly inebriated state.

Hour 2 - Making it Pretty

Next I thought I'd make it look pretty. Thanks to the wonderful www.fasticon.com I had some nice looking fruits very quickly (though originally they were going to be gems). I lost 15 minutes or so hunting round for a bubble until asking on the #lwjgl channel and being told just to paint a gradient across a circle. Strangely it kinda worked, I like what's there now at least, maybe it's not quite bubble like but it works pretty well.

Having replaced the circle drawing with images I noted a huge speed increase (circle drawing was taking up a lot of polys). So, I sat for a few minutes watching the spawn of fruity bubbles. Oh, thats good I thought. Hmm, whats going on with that FPS - it's getting lower and lower? What had I done!?

Well it turns out I wasn't getting rid of the bubbles after they'd left the screen. So the pushing code was slowly pushing more and more bubbles. As a result I added some little bits of code to determine if a bubble was on the screen and whether the mouse was over it. I stuck on a background (which you can see in the next screenshot) and started thinking about showing other people.

Slick has some useful build scripts, so I grabbed one of them, updated it for the project - ran it and had a webstart ready to try. Webstart for anyone who doesn't know lets us Java type show each applications and games with minimal effort (including keeping it updated). Posted the link to it onto IRC and waited for a response. General approval - woo hoo - "why can't I click the bubbles to pop them?". Well thats not the game, you have to draw lines - "meh".

A discussion then broke out about what the game should be like. They're a nice bunch of people, with good ideas. The game idea I had was reshaped into something a lot easier to play and enjoy. Mindless clicking for the win!

Hour 3 - Making it Playable

The background is a kevglass original, the font some stock thing I've hanging around pushed through Hiero for a bit of shading and shadows.
The game idea ending up being a simple matching game. The game shows you a fruit, you need to click all the fruits of that type - the more you click, the more points you get. I decided to add a timer to limit game play and score was updated based on the size of the bubble - smaller bubble = higher score.

Searched for, found and added a few sound effects for bubbles popping etc. A simple pitch changed based on the size of the bubble seemed to give it a comfortable feel. With the constant spawning of bubbles this was already quite fun. The changes didn't take long but there were bugs galore. Just stupid silly bugs. I was getting tired by this point, it was pushing on to 2am. At 2am-ish I ran the build script and pushed out another version and decided to call it a day. There was still feedback coming in but work in the morning etc.

Hour 4 - Rethinking the Game Play

Hour 4 was, as often is the case, my lunch break at work. I decided to go the local canteen to save some time so I could read the feedback, chat a bit and design a logo. I wanted to call the game something suitably generic and corny - Super Bubble Pop Fruit Drop Deluxe Edition. 20 minutes of my lunch disappeared just designing the logo you see to the right. I'm not an artist as you can tell :)

Having processed the feedback and got the logo sorted I spent 10 minutes writing down a plan of attack for this evenings coding session. The last item on the list was writing this blog post. Why? Well, because I think I'll find it interesting in a few months looking back.

The list also included the game play changes that needed to be made and the idea of porting the whole thing into Java 2D. That still might happen - there's a couple of hours left in the budget :) I'm pretty determined not to let development time go over 8 hours at the moment, looks like it should be enough.

Hour 5 (and a little more) - Making it a complete game

This evening's first hour started around 8. The game play needed to be changed. Talking on IRC had led me to the following changes:

  1. There would be no timer, thats just a lame cop out
  2. Lifes would be added, you lose of life if you click the wrong fruit
  3. A score multiplier would be applied which ticks up as you click, and ticks down as you don't
Adding these features was about 20 minutes of effort. All the code was really already there, it just needed moving about. However, it was now that I decided I need a title page, some instructions and a few more graphics (well one, for the lifes indicator) to make it feel more like a game.

The graphics were easy, just visit fasticon.com again. The title page also didn't take long, slap the logo from lunch on the page and added a in code flag for the starting page. Made the logo wobble a bit because it seemed cute. Hurts your eyes if you watch it too long though :). The instructions however zapped up loads of time.

First, I ummed and ahhed about whether to just define the instructions text as a string in code or in a separate file. Why? I don't know, I really don't. Next I wanted it displayed as a marquee, but drawing the whole string each time would have been super slow - so how to do it? Each part of the message is a separate object which only draws if it's on the screen. A quick inner class, a bit of buffered loading and a simply bit of maths for clipping the text off the screen. Annoyingly, this actually took me longer to get right than anything else so far.

Finally for this hour I spent an age searching around for sound effects for when the fruit changes in game. All I wanted was a beep beep beep timeout sound, no luck. Eventually found one hanging around in one of my local game resource directories right under my nose. Sounds pretty good in game now.

Hour 6 - Tuning and Polish

So far this 6th hour has been tuning and adding polish touches suggested by testers and myself. Tuning parameters like how long between extra lifes showing up, how long fruits are current for and how quickly the multiplier drops back is really interesting simply because of the massive effect it has on the way the game plays.

And of course, half of this hour (a little more now) has been spent writing this blog which I hope has something readable in it. There are several things people say hurt productivity:

  • Making library code that you share with others - Slick has worked out ok for me! Lots of bugs reports have made it more reliable library for me as well
  • Chatting on IRC - IRC is a wonderful source of instant feedback for me. While I know what I like in a game, it's obvious that's not mass appeal and without the IRC channel I'd have little hope of sorting out problems early on.
  • Writing blogs - I've been looking forward to writing this blog since the first bubbles started showing up. It's been one of the goals and a great motivator.
I'm not sure any of the above is really a pattern, but I think I'd say that you're as productive as you are. The things that are perceived to make you more or less probably have a very low percentage impact on your real output.

What now?

Well the game will be available to play after a couple of hours more development time (maybe not tonight). It look like it's some extended features and a bit of polish before it's done. Two more hours should give me time to add a couple of ways of getting bonus scores at least.

This blog is of course self indulgent nonsense, but it's just one of them things about being a geeky chap I suppose - you just need to tell others about the code you're pushing out. It's fun for me, it really is, but it's more fun if I get to show and talk to other people about it.

Animated GIFs

Animated GIFs are fruity, trying to find a good tool to produce them is annoying. Shame there isn't something free and good. A free trial got me to what I wanted though:

Good idea Gareth!

Retro Wonder

What is retro? What is old? I remember we used to say "the 70's" - that was old, with their flares, huge hair and wierd flowering music. More recently the 80's has become the retro scene. Retro games are mostly based on 80's titles, retro music is definitely inspired by the new romantics and a selection of the cooler films seem to be set there.

So, does that mean in a couple of years time when we enter 2010's the 90's are going to be retro? That's pretty scary to me, think about the things that become retro?

Games: Quake, Ultima Underworld, Mario 64
Bands: Oasis, Pulp, Nirvana
Films: Trainspotting, Pulp Fiction and Toy Story

It's just so freaky. Gonna have to get my a flux capacity enabled delorean and go back and fix it. Oh wait, that was the 80's.

Never mind.

'No Fun and No Code make Kev Something Something'

'Go Crazy?' - 'Don't mind if I do!!!'

Life is a bit on the lame side at the moment. At least 2 of the three members of my household have been ill for the past month an a half. Work wise I've been sat on the same low priority but critical work for the last 3 months - not really going anywhere fast. No code involved at work and no energy to code at home.

Haven't been out in a while, no pub, no trips, not much fun. Don't have time to play games even though I've had Wii Paper Mario sat on the shelf for the past month. Christmas is coming and I can't begin to get excited. This time last year we were preparing to come home which could have been the worst mistake we've made. Coming back was great from a family perspective but pretty much everything else has been a bit of a read through.

What's more the idiocy of the world at large is begining to annoy me again. Road users - why oh why - just because something is legal doesn't mean it's sensible. Just because something is temporary doesn't mean it's automatically ok. No, there arn't double yellow lines - but parking there will still block the road. Bike users - weaving in and out of traffic is legal, but if it's cold, wet and early it's still dangerous as hell. And as to the woman that parked on the roundabout so she could "just pop in" to McDonalds to get her breakfast - I mean seriously, what sort of brain dead moran are you?

Recieved a phone at work yesterday. This might not seem like a big deal worth blogging about but consider that I've been working for a telecommunications company for 3 years and this is the first time I've had a phone on my deak. It's pretty big news. Now, if it only actually worked it'd almost be a positive aspect of my day.

Meg is still coughing alot, she can't shake this bleady cold any more than anyone of us. However, she is still giggling and trying to walk and falling on her butt alot. Some how she's really into drawing now - she's just over 1, so it seems a bit bizarre - but she loves her crayons that she now takes everywhere with her in a little red handbag. There has to be a game concept in there somewhere.

Talking of which, I've decided to write 4 games in parrallel, the logic being that even if I give up one or two I should still get futher with some. So, the run down seems to be two that have been around for a while, Scorched Turf and Mootox and two new ones currently called Samson and Dumb Bots. Should I ever make it back to the computer at home I'll be pushing on with the golf game first since it's core engine is shared between all 4.

Finally, I've blogged again. Almost feels like normal if a bit random and tangenty. Anyone know of anything gamedev related in the Cardiff area let me know, I need to get motivated again!

Fortune Cookie #1

There are three types of people the world doesn't understand. Madmen, geniuses and people who mumble.

Chavvy Chick Music

Just realised I'm developing an obsession with artists with city accents. The first now I come to think of it was The Streets, OPM. A lot of the brogue works because of the accents, and the relaxed use of bad language makes the whole thing more natural to me.

But then recently I've been waxing lyrical about how great I think the Lily Allen is. It might be a fantastically scripted and prepared sentiment, but her and her music are pretty great.

And now.. Kate Nash's music is floating my boat. More of the same sort of rough and raggerty rhymes and vocals. I'm lovin' it (tm).

For Cath


~ I understand, ~

I understand that you're in pain, and that it goes on and on.
I understand it makes you sad and angry.
I understand the guilt of resting on other people,
And leaving things when you can't go on.

I worry and I wait, for a solution to present
Or there to be something for me to do,
Most of the time I just get in the way,
Or worse, increase the burden

But I understand, I really do, and it doesn't change a thing
You do your best, together we'll get through
I understand, and it's ok
I'll be there for you

More Tablet Work

Another half hour, another arty attempt. This time just a child's drawing of a tree on a hill. Still loving the tablet, oils seems to be even more fun.

XML feed