A downloadable asset pack

Buy Now$12.99 USD or more

Your NPCs have jobs. They do not have workplaces. A routine plugin walks a smith to the corner of the map at 8am, and he stands on bare grass turning in random directions. The tileset has no anvil, so the smithy is a decorative sprite you placed by hand — if you placed one at all.

Journeywork draws the workplace, from the trade. Put <journeywork: smith> in an event's note box and that NPC gets an anvil on a tree stump, a lit hearth, a rack of stock bar, a quench tub and a stack of crates, standing on a floor of cinders and ash — arranged by a solver that measures every prop, sorted into the tilemap at the right depth, and facing the work instead of turning at random.

No image files. No tileset pages to import. Nothing to configure. Every anvil, loom, kiln, quern, mash tun and drying rack in this plugin is drawn in code at your project's own tile size.

Twenty-four trades, and no two share a layout

apothecary · baker · bowyer · brewer · butcher · carpenter · chandler · charcoaler · cobbler · cooper · dyer · fishwife · fletcher · glassblower · grocer · mason · miller · potter · ropemaker · salter · scribe · smith · tanner · weaver

A trade names a station — the thing the worker stands at — and its satellites by ROLE rather than by coordinate: behind, behind-left, behind-right, beside-left, beside-right, fore-left, fore-right, onStation, overhead. The solver turns those into pixels, and it measures each prop by drawing it and scanning its alpha, so the ground patch is the union of what the props really draw rather than of where they are anchored. Change your tile size and everything re-solves.

The floor is evidence of the work

Eight generated worked grounds, keyed to the trade: ash under a forge, spilled flour in a bakehouse, wet clay in a pottery, churned mud in a tannery, planking under a fish stall, swept flags in a scriptorium, thread-strewn boards in a weaving shed, sand outside an apothecary. It is the single thing that makes a group of props read as a place somebody uses rather than as furniture that happens to be near each other.

The worker faces the work

A trade that works a station stands at it. A trade that serves a customer stands behind the counter facing out. Both are derived from the furniture, not guessed — and the worker stays at the work instead of drifting off and turning on the spot.

One prop, many trades

A trade can change what a prop contains: the same vat is a tanning pit, a dyer's woad vat and a brewer's mash tun by its liquor. That is what keeps a whole town in one visual vocabulary instead of twenty-four unrelated pictures.

What it costs your game

Each workplace is painted once, when the map loads. Measured in the real MZ runtime: 11 draw calls per frame against a ceiling of 60, 0 texture uploads, 0 display-object growth, with the update half at 0.124 ms against a 2 ms budget. Nothing is redrawn, nothing is uploaded, and the per-frame path allocates nothing at all. A mistyped trade id draws nothing and reports nothing — it can never crash your game.


⚠️ Compatibility — the question you actually have

Tested against RPG Maker MZ with the stock scripts unmodified, verified by running the plugin in the real engine rather than only in tests.

Plugin Manager order:

  1. JourneyworkForms.js — Journeywork [2/5] — the primitive form vocabulary every prop is composed from. Data and drawing only; knows nothing about RPG Maker.
  2. JourneyworkCorpus.js — Journeywork [1/5] — the authored trades. What each workplace is made of, and where the worker stands. Data only.
  3. JourneyworkShop.js — Journeywork [3/5] — the props. Every workplace object, composed from the form vocabulary. Knows nothing about RPG Maker.
  4. JourneyworkPlace.js — Journeywork [4/5] — the layout solver. Turns a trade's station and roles into placed props, a footprint, and the tile the worker stands on.
  5. Journeywork.js — Journeywork [5/5] — draws a real workplace around every working NPC, and points them at the work. The only file that touches the engine.

This order reads sensibly in the list and nothing depends on it. Every file resolves its siblings the first time it needs them rather than when it loads, so Journeywork works in whatever order the Plugin Manager gives you. That is tested rather than hoped for: the headless suite, the store-plate renderer and the in-engine verification all load the five files alphabetically — which puts the entry file Journeywork.js first, before the four it reads, solves and draws with — and the in-engine run asserts all five resolved anyway. Journeywork.js is the only one that touches RPG Maker at all; the other four are a form vocabulary, an authored corpus of trades, a set of props and a layout solver, and none of them knows the engine exists. Switch Journeywork.js off and nothing is patched.

Core methods extended — all 5 by saved-original prototype extension, none replaced: Game_Map.prototype.setup, Game_Event.prototype.updateSelfMovement, Spriteset_Map.prototype.createCharacters, Spriteset_Map.prototype.update, Spriteset_Map.prototype.destroy.

Because nothing is clobbered, Journeywork co-exists with other plugins that patch the same seams, including large suites.

Also from Core Systems Asset Factory

  • Township gives those NPCs somewhere to BE at each hour. Journeywork gives them something to be doing when they get there.
  • Bazaar Core prices what the trades in your town actually make.
  • Cartouche draws each of them a message box built from who they are.

AI disclosure

Code: yes. Graphics: yes. Sounds: no — this product ships no audio. Text and dialog: no — it ships no in-game narrative.

Purchase

Buy Now$12.99 USD or more

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

Journeywork v1.0.0 — plugin, Readme and licence 50 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.