Dev Blog | NXT’s Road to Release

Creating a new client for one of the world’s longest-running MMOs is no small feat and creates an epic software challenge. Add to that challenge a record-setting content release schedule, and throw in a number of game systems that are unique in our industry, and you are starting to imagine the task that stood before our dev team.

It’s been several years in the making but we are finally at a point where we can realistically look at unleashing the NXT client out into the world in the near future and have set the 18th April as the date.

As we can see the finish line, I thought it might be nice to look back at how we got here. So - how do you make a new game client with only your wits and a newly created blank file?


Primitive Shapes

When you’re first figuring out how to render the 15 years of content that RuneScape has produced, it’s best to start small. The first stage is to draw basic shapes and this is where NXT starts off. A build system and code base are set up and you draw circles, squares and triangles on screen.

While this might not seem very playable, remember that all there ultimately is to a 3D computer game is huge amount of triangles (when standing on top of the Wizards’ Tower admiring the view, you can see 3.2 million of them). Next, you take your triangle and paint a texture over the top. At this point you have a render engine - you are communicating your intent to draw things to the graphics card and it’s obeying your commands.

Models

Triangles are fun, but if you are aiming to show off a fantasy world, you have to start drawing out the models from the game.Let’s start with our hero (you) - a human. This process requires us to be able to request an asset from the server and unravel it into something meaningful.

All model formats are basically just a list of where the corners of triangles are in 3D space. We have our own formats that do exactly that. Now, with a little additional info, you can draw a character and attach the relevant colours or textures to the mesh of triangles. Rotating the model is as simple as rotating the triangle, as the computer does the maths bit for us. At this point, chairs, tables and the large assortment of different barrels that Gielinor contains can all be drawn.

There is one more component required for a fully-fledged adventurer, as stationary heroes don’t gain much XP. The animation system in RuneScape is a novel solution to the problem of moving meshes and - as far as we are aware - is unique. Most animation systems operate like an artist’s dummy, where a skeletal system moves the player around and the skin (which may include the outfit that player is wearing) adapts to the position of the bones. The result is that for each frame of animation the mesh knows where all the triangles are supposed to end up.

In RuneScape there are no bones and no skeleton. Instead, the required positions are achieved by a completely different route and the series of changes are made by selecting which triangles should be part of each individual movement. The end result produces similar information, but the method by which the information is used to move the player requires some special thought. The system employed is more or less consistent across all of RuneScape’s creatures.

ModelViewer

At this point, the team can sit back and marvel at the aptly named ModelViewer tool. Models can be inspected while playing their associated idle, walk or run animations.

World

Now we have a moving character, a background sky and an assortment of objects to admire - feels like we’re almost done, right? It’d would be nice if we had somewhere to adventure, though, wouldn’t it?

The next stage of development is for us to draw the world. In a similar setup to models, there is a file format that describes how the world is laid out. Many game engines have solutions to world building and we are no exception. Our world is a huge grid of what we call “map squares”. Each square is a grid of smaller squares which in turn break down into even smaller squares. This allows us to position a model of a tree or a lamp post at the appropriate place in the world. The map format also contains the height information of the terrain and the various levels of textures required to bring that terrain to life.

WorldViewer

With a functioning method of placing objects into the world, we can reconstruct the layout of Gielinor. However, in order for you to see where you are going, the world must be lit. The map format describes much of the artist’s intent to create the right look for an area. There is information about the position of the sun, the colour of the sky and the various other light sources that illuminate the world.

Having created the WorldViewer tool, we have a useful playground to start the complex work of building a lighting system. All lighting basically takes the triangles we coloured and textured, then works out how to alter those colours to create the impression of real-world light effects. These include tinting, shadows and fog. Without these effects, objects would feel flat and lifeless.

MapEditor

By this point, the graphics experts are well on their way to building a performant lighting system, adding features to make dynamic shadows and reflections that will help NXT make all the places of RuneScape look better than ever before.

Client

For now, our graphics developers are enhancing the look of the world but it will not have escaped your notice that a game requires more than just well-lit locations. We need all of the assets and pieces that are required to show off RuneScape’s vast array of content.

First we have to be able to grab them from the server and communicate our intention to log in. Like all online games, we need to be able to talk to the server and understand the reply. This means supporting the security and message protocols that we use. Once we have that connection working we can get instructions about the game as we play from the server.

RuneScape’s gameplay is configured through a scripting language of our own invention. Many modern game engines use a similar split of code and configuration. Ours is, of course, unique. With a connection to the server already in place, we begin a long and careful process of supporting all of the different things that the server can ask the client to do. This includes support for the drawing of interfaces, playing animations at the correct time, displaying the relevant right-click operations on objects and interpreting the user’s inputs. Each of these systems has to be plugged into the way the new client displays content and interprets the player’s intentions when they click a button or press a key.

Can We Ship it?

With the ModelViewer and WorldViewer in our toolbox and the client communicating with the server, we can call it a day and relax. Well, not quite. As it turns out, we are only at the start and not the finish line. Our target is not to produce a client that simply functions but something that will enhance the experience of playing the game. Only from here are we able to start really working toward the scale of the challenge.

