AWS Game Tech Blog

Unleashing the power of the Carbonated Studios team

Guest post authored by Carbonated Studios.

(Editor’s note: This is the first in a blog series from our Lumberyard customers. We really appreciate the time they took to share their experiences in working with Lumberyard!)

WHO ARE WE

We’re Carbonated! We’re a smaller studio based in El Segundo, California, and comprised of vets from Electronic Arts, Blizzard, and Zynga, to name a few. We are a relatively small team, with a diverse set of game-making skills and talents. But we’re also an ambitious lot. We’re building a 3D, real-time multiplayer game called “MadWorld” that we’re squeezing onto a mobile phone, using Lumberyard.

So why do we use — and like — Lumberyard?

WHAT WE LOOK FOR IN A GAME ENGINE: RAPID PROTOTYPING THAT ISN’T THROWAWAY WORK

We know a couple things from years of game making, and they are:

  1. It’s super important to bring all your talent to bear in the innovation and prototyping process: artists, designers, client engineers, server engineers, QA, and other folks.
  2. While quick and dirty prototyping is often the key to finding those surprise-and-delight moments, they often lead to serious technical debt (for example, LUA and scripting are great and all, but can get complicated and out of control quickly.)

As an experienced dev shop, we also know what live ops requires, so we not only need things developed quickly (same day delivery) to react to player feedback, but the things we deliver can’t be hard-coded since they’re delivered as downloadable content (DLC). So we need an engine that lets us prototype and deliver rapidly; that is fast and flexible.

A FAST, FLEXIBLE SOLUTION

This is why particularly we like Script Canvas. Script Canvas is the visual scripting component of Lumberyard, and it meets many of our requirements for speed and flexibility:

It’s easy to use for designers and artists alike. It’s quick to setup, and intuitive. It’s a great way to quickly generate new games modes (such as a free-for-all melee mode) and content (weapons and abilities).

It’s performant and self-contained (if managed well). Given our game is real-time multiplayer, the fact that it’s networked is key. Also, given the live-ops nature of our game, leveraging Script Canvas assets as DLC allows us to update the game with new interactions and gameplay at any time, and without requiring a new client or taking servers offline.

Sounds great, right? So how are we actually using this for our game?

MADWORLD: WITHOUT GIVING TOO MUCH AWAY

Our game, MadWorld, is still in private Beta, so we don’t want to give too much away yet! That said, and for context, in MadWorld players control a squad of AI driven characters to battle each other in real-time.

Our super cool AI is continuously making decisions about lots of variables (their environment, the enemies, equipment, abilities, other objects in the world, and of course input from the player). Trying to foresee what we may or may not need from our characters is somewhat daunting and largely impractical. Instead, we’ve invested considerable time creating re-usable components through Script Canvas that can be mixed and matched to create smart and interesting characters with diverse abilities and play styles, all directly under the control of our amazing designers to implement without heavyweight dev effort.

A highlighted portion of a complex Script Canvas showing a character ability in development.

EXAMPLES

To illustrate this, suppose we want to create a new character class: the Sniper-Healer (definitely not OP!). For this class, we want the ability to ‘Heal over Time’ innate to the character, as well as the “Overwatch” ability that comes from a specialized sniper rifle.

First, we create the “Overwatch” ability through Script Canvas. This is a simple script that, when invoked, tells the character to seek the nearest cover point, at which point our AI system will crouch behind cover but keep the rifle ready while scanning an area straight ahead. Once active, the ability script detects nearby enemies and takes quick shots at them when they enter the range of the ability.

Within our live ops platform, called “Carbyne” we define a new ability and specify the “Overwatch” script canvas asset, and attach that to a weapon. Now any character that has the new weapon gets the “Overwatch” ability!

Next we need to create the “Heal over Time” ability, which is created with a similar process as with Overwatch, but instead we attach it to a character (also defined in Carbyne).

We now have everything we need to create our new class. We simply create the new class in Carbyne, and specify the “Heal over Time” ability as part of the class. We then give the character the specialized “Overwatch” rifle, and we’re done!

The best part is that since the “Heal over Time” and “Overwatch” scripts are all packaged in DLC, so all it takes is a designer to script this up, and package it for deployment — and players get new content to create havoc with in minutes!

CARBYNE

Over the years, we’ve invested a considerable amount of resources in our own live-ops platform, Carbyne, which allows us to deliver all in-game content (maps, characters, weapons, abilities, etc.) as downloadable content, without requiring a new client or taking servers down. We deliver Script Canvas assets as dynamic slices (.dynamicslice files) DLC, which allows these changes to be delivered to players anytime within minutes.

It’s pretty amazing! Here’s how we use it:

  1. A designer thinks up a cool new game mode.
  2. They quickly make a Script Canvas, and test it out in the studio.
  3. If it’s fun, we package it up as DLC.
  4. We push it to players, and voila, new content!

CONCLUSION

Clearly, we’re fans of Script Canvas. It’s easy to use, flexible and performant. Here’s a few things we’ve learned along the way:

  • Jump right in! Script Canvas is both easy and powerful.
  • Keep it simple. Scripts can get out of control easily.
  • Create ‘building blocks’ in code and empower your designers to stitch them together and do fun stuff.
  • Try to keep “critical” (fundamental) flows in code (C++).
  • Oh, and don’t forget to harden and failsafe everything exposed through Script Canvas!