2020-09-14

As pretext for socializing during the covid-19 lockdowns we’ve spent several evenings playing Minecraft with friends remotely. Our style of play is deliberately uninformed; we tend to eschew external guides in preference for inferring game mechanics by exploring the world in earnest, discovering new landscapes and building settlements along the way.

As our settled world expands and places are named and networked, it becomes increasingly tricky to talk about where things are. So maps are charted—

holding a map item in Minecraft

—and copies are distributed, and great montages are meticulously erected at key transportation hubs. But players tire of process; distribution rounds lapse, labels are lost, charting expeditions are uncoordinated, and montages fragment and fall out-of-date.

An abundance of software has been created by the Minecraft community to display unified world maps, but most of it operates by scanning the game’s internal representation of the world and revealing it in entirety—a gift that, given our preference for firsthand exploration, feels a little like cheating. A notable exception is The Ink & Parchment Map, which, so motivated, displays only hand-placed points of interest on a coarse map unconnected to the game. This minimalist presentation is close to ideal in concept, but the process of poi registration expects players to use the game’s debug tooling as a gps, and this again isn’t how we want to play; we want it to be possible to get lost.

Papyri by Jason Green takes a different approach, cleverly reusing players’ in-game map items instead of reading the terrain directly. This neatly solves the problem of fair access to information—only what players have earned in-game is available—while still facilitating collaboration and information sharing between players. As a bonus, implementation is straightforward since internally map items are already images, needing only to be stitched together.

There are a few changes I’d make to Papyri’s design to better fit our style of play, such as hiding world coordinates and preventing very wide views, as well as several implementation details that I’m tempted to optimize just for the fun of it. This, combined with my desire to have a small, clearly scoped project in which to practice Rust, led me to try my hand at reimagining Papyri in my own way. The result is Little a Map, which I’m proud to say runs about 140 times faster than its inspiration:

$ little-a-map '/opt/mscs/worlds/example' '/var/www/html'
Rendered 5958 tiles and 28 banners in 0.48s
web interface of Little a Map