Skip to content

Examples

Every sprite below is a .pix file in examples/, compiled to PNG with the pixel-dsl CLI. Regenerate the whole gallery with scripts/render-examples.sh.

Heart
heart · 16×16
Gold coin
coin · 16×16
Potion flask
potion · 16×16
Jolly Roger flag
flag-ops · 16×12
Toadstool
mushroom · 20×20
Tree
tree · 32×32
Cat
cat · 32×32
Black widow spider
spider · 32×32
Skull
pirate-skull · 32×32
Kraken
kraken · 96×96
Pirate galleon
pirate-galleon · 96×72

Source files

All of these are written as shape opsfill, rect, line, circle, pixel (and flip).

ExampleSubjectSize
heart.pixHeart16×16
coin.pixGold coin16×16
potion.pixPotion flask16×16
flag-ops.pixJolly Roger flag16×12
mushroom.pixToadstool20×20
tree.pixTree32×32
cat.pixCat32×32
spider.pixBlack widow32×32
pirate-skull.pixSkull32×32
kraken.pixKraken96×96
pirate-galleon.pixPirate galleon96×72

Cell grid vs ops

The same Jolly Roger flag, two ways:

Cell grid (192 tokens)

pix
sprite jolly 16x12 palette=flag {
  k k k k k k k k k k k k k k k k
  k k k k k k k k k k k k k k k k
  k k k k k w w w w w w k k k k k
  k k k k w w w w w w w w k k k k
  k k k k w w k w w k w w k k k k
  ... etc, 12 rows
}

Ops (10 statements)

pix
sprite jolly 16x12 palette=flag {
  fill k
  rect 1,1 14,10 k
  circle 8,5 3 w
  pixel 7,4 k
  pixel 9,4 k
  pixel 8,5 k
  rect 6,7 9,7 w
  line 4,9 11,11 w
  line 11,9 4,11 w
  rect 5,11 10,11 r
}

Same output. Ops are dramatically more concise and easier to write correctly.