Monday, 23 July 2012

Stuck? Youtube has you covered!

I think we can all agree now that Apple Jack 2 is the best game ever made. A Gameranking of 83.33% is proof enough of that.

However, it HAS received criticism from some quarters for its high degree of difficulty, and while I'd never dream of making it any easier (man up, pussies), a chap called hwogrillo on youtube has helpfully decided to play through the whole game level by level, which may help you out a bit if you're stuck.

Here's his video showing him completing level 30 : Stacking, and one of the more problematic puzzles in the game:


Very useful!

If you need help on another level or just want to watch the ending credits (he uploaded them too) his channel can be found here: http://www.youtube.com/user/hwogrillo?feature=watch

I assume it's a him.

Monday, 9 July 2012

Review Roundup Vol.2

Apple Jack 2 has had several more reviews since that post a couple of weeks ago, and here they are:


First up, the pleasingly named CHUD.COM do an indie round up every week and their reviewer Robert Ottone was very fond of the game, calling it 'an absolute masterpiece' and placing it alongside Botanicula as one of his favourite indie games of the year. Read it here.

Wesley Copeland at VideoGamesInteractive starts his review with ' Apple Jack 2 is: Zany, funny, beautiful, weird, pulse-racing and most importantly fun!, and continues to rave about the game throughout the rest of the review. And I didn't have to pay him a penny! Read it here

Long term Apple Jack supporters Armless Octopus weren't quite do effusive in their praise, raising concerns about the game's difficulty and hit detection. That said, they still call AJ2 one of the best games in it's genre and award it four stars, which will do me just fine. Read it here.

TheXBLIG had similar concerns about the game's difficulty, although their reviewer Tim Hurley felt that the rewind feature helped in softening it slightly. He then goes on to call the soundtrack 'Coldplay-esque', which I'm not so sure about. Does it sound like Coldplay? I don't immediately want to punch someone when I'm listening to it, so on balance probably not. Read it here.

Lastly, Keza MacDonald gave the game a full, front page review at IGN, calling it 'One of the loveliest things on the Xbox' and awarding it 8/10. Apparently my personality shines through 'in every piece of artwork or puzzle setpiece' so it's almost as if she awarded ME 8/10. I'll take that, frankly! Read it here.


EDIT: Since I posted these reviews, both Eurogamer and Edge have reviewed the game:

Eurogamer loved it, giving it 9/10 and comparing the variety and invention of the levels to Bangai-O, which pleased me greatly (I love Bangai-O). Read it here.

I hope the Edge review ends up in the magazine like the first one, but I can hardly turn my nose up at an online review that calls it 'every bit as inventive and challenging as the original'. 8/10! Read it here


Good eh! A ton of positive reviews overall, including three from major gaming sites. Special thanks to intro artist and professional copywriter Neil W for preparing the press releases.


Saturday, 30 June 2012

Patch notes

Hello!

Are you enjoying / have you enjoyed Apple Jack 2? It seems to have gone down well, all in all, but one or two issues have cropped up for people playing the game. To that end I've released a patch which makes it more stable and fair to play:

- Fixed crash bug that sometimes occurred when sliding down a hole.
- Adjusted level 2 to work better for people with manky controllers.
- Also adjusted levels 8, 24, 50 & 51 for various reasons..
- Made the saw blade hit-circle more forgiving.
- Stopped the slight stuttering just before a new song plays.
- Added coin, combo and death stats to the pause menu.
- Made spikes speed up during rewind (purely cosmetic).
- Fixed bug that zoomed in to intro art on second viewing.

Nothing earth shattering, but the crash bug especially was annoying. You'll be prompted to download the patch when you next play the game and all your old save data will still work fine. Enjoy!

Wednesday, 20 June 2012

Apple Jack 2 soundtrack available now!

As excellent and life-affirming as Apple Jack 2 is, you can't play it all the time.

Sometimes you need to go to the toilet.

Sometimes you need to go to work.

Sometimes you have to heave your body upstairs to have laboured, joyless sex with your boyfriend / girlfriend / wife / husband.

None of these things will ever be as good as playing Apple Jack 2, clearly. But with the new Apple Jack 2 soundtrack album, courtesy of This Eden, you can enjoy the acclaimed music of the game at any time, day or night!

What's more, you only have to pay what you think it's worth! Get it here:


http://thiseden.bandcamp.com/album/apple-jack-2-ost


They also have a self-titled proper album available, so buy that too while you're at it.

Monday, 18 June 2012

Apple Jack 2 responses

Hello!

I've had lots of positive (and one negative) reaction to the game so far, so I thought I'd use this post drop a few links on yo' asses.

First, Indiegames.com found the intro very funny and used words such as 'interesting' and 'creative' to describe the game itself. It should probably be pointed out that they only played the demo though, the cheap sods. Read it here

Adam Pettifer writes for a group of websites under the Your Local Guardian banner, and liked it a great deal, saying "I don’t remember enjoying any 2D platformer quite this much, not Sonic 1 or 2, not Super Mario World on the SNES, nothing.". Slightly over the top possibly, but it's great to read something like that! Read it here

