The unofficial Distance level editor guidebook is an easy to access way of learning about the many tools available to you in the level editor. But besides describing many of the individual tools and functions in the editor. It also provides you with a step-by-step formula to creating your first level.
That being said there are many different ways to approach level editing, and the one portrayed throughout this guide is just one of those many.
In this guide we will try to cover as many basic functions of the in-game editor as possible. Should you stumble upon something you think is missing, or outdated even. Please do not hesitate to contact us so we can update the guide accordingly.
Basic Level Creation
The Very Basics
The first thing to do is delete the LevelEditorCarSpawner that comes with a new level. You won't really need it, as the beginning piece will automatically spawn a car there. You can use the LevelEditorCarSpawner to test the track starting from a certain point, though.
Every sprint level needs a start point. Enter the "Roads" folder in the library and double click on EmpireStartZone. This will place the beginning of the track at the cursor.
Double click on EmpireSplineRoadStraight to add a straight piece of track. If you have a road piece selected, such as the EmpireStartZone, and you add a new road piece, it will automatically be connected to the end of the track.
Try adding other types of road pieces! You can change the orientation of a road piece by selecting it and pressing F.
Let's see how things look so far. Press ~ to test your level!
Before we continue, we need to start getting in the habit of adding checkpoints.
First, right click the surface of a straight piece of road to move the cursor there. Right clicking any physical object moves the cursor to that point and rotates it so it's pointing to the surface of whatever you right-clicked.
Next, double click EmpireCheckpoint in the browser. We have a checkpoint now! Checkpoints reset the cooldown of the car, and placing these properly is an important part of the flow of a level.
Now, select the checkpoint and press Shift+A. This will attach the checkpoint to the track. This means if you move the track, the checkpoint will follow it. Also, you can press M and move the mouse to move the checkpoint along the track. This method is the best way to place objects while keeping their orientation relative to the road correct. You can also place more checkpoints by duplicating (Ctrl+D) the first one and moving them along the track (this way, you won't have to worry about backwards checkpoints).
So far we've only used the stock road pieces. Let's try manipulating the road pieces ourselves!
Add a new EmpireSplineRoadStraight to the end of the track. You'll notice that there are green rectangles marking the beginning and end of every road piece. These are track nodes. Select the node at the end of the piece you just added. You can manipulate these in any way that you can manipulate any other object!
There are three different tools you can use to transform objects: the move tool, the rotate tool, and the scale tool. You can switch between these by pressing W, E, and R, respectively. Try manipulating the nodes in different ways! The tracks will morph to fit the nodes properly. You can also manipulate the nodes between already-placed pieces of track, and it works the same way.
Time to add some branching paths. Add an EmpireRoadTriSplit to the end of the track. This piece is different from the previous track pieces we've used in that it has 3 nodes. To add track pieces to a specific node, just click that node and that add the track you want. This works for all sorts of track pieces.
Now we want to make the branching paths meet back up later without the track getting crooked. Duplicate the EmpireRoadTriSplit (Ctrl+D). Whenever you duplicate an object, you can move the mouse to move the new object around freely, but we don't want this, so press ESC to exit this mode. Instead, use the move gizmo to move the new EmpireRoadTriSplit in the direction of the track. Then, go to Tools>Rotate Object 180 around Y axis in the menu bar. This flips the object around so it's facing the other way. Move this object as far away from the track as you want.
You're going to be able to make your branching paths so they end up pretty close to the second TriSplit, but you won't be able to make them match up exactly. So let's connect some nodes together. To connect two nodes, select the node you want to move, and then hold shift and select the node you want to connect it to. Press ENTER to snap the nodes together. The node you selected first always moves to meet the node you selected second.
You can also select the road piece itself before selecting the first node. When you press enter, the entire road piece will move to so that the two nodes connect.
Obstacles are placed just like any other object. You can find them in the "Obstacles" folder. Let's add some spinny lasers!
Set the cursor to a straight piece of track. Then, go to the "Infected obstacles" folder in the "obstacles" folder, and add a VirusLaserTriCircleRotating. If you want to move it to a curved piece of track, you can attach it to the road (Shift+A) and move it (M) wherever you like, just like with checkpoints.
If you test the level (~), you'll notice that the lasers rotate back and forth. You can change the speed of the rotation, among other things. Go back to the editor, and click the obstacle to select it. Then click the properties tab in the menu on the right-hand side. Scroll down to the section "RigidbodyAxisRotationLogic". There, you can change various aspects about how the lasers rotate. Try increasing AngularSpeed and RotationBounds. You can use the arrows on the side of the text field, click and drag, or enter a number directly. Then test the level. The lasers should be rotating farther and faster than before.
Uploading to Steam Workshop
Is your level done? It's time to upload it, then! First, check a few things:
- Make sure your level has a proper title.
- Make sure you've marked the modes this level can be played in (you can find this in the level settings tab).
Position the camera in the editor to be a good preview of the map! This will be used as the thumbnail for the level on the workshop. Once you've done this, click Save and Publish to Steam Workshop in the menu on the right. Also, be sure to edit the description for the level once it's published! Nobody wants to play a track that says it's "an awesome community level."
Its a good idea to work with a theme in mind. There are lots of different ways to combine visual elements and create a unique theme. A level with a unique theme can go long way to making it a better overall level. But there are also loads of really good levels that work with some of the "basic" themes, or even the default theme of Distance! Here are 3 examples of levels with different themes.
Broken Symmetry uses empire buildings, empire and glass roads, and only a minor change in the overall color scheme. The level is one of the only official levels that uses a greenish color scheme perhaps to convey the feeling of being safe starting out.
Contraband Delivery uses posters with all the colors in the rainbow to simulate a real world city and its commercial billboards. Reflective surfaces are used to illustrate gigantic "office" buildings. It also uses dense fog (to simulate pollution), dark buildings, and a ton of decorational girders.
Cubic uses its theme to convey a dystopian future vibe. It uses gray colors with all white-ish emitters and lights. Only one or 2 actual building models and a bright yellow color to capture the players attention whenever needed.
As you can see a well thought out theme will not only make your level prettier. It can also help you tell a story or set the mood.
The best themes are the ones tailored for the level they are applied to. So take your time and get the theme just right, so that you feel it accomplishes what you want with the level.
Utilizing colours is an important part of level editing in Distance. All of the objects are made up of different components, some of which represent behavior and some of which are physical components. Many of the physical components have color properties you can change. The different properties are:
- Color: This usually refers to the largest continuous part of the object. In the case of buildings its a good idea to set this to something that's easy on the eyes, as this will be one of the most prominent colors in your level.
- Spec color: This is the reflective value. Its layered on top of the "color" of the object and is only shown relative to what angle the player camera is looking at it from.
- Emit color: This slot often refers to a "glowing" part of the object, and its a really good place to enforce the bright and most prominent colors of your overall theme.
Let's start by placing a lamp on the track. First move the cursor so it's on the side (or railing) of the track you want the lamp to be on. Add an EmpireLamp from the "Decorations" folder. Once you placed the lamp make sure it looks like its actually connected to the track! Use Alt + S to rotate it correctly, and use the movement gizmos to get the alignment just right. Once it looks like it's actually connected to the track, attach it (Shift + A). Once we have done this it will follow the road if we move it and we can easily duplicate it just like the checkpoints.
Adding buildings is simple. First, go to the "Buildings" folder in the library. Once you've found the building you want to add, double click it to spawn it at the cursor location. You can then move and rotate the building to where you want them using the move, rotate, and scale gizmos.
LigthingThere are three types of lights in distance:
- Ambient lights
- Point lights
- Directional lights
Ambient lighting is a background light which lights every direction up an equal amount there are three sources of this ambient light: the sky, the quator, and the floor. All three of these sources are modified through the level settings tab where you can adjust their colour and intensity.
Point lights are objects you can place to give your self more control over the lighting in your level. These allow you to highlight objects in your map and bring out details.
Finally directional lights are lights that sit out in your sky box and project light into your level. Each level has at most one, all though you can modify it's properties through biodomes. Moreover it is the only light in distance which casts a shadow. We will talk more about this one in the biodome section.
Be careful when decorating your level. Putting too many objects in a level will make it lose FPS (frames per second). That's why it's generally a good idea to always have the frames per second counter showing. To enable it press ALT + F10.
Loss of frames can happen for multiple reasons:
- Placing too many objects in a level overall. It won't matter if they are not always seen or within the visible draw distance. Too many objects will lower the FPS, so try to pace yourself.
- Too many objects in the visible frame. On the other hand loss of frames can also occur from having the game draw too much stuff at once. If you ever encountered that a level suddenly played at a smooth 60 FPS and then dropped to 20, that's because there was just a section of the level where there was too much stuff going on, but now that the game doesn't have to draw it anymore, everything is fine.
- Too many light sources. when the scene is rendered each object has to work out how the light hiting it is drawn. The performance hit you take from this is roughly described by: # of lights × # of objects illuminated. So decreasing either one of these numbers will increase your performance
- Too many anything technical. Generally objects that move or have a technical function (like lasers fx) will impact your FPS if you put too many of them in your level.
Caring about your FPS is very important. Especially because a lot of people play distance on different computers. One level that works 100% flawlessly on one computer might be completely un-playable on another. So even if you are just getting a tiny decrease in your FPS after adding 200 buildings to your level, it's still worth considering decreasing that again if you are on a good computer.
Its hard to set a bar for what's an acceptable FPS in any given community level. Just remember, playability MUST come first.
Hard levels are good! But there's good hard and bad hard. You'll always be better at your own level than everyone else will, so when you're trying to gauge the difficulty of your track, try to put yourself into other people's shoes. Here's some basic guidelines:
- Try to keep the difficulty relatively consistent throughout the level.
- Make sure people have enough time to react to obstacles. For example, don't have popup blockers that pop up without enough warning, don't have road transfers that are too close to each other, etc.
- Use arrows to guide the player when the path through the level is ambiguous.
Think about how hard the level is to you. In all likelihood, it's going to be a few notches harder for everyone else, so keep this in mind!
In some racing games, the boost is something you use occasionally when you want to go extra fast. In Distance, it's something you want to use constantly. However, boosting causes your car to heat up and eventually overheat, and the only things that can cool you down are cooldown rings, checkpoints, and tricks.
So if you want the player to be boosting all the time, you should put in plenty of cooldown rings and checkpoints! It's pretty easy to do this right, just test your level and make sure you can get through the whole thing without overheating. It feels even better if your cooldown rings and checkpoints are spaced out so you're almost overheating as you reach them, but that's not super important.
Skips. The bane of casual players everywhere!
Skips are a reality of virtually every Distance map. Unless your map is a straight line, there will be some way to cut corners and skip things. Understandably, this is disappointing to map makers, as people can skip over the track they worked so hard on. It's also disappointing to casual players who feel like they can't compete with people who know skips.
However, skips are not a bad thing! There is beauty and creativity in breaking the intended path of a track, and more importantly, you really can't prevent skips in Distance. The car has rotational thrusters, a powerful booster, and wings. If a player wants to go somewhere, there's nothing you can really do to stop them. So embrace the skips! Skips are fun and good.
That being said, there's still things you can and should do to prevent really egregious skips. Here are some good principles:
- Avoid having the track loop back on itself. This is just asking for someone to jump up onto the higher/lower track and skip a bunch of stuff.
- Keep the track on a relatively straight path. That doesn't mean not to have turns, but the more curves you have, the more a player can cut across those curves. Keep the curves shallow.
- Uphill tracks are harder to skip than downhill tracks.
- Add shortcuts! Now they're intentional, so they're not skips.
- Turning off the car's abilities (boosters, rotational thrusters, and jumping) is not generally an effective way to prevent skips. It's one thing to do it for thematic reasons, but doing it just to prevent skips will just making your level less fun.
This guide is far from comprehensive (we're working on it I swear) the best place to get more information is to come to our discord channel and ask.
If there is something you want added feel free to hit me (pigpenguin) up over on the discord. Or if you are up to it, fork the repo and send me a pull request.
|Test level||~ (tilde)|
|Copy color properties||Shift+C|
|Paste color properties||Shift+V|
|Copy light color properties||Ctrl+Shift+C|
|Paste light color properties||Ctrl+Shift+V|
|Attach to road||Shift+A|
|Move (attached objects)||M|
|Move to cursor's position||Shift+S|
|Align to cursor's rotation||Alt+S|
|Toggle node display||T|
|Zoom in on selected object||Middle-click|
CreditsThis guide is written by Krispy (@KrispyVG) and Tesselode (@aspinach). Banner art by Jam (@QuixoticJam). People who also helped: