
CRASH TEAM RACING CUSTOM TRACKS TUTORIAL
WE HAVE A NEW SITE: GO TO CTR CUSTOM TRACK TUTORIAL FOR THE LATEST UPDATES!
NOTE: This tutorial is incomplete. Use this as an initial guide, and check out the discord for specific questions about the process. (last update: 26th Jan 25)
Table of Contents:
DISCLAIMER BY THE DEVELOPER:
CrashTeamEditor is a BETA software. DO NOT expect it to run flawlessly. Bug reports are highly appreciated! Playing your level via hot reload is NOT officially supported, so use that at YOUR OWN RISK.
REQUIRED PROGRAMS:
Crash Team Modding - Portable GUI version of psx-modding-toolchain to simplify building custom CTR ISOs. CrashTeamEditor - The primary software used to create the .lev file of the track. Features checkpoint allocation, skybox gradients, and more! CTR-ModSDK - A modding toolkit to create mods for Crash Team Racing into the C programming language, also houses an effort to fully decompile and reverse-engineer CTR in C. The main software aiding in the future fanmade CTR PC Port.
3D MODELING:
- Model your track in a 3D modeling software, such as Blender, with the following restrictions:
- Each mesh has to be made with quadblocks and/or triblocks
- Beware of making track blocks too big, or too asymmetrical, as this may cause issues that aren't related to the level editor, but with the limitations of the CTR engine. Blocks may be stretched to a certain extent, however, so feel free to experiment with size, ratio, and positioning of faces; as long the blocks are made with the right amount of vertices and formatted such as the examples below, your BSP tree in CrashTeamEditor should generate successfully. Each block length must not be more than 60.0f
- Keep in mind where the origin of the file is at, as this is what the game registers as the default spawn location. In the visual below, the origin on Blender is where the X-Axis (red line) and the Y-Axis (green line) meet in the center. The default position of the 3D Cursor is also located here.
Make sure that you position the start of your track at the origin!
Wait, what the heck are these "blocks"?
A quadblock (left example) is a geometry shape containing 4 quads. It has to be made out of 4 faces, and it has to contain only 9 vertices.
A triblock (right example) is a geometry shape containing 4 triangles. It has to be made out of 4 faces, and it has to contain only 6 vertices.

