Custom rosters

Logos and art

Give each team its own logo. It shows in team select, on the scoreboard and on the front of the jersey.

Logos

A logo is a picture file that sits beside the pack, named in the pack twice: once in the team's logo, and once in the pack's files with its checksum and size.

{
  "format": "bladeybiscuit.rosters",
  "formatVersion": 1,
  "league": "POND",
  "files": {
    "art/PIN.png": { "sha256": "5b244b54c1485fa7d4740e396501b887be4e582dfdb0c5aefb13c0b1c415a199", "size": 51274 },
    "art/SAL.png": { "sha256": "ff75284239529f17a1e4792ab9c6cdcebea6cfa76cc0256cea52a822eba36598", "size": 53386 }
  },
  "teams": [
    { "id": "PIN", "name": "Pinecrest Porcupines", "logo": "art/PIN.png", … },
    { "id": "SAL", "name": "Saltmarsh Sturgeon", "logo": "art/SAL.png", … }
  ],
  …
}
pond/
  roster-set.json
  2026-10-05/
    roster-pack.json
    art/
      PIN.png
      SAL.png

The game shows a logo:

  • In team select, beside the team's name.
  • On the scoreboard, and on the banners for goals and the three stars.
  • On the front of the jersey, as the crest.

A team without a logo shows none.

Making one

  • 512 × 512 pixels, square, as a PNG with a transparent background. That's what the BBHL's logos are.
  • It sits on dark and on light. Team select puts it on the team's colour, the scoreboard on dark, and the jersey on whichever colour the team's wearing. A dark outline round the shapes keeps it readable on all of them.
  • Keep it bold. On the scoreboard it's the size of a fingernail, so fine lines and small writing disappear.

The example repository has a logo for each team to look at.

The files list

Every picture a pack uses is listed in its files, by its path relative to the pack, with its sha256 and size. When the game installs an update, it downloads each file, checks it against these, and checks it's really the picture its name says. One that doesn't match stops the install, so people never get half an update.

Rule
Kinds .png and .jpg (or .jpeg) only.
Size At most 4096 pixels each way, and 16 MB a file.
All together An update's pictures can come to 512 MB at most.
Paths The same rules as the rest of a repository: no spaces, no ...

You don't have to work out the checksums by hand. Give the checker your repository's folder and it checks every picture and writes the whole files list for you.

Listed but never used, a file is still downloaded, so keep the list to what the pack needs.

Where to keep pictures

Paths can't climb out of the pack's folder, so there are two good layouts:

  • Beside each update (as above, and in the example). Each dated folder is complete on its own. A new update copies the pictures over. On GitHub that costs nothing extra, since git stores a file that hasn't changed only once.

  • Shared by every update. Put the packs side by side in the set's folder, named for their dates, with one art folder next to them. Update file in roster-set.json to match:

    pond/
      roster-set.json
      2026-10-01.json
      2026-10-05.json
      art/
        PIN.png
        SAL-2.png
    

    When you change a picture this way, give it a new name (SAL-2.png). Older updates still point at the old one, and their checksums need it to stay as it was.

Logos online

Logos stay on each player's own device. In an online game, a friend sees your team's logo if they have the same roster set installed, and no logo if they don't.

Coming: textures for everything

New player models are on the way: skaters and goalies, each with their own helmet, mask and face, and new sticks. When they arrive, a roster set will be able to dress them:

  • Team uniforms, home and away, for skaters and goalies.
  • Helmets, masks and sticks, for a whole team or one player.
  • Faces, player by player.

Each will be a set of texture maps painted onto a template of the model. The templates and how to use them will be here when the models are. The game already downloads and checks this art, so a roster set made for it will work as soon as the models do.