Custom Track Tutorial/BOL

mkdd track editor Basics
There is only one tool that is practical for editing .bol files, the mkdd track editor by Yoshi2. It loads the course features in a viewpoint. There are many different features, but the basic ones are described on this page. More advanced features are described in the link above.


 * Coordinate changes from the modeling software to the .bol editor: X stays the same, Y in the editor = z in the software, Z in the editor = -y in the software
 * The editor can load either a .bol file or an .arc containing a .bol file. In either case, only the .bol will be edited.
 * Loading an .arc file can be useful for long periods of only .bol editing.
 * You have the option of editing the vanilla .bol file, or just erasing everything from the vanilla .bol file and starting from scratch. Either way, you pretty much have to “make” the .bol file yourself as there are no good editors from other games to .bol.
 * Before testing something out in-game, always check for common errors using Misc -> Check for Common Errors.
 * If you don’t know how to implement something, look around in vanilla .bol files and copy their implementation.
 * With one or more objects selected, the "Ground Object(s)" button will change their y-values to be the closest y-value in the model loaded (if any). It is very useful.
 * You can load .obj / .bco / .bmd files by clicking on “Geometry” and then selecting the appropriate action
 * Note that to load a .obj, the .mtl file must be in the same folder.
 * You add anything by clicking on the “Add Objects” button on the top right.
 * Then, click on the drop-down menu to change the type of object being added.

Basics for Course Functionality
These two parts of a .bol file, especially starting points, are the basic necessities required to play a track.

Starting Point
The starting point defines where a player will start on the course. For normal racing track files, there is only one of these with a player ID of 255 / -1. Move this to the desired starting point, rotate it as needed, and ground the point.

Checkpoints
Checkpoints track the progress of a racer around the track. Consecutive checkpoints form boxes, and the entirely of the track should be contained with these checkpoint boxes.
 * Make sure that all checkpoints are pointing the right way and evenly spaced. The red point should be to the “left” of the blue point from the perspective of a racer.
 * You can see the direction of the checkpoints by the arrow in the editor.
 * All checkpoint boxes should form a convex quadrilateral, or else the game will not count them and a player will not be able to finish a lap.
 * Checkpoint boxes are formed by the four points of two consecutive checkpoints
 * This can easily be checked by Misc -> Check for common errors
 * Checkpoint Settings
 * Unknown One: Used to make dev-intended shortcuts, like in Yoshi Circuit and Bowser’s Castle.
 * Normally 0 - leave as 0 if unsure
 * All checkpoints in the group use the same number; different groups should use different numbers. If checkpoint 20 has “1”, and checkpoint “50” also has “1”, checkpoints 20 - 50 will be thought of having “1”.
 * Having too many checkpoints in any skippable group could affect lap completion, making a lap unfinishable.

Extended Basics for Course Functionality
While these sections are not strictly necessary for a track to be played, they provide such necessary functionality that they should be done for all tracks.

Header
This section defines miscellaneous course information, such as lap count, course music, light colors, and more.
 * Most of the time, "Tilt" should be set as “None”.
 * For using Daisy Cruiser tables, set this to “Only Sky / Items”.
 * For Tilt-a-Kart style tilted, set this to “Entire Track”. This might make your track unplayable without serious collision modification.
 * Lap Count should be 3 most of the time, but never greater than 7.
 * Beyond seven laps, the game is unable to store individual lap splits in ghosts.
 * Course music:
 * Individual course music is dealt with via the patcher. In development, this value can be left alone.
 * The particles that come out of the kart when you drive over a certain collision flag is determined by the sound id.
 * SL Environment effects: Should be unchecked unless you are making a snow-based course.
 * Creates the snow falling effect and the ice when respawn from a deadzone

Enemy points

 * A black line between two points means that the two points are in the same group. A blue line between two points means that the two points are in different groups, but still connected.
 * To link groups together:
 * All points in a group that are not at the start/end of their group should have a link setting of -1.
 * All start/end points in an enemy group should have a nonnegative link setting.
 * No two points in the same group should have the same non -1 link setting.
 * All points that you want to link should have the same link setting. Start with 0 for the first connection and then go up by 1.
 * You may run into an issue with how the kart follows these paths after a time trial run is completed. This means that towards the end of the course, the kart went off the “path” specified by the point / scale setting. You can see when this occurs by hooking the editor into Dolphin and seeing when an enemy path point is not highlighted.

