A downloadable asset pack

Buy Now$14.99 USD or more

Forty complete interface themes, drawn in GML. No sprite, no nine-slice, no texture page — sprites/ does not exist in this package. Fourteen component families times forty materials is 560 distinct drawn components, and not one of them is a PNG or a tint of another one.

Every image on this page was rendered by the product itself.

What a material is

Not a colour. A material is a five-stop Oklch ramp, a ground, an ink that is guaranteed readable against that ground, an accent derived from the ground, one of thirteen surface characters — grain, hatch, knurl, craze, weave, trace, speckle, vein, fleck, scanline, brush, pit, none — and a geometry language: one of six corner treatments plus the furniture its frames carry.

The last two are why this is not a palette swap. Brass and bronze are eleven degrees apart in hue; one is brushed and one is pitted. Slate and gunmetal are twenty-four apart; one is hatched and one is knurled. Choosing porcelain changes the geometry of all fourteen families at once, so the result agrees with itself.

The forty

Metal blackened iron, brass, pewter, verdigris, brushed steel, gold leaf, bronze, gunmetal
Organic parchment, bone, horn, oxblood leather, oak, walnut burr, cork
Mineral slate, marble, obsidian, jade, sandstone, malachite
Made vermilion lacquer, enamel, porcelain, bakelite, smoked glass, amber resin, celluloid
Textile felt, linen, velvet, canvas, brocade
Technical circuit board, cathode, plasma, holographic, carbon fibre, anodised, phosphor

The fourteen families

frame, header, panel, modal, divider, tooltip, button, toggle (check, radio and switch), slider, gauge, tab, scrollbar, badge, cursor.

var _t = lvy_theme("brass");
lvy_draw_frame(_t, 40, 40, 400, 300, LVY_ST_IDLE);
lvy_draw_button(_t, 60, 240, 200, 284, LVY_ST_HOVER);

Correct at every size

Components are built in pixel space, never authored small and scaled. Corner radius and bevel depth come off the shorter side and are bounded in absolute pixels as well as proportionally, so a 40x18 button and a 400x180 frame are both correct rather than one being a stretched copy of the other.

Five states, five objects

Pressed inverts the bevel and offsets the cap, so it reads as the same button pushed in rather than a different, darker button. Disabled flattens the ramp and pulls chroma toward neutral — a pull, not a scale, which is why it reads on slate (chroma 0.006) as clearly as on brass (0.09). Focus adds a ring outside the component, so the usable area never changes between states.

Performance is checkable, not asserted

An interface is on screen every frame. A generated one that costs more than the nine-slice it replaces would be a worse product, so there are two paths: immediate lvy_draw_* for menus, and a caching lvy_widget layer for HUDs that renders once into a sprite and rebuilds only when something that changes its appearance changes.

global.lvy_rebuilds counts every rebuild and the demo room prints it on screen. Leave it running with auto-cycle off and watch it stop moving. That is the whole performance claim, checkable in five minutes without a profiler.

Verification, stated honestly

1,987 in-engine assertions, run headlessly inside a real Igor-built executable on runtime 2024.14.4.268 — ramp separation and ink contrast on all forty materials in all five states, non-self-intersection on every corner treatment, containment on every family, determinism, and the emission-order contracts.

They test contracts, not pictures. GML cannot be unit-tested outside the engine, and several defects during this build passed every assertion and were found by opening a PNG and looking at it. The store images are the evidence; the assertions are the floor.

Compatibility

GameMaker 2024.14+, built and tested against runtime 2024.14.4.268 (the legacy GMS2 runtime). Pure GML: no extensions, no native DLLs, no shaders. Every function, macro and global is prefixed lvy_ / LVY_. No absolute paths, no hardcoded room or layer indices. Ships as a .yymps local package plus raw readable source and a runnable demo room.

GMRT is not tested and is not claimed. GameMaker's own 2026 roadmap marks the GMS2 runtime feature complete with support until at least Q1 2028, and this package is a pure-GML runtime library with no extension surface.

Licence

Build whatever you want with it, in unlimited commercial games. Do not resell or redistribute the package itself. Full terms in LICENSE.txt.

Created with AI assistance. Code: yes. Graphics: yes — every pixel is generated by the GML in this package. Sounds: none.

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:

Livery.yymps 385 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.