Cosmetics
In short
17 items in four slots (Hat, Glasses, Shoes, Bat). They change looks only. Three are free (Ball Cap, Shades, Sneakers); the rest cost meta points and also need an account level before they can be bought. You wear at most one per slot.
How it works
- Buying: in CUSTOMIZE,
MetaProgression.TryBuy(cosmetic)needsCanBuy(owned already, or account level >=requiredLevel) and enough points. A locked item’s tile showsLV nuntil your level is high enough, then the points gem and its price (#38); the detail panel shows<cost> PTSwith the gem (dimmed while the level is too low) and BUY or REACH LV n. See Customization and XP and Levels. - Wearing:
Equipsaves the item id per slot inSaveData.cosmetics(hatId,glassesId,shoesId,batId; empty = nothing). Nothing is worn by default, even the free items. - Hats, glasses, shoes are code-built shapes chosen by
styleinCosmeticBuilder, coloured withprimaryColorandsecondaryColor, placed on the character’s sockets. A cosmetic may instead set aprefab. - Bats (
style = Model) are 3D models fromResources/BatModelLibrary, keyed by the cosmetic id (bat_03…). An equipped bat cosmetic overrides the look of the Bat upgrade you hold; the upgrade keeps its stats. Spectators see the batter’s own bat. - When the account levels up, the results screen lists
NEW ITEMS TO BUY: ...for cosmetics that just became buyable. - Cosmetics are not listed in the main menu INDEX (it has no cosmetics tab).
- Tile pictures come from
UI/ThumbnailRenderer. Since #45 a first request is queued and rendered inLateUpdate(rendering fromOnGUIthrew a URP error), so a new tile is blank for a frame before its picture appears.
Numbers
| id | Name | Slot | Style | Price | Account level | Description | Primary / secondary colour |
|---|---|---|---|---|---|---|---|
hat_cap | Ball Cap | Hat | BallCap | free | none | ”Team colours, bill forward.” | (0.15, 0.3, 0.8) / (0.92, 0.92, 0.96) |
hat_top | Top Hat | Hat | TopHat | 30 | 3 | ”Formal wear for a formal beatdown.” | (0.08, 0.08, 0.1) / (0.85, 0.1, 0.15) |
hat_cowboy | Cowboy Hat | Hat | CowboyHat | 45 | 6 | ”Yeehaw.” | (0.72, 0.5, 0.25) / (0.35, 0.2, 0.1) |
glasses_shades | Shades | Glasses | Sunglasses | free | none | ”Too cool to squint.” | (0.1, 0.1, 0.12) / (0.05, 0.05, 0.08) |
glasses_nerd | Nerd Glasses | Glasses | NerdGlasses | 25 | 2 | ”Launch angle? Calculated.” | (0.85, 0.92, 1) / (0.1, 0.1, 0.12) |
glasses_monocle | Monocle | Glasses | Monocle | 50 | 7 | ”Quite.” | (0.9, 0.95, 1) / (1, 0.82, 0.3) |
shoes_sneakers | Sneakers | Shoes | Sneakers | free | none | ”Fresh out of the box.” | white / (0.9, 0.2, 0.2) |
shoes_cleats | Cleats | Shoes | Cleats | 35 | 4 | ”Dig in.” | (0.08, 0.08, 0.1) / (0.95, 0.95, 0.95) |
shoes_clown | Clown Shoes | Shoes | ClownShoes | 60 | 8 | ”Honk.” | (0.9, 0.15, 0.15) / (1, 0.85, 0.1) |
bat_03 | Hickory | Bat | Model | 20 | 2 | ”Old-school grain.” | (model) |
bat_04 | Blue Streak | Bat | Model | 25 | 2 | ”Painted to go fast.” | (model) |
bat_07 | Lumberjack | Bat | Model | 30 | 3 | ”Timber.” | (model) |
bat_08 | Night Stick | Bat | Model | 35 | 4 | ”Dark and quiet.” | (model) |
bat_09 | Candy Cane | Bat | Model | 40 | 5 | ”Sweet swings.” | (model) |
bat_11 | Gold Glove | Bat | Model | 50 | 7 | ”Shiny. Very shiny.” | (model) |
bat_12 | Thunder | Bat | Model | 60 | 8 | ”Boom.” | (model) |
bat_13 | Old Faithful | Bat | Model | 70 | 10 | ”Never let you down.” | (model) |
Prices are meta points (PTS). Totals: 3 free items; buying everything else costs 575 points (hats 75, glasses 75, shoes 95, bats 330).
Unlocks by account level
| Level | New items to buy |
|---|---|
| 2 | Hickory, Blue Streak, Nerd Glasses |
| 3 | Top Hat, Lumberjack |
| 4 | Cleats, Night Stick |
| 5 | Candy Cane |
| 6 | Cowboy Hat |
| 7 | Monocle, Gold Glove |
| 8 | Clown Shoes, Thunder |
| 10 | Old Faithful |
Fit defaults on every item: offset (0, 0, 0), rotation (0, 0, 0), scale 1, referenceSize 0.3 m. See Fit Mode.
In the code
| File | What it does |
|---|---|
Assets/_Project/Scripts/Data/DefaultContent.cs | Cosmetic(id, name, slot, style, description, unlocked, cost, primary, secondary); RequireLevel(...) |
Assets/_Project/Scripts/Data/CosmeticDefinition.cs | CosmeticSlot, CosmeticStyle, unlock and fit fields |
Assets/_Project/Scripts/Progression/MetaProgression.cs | IsUnlocked, CanBuy, TryBuy, Equip, Unequip, Equipped |
Assets/_Project/Scripts/Batting/CosmeticBuilder.cs | Builds the code shapes per CosmeticStyle |
Assets/_Project/Resources/BatModelLibrary.asset | Bat prefabs for bat_03 … bat_13 and the four Bat upgrades |
Gotchas
- Ids are prefixed by slot (
hat_,glasses_,shoes_,bat_) because unlock ids share one namespace with batters and upgrades inSaveData.unlockedIds. - Bat numbers skip (03, 04, 07, 08, 09, 11, 12, 13): they match model files in the bat library.
- An equipped id that no longer exists in the content, or is locked again (the dev menu’s lock-all), simply stops showing.
- The README lists “High end / rare cosmetics” as not started.
Related
- Customization: the CUSTOMIZE screen
- XP and Levels: account level gates
- Meta Progression: meta points
- Fit Mode: fitting items to a model
- Add a Cosmetic