Dev Blog 18 - We Know What We’re Doing Now

Fare eve to you. It’s Brandon, and I’ve been keeping a secret. But at long last, my lips are sealed no longer:

It’s time.

We’ve been aching to tell you about this for months, now, because it means a lot for the future of the game.

Are you ready?

Are you really ready?

Okay, I might be hyping this up too much. It’s not that crazy:

Our team has partnered with Skymap Games! They’re a game development studio full of really awesome people who are excited to help with Rolled Out, and I’m just as excited to be working with them.

To explain what this means for the project more concisely, I’ll let Skymap’s Managing Director, Neal Laurenza, take it away.

Hey everyone, Neal from Skymap here! I want to start by saying how extremely excited the whole Skymap team is to be helping on Rolled Out. We’re all huge fans of games in the genre, so the opportunity to work on one that we feel is best in class is a fantastic opportunity.

A little backstory: Some time ago during Games Done Quick, there was a shout-out to the Rolled Out project that caught my attention. After some time chatting with Brandon and the dev team, I knew we had to find a way to collaborate and help out on the project. In the last couple of weeks, my team has started helping on the game, and we can tell this is going to be a homerun for players… we think you’ll all love it.

A little info about Skymap! We have an amazing group of developers who will be supplementing Rolled Out’s core development. Skymap has worked primarily as co-developers on close to 30 projects (check out some on our website!). Our goals are multifaceted; we want to help speed up the game’s production, increase the level of polish across all aspects of the project, and explore all of the ways we can deliver the game to the fans. There will be more information on this coming soon :)

In the meantime, I hope you enjoy the rest of the devlog! The Skymap team is in the Rolled Out Discord, so feel free to ping me or any of our team members if you have any questions. TEAM! ROLL OUT! -Neal

Yes, Neal really ended that with ‘ROLL OUT!’. I’m just as impressed as you are.

If you’ve been particularly attentive, you might note that there are a few more people with developer roles in the Discord, with Skymap attached to their names. These are the skilled developers who have joined the project so far. Here’s just a taste of what we’ve all been working on!

Starting off, the regular: new levels.

level 1

level 2

level 3

level 4

level 5

If there are levels here that you can’t see how one might complete… don’t worry, all will be clear in due time.

Here is some art stuff we’ve been working on, too!

Concept art from Laurence…

heavenly chamber concept

…and some awesome 3D asset WIPs from one of the new Skymap folks, Ryan.

pond assets

A lot of stuff has been happening code-wise behind the scenes, as well, but it’s difficult for me to summarize. That being said, what would a dev blog be without a writeup from CraftedCart? Enjoy.

The joy of quaternions


So, there’s a few ways you can represent rotations in 3D space - perhaps the easiest one to explain would be Euler angles. Euler angles are super simple: rotations are represented as a rotation along the X axis, followed by a rotation along the Y axis, followed by a rotation along the Z axis… or maybe a rotations along the Z axis then X then Y… or maybe something else - the order can be different between different bits of software.

Quaternions are another way of representing rotations, and a far less intuitive one at it! I’m not a mathemagician, despite what this pencil I got from a secondary school math teacher may say, so I don’t quite fully understand them myself, but from what I’ve gathered, they’re a way of representing rotations with four components X, Y, Z, and W - something along the lines of storing an axis to rotate around, plus an angle, plus some more extra steps.

I couldn't find that pencil, so here's an artist's rendition

Anyways, there’s a few other ways of representing rotations, but those two are the most common ones you’ll find around when it comes to working with game dev, computer graphics, and more. For Rolled Out! stages, we use quaternions - why quaternions instead of the much simpler Euler angles you may ask? Well I’ll let this video explain why.

Follow the tip of the arrow - note how when I set it to rotate with quaternions, the arrow moves in a straight path towards its target - with Euler angles, it takes a bit of a curvy detour to get to the target. Trying to animate with Euler angles doesn’t always give you what you may expect!

Another issue with Euler angles is something called “gimbal lock”.

It’s possible to rotate 90 degrees on one axis with Euler angles, and then just lose an axis of rotation! See how after I rotate 90 degrees on the X axis, the Y and Z axes line up and rotating either of them rotates the monkey in the same way! Wuh oh…

(This is a good video if you want to learn more about gimbal lock)

Soo… that’s why we’re using quaternions.

Anyways, I’ve just been tinkering with stage animations as of recent. I’ve talked about how we use animation curves now to interpolate objects from point A to point B - rotations throw a bit of a spanner into the works. The way I’ve been setting up the whole animation curves stuff makes it easy to just animate any single numerical property on an object, like an object’s X position or Y scale. With quaternion rotations however, it generally doesn’t make much sense to individually animate the X, Y, Z, and W components one-by-one. What’s typically done instead is a thing called “spherical linear interpolation”, or “slerp” for short. You take a start quaternion rotation and an end quaternion, as well as an “alpha” number, telling us how far we want to interpolate from the start rotation to the end rotation. Feed that all in to the slerp function and you get another rotation out.

We’re still gonna have curves to let you define how an object should rotate from rotation A to rotation B, it’s just gonna look a bit funky though as you’ll be animating that “alpha” value instead.

How quaternion curves work

So, unlike position and scale keyframes where the Y axis on the graph represent a position or scale factor, for rotations the Y axis represents an interpolation percentage. Each keyframe has a quaternion associated with it, and the curves between keyframes represents in what way we want to animate from the previous rotation to the next rotation.

Anyways that’s what I’ve been tinkering with as of recent. I may present all this in a coherent (I hope) way, but my thoughts sure as heck have been anything but coherent in the past few days. >.<

rotations have haunted me in this game from day 1 - they’ve always been a right pain to work with

I’m very excited for the upcoming months of the game’s development, and you ought to be, too. I’ve been itching to talk about this stuff for some time, now, and I’m glad it’s finally out there.

I’m hoping that future dev blogs are going to be really cool! See you all on May 15th.