Why don’t some people care if they kill Diablo? What’s the best thing about the next generation of consoles? And what’s up with the ghosts in the backyard? Meet our programmer, Adam, who has the answers!
So we’ve heard you’re an extreme Achiever, and you’ve spent hundreds, if not thousands of hours in games like Diablo 3 or Runescape.
For the Achiever like me, the best part in playing a game is to crack its “code” that’s running underneath. Not the programmer’s code literally, but all the rules and nuances the game is driven by.
From that point of view, Diablo 3 is an excellent game for the Achiever. Instead of a simple move and shoot combat, you have hundreds of possible skill combinations, and each combination has its own pros and cons. You can analyze what’s the best combination for you in terms of speed, fun, and rewards. I mean, I know there are certain rewards waiting for me, so I think about the best way to get them.
When I start a game, my first priority is always to learn everything about its gameplay mechanics. This may even involve searching the internet. The more I know about a game, the more fun I will have with it. True story.
You may think that being surprised by a game is a good thing, but for me (and many other Achievers) it’s not the case. The more you know the better, and once I start playing I want to excel in the game right away.
It’s a bit like when your parents hide Christmas presents somewhere in the house, and you start thinking where those presents could be hidden. What are the best possible ways to find them before the parents come back from work? You don’t want to trash the entire house just to find a pair of mittens, right? So I focus on the most efficient ways of searching for the presents, and that’s, by the way, another amusing thing about being the Achiever. It doesn’t matter what I will find. It can be mittens, a green sweater, or an iPhone. The whole fun is in the search itself and beating the system, oops, sorry, the parents.
It’s always about chasing the white rabbit, and not about catching it. The same goes for Diablo 3. Do I play the game just so I can beat Diablo? Of course not. I’ve done it, like, fifty times. I play it because it has a system that requires analysis, mastery, and then beating the hell out of it.
What’s the best game for me then? The one that contains deep (not necessarily super-complex), meaningful system that is waiting to be explored and exploited. That goes with games like Diablo 3, Minecraft, Skyrim, Runescape and so on.
Have you ever done any personal side project?
During my spare time what I love doing the most is to learn new stuff about programming.
When I’m working, I’m focused mostly on getting the job done. And during my 10+ years of game development, I’ve learnt that when you’re working on projects that tend to last one to three years (even more in some cases) you actually stop learning.
Big games require an enormous amount of work that is not challenging at all, actually. There are time constraints which force you to play it safe and write a functional, bare minimum code – and nothing more. There’s neither room nor time for experiments with new technologies and coding techniques unless you’re working in one of those few companies which appreciate R&D.
That is why I use my free time to experiment with the code and improve in my programming skills. I also like to master the games I play so there may be a connection :)
Obviously you can’t learn programming just by reading books or the internet. Practice is the best way to test your ideas, and of course I do have some side projects. Unfortunately, me being an experimenting programmer and not an artist means I never have anything presentable. “Well, yeah, it’s cool you have a guy running around on a field, but you know what? There’s nothing there! You just have some f** guy running around on a field!”.
But for me what matters is that I’ve gained another skill that I can use in the next project.
I can assure you that there’s always something fun and interesting to learn about programming. The moment you start thinking that there’s nothing more for you to learn, just forget about game development and retire; otherwise you’ll torture yourself to death with boredom and what we call a burnout.
Have you ever screwed up as a programmer big time and if so, what was it and how was it fixed?
There’s another lesson I got from all these years as a game developer. You’re going to make mistakes. Shitloads of them.
Programmers call it the “Sombrero of Shame“, or “Shamebrero”. It’s basically that if a programmer makes a mistake, you give him a sombrero to wear for a day.
I’m not a fan of this. I don’t like the idea of celebrating a mistake. I’m more of a solution guy. If there’s a problem, then focus on fixing it asap.
Game programming is more or less “a series of unfortunate events” and you need to learn to live with the fact that sooner or later (mostly sooner) you’ll make a mistake that will bring upon you the wrath of a hundred pointing fingers. The only thing you can do is to learn from that and think about how to avoid similar situations in the future.
Perhaps I’ve committed a spectacular sin in the past, but I honestly I can’t recall what could that be. Maybe it’s because I was focused too much on fixing it, or maybe because my brain decided to bury it in the deepest and darkest place to spare me the trauma.
Actually one thing just sprung to mind. I can remember I left a debug code in my first game about 10 years ago. The code was collecting information about the game behavior and was writing the results to some files on “c:/”. That’s right. The main root of the drive C. Unfortunately, there was no chance to fix it once the game was out. It wasn’t a real game breaker, but it’s certainly not something to be proud of.
You’re an experienced programmer, you’ve programmed many different projects in many different engines. Looking ahead, what do you think are the biggest challenges for the programmers in the coming years?
With another generation of consoles we can expect another paradigm shift in game programming. Consoles are the point of reference for many engines, so currently things are a bit stale because of the hardware limits.
When the current generation came out six or so years ago, it has forced developers to harness the power of CPU parallelism. There was a shift from the single core programming to multicore programming. With the next generation we can expect much tighter integration of the CPU with the GPU and – what’s more important – we will get the GPU capable of doing more computations now reserved for the CPU.
This means that the CPU will be downgraded from the computational unit to the management unit, and actually that’s a good thing, because it will help to overcome the general problems with increased development costs. To deliver high quality, low cost games, the industry will require many improvements in content creation, iteration times, tools, and engine integration with the creation pipeline. Historically, many games are using C++ for computationally expensive tasks, and scripting languages like Python or LUA for more management oriented tasks, so they can lower the complexity of their code and improve iterations. After moving computational tasks from the CPU to the GPU, developers can ditch C++ from the CPU completely and switch to higher level languages like C# to improve code stability and to reduce its complexity.
Another challenge for the programmers will be the excessive use of the internet with what we call “games as a service”. Games will become more complex with the addition of multiuser interactions, and will require much longer support from developers. Hence the investment in “easy to maintain and expand” solutions will become even more important.
I think that we can expect more games that will not only require cooperation between players, but also more games that will allow you to shape the world you interact with. Creating such metaverses will be not only challenging from the design point of view, but also from the programmer’s perspective.
What’s your advice for someone who wants to code games and has some entry-level programming knowledge?
Go and meet other people. The idea of creating a game by yourself is perhaps tempting at first, and it may look as the “easiest solution”, but in reality it is usually not the most efficient way of spending your time. Two people are better at making a game than just one.
Do not focus on forums or sites for programmers. Check mod communities for the games you like and find some artists you can work with. Working with other people and solving actual problems is a valuable lesson on how to collaborate with others, how to prioritize tasks, and what it takes to create a game.
Because actually creating a game is not that hard for someone with a decent programming knowledge; it’s the collaboration and the amount of work you have to put in it that makes it a real challenge.
Adam and Adam, collaborating at The Astronauts
One other thing to consider is that people tend to abandon their “brilliant game idea that will amaze everyone”. There’s a very long road from a brilliant idea to actually finished game, so don’t be surprised if your project vanishes after a while. Think about the things you’ve learned when the project was still active. You may even want try to continue this project by yourself. However, if you think that you aren’t able to finish the project, then you also couldn’t have done it alone in the first place. That is why working with a group of people is always a win-win situation.
Which websites are your favorite?
I check so many sites daily that it’s devilishly hard to pick just one. If I had to choose, it would be Blue’s News. It presents news about games, hardware, and game developers in a remarkably compact way. And it always features some fun, interesting non-gaming stories for the extra flavor.
Beside games I’m also into psychology, so I often check sites like Psychology Today. I find it fascinating to learn how our brain works and why people have different views on politics, religion and so on.
Which games have impressed you from the code point of view – and why?
For me, it’s The Sims 2 (haven’t played The Sims 3, so I can’t say much about it). This game has lots of clever yet simple rules that, when combined, offer a very complex system. The amount of things you can do in this game is astonishing. Let’s take a simple couch for example. When your sim is a kid it may jump on a couch and thus increase “happiness”. A teen sim can just sit there and read a book. If you hang a TV set on the wall, the sim will start watching the TV, switching between many different channels like sport, cooking, science, etc. – and learning from it or just for pure fun. Adult sims can have sex on it and conceive a child. During parties, the couch becomes a place when two sims talk to each other. And we’re just talking one simple object here!
Another great example is your backyard. You can plant trees or bushes in there. You can hire a gardener to tend to them. The gardener will use the compost bin – if present – to dispose of the leaves. And if you bury your dead sim in the backyard it may appear to the gardener as a ghost, resulting the gardener’s death. So now you will have two ghosts. True story.
There are lots of different items in Sims, lots of different activities, and the number of interactions between those items, activities and people is mind blowing. It’s a magnificent piece of work not because of the insane amount of content this game has, but also because of the code that must drive it all.