I'm very happy to announce "Kaiju Rampage", currently in development for iPhone. This is a project I've wanted to do for a couple of years now, and I'm finally taking the leap. The initial release will be fairly small in scope: smash the city and cause as much damage as possible before time runs out. I'll be adding more Kaiju, and a plot, in a post-release update.
Physically-Based Car Jumping
Wow. Just, wow. I started converting the art assets in "Car Jumper" from the Legacy mobile shaders to the new physically-based Standard Shader in Unity 5. The difference is shocking, which is a testament to how powerful Unity has become. After I've finished converting all of the shaders, I'll start in on the GUI. I have to rewrite the GUI code, implement some visual feedback for power-ups, and add some art to the actual UI elements.
It's time for UNITE...
It's 4am and I'm packed and about to head to the airport. Unite kicks-off in 2 days, and I actually pulled it off: 3 prototypes on my phone. I honestly didn't even think I'd get "Car Jumper" running, let alone 2 other projects. This year, when I pitch "Car Jumper", I can follow-up by handing them the actual game. Playable.
Wish me luck.
Kaiju Demo
I'm pretty psyched about this one. When I was younger, I wanted to be a filmmaker. I grew up as Hollywood was making the transition from analog to digital, and after the novelty of CG wore-off, I found myself missing stop-motion, puppets, rubber suits, and even the rough look of photo-chemical compositing. While I love the power and potential of digital tools, I prefer practical effects whenever possible. I saw "The Evil Dead" when I was 15 and it pretty much ruined me for life. The 80's was an incredible decade for creature FX in general. Godzilla was a staple of family movie nights.
I was also a pretty obnoxious gamer growing up. "War of the Monsters" was a fantastic multiplayer brawler with a 50's sci-fi B-movie aesthetic that just pushed all of the right buttons for me. It came along at a time when Sony was constantly cranking out new IP for the PS2, but we never got a sequel (I think we can blame "God of War" for that one, but I'm definitely not complaining).
Then Guillermo del Toro made "Pacific Rim". I remember reading that one of his directives to the design team was that Robots and Kaiju alike had to maintain human silhoettes, as if they were to build practical suits. My reaction was, "why didn't they just build suits?"
It was around this time that the PS4 had also been announced, and Sony was talking up the power of the hardware. Then it hit me: a "War of the Monsters" clone, inspired by Kaiju movies of the 60's, 70's and 80's. Characters that look and move like people in rubber suits, film grain, and cutscenes that composite "soundstage" monster footage with "live" crowd footage. I wrote it off as impossible, until Unity announced its version 5 update. Between physically-based shading, global illumination, and a significantly more powerful physics engine, it looked like there might be a possibility of getting this working.
Once I booked my trip to the Unite 2015 conference in Boston, I knew I wanted to try and get some kind of realtime demo running alongside "Car Jumper" and Top-Down Shooter. I'm still in shock that it's not only possible, but that I've got it running on my phone.
Porting "Car Jumper"
In light of all that's happened in the Unity scene with the release of Unity 5, and the announcement of the Unite 2015 conference in Boston, now was as good a time as any to drop everything and port our OUYA build of "Car Jumper" to the iPhone 6. My goal, by the end of August, is to have multiple demos running on the device, so that I can spend the bulk of September simply polishing what's already stable. In an effort to have something running and playable as quickly as possible, I've dragged-and-dropped the assets into a new Unity iPhone project, gutted out all of the OUYA controller wrapper code (well over a thousand lines across 3 scripts), and started rewriting and reintroducing elements one at a time.
This is has been a brutal experience.
Starting with the basic mechanic of jumping cars for point, I stripped out all of the character control logic and started from scratch to introduce touch input. I took this time to completely remove the useless ability to "Run", and rebuilt the vehicle rigs to accommodate actual suspensions and wheel physics(the spinning wheels were strictly decorative before). Seeing as this is a mobile build, I introduced a timer to increase the number of play sessions and tighten the gameplay loop, as it was possible to play a single session for several minutes on-end without a time limit.
Same OUYA exterior (for now), but pretty much everything behind the scenes has been gutted and rewritten/rebuilt from scratch.
Once that was all working, it was time to tackle something I'd been putting off for the entire life of the project: efficiency. From its inception, "Car Jumper" was always going to employ a randomized element to keep gameplay interesting. My initial prototype and subsequent OUYA release, however, utilized a brute-force Instantiate/Destroy method of randomly populating the game. This worked as a proof-of-concept, but consistently caused performance hiccups(Even on my Mac Pro). I finally sat down and implemented an object pooling system for the iPhone version, in an effort to maintain the element of randomness, without killing gameplay or battery performance.
This proved to be an interesting challenge, because each randomized element required a different implementation. Background elements were the easiest, because I could just randomly populate a list and the repetition wouldn't matter. Power ups and vehicles, on the other hand, still required weighted randomization, due to certain power ups and vehicles being more valuable than others.
After the core pooling was set-up, it was time to start reintroducing powerups. The "Score" and "Jump" boosts were basically untouched, save for a few changes to accommodate a modified character controller and a completely new API for the GUI. The formerly useless "Bullet-Time" power up was replaced by a power up that adds time to the clock, which allowed good/lucky players the opportunity to push their scores even higher.
Complicating matters was the fact that I had to figure out how to make the "Berserker" power up work with object pooling. I wrestled for a while with a convoluted pairing system where a vehicle and its corresponding wreck were instantiated together and a "Berserker" collision would just toggle the active/inactive objects, but finally said, "Screw it", and added a pool of random wrecks. Now it's possible to run a "Berserker" into a motorcycle and produce the flaming husk of an SUV(and vice-versa). It's so stupid, it actually works.
The only thing really lacking from this otherwise very functional OUYA-to-iPhone port is visual feedback on powerups. Due to the new GUI system introduced in Unity 4.6, all of the powerup-related GUI elements need to be rebuilt and rewritten. That will have to wait, as it's currently "Good Enough" to leave alone for a while as I start porting my top-down shooter prototype to iPhone next.