The following blog post, unless otherwise noted, was written by a member of Gamasutras community.

The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.

Our first Vita development experience - Indoor Sports World - has been an interesting one. Personally it has financially ruined me; so many months of development all funded by not taking any wages. Developing a Vita engine, along with a fairly large game (it may seem simple but there is a lot of stuff in Sports World).

During the course of development my relationship with SCEE has been badly damaged, the stress and worry off the scale.

It has also been a really good learning experience, and it has forever changed my approach to development. No more developing and maintaining our own engine, trying to support new platforms and features. From now on it is third party all the way, using development systems such as Unity.

What Went Right

Focusing on solid graphics performance in our engine

We spent a lot of development time working on our game engine; adding effects and graphical touches and making sure they ran at a decent framerate. We looked very closely at the graphics effects in the Vita game ‘Hustle Kings’, as this seemed to be the game we would most likely be compared to. We wanted our game to look as nice if at all possible, and I think we managed to get close.

We added real-time reflections for the balls, so you can see the scene properly reflected on each ball. We also added a normal map to the ball surface to show slight damage/chips to the enamel of the balls. It is a slightly different approach to how the balls were rendered in Hustle Kings, but I was pleased as I didn’t want to directly copy their approach, and I feel this gave Sports its own identity.

Next up were the other environment touches, such as nice reflective floors, water reflections, decent specular mapping and real-time shadows. I was the sole artist on the project, and as such I wanted to make each and every environment look as realistic as possible. My other aim was to have lots of variety within the environments, so they all looked very different to each other while still maintaining a level of believability – so you could expect to find such places in the real world.

I used normal mapping combined with real-time reflections to try and make the various surfaces look realistic and interesting. One incredibly useful tool I used for the job was ShaderMap, initially version 1, and later version 2. I tried Crazy Bump too, but preferred the extra control and lower price of ShaderMap. I used quite a few textures from CGTextures, and as none of them come with normal maps I had to create a lot of these from the textures, which is where ShaderMap came in. The key was to increase the detail on the generated normal maps; smoothed normal maps look horrible – like plastic wrap on everything. I also made sure the maps weren’t too intense, otherwise you get some nasty sharp edges in there where the light changes are too extreme.

The other real-time effects we experimented with were real-time SSAO (Screen Space Ambient Occlusion) – which is a rendering technique for adding subtle shadowing to all the nooks and crannies in the meshes, and Bloom. Bloom is the effect of light bleeding out from very bright areas, giving a subtle glow to the scene if used right, or a sticky coating of grease if overdone. Unfortunately we couldn’t get these two effects running fast enough, and decided that as they were only minor details, to drop both in favour of a solid framerate.

The final element for each environment was light baking; to render each environment with realistic lighting and shadows with minimal performance overhead. Our implementation works by a sort of reverse ray trace. It takes each pixel, works out what lights are visible from it; taking into account type of light, distance and light colour etc. and works out a lighting value for the pixel. Many of the scenes included dozens of lights added to provide a nice range of lighting and shadow variation.

So all in all a lot of time and effort went into making the graphics look as good as possible, to make each environment as immersive and believable as possible.

Adding plenty of detail in the 3d artwork

There’s not much point spending time developing graphics effects if you don’t have plenty of scene detail to utilize those effects. As such I really tried to add as many details and touches to each environment as possible. I used quite a few pre-built assets from sites such as Turbosquid and Dexsoft, for elements like furniture and fixtures and fittings. I found some amazingly good stuff on there – I think my favourite assets were the leather sofas from the Brewery Pub venue. I love those sofas!

The base scenes are about 20 – 30,000 polys (a mixture of quads and tris), the balls are several hundred each, the tables and dart boards another few thousand. Texture resolution was mostly 512×512, with the odd 1024×1024 texture in there on larger areas. Smaller detail bits were OK with 256×256 or even lower res textures.

I was surprised how much geometry detail and how many textures the Vita could handle. To be honest I expected to have to cut detail down a fair bit, but in the end I didn’t really have to compromise at all.

Plenty of Game Modes and Rule Sets

We tried to add a nice variety of different game modes, and rule sets for each of the games. While you always want more, I think we got a decent level of variety in there. I’d have liked online multiplayer, but it was just impossible given the resources we had (we are a two-man team; Steve on code and myself on art, design and audio). The offline multiplayer works well, and seemed a nice compromise.

We also tried to include plenty of unlocks and rewards, for customising the various game equipment such as play tables, cues, darts, boards, etc.

While we only included one Air Hockey mode, Steve spent a lot of time optimising to ensure that Hockey ran at 60FPS, which is essential to the smooth flow of the game.

What Went Wrong

Developing Our Own Tech

