Cheer, surprised and waving hands moved clear of the hair; Sleipnir's extra legs show; Gjallar's horn has a bell; Huginn's wings separate from his cloak; Void lifted off the dark ground; Tengu's beard and nose cut back. CAST.md is now generated from the trait sheets. PROCESS.md is a working guide for the next agent: style rules, coordinates, layer order, render checks, before/after renders and known weak spots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 KiB
Swarm stickers
Chibi stickers of the GameCult swarm cast, built by a small rig instead of drawn one by one.
Every sticker is a standalone SVG under stickers/<character>/<pose>-<expression>.svg;
gallery.html shows them all with character and pose filters; CAST.md lists who is who.
Open gallery.html in a browser to browse. To use a sticker, copy its SVG. The white die-cut
edge is not in the file; it is CSS, so it can be dropped where it does not suit:
img.sticker { filter: drop-shadow(3px 0 0 #fff) drop-shadow(-3px 0 0 #fff)
drop-shadow(0 3px 0 #fff) drop-shadow(0 -3px 0 #fff) drop-shadow(0 8px 10px rgba(0,0,0,.45)); }
Layout
| Path | What it is |
|---|---|
rig/rig.mjs |
The rig: bases, poses, expressions, hair, accessories, props, emblems, render() |
rig/characters.mjs |
One trait sheet per character, and which characters get every pose |
rig/build.mjs |
Writes the SVGs, gallery.html and CAST.md |
rig/shot.sh |
Screenshots the gallery with Edge headless, for checking renders |
stickers/, gallery.html, CAST.md |
Generated; never edit by hand |
PROCESS.md |
How the rig works, its coordinate conventions, how to check renders, known weak spots |
process/ |
Before/after renders referenced from PROCESS.md |
Regenerate
Node 18 or newer, no packages:
node cast/rig/build.mjs # everyone
node cast/rig/build.mjs kiko eve # only these characters (the gallery is rebuilt from disk)
Add a character
- Append a trait sheet to
CASTinrig/characters.mjs. Copy the nearest existing one.id(folder name, lowercase),name,role(one line from the repo README),source(path of the avatar or self-description the look comes from, or a string starting withinvented), optionalnotefor a design decision worth keeping.base:humanoid,ravenorhorse. Raven needsbeak; horse needsmuzzle.skin,eyes(iris colour),accent(pose sparkles), optionalhands,faceInk(eye and mouth lines on a dark face),noBlush.hair: { style, color, accent? }— a key ofHAIRinrig.mjs.outfit: { shape, main, trim, collar, belt? }— shapestunic,dress,robe,coat(ravens always useegg, withbellyandwing); collarsv,round,high,none.legs,shoes, optionalcape,sleeve,extraLegs(0-4).acc: list of[name, ...colours], keys ofACC.prop:[name, ...colours], a key ofPROPS, ornull.emblem:{ shape, color, disc? }, a key ofEMBLEMS, ornull.full: truerenders every pose and expression; otherwise neutral pose with the three expressions inCOMMON_EXPRESSIONS.
- Run the build, then check the render at sticker size (see "Checking renders" in
PROCESS.md). - Commit the trait sheet together with the generated files.
Add a pose
Add an entry to POSES in rig/rig.mjs: hop height, head offset and tilt, elbow and hand points
for each arm (front: true draws that arm over the head), feet offsets, where the prop sits
(or null), and an optional effect from fx(). Coordinates are in PROCESS.md. Every full
character picks it up on the next build. Check hands against long hair and twintails: a hand
inside the head outline disappears behind the hair.
Add an expression
Add a case to face() in rig/rig.mjs and the name to EXPRESSIONS. Draw relative to the
base's anchors (BASES[...].eyeX/eyeY/mouthY/browY/cheekX/cheekY), never fixed numbers, so the
raven and horse faces follow. If ravens should open their beak for it, add it to beak().
Licence
All art here is the project's own: drawn as hand-written SVG shapes by this rig, not traced or
derived from any third-party asset. The avatars named in CAST.md are GameCult's own images and
served only as reference for colours and traits. The repository has no licence file at the time of
writing, so the stickers carry no licence grant beyond GameCult's own; add one here if they are
meant to be reused outside GameCult.