LE-CODE/Distribution Tutorial

From Custom Mario Kart
Jump to: navigation, search
Under Construction
This article is not finished. Help improve it by adding accurate information or correcting grammar and spelling.

This is the LE-CODE Distribution Tutorial. It explains how to create a custom track distribution based on LE-CODE. As addition, Distribution FAQ explain details, that are not covered here.


Slots and filenames

In LE-CODE, 4028 slots (slot range 68..4095 = 0x044..0xfff) are reserved for custom racing tracks. Additionally, slots for 32 original racing tracks and 10 custom battle arenas are reserved. Including special slots, a total of 4096 slots are available. See »LE-CODE Slot Usage« for details.

For each slot, 3 bytes are reserved:

This is a total space of 12 KiB for 4096 slots. In contrast, CT-CODE needs 256 bytes for each used slot. This are 64 KiB for 256 slots. The main reason for the less memory is, that LE-CODE uses generic file name instead of a string list with filenames. The filename of each track, this includes original tracks and special slots, is created by 3 lower case hex digits and the extension .szs:

std_file = sprintf("%03x.szs",slot);
d_file   = sprintf("%03x_d.szs",slot);

If a _d file should be laded but does not exists, the standard track file without _d is loaded instead. To minimize the space of a distribution, a _d file should only be added if it and the standard file differ.

Special random slots

Some slots have a predefined random functionality. To activated it, put the slot id to the track list of cup. The titles are defined by BMG messages 0x703e–0x7041 (0x7000+slot).

0x03e: All Tracks
Select a racing track by random.
0x03f: Original Tracks
Select one of the original tracks (slots 0–31) by random.
0x040: Custom Tracks
Select one of the custom tracks (all used slots beginning from slot 68 = 0x044) by random.
0x041: New Tracks
Select a track, that is marked by flag NEW, by random. If no track is marked, an internal fallback is used.

Common files

The track files are placed in directory ./files/Race/Course/*.szs. Some of the track files contain the sub-directory ./Common/ with private versions of different files. These file must be extracted to ./files/Race/Common/%N, where %N is the slot number. See »Distribution FAQ: Common Files« for details.

Track flags

Besides the standard properties property slot and music id, LE-CODE support a third property: flags. Each of the 3 properties is stored as a byte array of 4096 elements (3*4096 = 12288 byte total).

flags is a bit field with following features:

New (Bit 0 = 0x01)
This track is marked as NEW. It has only impact to the random selection at slot 0x041.

Random header (Bit 1 = 0x02)
Begin of a random group. The group ends, if either the Random group flag is not set or the next random group starts.

If such track is selected (directly or by random), one of the following group members is selected by random. If the group header itself is group member too (both bits set), then it is included into the random selection; otherwise it is excluded.

Random group (Bit 2 = 0x04)
Track is member of the current random group. See Random header above.


Currently LE-CODE supports 2 battle cups with 5 arenas each and 1024 racing cups with 4 tracks each.

For battle cups and arenas, the standard definition of slots and properties are predefined. The maintainer can exchange the SZS files and arena names, but not the property and music id. This will be changed in the future.

For racing cups, a CT-CODE configuration file is used to define and assign tracks and slots. It optional supports and additional flag member. See section below for details.


LE-CODE uses BMG messages 7000 to 7fff (by convention, message ids are always hex) for slat 0x000 to 0xfff. Messages 6800 to 6c01 and 8000 to 8fff are used for cup names and cup references. These cup references are only used by mkw-ana to print an additional information about the track selection.

Messages Used by Description
6800-6bff mkw-ana Cup names for 1024 racing cups.
6c00-6c01 mkw-ana Cup names for 2 battle cups.
8000-8fff mkw-ana & LE-CODE Track names for slots 0x000-0xfff.
9000-9fff mkw-ana Track-to-Cup references for slots 0x000-0xfff.


  • wctct --le-code --long bmg CTFILE >tracks.bmg.txt
    • Option --le-code is mandatory to enable LE-CODE support.
    • Option --long enables the additional messages for mkw-ana.

Wiimms SZS Tools and option --le-code

As of version 2.00a of Wiimms SZS Tools, all tools accept global option --le-code (or --lecode) for all commands. It enables the LE-CODE support. But this option is only relevant for some tools and some commands:

  • Tool wlect (the LE-CODE tool) enables LE-CODE support always and independent of option --le-code.
  • Tools wszst , wctct and wbmgt change their behavior if --le-code is set.
  • All other tools ignore the option.

Setting option --le-code implies option --ct-code.

Define Slots and Cups


Modified files

Cup Icons


  • Files: Channel MenuMulti MenuSingle
    • Korean: Modify »FILE_R.szs« instead of »FILE.szs«.
  • Add: button/timg/ct_icons.tpl control/timg/ct_icons.tpl
  • CMPR instead of RGB5A3 to reduce needed space to 25%.

Track selection menu


  • Files: Award Channel Event Globe MenuMulti MenuOther MenuSingle Present Race Title
    • Korean: Modify »FILE_R.szs« instead of »FILE.szs«.
  • Replace:
    • button/blyt/cup_icon_64x64_common.brlyt
    • button/ctrl/Back.brctr
    • button/ctrl/CupSelectCup.brctr
    • control/blyt/cup_icon_64x64_common.brlyt
    • control/ctrl/CourseSelectCup.brctr
    • demo/blyt/course_name.brlyt
  • Download: ???



Creating an ISO image with wit


Creating a Riivolution setup (XML files)





Verify the lecode file

Command wlect dump LECODE_FILE dumps the settings of a lecode file as human readable text file. For terminal output, the dump is colored. To force colors, use cdump instead of dump.

Dump example (MKW-Fun 2019-06)

If adding option --long (short -l), a cup and slot reference is added:

Dump example if using option --long

If adding option --verbose (short -v, can be combined with --long), a slot usage map is added:

Dump example if using option --verbose