5 May

Adventure Intro: Readying the World

By Caspian

Yesterday you got a chance to see how release 0.2.5 turned out in Vye's adventure wrap-up blog post "Adventure Completion: Sense of Identity." If you haven't checked that out yet I highly recommend it.

With 0.2.5 done it's time to move on to 0.3.0, and this past Monday the team and I got together to review and plan for the upcoming sprint. With 0.3.0 being the last release before Chronicles of Elyria is released to the Alpha 1 backers (in the form of the VoxElyria client), a lot of the focus of 0.3.0 is on performance, stabilization, scalability, and prep work for the impending invasion of the players onto the Elyrian servers.

Even still, the design and content teams are hard at work on the creation of new systems and new assets as a follow-up to the work we did in 0.2.5 on Equipment, and the work we'll be doing in 0.4.0 on crafting. But with that summary out of the way, let's take a deeper look into what we'll be doing in 0.3.0.

The Quest for Conversation

A MEOW (Multiplayer Evolving Online World) isn't a MEOW without a heavy emphasis on proximity chat. With the release of the VoxElyria client it's also imperative that our players be able to interact with one another in some way or form inside of VoxElyria. To that end, our newest engineer, Brizanda, has been given the task in 0.3.0 to get our proximity chat system up and running. If you'd like more information about how our chat system is intended to work, make sure to check out Vye's recent Design Journal: Communication.

Chat concept Wire frames for describing the chat functionality.

A couple early prototypes of the chat dialog showing proximity fading and message types.

And speaking of Brizanda. As she just joined the studio, it's customary to do a brief introduction. So, here's Brizanda in her own words:

I've wanted to make games since the first game I ever played which was Space Invaders on my aunt's old Atari 2600. Instead of a direct route I jumped into business software development and created games as a hobby. That hobby turned into my first job in game development about 10 years ago. Since then I have worked on Club Penguin, Deer Hunter 2014 and 2016, Amazing Battle Creatures, and several other mobile titles. Most recently I worked on the platform running Wargaming's "World of" games and other titles they are developing.

When I am not making games, I am playing one of the 450+ games I have in my Steam library, PS4, Xbox One, or PC. I take breaks from games with a good book, usually fantasy and occasionally sci-fi. I also have been known to dabble in art and coloring books as a way to relax, but take long breaks where I don't make anything at all. I have a 3d printer that also takes up my time by mostly printing things for my kids to play with.

The Quest for the New World

There are two key elements of this quest: generating the maps and letting you vote on them. Let's discuss the last one first!

Map Voting

As you know, Brizanda isn't the only new engineer we picked up recently. Our newest web programmer, Orlando, has been ramping up quickly with almost continuous on-line classes, in-office lessons, tests, and coaching from myself and Death. When I asked Orlando to describe himself, he had this to say:

I enjoy playing Roguelike games, to the point that I wanted to make one someday. I was inspired by sites like Touch Arcade but thought I wasn't capable enough to make it as a game developer. After playing the game "Human Resource Machine", I decided to start learning on my own. I started studying JavaScript and trying to learn from my sloppy coding mistakes. There were a lot of times that I didn't get to watch the show I wanted, play the PS4 game that was out, or go out for drinks with friends. In the meantime, someone I considered my mentor recommended me for my first freelance web assignment. My first paid project! I worked on this project during my off the clock time at the office. Coworkers saw me spending lunches hunched over a Microsoft Surface, typing away. I got asked to teach some fellow employees the basics of JavaScript and then to review someone's code. I started writing code to automate some of my responsibilities, which lead to me doing it for the rest of my team. This turned into a real project where I was getting paid to do so.

The next part of this story is where my hard work didn't pay off. I just got lucky! Through a friend of a friend sort of thing, Caspian heard I was looking to learn more about programming and web development and reached out to me with an internship and a great opportunity. Of course, I had to take a bunch of programming tests and make a bunch of test websites, but I didn't care. I love learning and coding, whether it's making a game or a web page. I am still in shock and this experience has been surreal. Loving every minute of this so far.

And Orlando has been doing great work so far. In release 0.3.0 he's been tasked with laying the foundation of the Map Voting we'll be doing in the not-too-distant future, by developing the landing page for that. It'll be similar in style to our Surname Reservation page but will, obviously, focus on map voting rather than surname reservation. While it's still subject to change as we do internal testing on the implementation, here you can see a screenshot of the wire frames that were created for the map voting page. Note: I already know there's some iteration happening on the map voting UI to make it easier to filter which of the maps you're most interested in, as well as compare two maps efficiently. Even still, here's what the wire frame currently looks like:

Map Voting Reservation

All the little dots you see on the screenshot are bullet points we use internally that correspond with notes in a functional spec. Each one references some part of the page, along with some details about what's expected to be there and how it's expected to behave. Look past them if you can. It's all part of the process.

World Generation

And speaking of Map Voting, while it's been de-prioritized slightly due to the other work I'm doing for the pre-alpha release (discussed below), I continue my work on world generation in 0.3.0. Previously, Raevantiel was making procedurally generated maps using external tools which, while capable of creating the look and feel we want for the various biomes, weren't capable of creating the size of the world we ultimately need, nor creating a single cohesive world made up of each of the various biomes.