Indie Gamer Chick wasn't a fan of Apple Jack 1, so I wasn't expecting a great deal of gushing praise from her this time around. And so it proved to be. She preferred it to the first game, but ultimately she doesn't much like difficult platform games, and didn't think the adddition of a rewind mechanic helped enough to ease the pain. Read it here

Critical Hit start their review with a disclaimer stating that one of their staff, Kate Willaert, did the cover art for the game (which is true - see a few posts back). This doesn't take the gloss off of a very positive review though, which praises the graphics, the music and the level design, and awards a score of 20/20 Read it here

Will Porter at Hookshotinc said that the game 'stapled a smile onto the front-side of my fizzog', which is as good a place as any for it, I suppose. 'Highly, highly recommended', he goes on to say, and uses the term 'pluck-n-chuck' to describe the gameplay, which is too good not to steal and claim as my own. Read it here

I think there was another one but I can't find it at the moment.

There should be some more reviews coming soon if my inbox is to be believed, but in the meantime you could always take a look at the official Apple Jack 2 threads at Neogaf and Rllmuk. They were both started by the excellent Matt, who goes by the name of toythatkills.

I'll be getting a patch ready for the game soon, and many of the bugs and issues mentioned in the above threads will be addressed. A couple of crash bugs in particular are high on my list.


Finally, Gamers Dissent did this playthrough of the first few levels, complete with commentary, which I enjoyed greatly:






Thursday, 14 June 2012

Apple Jack 2 is out!

Get it here: http://marketplace.xbox.com/en-GB/Product/Apple-Jack-2/66acd000-77fe-1000-9115-d80258550b4d

..And once you've given it a go, don't forget to give it an honest rating on the dashboard!

Saturday, 9 June 2012

Test-driving Builders with Mockito and Hamcrest


A lot of people asked me in the past if I test getters and setters (properties, attributes, etc). They also asked me if I test my builders. The answer, in my case is it depends.

When working with legacy code, I wouldn’t bother to test data structures, that means, objects with just getters and setters, maps, lists, etc. One of the reasons is that I never mock them. I use them as they are when testing the classes that uses them.
For builders, when they are used just by test classes, I also don’t unit test them since they are used as “helpers” in many other tests. If they have a bug, the tests will fail.
In summary, if these data structures and builders already exist, I wouldn’t bother retrofitting test for them.

But now let’s talk about doing TDD and assume you need a new object with getters and setters. In this case, yes, I would write tests for the getters and setters since I need to justify their existence writing my tests first.

In order to have a rich domain model, I normally tend to have business logic associated with the data and have a richer domain model. Let’s see the following example.

In the real life, I would be writing on test at a time, making them pass and refactor. For this post, I’ll just give you the full classes for clarity’s sake. First let’s write the tests:


Now the implementation:


This case is interesting since the Trade object has one property called inboundMessage with respective getters and setters and also uses a collaborator (reportabilityDecision, injected via setter) in its isReportable business method.

A common approach that I’ve seen many times to “test” the setReportabilityDecision method is to introduce a getReportabilityDecision method returning the reportabilityDecision (collaborator) object.

This is definitely the wrong approach. Our objective should be to test how the collaborator is used, that means, if it is invoked with the right parameters and if whatever it returns (if it returns anything) is used. Introducing a getter in this case does not make sense since it does not guarantee that the object, after had the collaborator injected via setter, is interacting with the collaborator as we intended.

As an aside, when we write tests that are about how collaborators are going to be used, defining their interface, is when we are using TDD as a design tool and not just simply as a testing tool. I’ll cover that in a future blog post.

OK, now imagine that this trade object can be created in different ways, that means, with different reportability decisions. We also would like to make our code more readable and we decide to write a builder for the Trade object. Let’s also assume, in this case, that we want the builder to be used in the production and test code as well. 
In this case, we want to test drive our builder. 

Here is an example that I normally find when developers are test-driving a builder implementation.


Now let’s have a look at these tests.  
The good news is, the tests were written in the way developers want to read them. That also means that they were “designing” the TradeBuilder public interface (public methods). 
The bad news is how they are testing it.


If you look closer, the tests for the builder are almost identical to the tests in the TradeTest class. 

You may say that it is OK since the builder is creating the object and the tests should be similar. The only different is that in the TradeTest we instantiate the object by hand and in the TradeBuilderTest we use the builder to instantiate it, but the assertions should be the same, right? 

For me, firstly we have duplication. Secondly, the TradeBuilderTest doesn’t show it’s real intent. 

After many refactorings and exploring different ideas, while pair-programming with one of the guys in my team we came up with this approach:

So now, the TradeBuilderTest express what is expected from the TradeBuilder, that means, the side effect when the build method is called. We want it to create a Trade and set its attributes. There are no duplications with the TradeTest. It is left to the TradeTest to guarantee the correct behavior of the Trade object.

For completion’s sake, here is the final TradeBuider class:



The combination of Mockito and Hamcrest is extremely powerful, allowing us to write better and more readable tests.