Clockworks Confidential IV: Curio, Lead Engineer for Spiral Knights

Do you throw furniture at unauthorized personnel like a devilite?
Can you tell me all the GMs' real names
Was spiral knights hard to make?
Does your boss make you work overtime while make you carry a pitchfork?
What will be new content in the future?
PS I saw a love puppy today

Were you the one who nerfed KoA crown output by about 1k?
UPDATE: never mind, you guys unnerfed it after GH expansion. GJ!

I hope that there's some sort of news on shards here. I really want to know why they were nerfed and not the other kirbillion "un-bomb/gun/sword/overpowered" weapons. I would probably start playing again if they rebuffed RSS (even a little). I'm not exactly sure if this is spam but anyways I'd like to see what this issue of Clockworks Confidential has in store, especially about the unfortunate above mentioned issue.
Is there a possible that we can make the price of the energy to lower?

Did you inherit Bifurcate's rock?
Why are you not the lead engineer in the credits?

-Is there something you actaully hate - or would like to change - from the current game? ie: sun shards

Now with the guild halls I have another question!
With the guild hall lights, what do you think (personally) about implement wiring and logic gates so a user could make an ingame circuit for a light show? And maybe some other cool stuff. (obviously with a low clock like 2 Hz, maybe even done all client side since it's just for show)

I could be wrong but "The deadline for submitting questions for this round of Clockworks Confidential is Tuesday, November 6th, 2012 at 11:59 p.m. game time (Pacific timezone)."
-Windsickle

Please no to the logic gates; I don't want the guild hall to end up like Dwarf Fortress. =P

Please say yes to the logic gates; I REALLY want the Guild Hall to end up like Dwarf Fortress now he's mentioned it! Magma and ☼!!Adamantine Voltedge!!☼es for all!

Can I ask something now?
...
Do you even sleep in job?

Curio has been kidnapped!
or is working hard unlike his coworkers. :O

Mark "Curio" Johnson's Clockworks Confidential answers are contained herein! Thanks for waiting, knights!
[BEGIN TRANSMISSION]
Why "Curio"? Does it come from your coworkers?
A Curious Quandary if I ever saw one!
I've noticed your forum avatar is a rock. Why?
Nothing beats rock!
Is learning programming languages at a younge age (I started at 13) good?
Of course! I started when I was 8. As long as you have the interest, the age doesn't matter, and these days there are a lot more resources available, especially for younger people wanting to learn.
When and why did you pick up programming?
As mentioned earlier, I started programming when I was 8. I liked to create things, and with programming there weren't really any limitations. A computer basically gives you unlimited resources to play around and make it do new things.
What do you do in your job? I need a bit of clarification, as I think I'm confusing an engineer with a developer.
My job essentially involves creating the tools that the artists and designers use to make the game. I'm also involved heavily in the design process, shaping how various systems operate in the game, how players interact with the game and overall ensuring that anything we want to do is actually possible with our game engine.
Designing and implementing a system takes a great deal of concentration and time. I've heard some people set up some ambiance before they work on anything intense or creative such as listening to a particular music genre or working some creative activity or other hobby into the work. Is there anything you do to set the mood of your work area before sitting down to analyze/code?
The ambiance I like greatly depends on the type of work I'm doing. Most of the time I like to have the headphones on listening to music (generally indie rock) to both limit distractions with still having some background noise. Trying to dig into a tricky bug, figuring out what's going wrong in the code, usually requires me to stop the music to pay as much attention as I can. However if I'm at the point in development where I have a good idea in my head about how it will all come together and I'm just sitting coding it all, then I put on music that's a little more high energy (these days often Girl Talk and MSTRKRFT).
Do you play Spiral Knights for your own entertainment or is it solely a job?
As with every game I've worked on, I generally can't play it for my own enjoyment other than in really small amounts. Anytime I'm in game I keep thinking about new things to add, or parts to improve. So not only does it start to feel more like work, I can be motivated enough to even stop playing and get working on what I see.
So, as the lead engineer, what was your favorite part of Spiral Knights to work on?
My favorite part is building the tools used to make the knights, monsters and other elements in the world work. Especially things like the boss dungeons, where we want to introduce new mechanics into the game. I generally get to create all the building blocks that get used so that you can dodge lasers, or fight cloaking monsters, or let you sit in chairs and lie down in beds.
Crafting systems. I notice that the chance of UV tends to be clustered. i.e. there are times when I can get several UVs in a roll but other times no UV's show up for a very long time. Am I seeing things?
You are just seeing things! You can blame it all on your highly evolved human brain. Your brain is an excellent organ designed to see patterns in the world. For the most part it is incredibly good at this job. However, sometimes it can find patterns where there aren't any. This will often happen when presented with random values. Because you're always looking for patterns, you try to see them in the randomness (like UV rolls). To add to this pattern recognition, you are also more likely to remember a sequence of UV rolls that were good. This doesn't happen very often, so when you see it, you remember it for being different and good. So these memories are a lot stronger than the times when you've rolled a bunch and have just gotten a handful of good rolls that are spaced apart. In summary, it's your brain's desire to see patterns in everything, in combination with you more easily remembering the times when you got a bunch of good rolls in a short span, that lead you to believe the chance of UV is clustered.
How many coders do you have to help you?
There are currently 3 engineers (ie: coders) on the main Spiral Knights team. We basically work full-time on Spiral Knights. However we also get help from other engineers in the company at times, and that help is greatly appreciated! This help often comes in the form of a few hours to a few days work on projects to improve the game or systems surrounding the game, like the website, billing, support systems, etc.
I think another member that did software development left some time ago, were there any problems following that as he forgot to document anything important?
Andrzej, the first lead engineer on Spiral Knights (or as it was called back then, Project X), went off to pursue some personal projects of his early this year. The transition was actually very smooth. I had already been on the project for over 2 years, was very familiar with the codebase, and the core game libraries were very stable at that point. So the big loss was having one fewer talented engineer on the project.
Is the game coded in Java or C++ (or other o.O)?
The game is mostly coded in Java, but there is a little C++ thrown in for access to some native OS libraries.
How many lines of code is in the 'main' for Spiral Knights?
That's a trick question! There are actually 2 primary "main" functions. One for the client, and one for the server. The client main is 31 lines, and the server main is only 19 lines.
Is there automated testing (using jUnit or similar)? I've seen some bugs "resurface" after they are fixed so I'd think there isn't, but maybe you just forget about them.
We do not perform much unit testing. The main issue is that unit testing would not easily catch most of the bugs you see surface. Problems generally occur when we change the design or parameters of one unit, which ends up having knock on effects on one or more of the many other places in the code base. The always fun unintended consequences. So it's a tradeoff of spending more time building more complicated and complete testing suites, or just trying to develop more, be smart about it, and deal with issues as they come up.
How much do you know your way around OOO libs? They are quite extensive from what I've seen, and I don't really know when you joined the company
I've been with Three Rings for over 7 years now. I'm quite familiar with most of our libraries, although for Spiral Knights we primarily deal with narya, vilya, nenya and clyde.
Why do OOO libs have almost no documentation?
So we can spend more time making games.
How do ye and yer team of monkeys* react to in-game bugs that are running around in the game?
Well first comes the screaming. Followed by banging on various things in the office, and possibly some flying furniture. Eventually Nick comes over with an offering of bananas and we sit down on our million typewriters and start pounding on random keys. Eventually after enough grooming we have found and consumed the bugs that are plaguing us and we can finally enjoy our nap time.
What's the biggest challenge you had in Spiral Knights?
Training a fleet of monkeys to use typewriters.
Object oriented or brute force?
You ask this like it's one of the other. We can brute force our object oriented code (although we try to avoid it as much as possible since we like to find elegant solutions to our problems).
Do you prioritize getting features out fast, or having the code be properly structured and encapsulated and all that boring stuff?
Both! Just because we want to develop things quickly doesn't mean we can neglect proper engineering practices. In fact, by ensuring we keep the quality of the code high, it allows us to continue to develop quickly. Otherwise you just end up with a mess of spaghetti code that is hard to maintain or expand. Of course, some parts get better engineered than others, or the initial design scope expands and the framework you started with can't support the new things you want to do with it. So we don't shy away from a good re-factoring when we get to that point. But in the end, it's still better to try and do it right the first time, then having to constantly rewrite or work around a badly engineered section of code.
How difficult was it to code status effects? For example, how long did it take to work out the problems with stun?
Some of the status effects were relatively easy to get in. Of course Stun was not one of them, and I've been dealing with it ever since. The crux of the problem is that stun causes the speed of an attack to change, so if an attack is in progress; we need to re-calculate the duration of the attack adjusted at the time the speed changed; then ensure any actions that occur during the attack also get adjusted with the new times; and keep the animation playing without jumping, including the visual effects being spawned; and all of this needs to be done in reverse when stun finishes. So there is just a lot of moving parts that get affected by this status condition, making it all operate smoothly a tricky challenge.
Has a console version of this game ever been talked about or planned?
We have talked about a console version. Although actually making it happen is a whole other problem. Many of the in-game interfaces are not designed with a console in mind. Lots of stuff will be too small when displayed on most people's televisions (even running on HD TVs), and we'd have to do significant work so you could navigate the interfaces with only a controller. The technical problems get even more interesting since none of the current generation of consoles have a built in Java Virtual Machine, so the code would most likely need to be converted into another language to run.
How rapidly do you iterate on game features? Like, the team figures out you want a new feature, do you code and start testing it in the following days very quickly, or do you spend a lot of time planning it and only code it once for final?
We try to iterate fast and furiously. No matter how well designed you think something is, until you can actually play with it, you won't know if it's fun. So for most designs, we try to get an early prototype going as fast as possible so we can play with it. Of course larger projects, like the Guild Hall Expansion, do require significantly more planning before we can get a working prototype, but even then we'll constantly be reviewing the design and tweaking as we go along. This iteration is not just happening internally as well. We try to get new features out to you players as fast as we can as well. Often there are many different directions we can take new ideas, so seeing how the players react to new designs early can let us focus on the areas people actually find fun (or try to fix the things that don't end up working as well as we originally intended).
Also, do you make any cool features on your own and implement them to ask the team what they think of them? (I can imagine stuff like the pidgeon snipes being like this)
Everyone likes to add cool features when they have the chance. One evening just before April I coded up monster chatting, so we could have them talking to you on April Fools.
...how do you and your crew manage to get into code to edit it for tweaking the game/adding new things?
We use a fun variety of tools! All the code is stored in source repositories, we use both git and subversion here. I personally like to edit files in vi, and combine that with a bunch of shell scripts to do my bidding for efficient navigation. For build tools, we use a combination of Maven to manage our libraries, and ant to actually run the build scripts.
While the game is your main product, understanding and responding to player sentiments is also very important, especially for a MMO. Do you do anything to analyze player feedback?
Do we ever! We get player feedback from a wide variety of places. Some direct, like with the forums, support staff feedback and in-game surveys. Some indirect, but tracking player behavior in game, such as what items are crafted/bought/equipped, which dungeons/missions people play, and many more bits. We use all this to try and ensure we create an engaging experience where players want to always come back for more.
Do you still have the very early revisions of the server software around, or did they die in some big repository fire or similar?
We still have the full history of the Spiral Knights codebase.
I'd figure at this stage the game doesn't really need that much from the coding department, as the biggest burden is on content creation. Am I wrong? Do you actually have a long list of features to do you haven't got around to, or do you spend your time on other OOO projects or wearing a different developer hat?
There's always room for more code! Although we try to make the tools as robust and extensible as possible for the designers, there's hardly a new feature or piece of content that doesn't require some new code to implement. I've been dealing almost exclusively with Spiral Knights code for the past few years, and there's always a long list of new features we want to add, so I don't see that coming to an end anytime soon.
What is it like at the Spiral Knights office? Are you hard-working devilites 24/7? Are you easy-going snipes that have fun but still get the job done?
A little from column A, a little from column B. We try not to work ourselves to the bone (and avoid being hit by office furniture) most of the time. Working too much is not good for morale, creativity or productivity. However when we're nearing a big release (like the Guild Hall Expansion), then you'll find we turned into enraged overtimers spewing fire all over the office.
Do you ever have arguments with the designers?
Of course! As with any creative team, arguments are necessity to get great results.
Do you sometimes encounter problems with uninitialized variables and junk data?
Funny you should mention that. With Java that should not be a problem. Everything should be initialized to some default (generally zero) value. However there is a bug in most JVMs where initialized arrays could contain junk data, and we did have a bug as a result of that, which took quite a while to track down seeing as this should not have been a problem.
What even was the cause of those lagspikes we used to get when it was garbage collecting time on Shadow Lairs, and how did it get fixed?
It wasn't a garbage collection issue. Certain kinds of visual effects were not being optimally handled. So in effect heavy levels, like the Shadow Lairs (especially FSC and IMF) there would be a lot of wasted time processing effects that didn't need to happen. Tracking down the issue took a lot of work, but the fix was pretty straight forward, and the results were fantastic!
What tools have you created that are specially made for the SK artists?
The artists primarily use standard tools like Photoshop and Maya do create content. We have a generic configuration management tool that is then used to put together the various resources created into a format the game can use. Some specialized versions of these tools include windows for viewing what you're working on. So there's the model tool, where you can see the 3D models and run their animations. The particle editor, for testing particle effects. The user interface tool, for seeing what in-game user interfaces will look like and testing basic interactions. And finally the level editor used to build all the towns and dungeons you see in game.
Will there be tools developed for player use?
This has been discussed, however it is a significant task to make the tools both easy to use without a lot of training, and having to build up the extensive documentation necessary to expose it to a general audience. More than likely we'd head in the direction of Guild Hall editing, where we expose the tools within the game, so it has a familiar and easy use interface.
Is it normal to have server reboots? Before it used to be at 2PM but now at 1PM, why?
The wonders of Daylight Savings Time. In the US, the clocks shift back an hour in the fall, causing the nightly (for the US) reboot to be earlier for countries that do not observe Daylight Savings Time.
What was the complication that Nick mentioned regarding the Iron Slug buff/reimplementation?
Basically, the tools don't currently exist in the game engine to do exactly what he wants. The original implementation was done with the tools that were available, and were not getting the results that Nick wanted. So it all comes back to getting the time to implement the new features that would be needed to do the desired implementation.
Do you think any part of SK's code is "unusually witty" in implementation?
Unusual wit in code is more the domain of my co-worker Ray. And by code I mean comments and commit messages, and by wit I mean vulgarity!
With the guild hall lights, what do you think (personally) about implement wiring and logic gates so a user could make an ingame circuit for a light show? And maybe some other cool stuff. (obviously with a low clock like 2 Hz, maybe even done all client side since it's just for show)
I would love to add more in-game engineering tools so players could create interesting experiences. This of course can open a whole can of worms where we need to ensure they can't break things or add too much load to the server or other player's clients. It's the kind of thing that would likely be added bit by bit, like the new target range you get in the Guild Training Hall.
On a bright sunny day, you decide to play SK. What would you do first? Clockworks? or Lockdown?
I'm more of a Clockworks player, and I'm not just saying that because you'd all demolish me in Lockdown.
Can you tell me how did you learn to be a programmer and any tips on how to learn and master it?
Practice, practice, practice! Never stop coding. Always find new projects and challenges to do. Get a friend or many friends into programming and work together. Finally, have fun with it, when you're having fun, the rest of it just comes along naturally.
What are you working on right now?
A secret project.
How many Spiral Knights does it take to screw in a lightbulb?
Just one, but first you have to convince them that it's worth the price for energy.
[END TRANSMISSION]

1) Why isn't Curio answering himself?
&
2) "Narya, Vilya, Nenya"
Nice Lord of the Rings reference.

