Torrent is a domination-style first-person shooter where players capture control points in cyberspace.
The world of Torrent is one of high stakes digital combat. Each player controls a virtual avatar, the digital representation of a hacker in cyberspace. Two teams of hackers fight over three critical data nodes, which are represented by control points that players must capture. However, neither team can retrieve the data while the other is in the way. The goal of each team is to drain the other’s bandwidth and ban them from the server. Only then can they obtain the coveted data that resides within each node.
- Implemented the game’s HUD and most of the main menu
- Helped program HUD state communication for network replication
- Used Kismet to make in-game objects change color based on events
- Unreal Development Kit
- Team of 10 (4 Months)
- The Guildhall at SMU
As the UI scripter for Torrent, the majority of my time was spent creating the game’s HUD and Main Menu. I used three tools to create the UI: Flash, Scaleform, and UnrealScript. I arranged UI assets in Flash and then exported them to Unreal Development Kit. In UDK, I used Scaleform and UnrealScript to make the UI display relevant information to the player. For networked multiplayer, I worked with a programmer to implement data replication for the HUD.
The only non-UI task I did for Torrent was some work in UDK’s Kismet to have certain objects change color based on when players capture control points. Some objects on the map change between white, orange, or cyan depending on the state of control points.
Since Torrent is a domination-style FPS, I wanted the HUD to be easy to understand and un-intrusive. I wanted the player to instantly know their state and the state of the map so they could react accordingly. In an FPS, the player’s focus should be on combat, not on trying to decipher the UI. I believe that I accomplished this goal in a lot of ways, yet there were a few ways in which I didn’t. One major way in which I accomplished this goal was with a very minimal HUD that gives the player lots of screen space to see the map. Ironically, one thing I did to impede player vision was the placement of health under the reticle. I wanted the health to stand out, but it also clutters the center of the screen a bit too much. This was my first time doing a HUD, so I feel I had some victories, but also a few defeats.
Torrent takes place in cyberspace and I wanted the UI to reinforce this. I worked with the team’s game designer and artists to design a UI that felt computerized. We all wanted the player to feel as if they were in a virtual suit of some kind. All the assets the artists made do a great job of reflecting this. Two ways that I contributed to the UI’s cyberspace theme was with the ammo display on the guns and the theming of text on the HUD. The ammo display on the guns freed space on the screen and added a futuristic feel. Theming text on the HUD added to the game’s immersion. For example, saying “Uploading” instead of “Capturing” when a player captures a control point.
The HUD is where I spent the majority of my time during development. My responsibility was to create a working UI using art assets and code. I had never done UI scripting before this project so I built the HUD’s foundation on the default HUD that comes with UDK. I modified certain features and added new ones to create a HUD that accommodated the game’s needs. In the Player Controller section below, I explain the work I did to prepare the HUD for data replication over networked multiplayer. The HUD itself has four sections: The Reticle, The Control Points, The Weapons, and The Kill Messages.
The Reticle is a very important part of the HUD, because it is necessary for accurate shooting and is where the player has their attention most often. The most unique part of the reticle is that it displays the player’s health. I did this to make the health stand out more, but in retrospect, this may have been a bad idea because it clutters up the center of the screen a bit too much.
The Control Points section displays the current state of the match. It shows each of the three control points and which team owns them. It also displays the time and the bandwidth (HP) for each team. I purposefully place this section at the top-center of the screen, above the reticle. Since the reticle is where the player looks most often, I wanted them to be able to easily look up and see this information.
The Weapons section shows the ammo for each of the player’s three weapons and which one they currently have equipped. The ammo bars turn red when ammo is low and the two unequipped weapon icons are faded out to further emphasize which weapon the player has equipped. Though the player has ammo on their gun, they can always see the ammo for their other two weapons.
The Kill Messages show who killed whom during the match. A specific message pops up for the player in the center of the screen when someone kills them. I used the word “banned” instead of “killed” to fit with Torrent’s theme of hackers banning their opponents from the server.
The player controller script updates information the player sees on the HUD. For networked multiplayer, multiple players need to see the same information at the same time, namely the state of control points. I worked with a programmer to do this. The way UDK does replication is that a script must specify variables to be replicated (shown to multiple clients on the server). Variables not specified for replication are only seen by one particular client. For example, when a player captured a control point, we had to replicate variables associated with this action so that other players could see the point being captured on the HUD. We were mostly successful at this, but there were a few bugs that we could never figure out how to fix. Every so often data stops being replicated and parts of the HUD cease to update.
The Ammo display simply shows the ammo on the player’s current weapon. The displays use color-coding to indicate the player’s team and turn red when the player is low on ammo, just like on the HUD. I used Flash and UDK to place the ammo display on a special material that one of the artists made for each weapon. The pistol has a special ammo display, because it has an EMP ability. The display shows the ability’s cool-down.
My responsibility was to arrange artist assets into a functional main menu. I put the assets together in Flash and used ActionScript to create transitions between sub menus when the player clicked on buttons. The main menu was also localized into German. I used Flash to change the menu to the German assets if the player selected that option.
To reinforce when a team captures a control point, objects associated with that point change to the capturing team’s color. White is neutral, with orange and cyan each representing a team. Most of the objects that change color are letters placed throughout the map to communicate to players the state of a given point.
I implemented this color-changing feature in Kismet. All objects capable of changing color have a material on them that I control using a Material Instance Constant and Matinee. When a team captures a point, the Matinee triggers and fades the material to the appropriate color. A level designer on my team took this logic and used it to also change the color of lights in the map.
Torrent’s strongest characteristic is definitely its art style. Both the UI and the environment fit with the cyberspace theme and look really polished. Everything from materials on objects to the weapon and character models help to immerse players into the world. The team struggled with art for a while, starting with a Tron look and eventually moving to a cyber Mass Effect theme. However, it all came together at the end.
A bad habit the team got into was making big sweeping changes every time we got feedback after a milestone. We were throwing out the baby with the bathwater as it were. Often we eliminated more than we needed to. Our game had a bit of an identity crisis for the longest time, both in terms of gameplay and art style. We knew we were doing a cyberspace domination-style FPS, but the specifics of the vision weren’t set. I guess we kept cutting major elements because we didn’t know what was major and what was minor. We eventually settled on a final product, but the drastic changes and lack of clear direction took up a lot of valuable time.
There are still a couple of UI bugs that I was not able to fix before the end of development. One of them was the occasional problem with data replication mentioned in the HUD section above. Another had to do with the message that shows on the HUD when the player captures a control point. The “Uploading…56%” message should only pop up for players in the point while it’s being captured, but sometimes it shows up for everyone on the team. I’m deeply embarrassed that I didn’t fix these problems, though I still learned a lot about UI scripting in the process.
Before this project, I had never used Flash or heard of Scaleform. For the first couple of weeks, I wondered if I would figure anything out, but thankfully I did. My position on the team was level designer, but I was on UI full time so I became the designated UI scripter. I learned a lot about UI design and getting UI elements to do things based on game events. I carried over a lot of what I learned to another large scale project, Midgard Saga, where I served as the team’s UI designer. I was able to do a lot more and in a faster time because of my previous experience on Torrent.