A downloadable asset pack

Buy Now$14.99 USD or more

You tell Hearth what a room is FOR and WHO LIVES IN IT. It furnishes the room. It chooses the pieces, solves where they stand, decides what is lying about, ages the surfaces, lights the fire, and draws the whole thing in pure GML.

A kitchen is a kitchen. But a kitchen belonging to a miser and a kitchen belonging to a healer are not the same room — one has tally sticks, a locked box and a single crust, the other has a mortar, drying herbs and a shelf of jars. Every interior asset pack on the market sells you the furniture and leaves the assembly to you. The assembly is this product.

Every image on this page was rendered by the package itself, from a real GameMaker build. There is not one image file in it.

The whole thing in three calls

room = hth_room_of("kitchen", "healer", 1618);
pal  = hth_palette_build(room);
hth_room_draw(room, pal, 0, 0, room_width, room_height);

That is the entire required API.

What you can steer

  • 12 room purposes — kitchen, bedchamber, workshop, shop, taproom, study, chapel, storeroom, guardroom, infirmary, parlour, cell. Each owns an authored slot list: which pieces exist, which are primary, how much wall or floor each takes.
  • 10 occupants — farmer, smith, healer, scholar, miser, soldier, merchant, priest, widow, child. Each owns six personal objects, and the first two are a signature the solver never drops. No two households in the corpus share a signature.
  • prosperity — pine or beech or oak; rushes or boards or cut stone flags; square legs or turned ones; upholstery or bare board.
  • tidiness — how much incidental clutter there is, and how evenly anything is placed.
  • age — every surface darkens, desaturates and flattens; smoke blackens the chimney back.
  • warmth — whether the fire is lit, and the light it throws on everything in the room.
  • 6 regions — wall surface, floor and whether the ceiling is beamed.

72 distinct generated entities, counted

30 pieces of furniture and 42 personal objects. That number is counted by the package's own in-engine test suite and printed in its result file. It is not twelve purposes multiplied by thirty forms.

Every one of the 72 is drawn from GML geometry shaded by surface normal against a single fixed lamp — the same relief discipline throughout, so a chest authored one day and a bookcase authored the next stand in the same room without arguing. There is no sprite, no atlas and no texture page, and sprites/ does not exist in the project.

hearth · stove · bed · cot · cradle · table · trestle · bench · chair · stool · chest · wardrobe · shelf · dresser · counter · barrel · crate · rug · loom · anvil · desk · altar · cauldron · rack · basin · lamp · sack · tub · screen · bookcase

The layout is solved, and it is checked before anything is drawn

This is the part that is not decoration. A generated room can be drawn perfectly and still be obviously wrong to a human: a wardrobe floating clear of the wall, a bed standing where the door opens, furniture at a perfectly even pitch, the only window behind the chimney breast. Every one of those is valid geometry, so no drawing check can see any of them.

So Hearth solves the layout first, asserts it, and retries with a fresh arrangement rather than drawing a room that failed:

  • every piece stands inside the room, not through a side wall
  • no two pieces in the same depth band occupy the same floor
  • the door's swing is clear of everything, including anything hung on the wall
  • the window is given a piece of wall nothing tall is standing in front of
  • a primary furnishing slot is never dropped — a chapel always has its altar

The test suite runs those checks over all 360 rooms of the corpus — twelve purposes crossed with ten occupants at three seeds each — and requires zero defects. room.layout.defects is on every room you make, so you can read the verdict yourself.

Verification, stated honestly

GML cannot be unit-tested outside the engine. What this package does instead is test itself inside it: Hearth.exe -selftest runs 3,523 assertions against the shipping build and writes the result to a file. They cover the corpus being complete, every declared extent against real measured geometry, every triangle fan's star-shaped precondition, every palette role resolving, the 360-room layout sweep, spacing that is never a ruler, purposes and occupants being measurably distinct, the drawing staying inside the rectangle it was given, and determinism.

What those assertions cannot do is judge a picture. The gallery above was reviewed by eye, and seven rounds of corrections came out of that review rather than out of the suite.

Compatibility

Built and gate-verified against GameMaker runtime 2024.14.4.268 (the stable GMS2 runtime), on Windows, through a real Igor package build. Pure GML: no extensions, no shaders, no platform calls, so it carries to every export target GameMaker supports. Import with Tools ▸ Import Local Package, open rm_hearth_demo, press Run.

GMRT is not a dependency and is not claimed. The GMS2 runtime is supported by the vendor until at least Q1 2028.

Performance

A furnished room is a few thousand triangles. Build it once — hth_room_of and hth_room_furnish are the expensive calls and neither belongs in a Step event. Nothing in the package calls random(): everything comes from a seeded hash, so the same seed is the same room forever and nothing flickers between frames.

Every global, macro and function is prefixed hth_ / HTH_. GML's global namespace is flat and a collision in your project is a support ticket nobody can debug remotely.

What you get

  • Hearth.yymps — the local package, 14 scripts of raw readable GML, header-documented
  • a runnable demo room, which is the quickstart and the smoke test
  • the demo driver object, which is the shortest usage example there is
  • two Open Sans fonts (Apache-2.0) used only by the demo readout — delete them and you lose the readout, not the product

One licence per developer who works with the source. Build anything you like with it, commercial or free, forever. Do not resell or redistribute the package itself.

Hearth is the interiors half of a pair. Its sibling, Borough, draws the outsides of the same buildings, at the same scale, lit by the same lamp, in the same six regions — they are designed to sit on one screen.

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:

Hearth.yymps 386 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.