Curio did answer--the above is what he wrote. If you're asking why I posted his answers with my account, it's because I offered to futz with the formatting and whatnot and then post, and he okayed it.

Are you sure it's not just you filling in for him because he's too busy to answer questions either because he's treated like a develite overtimer and/or he is to busy working on the next patch? XD

As a fellow programmer I enjoyed reading what Curio had to say.
Sounds like OOO is a pretty fun place to work.

Thank you Curio for answering our questions. Some of them help clarifying things a lot.
Regarding the rate of UV in crafting. I think it can be summarized to "fooled by randomness" (which is what I suspected, hence my question).
Regarding "do you eat your own dog food". I think the answer is understandable. As a Dev, you have to develop the game and whatever precious time you have left, you have to use it to take care of your daily needs (eat, sleep, family, etc). Then when you decide to eat your own dog food (play SK), you have to do it in a manner that won't make you hate your job (further). Therefore, you decide to be efficient at it by thinking about what to improve or add to the game. This is a legitimate approach.
However, just like your answer to the UV crafting question. Is what you see in the game a representative sample of what the gamer base feels about the game? Or your delicate brain is seeking patterns of problem that the Devs can solve, so the game can be "improved"? e.g. do the Devs use the old RSS when they eat their own dog food? Have you seen how bombers actually used it and had fun? Or do you just play the game, find a few people using the bomb in a way that you feel are "OP" (or functionally not very bomb like) and as a result, it falls into the pattern that "this is a problem and we have to solve it"?
So please share with us. What makes SK fun to play? To some of us, old RSS is "fun" and you guys removed that fun in the middle of our summer vacation. In your eyes, why is SK fun to play? Do the new shard bombs really bring more fun?

