Upcoming Events
DIG London Game Conference
11/27 - 11/28 @ London, Canada

5th Australasian Conference on Interactive Entertainment
12/3 - 12/5 @ Brisbane, Australia

2K Bot Prize
12/15 - 12/18 @ Perth, Australia

IEEE Symposium on Computational Intelligence and Games
12/15 - 12/18 @ Perth, Australia

More events...


Quick Stats
5049 people currently visiting GDNet.
2238 articles in the reference section.

Help us fight cancer!
Join SETI Team GDNet!



Link to us

  search:   

IGF 08 Interviews Part 2


Goo!

Tommy Refenes - PillowFort

Who are you and how are you involved with Goo!?

My name is Tommy Refenes. I’m the owner of PillowFort, developer of Goo!. I take care of all the programming needs and have recently taken on the role of game designer. I have self funded the entire process and will continue to do so until American Express comes and takes my credit cards away.


What sparked your game development flame?

I’ve been coding since I was 11 and have been a professional software engineer since 18. I’ve always loved programming and I’ve always loved video games. I was pretty well established in Charlotte, NC when I read an article about a programmer on Twilight Princess doing a fishing mini-game for the game in his spare time (he was the same programmer that did the fishing code in Ocarina of Time). I thought to myself, “What do I do in my spare time” to which the voice in my head replied “In your spare time you wish you were a game developer”. So…a friend of mine got me in at a company he was working. I sold my house, car, and left everything behind to be a network programmer and thus it began. I have that article framed sitting on my desk.


What set you on the indie path?

I’ve always wanted to do something for myself without a boss taking advantage of my “I’ll work until I start hallucinating” attitude.


In this day and age, how would you define an independent game developer?

I think of someone, sitting in a garage / office / bedroom / library / wherever they have their computer working themselves to death. I used to have a low opinion of independent developers in general (it’s nothing against indie developers, I have a low opinion of everyone by default)…but after meeting and talking to numerous individuals from the indie community, mainly TIGSource…I really feel indies, for the most part, are the hardest working people in the game development industry. It’s one thing to work your ass off for a sure thing (paycheck, promotion, etc), but it’s a totally different thing to work your ass off just because you want to.


Every year the difficulty bar lowers on making small games. How do you view the landscape of game development when everyone can make a game?

I think it’s great anyone can sit down and make a game. Even if it’s crappy, I think the ability for anyone to make a game makes the field much more competitive and pushes developers of all skill levels to really step up and work to make their game stand out.


What’s one thing you value most about this industry as opposed to other forms of entertainment?

As a paranoid, self loathing, computer programmer…the video game industry gives me the ability stay in my house and be productive instead of rocking back and forth in the corner screaming “YOU THINK YOU’RE BETTER THAN ME” at pictures of Matt Lauer.


What made you decide to enter Goo! into the IGF?

I wanted to create and enter a game into IGF since I heard about it back in the early 2000’s. I mean…just being nominated is a huge, huge honor. I got really serious back in 2005 before I moved to take my first game development job and then had to scrap what I was working on (which was a totally different unrelated game). Now, 2 years later…here I am! That’s how it works with me, everything I want, I always get 2 years after I want it. For example, when I was living in Raleigh back in 1999 flunking out of NC State, I went to a Best Buy and saw a fancy shmancy 2.4Ghz phone…and I was like “DUDE, I want that” Then 2 years later…I got it! Yes…getting that phone was the highlight of that year if I remember correctly….


Where and when did the concept for Goo! originate?

The original concept of Goo! comes from a friend of mine, Aubrey Hesselgren. He came up with the idea of a game where you control globs of Goo a few years ago. We decided to work together and get the game out there. Aubrey worked on Goo! in the beginning, but moved on a while ago. Right now I’m in the process of redesigning his original concept to speed the gameplay and make the movement of the Goos feel more natural.


It looks like the game is targeted towards Xbox (or perhaps the Windows Live! platform?). Is there a PC version and if so how does it handle multi-core processing to aid in the liquid physics?

The game has always been targeted towards the 360. From previous experience, I really wanted to make a game that would truly utilize the all of the 360’s processing power. Though nothing is official on it yet, that has always been the platform I’ve aimed for, though I haven’t ruled out PC or PS3. If it ends up on the 360 or PS3, that version will probably have at least double the detail of the current PC version. If there were to be a PC version, the detail would have to be dulled down a bit for single core machines, but on any Core2 Duo or equivalent it runs really nice at really high frame rates. Plus, I just recently revamped the collision system so I can pack in about the same amount of detail that it currently runs at half the cost. I will be releasing a free demo for PCs in mid-January.


What kind of liquid physics model is behind the Goo and what research led to its development?

There’s really no real “model” behind the physics, like a Navier Stokes or something. Each particle acts like liquid meaning it transfers momentum to other particles to get a kind of flowing behavior going, but mainly it’s all about massive amounts of collision calculations and slight springiness to keep everything stuck together. All of the research leading up to what was submitted to IGF was really all about a really fast, really effective collision detection system that can handle tons of particles on the screen at the same time. Just a few weeks ago I finished the final version of the collision detection system…so it’s even still going on to this day. [For references] Actually, really don’t have many links… though I’ve read through this book and it was helpful for general game physics stuff. Here’s a link to some Newtonian Liquid stuff off Wikipedia… gives an idea of how liquid moves and interacts… conservation of momentum and whatnot. The rest is about multi-threading and stuff which I don’t really have links to... I kind of just went to MSDN and found out how to create a thread in Windows and sort of went from there.