As you may recall, we have released a lot of content over and great number of years. During that time we have constantly improved the way we do things and have made more and more content types possible. This means we have a myriad different ways of constructing content. Each with its own slightly different behaviour. Our existing client has evolved bit by bit to support these changes.

Our new client, NXT, has to solve all of these inconsistent content issues from a fresh start. Many of you may recall that we showed off a video at RuneFest 2014 at that point the game could be played but was far from playable. It is increasingly important for us to stop thinking of a new client as a tech project and start considering the programme of work that the whole studio will be involved in.

Living with NXT

When we meet our goal, both players and staff will be living with NXT in their everyday lives. For the studio this means we have to support the creation of content for all of the expertise groups we have. Now the art teams enter the fold, and our customers and tools developers arrive into the picture – a marriage of engineers and artists. The aim is to have a WYSIWYG (what you see is what you get) experience for all content pipelines. This task extends to include new settings that NXT supports for colouring and lighting. It’s usually at this stage that it starts to become clear that much of the content doesn’t quite look right when you try to draw it correctly.

LifeWithNXT

Over the years we have adapted the creation of our assets to the way our client draws them. It turns out that some of the colours and levels of various effects are all over the place when you draw them in a new client. In NXT’s case, while RuneFest 2014’s video was met with excitement, players and staff alike voiced concerns over the muted colours. Fortunately, in involving all the studio’s different specialists, we are able to add controls and post-processing effects that allow us to get Gielinor looking as it should.

Before worrying about player impressions of the game running in NXT, we have our own in-house audience to please. Many of our staff joined the studio as RuneScape players. Some of those players are among the most passionate and difficult-to-impress of all our members. In fact, the QA team are a brutal audience if you’re showing them a client that wastes XP. Since the beginning of 2015 we have been slowly increasing the time that our own QA teams spend finding issues with the client.

They begin by looking for systemic issues (ones that affect the whole client), such as lighting effects not working on all trees or the texture system drawing in the wrong place. They then move to more gameplay-related issues such as not being able to click certain things. As we get more and more of the content working, we start to investigate individual areas of the game, such as mini-games and quests.

To draw a parallel with NXT again, this process had just happened to the NXT version of the game that we showed at RuneFest 15. For the first time players had the chance to have a go on their live accounts using 10 identical machines we brought with us. At the same time we have created a new trailer to present. We had a massive TV in the atrium and it made the hair on the back of my neck stand up when we watched the video in the office.

Finished at last?

Not quite! While the game can now be played and just about stands up to some player attention at an event, it’s worth remembering the controlled environments that it has been played in so far. While players have experienced it on 10 identical machines with reasonably modern CPU and GPU, there are hundreds of thousands of members and over a million unique players in RuneScape in any given month, all with different hardware.

I have a spreadsheet of over 250 thousand regular players broken down by the specs of their machines. I can tell that you have all made varied choices in hardware purchases. In fact, you guys have perhaps the widest spectrum of machines that any game on the planet has to cater for!

Each combination of CPU, Memory, operating system and GPU offers new ways to break the client. This places two new challenges on the graphics developers. The first is compatibility - you are determined to create a client that functions correctly on as many machines as possible. The second task is performance - your basic remit is to create a client as good or better than the current one. This means that it needs to run better across all those machines.

Real World Road Test

“The proof of the pudding is in the eating”. While we are in good shape there is nothing like a mass test for letting you know what you have missed. Running a small scale (still tens of thousands of people) live test for a short period of time, let’s say a weekend, is a great method for getting feedback. A win for us is a happy player base, getting real play time and information back from all those who have tried out NXT helps us immensely in getting it right.

For NXT, we ran two weekends and many of you helped us know the good, the bad and the ugly about the client at each stage. This aided us in identifying cases where certain machines don’t function as intended and also gave birth to threads petitioning us to leave the beta running. While this is a welcome validation of the hard work, we have to close off our weekends. It’s not acceptable to us to run an unsupported NXT while we work on getting it ready to ship. It would leave the players and the content teams caught with a client that we might break at any time. I’ve been following the talk on the forums and other social media that we use to chat with you and everyone has been supportive of our need to take it away again, a huge thank you for that.

The next few yards

Most game releases have things to do in the last few yards - those final bits and pieces to polish. Our situation is not quite the same, the new client isn’t a new game (although we hope it will feel like it). We do have a few last things to do so before we can put it in front of everyone but, even then, that isn’t the end.

At release, a new era begins for us. With the new client in hand we can work on improving things that simply were not possible with previous technology. We can help modify things to ensure we can include all of our players as we uncover new edge cases out in the real world. We can grow the capabilities of the client and help the content teams push further than ever before. I’m pretty hyped, the team are excited and we hear from you that you can’t wait. The good news is you don’t have to for much longer.

On the 18th of April, come join us in the new client and adventure through a new lens.

Mod Proto

Solving tech problems all day

Back to top