Historically, we have always developed our own tech; supporting several console platforms such as PS2, PSP and Wii. It seemed a natural progression to continue this and expand to Vita; can’t be that difficult eh! Well it was tough, coked-up Chuck Norris tough. The Vita is great and the development environment is first rate, but poor Steve just had too much on his plate. The task was huge, particularly as we had never added shaders into our engine before. All the new graphics effects were added from scratch. We ditched the old routines for things like specular and environment mapping, and rewrote them all to take advantage of what the Vita offered.

It all just took so long, Steve working silly hours adding to and adapting the engine. Even features like video playback and audio took a lot of time to get right and smoothly integrated into the engine. It was a killer – during this time we were not earning any money, it was all just one huge ever-increasing expense. Our release windows kept sailing by – we had originally planned to launch Sports (or Pub Games as it was originally named) shortly after the Vita launched, LOL!

Looking back I think we needed two or three engine coders to handle a task like this, but then without income, that is just not possible. Also the Vita just isn’t as powerful as say a PS3 or Xbox, so it required a fair few months of code optimisations to get decent performance out of the various shaders and effects. When we first added the various new effects the game ran at about 5 frames per second!

The Game was Too Big

It seems silly to say it, given the impression most people have is that the game is very simple. However, it is true, this is one big game! There were so many modes to keep track of, and the Arcade and Season modes take hours to fully test.

This is the odd thing with sports games; they seem simple but in fact are really difficult to properly test and balance due to the time it takes to play through modes like Season & Career. Add to that developer familiarity and you have a situation where you really need some fresh eyes and external QA support. We didn’t have the budget for this unfortunately, and it let us down.

Not Enough Testing Time

I hang my head in shame and admit Sports needed more testing. The difficulty isn’t properly balanced; it gets too hard, too quickly. As touched upon above, Steve and I were both so used to the way Sports plays that we were able to beat opponents that in hindsight are stupidly hard. The game is about amateur indoor sports, not professional sporting prowess.

It really needed an extra period of testing, testing and more testing. The other issue we had was that by the end of the project we were beaten; financially and morally. No money to live on and a sense that this game would never be finished if we didn’t get the bloody thing out quickly. I’ve had some tough development experiences in the past, but I think this was in many ways the most damaging. It just felt like it would never end, and when all your money goes, you get evicted from your house and have to sell your personal stuff just to buy food, you know you are doing something badly wrong!

TRCs and Sony QA Submission

Sony TRCs (Technical Requirements Checklist) are in short, a complete and utter nightmare. Again I really feel for Steve, I think his head actually melted at one point due to the extreme levels of pedantry associated with implementing the TRCs. There are just so many eventualities and scenarios you have to factor in to properly implement the TRCs. Also we tackled many of these at the end of the project, when we were both heartily fed-up with the whole thing.

Sony QA was an exercise in frustration too. When you desperately need to start earning money from the game, hitting QA is akin to running into a brick wall. The testing process is slow, and each resubmission adds a few weeks to the time it takes to get the game out. In total it was about two months or so of back and forth with QA before we were approved. One particularly frustrating round was the one where they only found one single issue, a MF (Must Fix) bug, which they found on day-1 of testing. 10 days later they conclude the testing with no more bugs found. Yay we thought, quick fix and we’re sorted. We resubmitted with the fix, and then on day-1 of the resubmission QA found one new MF issue, then no more.

Steve and I were convinced by this point that Sony hated us, and they were never going to let Sports get through!

What We Have Learned

First and foremost; never to attempt to develop our own tech again. I think that you need to be a fair bit larger than our two man team to effectively develop and maintain your own cross-platform tools & technology. You also need plenty of financial support in place to keep things ticking over during the R&D phase.

To ALWAYS give more time to testing; we made mistakes here and it has cost us in review scores and user goodwill. We are currently working on a patch to rectify these issues, primarily:

Tweak the AI, as Darts and Air Hockey are exceptionally hard to beat on later levels

Fix Darts issues; sometime it is too easy and sometimes seemingly random

The player’s finger obscuring the darts and pucks at times on the front screen

Add aiming aid for pool & snooker back into Arcade Mode

We always try to fix mistakes/hiccups if we can; user feedback is really important to us and one of the best bits of development.

Not to do a sports title again. In my career to date I have developed eight Pool/Snooker games, a PSP Darts game, two Bowling games and two games with Air Hockey included. They are always very testing heavy, and not the sort of games to ever really get good press coverage or build up a community. From this point onward I shall be focusing on original, unique games such as Life of Pixel, games that I can really get my teeth into and implement something special. With the exception of my first Unity test game, this is the direction Super Icon will go from now on.

And lastly that we need to earn more money; we can’t carry on making so little revenue – it is too damaging for our families and our own mental health & morale.