Monday, February 20, 2012

Salvage Youth - Inches from Alpha

With Alpha due Wednesday night, the majority of the team spent all three days of our holiday weekend working together to get the as much done as possible. It was great having everyone together, solving problems, working on features and polishing assets and layout. We didn't get every single thing done we'd like, but we still have a couple of days before Alpha itself is due.

We had a number of specific goals we wanted to really target as we got started.

  • Focus on polishing the first puzzle area after the tutorial
  • Get the character controllers working and feeling good to move around, jump and explore
  • Get the GUI system in and functional, including animated textures for status animations and our dialog popups to guide the player
  • Build and implement a system to control the camera for cinematic animations between puzzles to help guide the player
  • Fill the world with interesting scenes using the dozens of props we have implemented in the engine
  • Polish textures, lighting, tiling and level layout
  • Build any new assets needed to get the first section of level 1 working really well
Given this list, we got to work. We had a number of specific goals to address, and managed to get a ton of them done. By Friday of this week, we had a huge number of new assets, scripts and plans ready to go for our marathon work session.

One of the first things we did this week was address the lighting - we had only sort of blocked it in prior, and it needed work. We wanted to lighten up the assets and really focus on getting the feeling of warm sunlight and cool shadows. To do this, we tweaked the ambient light system to give us a cool baseline blue to work from, then used the directional light in Unity to get a nice warm yellow light, with a purple directional facing the opposite way to provide an additional fill. In the pictures below, the image on the left is our original settings, the image on the right is our new light system.



The clarity and enhancement it provides is remarkable. It makes a huge difference in how the game levels feel. We're going to try for an opposite approach for our tutorial section, which takes place in a sort of "bat cave" inside a mountain of trash bags, so the light will be a cooler night-time blue with a few god-ray shafts of sunlight peaking through holes in the mountain. It should provide a nice contrast and a great feeling of exploration to go from the first short sequence to a drastically different "main" world.

We also started looking for ways to really break up our environment more, and Beau created this paintover on how we can add streets receeding into the distance to create more of a feeling of distance and place. Before our level was a single long strip, and as you went up you could tell all the roads were just long parallel lines. This helps break that up and make the exploration feel like you're crossing from block to block.


He also created some new concepts for some plants and shrubs to help add more variety to the grasses that are overgrowing our neglected world of trash.


Alexi, naturally, whipped these into full 3d models in no time.

Alexi has been on an absolute roll this week. He re-styled the textures for the backyard fence and the rooftop planks to match the style we had on the pallet and crates.



He also created basic flood fills for our collectibles.


And as if that wasn't enough, he finished the texture for the rocket, which looks awesome.


He also made sure that we had access to all the bits and pieces from the rocket to use as extra trash throughout the game.

 

The rocket is the first major setpiece for our game and helps introduce the world and story to the player, and then takes us into our first in-game cutscene and introduces our crisis that the players spend the rest of the game solving - as you would expect, having been made by little kids, it doesn't work so hot. I grabbed the rocket model early this week and applied some very basic animations to make sure we could get the cut scene working in-game, and then gave it over to Jermz to work his magic on.


This, combined with a camera shake, textures, lighting and particle effects, looks so good in the game.

We got the new rocket model placed into the tutorial area and added a lighting system to help draw the eye to the goal - getting Dustin into the cockpit.


Visual cues like this, along with our camera animation system and dialog, are going to fix the biggest issue we've had in playtesting - our players don't know where they're supposed to be going or what their goal is. 

Knowing this, we spent a ton of time working with the iTween plugin and got a great camera animation system in and functioning well. Already we are guiding the player, using cinematic pauses in the game, to show them where to go next.

We put a ton of attention into getting our dialog system up and running, which was a pretty complex job. To get it fully functional we want it to:
  • Utilize the GUI system to float in front of the screen in a predictable location.
  • Pause gameplay during dialog systems.
  • Allow for pauses in dialog for camera animation.
  • Pull all dialog as strings from a database, to allow for localization into multiple languages and much easier editing.
  • Have animated images of the characters talking next to the dialog.
  • Have "typewriter" style text so that the letters appear rapidly one character at a time.
  • Allow the player to skip through the dialog at the press of a button.