How difficult was it to tweak the model so that the Goo actually performed as the gameplay required?

Actually that’s still going on! Due to recent feedback, I have decided to go a totally different direction with the controls of Goo. I want to get away from the slow, clench and grab method and go for something much more responsive that will make players really feel like they have total control over the goo. I want it to basically be dual stick control...like picture having a glob of Goo on the table in front of you. You would move it with both hands, circle your opponent, push out of the way quickly, etc. I’m hoping to have that ready for the final build due to the IGF Judges on Dec. 18th…time for another crunch definitely. Physics has always been a huge pain...like, tweaking friction would mean that when throwing Goo, it would break up quicker, which would mean I would have to put more force into the throws which would then mess up the attraction between particles, etc. It really is a huge pain in the ass.


How does the AI system combine its properties to form different types of enemy Goo?

It’s pretty much all force-based. Red Goos know how to spread out, Blue ones know how to stick together, and Green ones know how to charge into and circle around you. So, when little Goos of different colors mix, their behaviors mix according to their color ratio. So if you had 5 red goos hit one blue goo, the resulting reddish-purpley goo would know how to spread out, but would still slightly gravitate towards other goos. The new AI for the new Versus and a different type of survival mode (think Street Fighter Alpha 3 Max survival mode) is a virtual AI controller. Basically the computer grabs a virtual joystick and plays the game by pushing buttons that feed back into the game as if someone were using an actual physical controller playing the game. I’m real happy with it thus far but it needs much more tweaking.


What was the reason for bothering to implement a background run off beat detection?

Originally the game was supposed to react to the beat…like if you did an attack on a beat you would get a little extra power...but since it’s real-time beat detection, and not preprocessed or scripted...it got inconsistent at times. So...instead of ripping it out, and since it really didn’t impact performance on the main CPU with the collision running on other threads...it might as well not go to waste! At this point it’s more about flexing some nerd muscle and saying “Yea, it does all that collision detection, crazy normal mapping, liquidy physics, while doing real time beat visualization at high resolutions at 60FPS”…it’s more of a nerd vanity thing now! Plus…it just looks really cool. That isn’t the final background either, there’s so much more I can and will do with it, but it’s an extra visual thing that is on the end of my list of things to implement.


Over the course of development, what was Goo!’s most serious issue and how was it resolved?

Interactive liquid comes at a pretty hefty price, both on the CPU and GPU. I am a real jerk when it comes to efficient code. Basically, if it isn’t running at a minimum of 60FPS at 1920 x 1080 I am not a happy camper. On the CPU side, the biggest problem was having interactive liquid while maintaining a high frame rate. I accomplished this by multithreading the hell out of the collision system. This freed up the main thread to do stuff like beat detection, game logic, and physics without having to worry about collision detection calculations on thousands of objects. On the GPU side, a huge hurdle was actually getting the liquid to look like liquid...meaning light refraction, reflection, etc. When doing a height map in photoshop this is pretty easy, just throw some Gaussian on it, and run it through a normal map generator and boom you have something that’ll look like liquid when passed through the proper shader. For dynamic height maps, it isn’t that easy. Graphics cards can only blend certain types of textures, and that usually means lower precision when combining several height maps which leads to quicker capping causing them to plateau and look incorrect as well as having inconsistencies with precision that makes everything look very grainy. The solution to this is a technique I call Orange Mapping. Orange Mapping prevents dynamic height maps from capping at 1.0f and allows for higher precision in dynamic normal map generation with barely any performance hit.


What’s one thing you did wrong that you feel could have been avoided?

The Noid, he ruins pizzas…and the menu. The menu took up too much of the development time and is being scrapped anyway. It was a cool idea, but it’s a crappy interface. You shouldn’t have to have a tutorial for a menu.


What’s something you do as a team that helps you to remain focused and productive?

I listen to a TON of 80’s music…mainly stuff from Rocky movies and a few tracks from the 80’s Transformers movie. There’s nothing like coming downstairs and firing up “Hearts on Fire” to really get you pumped to meet a deadline or to do a montage.


How long was Goo! in development? How much development time remains?

Goo! has been in development since May 2006 and will continue into 2008. I am hoping to get it out to the public before the end of 2008. There will be a playable demo ready for the Audience Award and at GDC in the IGF Pavilion.


What was used to make the game and what tools aided in development?

Visual Studio for development, Render Monkey for shader prototyping, Milkshape 3D for model exporting and VTune / Thread Profiler for performance tweaking.


Is there anything about Goo! that you would like to reveal to other developers?

I black out all the time and when I come to code is completed, compiled and documented…but I guess this happens to all developers… right??


What’s next for you?

Going to finish up Goo!, marry Scarlett Johansson, and then start on the next game!






Fret Nice


Contents
  Introduction
  Snapshot Adventures: Secret of Bird Island
  Tri-Achnid
  Goo!
  Fret Nice
  Cinnamon Beats

  Printable version
  Discuss this article