Not following this instruction will make your 3D model INCOMPATIBLE with CrashTeamEditor.
If you are using Blender and don't have much experience modeling, here are a few tutorials and plugins that could help you get started and familiar with the program:
Basic Functions, Hotkeys, and Navigation
Convert 2D Image Into 3D Mesh
Setting an Array On an Object Along a Curve
Retopologize Your Model (reduce geometry to have less faces)
io_ctr_tools - Plugin by ctr-tools that's capable to import untextured .lev meshes of CTR levels with vertex colors.
RaceTrackBuilder - Plugin by SrukaUka that is a beginner friendly tool to create simple race tracks that adhere to CTR's limitations.
Adding Color to your Model:
The main way of adding color to the track model is through vertex coloring. To do vertex coloring in Blender, set the Viewport to Color Attribute, then go to the Data Properties panel on the right hand side (green triangle). Go to the Color Attributes tab and click the + and set the base color you want. If you just want flat colors, that's all you need to do. However, if you want to add shadows or color variations, you would manually add them in through Vertex Paint mode.
Although materials are normally used for color in traditional model creation, for our purposes, they are used for classifying blocks in CrashTeamEditor. Ideally, you should have your main track path set as one material, any specific road types or special triggers as another, and the rest your track to be its own material. This will be further explained in the Skybox and Materials guide section below.
When exporting your model, be sure that Colors is checked. Feel free to experiment with what you'd like and see the results. Save as an .obj file.
Creating a Custom Texture for Your Track:
For custom tracks, only one 16x16px texture can be ported in currently, and it has to be 16 colors and under. Pixel Color Counter is a site that counts the number of colors in an image, and Online Image Compressor allows you to compress your image down to 16 colors if it's above the amount.
To create your own custom texture, you will need to access the ctr-tools program found in CTR-ModSDK/plugins/ctr-tools/.
Once you've opened it, go to the VRAM tab, drag and drop the .lev file on the form or use the browse button. When packing, make sure the .lev and .vrm files are located in the same folder. The upper textbox is for the .lev file path; the lower textbox is the texture replacements folder where your texture is located.
IMPORTANT: You have to make sure texture size is exactly 16x16 pixels and the file name of the texture is exactly 512_0_32_20_16_16_0.png, otherwise it will not pack to the VRAM correctly.
When your paths and files are setup correctly, press Pack to VRAM button. that's it! Rename the resulting .vrm file customtrack.vrm and it will now ready to be used in the game.
CrashTeamEditor:
- Download and install the CrashTeamEditor application. You may get a virus notification when attempting to download, but this is just Windows detecting false positives in the antivirus flagging system. Allow permissions for the file to download in the Windows Security settings.
- Open the editor, go to File, open the .obj file, You'll know it has opened correctly if the rest of the editor tabs appear. Generate a BSP tree*. Upon successful generation, you can save the .lev file and move on. Feel free to experiment with everything else the tool has to offer!
*If you failed to generate a BSP tree, there are track blocks in the file that don't meet the requirements to be readable in the editor. Go back and see if any blocks are made incorrectly.
Setting the Skybox and Materials:
You can have up to three gradients to make up the skybox of your custom track. Check Enable Skybox Gradient and adjust the colors to your liking. The values represent where the gradient starts and ends relative to the track's origin, From(top value) and To (bottom value). A recommended max height value is 120, and the min being -120.
Materials are used to classify quad flags, which can set different road types, classifications, and certain triggers. You use materials created while making the track model. It's best to set your main track as one material, and for specific quadblocks you want to have certain flags for, while the rest of the model is set to be a separate material with the Ground flag turned off, as this will help with checkpoint paths.
Checkpoint Path Generation:
It is recommended that you adjust and change other available settings to your liking first before beginning checkpoint allocation. Setting checkpoints requires the most troubleshooting and can be dependent on other options, such as materials.
Traditionally, you can set checkpoints via generating a path from the beginning of the track to the end.
Although you can manually allocate your own checkpoints to your own liking, this can be very tedious and time consuming, as you will have to set checkpoints on every track block yourself.
In the Checkpoints tab, go to Create Path and add the track blocks at the start and ends of the track to their respective tab. Make sure you select blocks that span across the width of your track; so if your track is three quadblocks wide, for example, select three blocks for the start and end.
If your track is relatively linear and has no breaks, you only need to create one path. However, if there are any breaks, sharp turns, or splitting paths, you will need multiple paths to properly generate the checkpoints. This is where the ignore tab comes in, as for each new path, you set the previous end blocks as the ignore blocks for the new one. When your track paths loop back to the start, the Generate button will become available to select. Click it and check if there are now checkpoints generated in the tab directly above.
SETTING UP YOUR PROGRAMS:
- Recursively clone and compile the CTR-ModSDK GitHub repository.
Cloning and Compiling GitHub Repositories:
The easiest way to clone and compile GitHub repositories is through Visual Studio 2022 (with C++ Development Pack installed). You may also clone the repos from the GitHub site directly through downloading the corresponding .zip file, found by clicking the green Code button. However, you may find it easier to clone the repo through Visual Studio 2022, as you may need to go there in order to compile it anyway. To do this, simply copy the https link above the Download ZIP button, open Visual Studio, click Clone a repository, paste the link in Repository location and change the path to a location you'll remember.
Ensure that your files and the folders you place them in has NO spaces, as this will mess up scripts in the provided files. This includes root folders and anything else in the direct path.
- Download and extract the crash-team-modding.rar file from the Crash Team Modding GitHub repo release page.
BUILDING YOUR ISO:
- When you have a .lev file ready to put into the game, go to the following folder in your ModSDK: /CTR-ModSDK/mods/Levels/PS1_TrackROM/src/ and rename your level to customtrack.lev, then replace the default one. If you have a custom texture file ready, replace the default customtrack.vrm here as well. Open the Crash Team Mod application, and select your CTR -Crash Team Racing (USA).bin file. Select ROM version USA and drag the buildList.txt from /ModSDK/mods/Levels/PS1_TrackROM/ into the designated area. Click on CLEAN COMPILED, then COMPILE. Upon successful compilation, click on BUILD ROM. The resulting ctr-u_PS1_TrackROM.bin should be where you placed the original file.
This will be your modded game file with your custom level. Congrats, you've imported a custom track into Crash Team Racing! If you'd like to share your mod, click on CREATE XDELTA to generate ctr-u_PS1_TrackROM.xdelta which others can patch the mod into their game with to enjoy!
[OLD METHOD]: How to Install psx-modding-toolchain:
- After compiling the psx-modding-toolchain and CTR-ModSDK GitHub repositories, install and setup Python. Ensure you are using the desktop installer (link provided in the Recommended Programs section) and not through the Microsoft Store.
- Paste the entire ModSDK folder inside your toolchain: /psx-modding-toolchain/games/ and rename it "CTR". Follow the setup instructions found in the /psx-modding-toolchain/docs/ folder (introduction + developing). Next, create a new folder in /psx-modding-toolchain/games/CTR/ named "build". In this new folder, place your original CTR - Crash Team Racing (USA).bin file here and rename it "ctr-u".
- Transfer the xdelta3 files into the correct location. Go to the ModSDK third party folder /toolchain/games/CTR/tools/Launcher/third_party/xdelta3/ and copy all of the files. Go to your Python include folder /Python/Python313/include/ and paste the files here. Finally, ensure all Python prerequisites have been installed with the code mentioned in the Python guide below.
- Once you do that, go back to the /PS1_TrackROM/ folder and double-click build.bat. The toolchain should appear in a command prompt with a numbered menu. Enter 1 to compile your ISO, then 1 again for the NTSC-U version. Once successful, enter 4 to Build ISO and 1 for the NTSC-U version.
Python Setup & Prerequisites:
When installing, right click on the installer and click Run as administrator. Be sure to check the following boxes:
[x] Use admin previleges when installing py.exe
[x] Add python.exe to PATH
From here, click Install Now and ensure the path was added correctly. You can do this by typing path in the Windows bar and going to Environment and System Variables. Go to Environment Variables, click on the Path variable in the System variables section and click Edit. If the Python path is not there, click New and add the path in. The default path should be in C:/Users/yourName/AppData/Local/Programs/Python/Python313/. Open a cmd (type cmd in the Windows search bar and click on the app result) where you'll type and enter where python, ensure only one location pops up.
Next you'll need to check the install for the prerequisites mentioned in the psx-modding-toolchain repo. After you're cloned the toolchain repo, go to the folder it's located in, hold Shift and right click an empty area of the folder. Click Open Powershell window here, and run the following code once it opens:
Next, open a cmd and run the following code:
When prompted, open a new cmd and simply enter mips. Select version 13.1.0 and install.
Wanna play some CTR Custom Tracks?
You can find links to most, if not all of the tracks created by the community here!
Recommended Programs:
7-Zip - For unzipping files in case you don't have the means to. DuckStation - An accurate PSX emulator to play your modded CTR .bin files. Delta Patcher - A self-contained GUI software to locally patch with .xdelta files. Blender - A free and open source program that supports the entirety of the 3D pipeline. Python - A programming language that lets you work more quickly and integrate your systems more effectively. xdelta Browser Patcher - Use this to apply respective .xdelta patches to your CTR - Crash Team Racing (USA).bin file. psx-modding-toolchain - A set of tools for PSX developers in order to make modding and reverse engineering games easier. Visual Studio 2022 - An integrated dev environment that helps compiling GitHub and application projects into usable software. (Install with C++ Development Pack)
[
]
this site was created by LittleHelper & robthefryman

