Skip to main content
This version is obsolete. New programs write version 20260801. This page is for checking the hashes Clone Hero 1.1 calculated.
Clone Hero 1.1 writes each track as a BTrack of version 20240320, and its legacy TrackHash is a hash of that whole file. Its leaderboards hold every score played on Clone Hero 1.1 by these hashes, and each song by a SongHash of version 20251010, which holds them. Clone Hero 1.1’s code is the reference for this version. This .chart file has one track, Expert guitar:
Its BTrack is these 136 bytes:
Its legacy TrackHash is bLRupqmuemBT2XL2bPISQI0F5cZgPLY_BzEpxiKRzDc. The TrackHash of version 20260801 for the same track is ewVfnLFazT8nsQyO09qat4CgKichUepV8yw1mxypxSA.

The file

Every number is little-endian.
  • Each count is an unsigned 32-bit number, and is written even when it’s 0. Nothing follows the notes.
  • The records are those of version 20260801, with the same note types and flags.
  • There’s no list of range shifts.
  • A file is 40 + 16 × (tempos + time signatures + star power phrases + solos) + 17 × (lanes + drum fills) + 24 × notes bytes long.

The legacy TrackHash

The legacy TrackHash is the BLAKE3 hash of the whole file, from its identifier to its last note: 32 bytes, written in base64url without padding as 43 characters. The tempos are hashed exactly as the file holds them, without rounding. Edge case: scan-chart 8. scan-chart 8.0.1 and earlier write the legacy TrackHash with padding, as 44 characters that end in =. Without the =, it’s the TrackHash.

What Clone Hero 1.1 writes

Clone Hero 1.1 fills the lists as version 20260801 says, from the chart as it reads it. It reads some charts differently from the format pages: Edge case: scan-chart’s frozenLegacy6142. scan-chart calculates legacy TrackHashes with its frozenLegacy6142 profile, which agrees with Clone Hero 1.1 for almost every track. It reads some charts differently: a TS with a space at its end, a dnoflip during a d flip, quoted text, a tom marker that covers no note, two notes of one type at one tick, snapped chords, and a .chart file without [Song], which it doesn’t load. It also applies an [ENABLE_CHART_DYNAMICS] event to every note of a later difficulty, writes no empty .mid difficulty but Expert, and reads every .mid track of an instrument. To check a legacy TrackHash, use Clone Hero 1.1.

Telling the versions apart

Both versions start with CHNF, so the 4 bytes of the version tell them apart: C0 D7 34 01 for 20240320, and C1 27 35 01 for 20260801. A reader that reads both chooses by them, and rejects any other version. The next 4 bytes are the resolution in version 20240320 and the section count in version 20260801, and either can be a small number, so they can’t tell the versions apart. A legacy TrackHash and a TrackHash of version 20260801 are both 43 characters, so a hash alone doesn’t say which it is.