This is the extended interview with Erik Nytting – Wurm programmer, who still has an impeccable taste in T-shirts.
Hey! Who are you around here?
I am the server-programmer for Wurm… one of them anyway, since Rolf (CEO of Code Club) also does it. Most of what I’m doing is gameplay-related, but almost everything happens on the server – it does all the checks, creates all the items, performs all the actions and whatever else is going on.
Does that mean that you and Alexander (Wurm Online’s client-programmer) make any of the design-decisions?
Yes, we make some of the decisions anyway. The way we usually work is that we start out with an approximation of what we want to do, while all the details about exactly how it should work are hammered out and discussed during the process.
Hm, I can imagine these discussions becoming quite heated on occasion?
Neither of us wants to do the heavy lifting so we usually argue about who’s going do most of it.
It usually leads to pretty good solutions though… because of the way we bounce things back and forth we end up a solution that works well and distributes the workload between both client and server – i.e the things that needs to be done on the client-side we do on the client, while the things needs to be done server-side gets done there.
So basically avoiding work leads to good solutions?
More or less. *laughs*
*laughs* I can get behind that!
“Everything needs to get done… preferably all at once!”
What’s the difference between doing stuff on the client vs the server though? Are client-based solutions usually faster?
Stuff on the client will execute on the fly since there is no sending and receiving involved. From a game security standpoint (among other things) we can’t have certain things on the client however, since people could hack it and modify certain values, leaving the game vulnerable to cheating. Although maybe we could perform more things on the client and just validate them on the server, perhaps that would be a way to speed some things up anyway.
While we are on the subject, how much of the job is comprised of optimization and the like? Or do you mostly work on new stuff?
It’s very mixed… everything from bug-fixing, to optimization to new projects, everything needs get done… preferably all at once! *laughs*
*laughs* So you usually decide what you want to work on yourselves?
Yeah… most of the time I can choose myself. It depends if there’s something urgent that needs to be fixed or if we’re working on a certain project, otherwise we make our own decisions about what should be prioritized at that moment – if we don’t have any specific projects going on, we start our own, smaller ones.
At the moment for example, I’m examining and balancing the karma-spells, since we are in a period where we aren’t implementing any major new stuff. (vacation-time) We’re also bouncing around projects that aren’t timing-dependent in the same way.
“#%!@, this didn’t work too well”
So similarly to Emil, you get alot of freedom to prioritize?
Yes, all of us very much operate that way.
Speaking out of my (admittedly limited) experience in programming, I’ve noticed that things frequently come up that I hadn’t anticipated, which can be a source of frustration.
Yeah, like with the “load”-action. The load-action is used to load big, heavy stuff unto carts and the like. Originally we intended it to be a cart-only thing, but then we figured that boats should be able to do it as well. Which worked well enough at first, but when we tried it with a larger boat we quickly noticed that “#%!&, this didn’t work too well”.
*laughs* Creating extra work for yourself!
It was originally conceived to solve the problem of moving larger objects, since we knew that people wanted more precision in where to put them. It was a pain when they couldn’t move stuff larger distances, and in general it isn’t easy to make them. There aren’t many people who are willing to push them halfway across the map… some do, but most do not.
Could you tell us a little about how you ended up where you are today?
It’s not a special story really.
But it’s your story.
Well yeah, it is my story.
I wasn’t very old when I started playing video-games. Back then it was kind of a childhood dream to make graphics for games – 3D modelling and such – but I came to the conclusion that since I can’t draw a straight line with a ruler it probably wasn’t my thing, so I gave that up pretty quickly.
I started reading up on programming when I was about 12, but I didn’t do any real programming until high-school…
I had one of the coolest teacher ever. He had worked at Bofors* and had been programming missiles and stuff. He didn’t have a formal teacher’s education though, which I guess was the reason he was let go by the school, instead of our other programming-teacher who was entirely useless.
*Swedish Weapon manufacturer, now consolidated into BAE Systems Bofors
This teacher, did he make the programming-gig seem more appealing to you?
I was curious about it prior to that, but he made it much more fun. He presented it in an exciting way and contextualized what we were doing by referring to his own experiences.
The thing is that he knew that he would be fired at the end of our first academic year, so he decided to teach us two one-year courses within a single year, simply because he believed that the other teacher was really terrible and wouldn’t teach us properly.
*laughs* How did that work out? You hade enough time?
Yep, it actually worked. Our exams were pretty relaxed, he went and bought us coffee and stuff, and we were allowed to discuss the assignments with him. He didn’t think it was that important that we’d memorized everything.
I can understand that, since programming is a lot about solving problems.
Yeah… he thought that was important. We weren’t allowed to google but we could bring all our notes and stuff.
Thus making it more reality-based?
Yes, if you have a problem now – how to do a certain thing with a certain API for example – you look it up. You don’t usually sit there testing random functions until you find the one you believe you are looking for.
Anyway, after finishing high school I tried reading game development at the university in Örebro, but quickly found that there were too much theory and way too little hands-on, which I don’t feel works particularly well with programming… especially when you are still learning the basics since there’s a lot of trial-and-error involved. At the beginning of the second year they decided that movie science was the sh*t for programmers… knowing all the dramatic camera angles and stuff… I disagreed, and quit.
“Rolf sat on the stairs with his head in his hands looking like a wreck basically”
Ok, so how did you get the job at Code Club?
I was working at a company making issue tracking systems when Alex invited me to the 1.0 release-party for Wurm. At that point we’d played Wurm together for awhile and we sat there talking about the fact that Wurm had volunteers helping out, and so I thought I could help out a little on my spare time as well… it seemed like fun. So we talked with Rolf and he was like ‘yes you can have a job’
– “Yes wat?”
That was two o’clock at night… in a bar. It was pretty great I thought. At the end of the after-party – it was around 5.30 – Rolf sat on the stairs with his head in his hands, looking like a wreck basically. He told me he would contact me after New Year’s eve. I didn’t believe for a second that he would remember it. But he did!
When was this?
Last year… yeah, I started in february last year. It was december the 22nd he sat on the stairs. *laughs*
Ok, but he knew you could program at that point?
No, he didn’t know.
Alex said that I could… Alex was already working there.
I have a stupid question, but stupid questions are sometimes the best ones – What is the best/worst part about the job? Meaning here.
Both are about the same; the players.
*laughs* Feel free to elaborate.
It’s pretty damn awesome to work with and develop the game as people test things out and react to them… at the same time, it’s equally much of a downer when people starts raging on you overnight without you really realizing what’s happened.
Is it mostly about stuff that you didn’t consider, or about disagreements regarding the design?
It’s a mix of both admittedly. What bothers me isn’t the criticism – constructive criticism is great – it’s when a rumor, or misinterpreted quote gets blown up overnight, with the effect that you suddenly have a meltdown about something that isn’t true. At that point there’s nothing you can say either, since some people have already decided that you’re evil and can’t be trusted.
I was wondering about the programming-challenges of Wurm, considering its sandbox-nature.
There are plenty of challenges. Since the game keeps evolving and expanding beyond what the original code intended, it’s easy for the code to become disjointed. Base-functionality has been added… people want more of this or that etc… as such, the code looks thereafter. Sometimes you have to spend a few hours just rebuilding old code to make it do the exact same thing as it did before, for no other purpose than to make it easier to comprehend. Tons of hours can be spent on that, but none of it ever shows up in the patch-notes. *laughs*
The unsung programming-hero… *laughs*
Nah, it’s just a lot of work the player never sees. It shouldn’t affect them in any way.
Closing out, is there any work you’ve done on Wurm that you are especially proud of?
Hm? Good question.
Hard question as well… we’ve worked together a lot on the newer stuff, so I can’t take full credit for it, but I’m proud of the crafting-window we worked on. There’s a lot going on behind the scenes on the server-side. I’m very pleased with that, and it made quite a bit of a difference I thought.
Thanks for your time!