Steam shows the unachieved icon to players who haven’t unlocked the achievement. Convention: desaturated, darkened ghost of the color icon so the locked state reads as “not yet earned.”

New tools/generate_unachieved_icons.py: takes the 29 source {API_NAME}.png files, applies:

  • Greyscale via standard luminance weights
  • Slight cool blue tint (R x0.85, G x0.92, B x1.05) — reads as inactive vs broken
  • Brightness 0.45 — Steam convention sweet spot
  • Contrast 0.85 — symbol stays subtle in locked state

Output: {API_NAME}_locked.png alongside the originals. Idempotent (skips already-locked variants on re-run).

Upload these to the “Unachieved Icon” field in Steamworks; the color originals go to “Achieved Icon”.

Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]


Commit 0f642b8 by astafford8488.