A downloadable asset pack

Buy Now$9.99 USD or more

Menagerie is a complete companion system for GameMaker whose artwork the product draws itself. Breed two companions and the child's emblem composes itself from its ancestry — the field and tincture follow the eldest line, the shield quarters deepen with each generation, every ancestral panel carries that ancestor's own species mark, and one mutation accent is rolled at birth. There is no sprite, no atlas and no PNG anywhere in the package.

That is the point. A companion system normally ships as logic plus a folder of creature portraits — and the portraits are the part that never fits your game, never covers the creature the player just bred, and never recolours. Menagerie has no portraits. Every mark is line-work stroked from primitives at runtime, so a companion bred five hours into your game gets art this product has never seen.

What ships

  • 24 hand-authored species marks across four families — beast, bird, scale, mythic
  • 20 trait glyphs (8 temperament, 12 aptitude), inherited with a deliberate mutation rate
  • 8 bloodline tinctures, applied by role — field, charge, accent, glow
  • 6 field grounds — shield, roundel, lozenge, banner, totem, knot
  • 8 mutation accents rolled at birth, so siblings differ
  • A bond curve, a five-level ring that closes as it fills, and a breeding reveal animation

24 species × 6 fields × 8 tinctures is 1,152 founder emblems before quartering, charges and accents even start. The volume is the moat. Rules are cheap now — anyone can write breeding arithmetic in an afternoon. A corpus of 66 hand-authored motifs that cohere into one heraldic language is not.

Deterministic, and the save format proves it

Nothing here calls random(). The stream is xorshift32 over a seed, so the same lineage yields the same companion and the same emblem on every machine and in every session. That is not a detail — it is what lets a companion persist as its lineage tree of seeds and re-derive losslessly on load:

var _data = men_companion_pack(wrapped);            // { v, name, xp, lin }
var _same = men_companion_unpack(registry, _data);  // rebuilt, identical

Nothing derived is stored, so nothing derived can go stale, and a save cannot bloat: a three-generation companion persists as seven integers and a version field.

Add your own

men_registry_add_species(registry, __men_species("fox", "Fox", "beast", 7, 11, 8,
    [men_poly([-0.50, -0.26, -0.36, -0.62, -0.20, -0.30, -0.04, -0.62, 0.12, -0.26]),
     men_line(-0.42, -0.06, 0.58, 0.26)],
    [-0.14, 0.02]));

A species is a name, a family, a disposition block and a list of strokes in unit space. It founds, breeds and renders exactly like a shipped one. Traits and tinctures register the same way — and adding a ninth bloodline is fourteen numbers, after which every emblem in your game restyles.

Built to drop into a real project

  • Pure GML. No native extension, no DLL, legacy runtime 2024.x.
  • Namespaced men_ / MEN_ throughout. GML's global namespace is flat and a collision in your project is a support ticket nobody can debug remotely.
  • Blend-state hygiene. Every public draw saves and restores blend mode, colour, alpha and text alignment, so it is safe to call from anywhere in your draw event in any order.
  • The core makes zero engine calls — no instances, no rooms, no sprites, no clock — so the generator can be read and reasoned about in isolation.
  • Draws no text. Names and numbers are your UI, in your font.
  • Raw, readable, commented GML. Nothing minified.

A runnable demo room, and it is the smoke test

Open rm_menagerie_demo and press Play. Five pages: The Paddock (24 companions on one wall, no two alike), The Hatchery (two parents in, and the emblem draws itself), Lineage, The Corpus (every mark, named) and Bloodlines (one companion under all eight tinctures).

Verification, stated honestly

GML cannot be unit-tested outside the engine, so this is verified three ways and none of them stands in for the others: a real headless Igor package build (exit 0, 0 errors, 0 warnings, 128 resources); a numerical mirror of 37 assertions over the actual shipped corpus tables — pairwise distinctness of all 24 species marks and all 20 trait glyphs, unit-space containment, save round-trip identity, and distributions over 20,000 three-generation breedings — with a sabotage mode that proves the suite still fails when it should; and the demo room actually run, with its frames looked at. That last one matters most: the package build reported CLEAN while the demo crashed on its first drawn frame, and nothing but running it would have found that.

Also from CSAF for GameMaker

  • Trove — inventory & generated item art
  • Meridian — procedural skill trees
  • Athanor — crafting & synthesis, with seals composed from their reagents

Menagerie owns who the companion is. It does not store your inventory, spend your points or craft your potions — those are its siblings above, and they are built to sit beside it.


AI disclosure: this asset is AI-assisted. The code is LLM-written and the cover illustration is AI-generated. The in-engine screenshots are frames of the product drawing its own line-work from hand-authored primitives. No audio ships. No in-game narrative text ships.

Purchase

Buy Now$9.99 USD or more

In order to download this asset pack you must purchase it at or above the minimum price of $9.99 USD. You will get access to the following files:

Menagerie_GameMaker.zip 538 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.