All of this required a lot of systems to work together well. We didn't get all of it in yet, but we've got the GUI in and pulling from the database, we've got the script set up for the entire tutorial and all of the first two puzzles converted into the database, we have animated textures for the dialog rendered off of each character, we have the ability to show and hide the GUI at a key press, we can pause input for the scenes and we already have our camera animation system in. We have the basic tech in place to allow for triggers to occur to start the next sequence of dialog, there's just a lot of under the hood wiring that needs to take place to get it all working together, and we're working today and tomorrow to get as much of it in as possible before compiling the Alpha build.

To create the animated talking head textures, I got the character rig files and set up a light and camera rig, setting up the scene to hand over to Jermz to animate. Zach went through and made sure we had a suite of textures to apply to the characters, and using this system we would create a whole batch of PNG sequences rendered from the camera, with a transparent background, that we could pick and choose from to make our character appear to be talking. I set up the camera in each scene and created a three-point lighting rig, customized for each character.


With these, we can create the final marqueed images.


I was setting up the camera rig and testing a batch render for Stu when I accidently rendered from the wrong camera. The result, however, was so adorable I couldn't help but fall in love.

Look at him go! Awwwww.

Anyway.

A lot of my time this week was spent using the existing assets we had in the game and making new setpieces or background elements out of them, like this rickety-looking treehouse we have hidden off in the background.


I also modelled a whole bunch of new trash piles, using our tiling trash bag system, and created a ramp of trash to put next to our schoolbus, a setpiece for one of our puzzles. Once I had it in engine, I absolutely covered it in trash and other assets, trying to reach the level of "fullness" we wanted for our game. This is the first spot we have in that really feels polished and to the level of visual storytelling and neglect we want to convey our world.


We came up with a rather brilliant way of scattering lots of objects around in our world quickly - a system I like to call the AutoLitterer. Essentially we take a bunch of small objects, like the fast food bags and soda cans, add rigidbody physics and mesh colliders to them, duplicate them over and over, then just hit play and let gravity do the work. Once they settle, we can copy their locations and reset them back to their original place in the AutoLitterer, then paste in new instances of them back on the ground where they settled. Then we simply select the new trash on the ground, revert them back to their original prefabs and it strips them of the expensive collision and physics. Voila, instant trash!

In the background of the image above, you'll likely notice another new addition - Zach got us new grass textures in-engine, so now we have lanes and patchy areas of dirty and grass. Alexi also modelled up the new curb system with the corners and the "vertical" roads, and Beau painted new asphalt textures and crosswalks, completing the picture.

High up above this scene, we've got our Buzzbot chugging along. Jermz got these dudes animated, and combined with Zach's textures, they look awesome in the game.


In this picture, you can see the grass and patchy dirt textures a lot better, as well as another new addition - the trees are done! Beau made some really clever new geometry and textures for the leaves, and they really fit our game world a whole lot better.



He also got in some new low-poly versions to replace the ones in the background.



Steffani finished up the Work Bench, both in the high-poly for the main menu and the low-poly version for in the game, and it looks great.

The character controllers are now fully functional and feel a lot better to control - we've dialed in the speed and abilities of all of the kids, and got Dustin's double-jump ability in and working. Even better, we've got the animations for most of them working. The double-jump animation looks so good. I'll have video of gameplay coming soon, and I can't wait to show the whole world coming to life.

Speaking of which, there's another new addition we added this week. It isn't a critical feature by any means, but it looks really neat - trash blowing and tumbling in the wind. We took a couple pieces of the little trash from the AutoLitterer, then gave them limited mass and drag and applied a constant force. When we hit play, they roll and tumble down the street, gathering up in corners and moving past like tumbleweeds. It's another small little touch, but it really does add a lot of neat little life to the game.

Let's see, what else? Oh! We've got a way to record the gameplay footage now. This was all recorded on Saturday night, so a lot has changed since, but it's still cool to see it all together.


I think that covers just about everything so far. As I said, it was a busy weekend, and a ton of fun, even if we are all exhausted. We'll be working through tomorrow and Wednesday, as schedules allow, to get the last bits ready for Alpha. It still isn't quite as far along as we'd like, but it is so gratifying to see the game falling into place the team working together to get so much accomplished in so little time.

As we finish up Alpha, we'll be trying to polish up as much as possible through next weekend, then recording off gameplay footage and other neat stuff so that we can prepare it for GDC, which is just around the corner. Almost everybody on the team is going, and we're all looking forward to having a break from working on the game and getting out there and showing it off to everybody in San Francisco. 

See you next week!