The list of tracks that can be played in-game normally are defined in tracklist.json for singleplayer and coop_tracklist.json for Co-op. Both files use the same structure. Any tracks without an entry in either of these files in the vanilla game are exclusive to Special Missions/events or are unused.
Key
Description
Type
Required?
Behavior when absent
Size
Array of numbers
DifficultyColours
The colour values to use when displaying a track's name. Each array is three entries long and the values correspond to the red, green, and blue channels in that order.
The number of tracks of the previous difficulty the player is required to win on to unlock this track. Can be set to 0 or -1 to disable this requirement.
Integer
4
The rank the player is required to reach to unlock this track. Can be set to 0 or -1 to disable this requirement.
The positions of the entrance markers that appear when the track is loaded. Each entry is an array of two elements: the first is an array of two numbers for the X and Y coordinates in units, and the second element is the rotation in degrees.
Array of arrays
reverseEntryMarkers
Same as above, but for Reverse mode.
Array of arrays
ipadEntryMarkers
Array of arrays
ipadReverseEntryMarkers
Array of arrays
Modifiers
Array of strings
BossSpawn
In Bloons Monkey City, this is the ID of the boss to spawn after starting the first round (0 = Bloonarius, 1 = Vortex, 2 = Dreadbloon, 3 = Blastapopoulos). This also exists in Bloons TD 5, but is unused and has no apparent functionality.
Integer
Effects
A list of visual effects to apply.
"Fireworks": displays a fireworks show if the player wins the map (used on Fireworks)
"Snowfall": displays falling snow particles that are layered over all other sprites (used on The Rink and some other snow tracks)
"AnimatesBetweenRounds": idk but it's used on North Pole
Uses a custom .mask file format, which is essentially a bitmap. Some tracks in the console version (apparently the ones that had to be modified to define the extra horizontal space) use a slightly different format.
The rest of the file is a series of run-length encoded byte pairs. The first byte of a pair is the length of the run in pixels from left to right, wrapping when it reaches the width of the mask. The second byte of a pair defines the terrain.