Feng Shooey postmortem
What went right?
Animation works! I integrated an animation system which uses image references based on an animation state.
Mostly consistent style! I used less colours and also added a slight orange tint to the final scene. I used a lot of real pictures such as the background. I also made the levels (replaced pngs doodled in a tray of salt). The wall graphic works really well as a texture (minus the tiling), though the garden itself was a bit of a hassle, and I spent a few hours finding an appropriate texture for that before resorting to basics (the salt has a slight grey tint). Building a concept image really helped this.
Basic gameplay: The shooing mechanism wasn’t what I first intended, the original idea was that the cat and dog were messing up the level and you were sorting it out (cough, Fix it felix, cough).
Ideas: I generated a few then picked what I considered to be a rare idea. My first ideas were all like mondrial crazy painter, so I wanted to get away from that. It was good coming back to my ideas later to appraise them critically, rather than being swept up near the start.
What went wrong?
Timing: I had a few ideas for themes at about 5am, but I started at about 3pm on Saturday, 12 hours after the start. I then lost some supplies so didn’t really do much on Saturday apart from draw some resources and build the concept image.
Art: My import process was sloppy as I was taking photographs of faint coloured pencil drawings. I should have been using my scanner from the start. Also, I decided to learn animation on the fly, and didn’t have a workflow to help me do that. It would have been handy to have my multiple layers within a single frame object in Gimp, rather than having layers everywhere.
Swing: I had an issue with my double buffering. Turns out I was using 2 backbuffers so when i flipped from the backbuffer for the first frame, that was blank and nothing showed. Similarly, I had problems with only certain objects using double buffering too, which all meant it took me a while to get anything of note on the screen. Even with referencing my working projects.
Perfectionism: Although I could have probably submitted for the 48 hours on Sunday, I was sleepy after a late lunch and it just wasn’t polished enough to submit.. I’ve done 72 successfully.. The 48 hours is the next goal to break!
Things of note:
I put poop into the game at 5 hours to because my sister mentioned it. The code is awesome:
if (“TURDING”.equals(animationSequence)){
Long currentPoopStart = GameState.getAsLong(key, GameState.POOPOFFSET);
long poopDuration = startTime-currentPoopStart.longValue();
// System.out.println(poopDuration);
MyBoolean pooped = GameState.getAsMyBoolean(key, GameState.POOPED);
if (poopDuration > 2000 && pooped == null){
// thats a long enough poop.
int turd = GameState.add(“turd”, new MyXY(location.x, location.y+3));
GameState.addField(key, GameState.POOPED, new MyBoolean(true));
}
if (poopDuration > 3200){
// figure out where to go
int returnX = -150;
if (!rand.nextBoolean()){
returnX = 1150;
}
// run along now
MyXY targetDestination = new MyXY(returnX, location.y);
GameState.addField(key, GameState.TARGET, targetDestination);
}
else {
// keep doing what you’re doing, kitty!
continue;
}
}
I also made this really weird data structure to save any parameter to any integer key. It isn’t normal, but it meant that instead of adding a hundred parameters to every object, I could add new parameters whenever I needed and not have really unwieldy objects with a hundred unused getters and setters. I’m not sure if it is a side effect, but I didn’t notice any garbage collection or slowdown either. It’s quite bizarre, as I was really lazy and left my objects in the hash rather than removing anything.
public static HashMap<Integer, HashMap<Integer, Object>> objects = new HashMap<Integer, HashMap<Integer,Object>>();
public static int add(String type, MyXY location){
int newKey = objectsPresent++;
objects.put(newKey, new HashMap<Integer, Object>());
addField(newKey, TYPE, type);
addField(newKey, LOCATION, location);
return newKey;
}
To finish, I think this was a very successful Jam, and while the game looks and acts like a real game.. It doesn’t really have the fun factor (and its a matter of time until catmoggeddon). I would typically start from a basic programming concept, make it work, make it interesting, and then try to fit some art into that and make it challenging afterwards. Though if I had done that, I would have likely built a completely different game and focused on the cleaning up mechanic rather than chasing cats.