More Advanced Core Sections
Objects/Object Routes Item Boxes
 * Most of the known object settings can be found in the latest version of the editor, but a complete list of item settings can be found on the Objects page.
 * Making sure that each object has its required assets is very important, as the game will crash without them.
 * If you plan on using items that are normally found in the game, copy their implementation from how they are used in vanilla, and then tweak it from there. This includes object setting values and necessary assets (.bmds / shadow .bmds / animation files).
 * Making custom item models
 * If you want to make a custom model for an object, all of the animation files for that object that are found in vanilla need to be included. Information about how to make animations is listed later.
 * Item collision are hardcoded, meaning that you cannot change them.
 * Routing objects
 * Items that don’t already have routes, as a general rule, cannot suddenly be routed, and items that normally have a route need a route.
 * Different items go along their paths differently; WS piranhas will always face the same direction, but DC seagulls will change direction to follow the path. The MB/MuC vehicles will teleport from their last route point to their first.
 * Only the MB/MuC vehicles and SL Shy Guys use object route parameter. For the vehicles, if non-zero, it it set to the next value. For the Shy Guys, a "1" will cause the Shy Guy to jump at that point.
 * Types of Item Boxes
 * GeoItemBox (id # 0x01): The standard in-place item box. Can be double or single. Its model is shared by all courses.
 * GeoF-ItemBox (id# 0x0a): The standard routed item box. Can be double or single. Its model is shared by all courses.
 * TMapObjMoveItemBoxLimit (id# 0xdb0): The routed item box used on DC that is synced with the tables. Are only single. Its model is shared by all courses.
 * GeoItemCar (id# fa8): The routed item box used on MB/MuC. Are only single. Its model is kept in the objects folder of the course.arc
 * Object settings for GeoItemBox and GeoF-ItemBox
 * 1 - Height Offset: How much the item box is raised from its y-value. Should be set to 135. Also used by TMapObjMoveItemBoxLimit
 * 2 - Item Box type - 0: Either. 1: Always single. 3: Always double.

Areas and Cameras Replay cameras Grand prix course intro specific cameras Camera type 8 - the immediate post-race camera Camera Settings
 * 0, 2: Unrouted camera
 * 1,7: Routed camera. 1 is more standard
 * Require an associated area in which it will be used
 * 4 ("DoStartFixPathCam"): Will travel on the path specified, but only focus at its start point
 * 5 (“DoStartPathCam”): Will travel on the path specified, but move its focus between the start / end points
 * 6 ("DoStartLookPathCam"): Will remain stationary, but move its focus between the start / end points
 * Other types of cameras can be used for the grand prix course intro, but it is not common.
 * Grand prix cameras are the only cameras that use the “next camera” setting. The first camera is specified by a “1” for the “Start Cam” setting, and the last camera has a ‘next camera” of -1, like normal cameras.
 * The sum of the durations is usually around 600. Higher durations won’t cause the game to crash, but there will be an awkward time after the music is done and the cameras are still running.
 * Identical in all courses - should not be touched
 * Its direction is used in replay cams when a kart is not inside Type 1 area
 * Zoom - the angle of viewing
 * A higher zoom means a wider angle
 * Should be kept within (0, 90).

Areas
 * 0: Shadows
 * 1: Camera
 * 2: Disable SL environment effects and function as a ceiling
 * 3: Unknown (Used in Waluigi Stadium over the final gap)
 * 5: Used to disable falling animation when going off a zipper
 * 6: Unknown
 * 7: Used for special lighting - connects with a LightParam index
 * The y position value is always at zero, but you may need to adjust the value of the y scale to get it to work

Testing
 * Can be tested by watching the replay of the course after a time trial or grand prix mode.
 * If there is a section of the course which is not in an area, then the replay camera will view the kart from one fixed view, as seen here.

Respawn points
 * Every deadzone area should have a respawn point associated with it, if not, the triangles will act like normal road.
 * If there are issues with lap completion after respawning, moving the respawn point backwards by a few checkpoints usually fixes the trick.
 * The route point setting, which defines which route point karts will seek out after respawning, must be set.
 * There is a setting for the checkpoint preceding the respawn point - should be left as -1 if unsure.