So, in 0.2.5 I began work on creating a tool that would allow us to procedurally build our entire world. In 0.2.5 I got the continental silhouettes working, complete with coastal erosion, and in 0.3.0 I will continue with topology and weather, allowing us to fully define which regions of every continent of the world are of which biome. You can see a few sample continents below, which illustrate what you might expect the starting continents to look like for the different servers (the archipelago for Oceanus). Note that you can clearly see the continental drift, as it's obvious that they used be a single land mass.

Chat Proto-1 Chat Proto-1 Chat Proto-1 Chat Proto-1

While I continue my engineering work, Raevantiel and Souzou continue their design work. In particular, Souzou and Raevantiel are working throughout 0.3.0 to define the finer details of the terrain topology for all the remaining biomes, as well as information such as soil composition. The information they're defining and the work they're doing will provide valuable information to the world generation system when determining where the interesting landforms will be - things such as rivers, gullies, ravines, cliffs, caverns, and aquifers.

The Quest for Pre-Alpha

Also known as the Quest Where VoxElyria Enters its Alpha 1 Phase. There are a couple matters to attend to here, as well.

Client Side Prediction Revision

When running an online game with physics, it's important that the client and server share some of the load. For example, if I'm playing and I have my character up against a fence or wall and I press "forward," there's no way my character will be able to go anywhere. I can save on server load by letting the client make that determination and then never even sending the request to move to the server.

At the same time, if I'm receiving input from the server about what other characters are doing, I can make a local determination about whether characters are going to collide before waiting for the server to tell me it's going to happen.

This process of pre-calculating events on the client is called "client-side prediction" and requires the client have a mini-physics server running inside the client to help make those determinations. When we first implemented client-side prediction we made the server a little too authoritative, sometimes over-writing what the client believes is the "truth" of the state of the world. This leads to some jittering and part of release 0.3.0 will be our engineer Sekmu revisiting our client-side prediction system to make locomotion and animation run smoother. This is ultimately being done to improve the accuracy of collision detection for the purpose of crafting and combat, but the changes he's going to make will also make current physics tasks feel more responsive and smooth.

Server Optimizations & Metrics

Speaking of responsiveness and running as smooth as butter, with the impending Pre-Alpha release, Chronicles of Elyria will finally be growing up. We're going to be transitioning from having dozens of players able to be in the world at once ... to thousands!

To ensure that we're able to scale effectively, I will be working more on our scalability, load balancing, and other platform solutions to make sure we're ready to go. I'm also incorporating telemetry and metrics so that we can see how the systems are performing on the production servers.

Another thing I'll be working on in 0.3.0 around performance is improved terrain streaming. Currently terrain is streamed to the client in a single layer, which while functional, can result in some slow loading times on poorer connections.

In 0.3.0 I'll be refactoring the terrain system to load and render data in layers, which not only results in less data having to be sent to the client at a given time, but also results in less visual artifacts and less popping. Ultimately, this allows us to load and display a low-detail version of the world even at ranges of greater than 8km!

The Quest for Elyrian Lifestyles

So far, I've mostly been focusing on the Engineering Guild. But make no mistake, the artists and animators are hard at work making the world more real. On the heels of 0.2.5, the content team now have equipment slots they can play with and will be adding a slew of new clothing and armor to the world, as well as weapons and a few other surprises in 0.3.0. It's seems somewhat taboo to be describing the work that the artist will be doing in 0.3.0 when I can just show you some of the awesome stuff they've started on. See these images below for a taste, and then make sure to check back in the next couple of weeks for the progress report and conclusions



A concept of Hrothi clothing and light armor.



A concept of Brudvir clothing and light armor. More tribal equipment being created in 0.3.0 as well.



Some weapons and shield sets for the Brudvir and Hrothi. Again, more sets than this will be worked on throughout 0.3.0

And last but certainly not least, Vye and Snipehunter are spending 0.3.0 preparing for additional crafting work we'll be doing in 0.4.0. In this release, they're working hard together to define a broad set of new techniques, codices, and recipe books for each of the crafting professions. These codices are collections of techniques that can be learned by people wanting to get started learning skills for various professions, and the recipe books are the collections of patterns needed to learn to create items as well as their individual components.

The broad work they're doing will lay the groundwork of ensuring our crafting system has the same core principles, is consistent in the mechanics from profession to profession, but each profession ultimately has the time they need to be thoroughly designed and bake tested before being put into full production.

Of course, since we're going to be continuing to work on crafting in more and more depth going forward, they've asked to have the content team create some initial assets for them to use in prototypes they're doing of their own designs. You can see a couple of those here.




Wrap-Up!

That's it for this introduction folks. We're just now about a week into this release but already a ton of progress is being made. This is a heavy sprint for us, with a lot to do in a short period of time, but the team is pumped, excited to see more content showing up in the world, and of course - getting the world ready for our soon-to-be guests.