October 28, 2015 | Etaew | Viewed 3,897 times | Developer Interview,
In this interview we chat with AverageJoe who is a developer on Defiance.
My name is Joe and I am a programmer on the Defiance team. I have been with the company since July of 2014.
AverageJoe is a succinct and accurate way to describe somebody who isn’t into touting one’s own virtues; qualities which I strive for in myself.
Nowadays, I have responsibility for half of the feature development that we do for Defiance.
When the scheduling gets tight I’m busy putting out fires, solving problems and killing bugs in the tools, client and server.
When there’s a bit more room in the schedule you can usually find me working on assigned tasks or researching which awesome features should come next in the game.
10 years ago I got my start in the games industry maintaining a game library named Alchemy at Vicarious Visons’ West Coast office in California.
Since then I’ve worked in social gaming (Diner Dash 4 & 5) and mobile games (High School Story, Valor, Mermaid World, Fish with Attitude and others).
In 2014, Trion Worlds gave me the opportunity to join the Defiance team. For me this felt like my career was coming around full circle to the kinds of games I go home and create on my own time.
One of the first tasks I was assigned was a bug where the Cerberus’ rockets would fire sideways to the left instead of out and away from the rocket pods as the artist had intended. My search through millions of lines of code revealed that the direction for the rocket was tied to the passenger’s facing direction when the passenger entered the Cerberus from the side. I fixed this by aligning the rocket’s direction to the aim direction from the passenger’s interface on the Cerberus.
Other things I will admit to publicly are the new spots in the game where you see our store (loading scenes, welcome screens, results screens), the new supreme tier, private instances, the welcome screen and a host of small improvements to weapons, clan bonuses and UI throughout the game.
When I come in I will usually refresh my copy of the development environment that I work on. Sync’ing, building and starting up my local copy of this environment takes about an hour. During that time I am usually researching new possible projects for Defiance that look interesting.
On the predictable days I can usually start working on the next task or bug in earnest around 11 am. When the team is prepping for a launch of a new patch or dealing with the emergencies tied to the patch just released, the day can become quite chaotic and unfocused not allowing for any work on far-off features. But I do the best that I can, squashing bugs with abandon until I and the rest of the team can get back to a normal schedule.
There are about a half-dozen systems that need to be kept in sync when you plan out how to change something as fundamental as adding a new tier. Each of these systems have their own copy of that tier list.
The number one rule is to keep it all in sync. So you have to approach it at a slow and steady pace, trying to do as little as possible every step of the way so that it can be easily verified by the QA team.
This also helps minimize the spidering-out effect (my own term for how a simple change might propagate out to the rest of the codebase in impossible to predict fashion). I followed this process for the introduction of the supreme tier. Every time I got to a point where I could sync with the design group I did and this enabled me to get extra input that I could have just as easily missed and delayed the release of the Supreme tier.
As for the Store my improvements have been purely cosmetic, enabling our producers to be more creative about signaling the availability of items within the Store to our players. The code to construct the UI for the store is complicated and I simply have to careful about changing it.
The project’s size is the biggest challenge. Coming in at over a million lines of code, Defiance is a lot to sift through. Furthermore, with most of the original authors of Defiance’s systems not around anymore it at first took me a while to find which few lines of code were worth looking at. With time I have gotten better at knowing where the different systems are located and that has helped reduce the frustration with enormity of the project.
Also since Defiance is so huge it was (and remains) a challenge to balance the many systems and their behaviors. For instance, I had to change code in the gateway, master, game servers, tool code and the code that interacts with the persistence database in order to add the welcome screen into the game.
With every engineer in the same boat there is nobody else to help and you really have to dig deep and take every advantage of all the tools at your disposal. Since most of our code is in C++ our tool of choice is Visual Studio and Visual Assist. Visual Assist goes a long way into mitigating the dual challenges of size and scope I was referring to earlier by offering some very intelligent search capabilities that reduce the million lines of code down to 25 to 50 lines. This is much easier to deal with.
As Defiance has aged, the team has undergone a number of changes. One of the effects of those changes is that the number of teammates from other supporting disciplines (the artists, sound people, UI people, etc…) is not what it used to be and, as a result, I’ve had to level up my skill in a few of those areas (like UI, databases and tools).
It’s both great to learn something new and also difficult because any small movements to learn something about how the code or tools work means that I’ve just made an exponentially large movement to become expert in that area.
That’s not necessarily a bad thing as I’m glad to help out where the team needs my help the most—which is a good number of areas. But I would hope to contribute new things to the game and that becomes harder to do as you become the go-to person for a growing percentage of the project.
The Private Instances feature definitely took the longest and as such was the most difficult of the tasks (with the research for getting the Welcome Screen into the game a close second).
When working with visual elements like UI I learned very quickly that it isn’t enough to test only on the PC in spite of the existence of UI layout tools. Recall from earlier that setup takes one hour every morning.
Testing the new layout on consoles adds an additional hour of just waiting around for code to build and the Xbox and PS3 dev kits to finish patching. There’s nothing else to do on the machine but wait, which is kind of frustrating.
Other than that, the challenges that arise with 10 year old hardware were solved by the team that were around when the game launched. Memory budgets for any new artwork or maps have been established for a while now and most of the console-specific work nowadays is fiddling with the proxy settings to alleviate the load on consoles.
One of the other more subtle challenges of Defiance is that there’s a lot of dead code belonging to abandoned features. Figuring out what among that dead code was usable to me for this feature and what was not was the most difficult thing when starting the task.
The second challenge was that the team itself was going into a metamorphosis at the time and the design staff that was helping me at the beginning was not the same staff that was working with me at the finish. In the end I had to figure out a way to push the feature out the door which required me to come up with a good explanation for the need for it at a design level and be fluent in the architecture at the technical level.
This actually led me to some moments of discovery where the feature had to grow in order to answer some of the questions that I had come up, like “Inside the instance, do we want to allow people to have fine-grained control over who is invited and who is not? What’s the best way to accomplish that?” These things I answered for myself with additional work to design, create and iterate on the Private Instance Management screen.
I did a ton of UI work at my Playmesh/Quark Games position. There I ported an iOS game named Valor to Android. What I had not realized when I started the port was how systematic the UI for Valor actually was.
It was 6 months into the project before the lead artist who had developed the system had a chance to see the work we had done. I am not proud of that work now (or even then at that time) but after a series of seminar-like meetings I was given some strongly-worded guidelines from the artist about what he had intended for the UI.
The simplest rule is a consistent size for padding and margins. The rule for Valor was a four pixel padding (i.e. inward spacing between the border of a button and its text) and margins (that is, the empty space between like components). This is easy to do in HTML+CSS but hard to keep consistent in pure code as was the case for the Android Valor port.
Consistent spacing rules were the missing element from my first six months of work on the port and is one of the biggest things I can impart to other engineers.
In Defiance, besides consistent spacing, making sure that my new UI work looks similar enough to previous UI work takes a bit of doing as there are a lot of choices between similar looking elements to make when constructing a new UI element.
Usually the first and second attempts at finishing the look of the new screen won’t look right. But there’s that moment when I have let the task of designing the new component out of my mind long enough and while I’m doing something else I happen upon the new UI and it just feels right. That’s when I know it’s done.
As a team we come back around to this topic about once a month. Usually the conversation ends in a collective, resigned sigh.
If we could focus on just PCs, the first change would be to add tooltips to our buttons so that simply hovering the mouse cursor over a button would give you an idea of what to do with that button.
Personally, I would love to have micro tutorials all throughout the game. Visually, I’d imagine EGO appearing next to some of the larger dialogs and screens in our game cheerfully explaining to the player how to interact with the screens.
Because of consoles a lot of the actions that are listed out as rows in a table (like the Salvage Matrix’s actions) require double clicks. Personally, it took me a long time to figure out that I had to double-click the Salvage Matrix action choices listed underneath the selected weapon to get to the point where I could start an action.
If it were just a PC game, Defiance would behave like any other desktop app in this regard and I would have intuitively known how to add mod slots to the guns I was picking up.
As another example, I was tasked with adding a keybinding for gamepads that would triggered the in-game Store screen. There are so few keybindings available for the gamepad that a big part of the task was searching for a usable key combination. It took me forever to figure out how to add those gamepad keybindings for the Store to Defiance.
If it had just been a PC game it would have taken me no more than an hour. As for the gamepad, it’s still not where I would want it to be and remains on my growing lists of things to do.
Having said my peace about the constraints of developing for console, I’m glad that those constraints force the UI of Defiance to some new directions that you wouldn’t typically associate with an MMO.
For instance, there’s no action bar at the bottom which is one less piece of UI to be distracted by. There’s a lot of real estate for the game itself.
Instead of having to figure out how to see behind countless chat and quest dialogs that eat up the screen real estate of other games you can actually see what’s going on in Defiance (especially in situations where you are running the game in smaller resolutions).
If it were a PC only game you would see UI panels for quests and actions and friends lists and …etc. I believe that consoles are the driving force behind Defiance’s unique approach to MMO UIs.
- A marketplace/auction house and a system for supporting a host of craftable weapons, shields, spikes and stims that would sustain the game’s economy.
- The original goal of our expeditions was to chart an unbroken course through a never-ending section of the buried parts of the Bay Area. Unfortunately we didn’t have the resources to build out that idea but it would’ve been nice.
- Coming from the Great Plains I loved severe weather (I used to even go storm-chasing)! Seeing some severe weather effects like hail, all the different kinds of lightning and towering cumulonimbus clouds would be awesome. With enough programmers shouldering the burden of maintenance on the game I think I could spare some time for that.
- Updated list of platforms and the requisite platform-focused engineers to support them. There’s the PS4, Xbox One, Macs, Occulus Rift,...
- A mobile spin-off game. It would be fun to see how many different directions you could take the Defiance brand in a mobile context.
Outside of Defiance and Trion, what do you enjoy doing in your own time?
Being a game programmer consumes my waking hours at home (personal projects that never get finished) and work for half a year.
I want to give a huge shout out to my wife who has been awesome in supporting these failed projects and the pursuit of this game programming career (as opposed to any of the more lucrative/stable but boring coding jobs that I could be doing).
As I’m recharging myself during the other half, I watch a ton of television with my wife and do a fair amount of reading. This year, the new television shows are fairly unremarkable but I look forward most to seeing whether or not the new Heroes can be a good show.
As for the books, I’m all caught up on the Game of Thrones books and I just finished binge-listening to the Dark Tower series. Next on my list is wrapping up the Legends of the Duskwalker trilogy, Dawnbreaker.
I don’t get to do a lot of storm-chasing anymore unfortunately but I look forward to some year taking off for a couple of weeks during spring and join my brother (who is the actual meteorologist) chasing blue skies and the occasional tornado.
Some random sketches of strong people doing heroic things (aka comicbook heroes heroing heroically), two dev kits, a Garfield stuffed figure, two monitors, an assortment of wires and controllers and, most importantly,… my Contigo coffee mug.
Contribute to the discussion or help improve an article by leaving a comment below.
Sign In to post a comment.
Stratotech Defiance 2050 [Source]
3PL9 WDFG DKPR 9LE7 P7Y7 [Redeem]