牛来 NIULAI +1000%  ·  丑度 UGLINESS +342%  ·  海报 vs 成片 -99%  ·  底价 FLOOR 0.0034 BNB  ·  诺兰 ODYSSEY beaten by a cow  ·  被无视风险 0  ·  PPT作画指数 MAX  ·  妈妈的手绘 5 年  ·  牛来 NIULAI +1000%  ·  丑度 UGLINESS +342%  ·  海报 vs 成片 -99%  ·  底价 FLOOR 0.0034 BNB  ·  诺兰 ODYSSEY beaten by a cow  ·  被无视风险 0  ·  PPT作画指数 MAX  ·  妈妈的手绘 5 年  ·
文档 Docs

像素引擎

One small module draws every character cell by cell on a 40x40 grid, then animates it. Same code runs on the server and in your browser.

How it draws

Each sprite starts as a blank 40x40 grid. The drawer for its type (bull, calf, or leopard) fills ellipses and lines for the body, head, horns, muzzle, and hooves, then a pass adds a dark outline around the whole silhouette. The result is turned straight into an SVG of colored rectangles, so it stays crisp at any size.

head + hornsbody

The animation

Animation is plain SMIL inside the SVG, so it works in the browser and on most marketplaces without any script. Every sprite has a gentle idle bob and a blink where body-colored eyelids flash over the eyes. No two blink at quite the same moment.

Determinism

The engine is seeded by token id with a small pseudo-random generator, so id 42 always produces the exact same bull, everywhere. That is why the preview in the browser matches the metadata file and the on-chain token. The traits shown on a card are computed from the same seed, not stored separately.