A downloadable asset pack

Buy Now$14.99 USD or more

Every fishing plugin on this store sells you the catching. Not one of them draws the fish. They take the fish's appearance as an input you supply — an icon, a sprite, something you buy on the art shelf and wire in by hand. Creel is that missing half, and it generates it.

Keep the fishing system you already have. Creel does not catch anything, adds no minigame, and never touches your reel-and-bobber code. It answers the one question that system leaves to you: what does this one look like?

There is no image file in this package

No PNG, no sprite sheet, no atlas. Every fish is geometry, composed at run time from its own data, so it is exact at any size and a new species costs you one line rather than one drawing.

Four axes, and the silhouettes differ before the colours do

12 body plansspindle, torpedo, disc, sunfish, eel, ribbon, flathead, hatchet, angler, ray, fan, pike
8 fin setsplain, sail, fork, lance, fringe, spine, paddle, trail
10 markingsbars, stripes, spots, speckle, mottle, saddle, ocelli, chevron, net, plain
12 liveriestrout, char, perch, koi, abyssal, reef, silver, pike, carp, tropical, albino, ember

12 × 8 = 96 distinct silhouettes before a single colour is chosen. That separation is the whole design. Markings and liveries multiply on top without changing an outline, for 11,520 distinct specimens — so a project with sixty species gets sixty fish that differ in shape, not sixty recolours of one fish.

Body plans are authored as envelope pairs — an independent top profile and bottom profile over one tail-to-snout axis. That is what lets a flat back sit over a keeled belly, and roughly half the corpus is that asymmetry. A single half-height mirrored about the spine cannot express it, and collapses six of these forms toward each other.

One line per fish

Tag any item and the species is named by the item:

<creel>
<creel: livery=reef>
<creel: form=angler, livery=abyssal, pattern=speckle>

A bare <creel> derives all four axes from the item's own name, deterministically — “Bog Lamprey” resolves to an eel, “Marsh Gar” to a pike — so you can tag a hundred items and get a hundred different fish without typing a single axis. Pin the ones you care about and leave the rest to the resolver.

Prefer to keep your species in one place? There is a plugin parameter list with the same fields. Both routes land in the same registry and a project can use both at once.

A typo cannot draw you the wrong fish. An unrecognised key is ignored, and an unrecognised value skips that species rather than quietly substituting another — because a wrong fish nothing reports is worse than no fish.

The catch ledger

The scene the package adds: a head tally, a ledger column of every species you declare with its sizes, a specimen card drawing the selected fish at scale with its caliper and its four axes, and a stringer of silhouettes across the foot. Species not yet caught can show as unfilled outlines or stay hidden — one parameter.

It does not look like RPG Maker. There is no stock windowskin anywhere in it: the frame, the typography, the wave rule and the specimen card are all drawn by this package. The in-engine verification asserts zero engine windows drawn across ninety stepped frames.

Performance, measured in the engine

  • update half 0.015 ms mean / 0.1 ms p99, against budgets of 2 ms and 4 ms
  • 2 draw calls per frame, 0 texture uploads, 0 display-object growth
  • a specimen is hundreds of path operations, so it is baked once into a cached bitmap keyed by species and size, then blitted; the cache is bounded and evicts deterministically
  • nothing in the update loop allocates

Verified by running the plugin in the real engine — 37 in-engine assertions plus a headless suite, not tests alone.

It survives the things that actually break plugins

  • Load order does not matter. Every file resolves its siblings at first use, and the in-engine run deliberately loads them alphabetically — the worst order you can create by dragging files in, which puts the scene ahead of the species file it depends on.
  • Saves round-trip losslessly, including across a version bump: a save written by a future version loads here without losing its unknown fields. The bake cache is held non-enumerable, so it never enters a save file.
  • Deterministic. Same species, same seed, byte-identical bake. No Math.random() anywhere in generation.

AI disclosure: the code and artwork in this package are AI-generated. It contains no third-party audio or text.

Purchase

Buy Now$14.99 USD or more

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

creel-plugin.zip 82 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.