The Iron Slug thing makes me realise that the way weapons, and content in general, are handled are severely different from how I've been imagining it.
I'm guessing the buff is giant loads of aggro and aggro just isn't a thing yet.

Thanks for the feedback, these were all very interesting answers

Nice job on turning a question about how fun Spiral Knights is from their perspective, into one interrogating him about the RSS patch...
You have a long career in politics ahead of you my boy/girl.

Yay for answers.
Now I have to ask Ray about vulgarities whenever that Q&A happens.

/shout It's like I'm a kid in a candy shop!!!
This is AMAZING! Thank you so much for answering these question Curio!!! As a Java programmer myself, you made me visibly smile multiple times. So good!! ...I'm freaking out a bit.
My thoughts as I'm reading:
Yes, while I wouldn't say that JUnit Test Case suck, they really are pretty pointless.
The two "public static void main"s makes sense... you're pretty good at OO then, if they're only a few lines long, eh? XD Yeah, I'm pretty bad at writing code and keeping DRY.
Thank Java for garbage collection!!!
Wow, I'm so happy right now. Thanks again (I may return with more organized thoughts later)!

Curio, you say you like challenges, hm?
Mayhaps you'd like a little number theory for your seizure, I mean leisure time. *laughs*
(Oh, and thanks for answering the questions!)

Doesn't anyone wonder what crazy idea does nick have for the Iron Slug to be so hard to achieve?
Thanks for the interview - very interesting, as I'm a programmer myself.

Ha! I'm not even surprised that my question about shard bombs didn't get answered.
For a furthered explanation, please go to forum node 58425 and hit the links in the first post.

Why would the engineer answer your questions about design? Do you expect a psychiatrist to perform a heart surgery?

If it was someone else's idea and he doesn't agree with it, talking about it would make things worse.
@Michaelb
I wasn't aware that the thread you linked to was locked. o.o
Why was that?

@Autofire: Apparently, certain people with the ability to lock threads thought that it went a little too far. The threads that it links to are not, though.
2nd Page of Doom
CANT WAIT EURY!!!