MushRog

The helmet swaps and the sprite changes

October 12, 2026 artearquitetura

The rectangles became characters. The Mage has a purple tunic and a staff, the Warrior has plate armor, a helmet and a longsword, and pressing a key swaps the steel helmet for a golden one without reloading anything. It’s the first test of visible equipment, done with borrowed art from the Liberated Pixel Cup.

Why

MushRog’s biggest art risk is equipment showing up on the character piece by piece. Before the artist draws a single piece, the game had to prove it can assemble a layered character, swap one layer in real time and animate them all together. The LPC has exactly that format, so we used it to test the plumbing, not to stay.

How it works

Each character is a recipe: a list of layers (shadow, body, pants, boots, torso, hair, helmet, weapon) with a depth order. Swapping equipment means swapping a layer’s image. They all use the same frame grid, so one animation moves body, clothes and weapon in sync. Walking, slashing, casting, thrusting and taking damage already work.

The grid (frame size, rows for each animation, number of frames) lives in a data file, and the code never assumes 64 pixels. When the artist defines her standard, we swap the file and the sprite folder.

A script copies only the layers in use from the LPC generator, checks the sheet sizes and regenerates the credits from the LPC’s own author spreadsheet. The borrowed sprites don’t go into the repository: whoever clones the project runs the script and gets the same prototype, and what stays versioned is the recipe.

The boss became a muscular LPC body at double scale, tinted orange. Ugly, but it works, because what matters is that the same system applies to enemies.

Source change

We switched to the generator’s official repository, maintained by the Liberated Pixel Cup organization. It changed format: one image per animation, and colors by palette instead of one file per color. The export script now composes each layer into a single sheet in the game’s layout, and the color variants are left to the shader. The Warrior lost the longsword for now, since big weapons use frames larger than 64 pixels and the game doesn’t read that yet. He fights with a dagger until it’s in.

Color without a new sprite

The same afternoon, shader recolor went in: a layer can have its hue, saturation and brightness shifted on the graphics card. Each color in the sprite becomes exactly one other color, so the pixel art keeps the same color count and doesn’t blur. The H key rotates the hair color, and the boss got its fire red through the same path. The artist draws the hair once and the game delivers every color.

Phase 0 closed

With swapping, reactions, dodging, layered equipment and recolor working, and the internal playtest saying “I liked it, I always lose, I want to learn”, phase 0 delivered what it promised. Next: getting four people into the same room.

Changes

  • feat(client): layered paper-doll characters from LPC sprites

    PaperDoll node builds a character from a layer recipe (data/dolls.json) over a shared frame grid (data/sprite_spec.json) and animates walk, slash, thrust, spellcast and hurt across all layers. tools/lpc_export.py copies only the used sheets from a local LPC generator clone into the gitignored assets/lpc/ and regenerates CREDITS.md. E key swaps the warrior helmet as the live equipment test.

  • art: compose sprites from the official LiberatedPixelCup generator

    The upstream generator now ships one image per animation and recolors by palette. tools/lpc_export.py composes each layer into the game's single-sheet layout from data/sprite_spec.json; recipes point at layer folders; helmet variants come from the HSV shader. Warrior carries a dagger until oversize weapon frames are supported.

← Back to the devlog