My Demo Reel for GDC 2013

This post is part of My Career Series.

This is the demo reel I showed people on my tablet and phone at GDC 2013. I made it approximately one-minute-long and practiced talking while showing the video, explaining the technical details. I basically picked the features that are not commonly present in other people’s games.

So this is what generally said when I showed people this video:

Here’s a video of the three games I have worked on at DigiPen so far.

The first game (Astrobunny) is a freshman game project. Not every one knew programming at that point. Some of us came straight out of high schools, so we were asked to use an educational game engine built by the school faculty. I did all the programming and art of this game, and my teammates did the level design. This is a one-button puzzle game, where you have to use the mouse cursor to guide the ship to the exit of each level.

The second game (Photon Bunny) was made in my second semester. This time we have to build the game engine from scratch, and we were restricted to using strict ANSI C. We still managed to implemented object-oriented structures by making our own version of virtual tables. For graphics, we were only provided with getPixel() and setPixel() and we were not allowed to use any other graphics API. The entire graphics engine was built from scratch using only these two functions, and I implemented blend modes, 2D dynamic shadows, pixel blitting, triangle rasterization, and normal mapping in the background, all in software. It was a very interesting challenge.

The third game (Flora Bunny) is our current project. This time we are allowed to use C++ and OpenGL or DirectX, so the graphics engine is finally hardware-accelerated. I built another game engine and graphics engine from scratch for this project. My recent responsibilities are mainly polishing up the game and make everything look visually smoother. This includes throwing in lots of particle effects and transition animations to cover up visual flaws. We are planning on finishing and submitting this game two weeks from now, so that we can enter the school’s student showcase and prepare for our finals.

Posted in Gamedev | Leave a comment

Meeting People at GDC 2013

This post is part of My Career Series.

This is my first time attending GDC, and the trip really helped me broaden my horizons and greatly improved my social skills. I’ve decided to write down what I have learned and share some of my tips on meeting people at GDC (or just meeting game industry people in general). I only got an Expo Pass, so the only places I went to were the Expo Hall and The W Hotel lobby.

Bring Your Cards & Tablet

You never know when you’d exchange contact information with someone, so keeping a stack of business cards around you is very important. Put your cards in a hard card holder, instead of keeping them inside your jeans pocket, so that you appear more prepared and professional when you take out the cards. If you have a demo reel, upload it to a tablet or a phone and then carry them around with you; it can make a very positive and strong impression of yourself if you can just pull out your tablet and show other people your work. At first, I uploaded my demo reel to my phone just in case my tablet ran out of battery; it turned out that the video on the phone can come in handy in situations where you’re caught off-guard. For instance, when I met some game devs from PopCap and Bungie at the airport and on the way back to my apartment, my tablet was well packed in my stuffed backpack and was hard to take out. So I just showed my demo reel to them on my phone instead. The smaller screen might be less impressive, but the fact that you can show off your work anywhere at any time totally outweighs that.

Expo Hall

The Expo Hall is where the Company Booths, Career Pavilion, and IGF Pavilion are located.

Company Booths are mainly for companies to show off and advertise their product, such as Crytek’s Cry Engine 3, Havok’s Anarchy Engine, and a whole bunch of middlewares. They might be looking to hire people, but from what I have observed (which might not be correct), they are mostly focused on demonstrating their products to people. However, the Unity booth did have a special sit-down space just for them to talk to people who are interested in working with them. Some game company booths have programmers and artists there, and you can talk to them to show off your work. Don’t forget to exchange contact information when the conversion is finished (this applies everywhere).

Continue reading

Posted in Gamedev | 2 Comments

Rusher 2.1 – Using Xbox 360 Controllers

Go to Rusher 2 project homepage
Rusher 2 tutorial list
Rusher 2 repository (Mercurial client required to checkout)

I was excited when I found out about Airxbc. It is a native extension for Adobe AIR that allows AIR applications on Windows platforms to access Xbox 360 controllers. What a big plus for games! I started working on integrating Airxbc into Rusher right away. And now the latest Rusher supports Xbox 360 controllers through the new X360Input system.

The system is capable of the following:

  • Query number of connected controllers.
  • Query whether a controller of a specific ID is connected.
  • Dispatch connection and disconnection signals for controllers, which can be used to display custom message.
  • Query button down/pressed/released status as Boolean values, including: D-Pad, A, B, X, Y, LB, RB, LT, RT, LS, RS, Back, and Start (triggers’ status is measured by a reasonable threshold).
  • Query analog input as percentage: LS and RS in the range [-1.0, 1.0]; LT and RT in the range [0.0, 1.0].
  • Set vibration amount for the low- and high-frequency rumblers.

Below are some code snippets that demonstrate how to use the X360Input system. The source code for the entire example can be found in the repository. You’ll need a Mercurial client to checkout the entire repository. I recommend TortoiseHg. The entire repository is required in order for the example projects to build.

Continue reading

Posted in Gamedev, Rusher | 1 Comment

Action Lists – They Are Cooler than Commands

I have written several articles on how to make use of the commands in game engines in order to manage different multi-frame and asynchronous tasks effectively. From the Game Engine Architecture Club at DigiPen, I learned about action lists, which provide all the advantages commands have and more cool features.

Actions

An action object is like a command object, which carries out a modular action, such as tweening a property, loading an asset, and printing out a message, which leads to an interface that is not hard to expect:

(For clarity, I’m not using standard AS3 syntax.)

class Action
{
  //basic functionalities
  function update(dt:Number):void;
  function complete():void;
  function isComplete():Boolean;
}

An action list is a container of actions (or a composite action), which has multiple lanes that child actions can run on. Lanes are sorted by lane IDs and are processed in this order. When a lane is processed, the action list goes through the child actions on that lane and updates them until it encounters a blocking action. When that happens, the action list simply moves to the next lane without checking if there’s any other child action following the blocking action on the current lane.

We need a way to specify whether an action is blocking or not, the parent (action list) of and action, and which lane the action runs on. This leads to this new interface:

Continue reading

Posted in Design Patterns, Gamedev, Rusher | 7 Comments

Rusher 2.1 – Reference Management & Dependency Injection

Go to Rusher 2 project homepage
Rusher 2 tutorial list

Rusher uses SwiftSuspenders for reference management and dependency injection. Reference management refers to the part of the engine that keeps track of all objects (including systems, entities, components, etc.) and exposes to client an interface to easily obtain references to any object. Dependency injection is a powerful feature where an injector automatically assigns references to objects through public properties and methods marked with the [Inject] metadata tags.

In this post I’m going to talk about Rusher’s reference mapping rules that the getInstance() method uses to determine which object’s reference is returned.

Continue reading

Posted in Gamedev, Rusher | Leave a comment

ActionScript 3.0 Event Listener Delegates

After some research on C++ delegates, I’ve also tried to build delegates in ActionScript 3.0. It’s extremely easy compared to C++, which is not a surprise at all!

Conveniently, when you refer to a method through an object reference with the “dot (.) syntax”, the evaluated Function object reference already acts somewhat like a delegate, in that the value used for the this keyword is stored within the Function object. This saves us a lot of work!

We can make use of this convenient feature to create “event listener delegates” to pass in extra arguments to listener functions without having to use multiple listeners or using the Dictionary class.

Here I’ll show you how we would solve the same problem using multiple listeners, dictionaries, and finally, event listener delegates.

Continue reading

Posted in ActionScript | 3 Comments

Rusher 2.1 – Getting Started

Go to Rusher 2 project homepage
Rusher 2 tutorial list

Rusher is a component-based game engine, which means everything is treated equally as an entity (a.k.a game object) that owns components making up the overall behavior of the entity. Systems are like components for the engine itself, where each system is in charge of an engine-scale behavior. For instance, the Input system manages all user input states that can be queried by components, and the Renderer2D system updates all RenderTarget2D components in the engine.

Systems & Components

Each engine can only have one instance of each system type, and each entity can have only one instance of each component type. You add systems to an engine and add components to an entity by passing in class object references:

Continue reading

Posted in ActionScript, Gamedev | Leave a comment

Rusher 2.1 – Introduction & Migrating from 2.0

Go to Rusher 2 project homepage
Rusher 2 tutorial list

By merging into Rusher what I’ve learned at DigiPen, mostly from Game Engine Architecture Club lectures, I’ve secretly marked it version 2.1 a while ago.

For convenience, here’s a quick list of what’s new and what’s removed in version 2.1:

  • A brand new engine-system and entity-component framework. The concept is the same, but the interface is much more polished and consistent. The core part of the engine still makes use of SwiftSuspenders for dependency injection and management.
  • A simplified Renderer2D system has taken over the old camera-layer based one. I think it makes more sense for the developers to decide what type of systems they want to use themselves.
  • An extension for Starling is available. It’s pretty much the mirrored version of the new Renderer2D system and RenderTarget component class.
  • The new Action List framework replaced the old command and state machine framework. I’ll write a dedicated post on action lists later.
  • Components no longer “update” themselves. They are pretty much “passive” in version 2.1. If you want to have an “active components” that update themselves, then you’d need to create a system to update them. More on this topic later.

Now I’ll cover some of the immediately important topics in detail.

Continue reading

Posted in Rusher | Leave a comment

Sky Spire – My Third DigiJam Game

More Sky Spire information
Play Sky Spire online (requires Flash Player browser plugin)
Controls: LEFT and RIGHT keys to move. SPACE key to jump.

Sky Spire is a game my classmates and I made during a 48-hour game jam session held by DigiPen students. The theme was “psychedelic stick of magic”, generated by The Video Game Name Generator.

This time I didn’t work on the game contents; instead, I provided technical support for Rusher (my ActionScript 3.0 game engine), fixing bugs and tweaking functionality to suit our needs.

Posted in Gamedev | 4 Comments

Cooncoaster – My Second DigiJam Game

More Cooncoaster information
Play Cooncoaster online (requires Flash Player browser plugin)
Instruction: Press space to jump. Collect food and avoid spikes.

Cooncoaster is a game I made with my classmates during a 48-hour game jam session held by DigiPen students. The theme was “change of plan”.

We used Rusher (my ActionScript 3.0 game engine), and Stardust (my ActionScript 3.0 particle engine).

Gameplay Video

Posted in Gamedev, Rusher, Stardust | 1 Comment