A downloadable asset pack

Buy Now$12.99 USD or more

Your database already describes every creature in the game. Nothing draws its face.

An enemy in RPG Maker MZ is a name, a set of parameters, an element it strikes with, some drops and a line in your bestiary. The player meets it as a battler sprite and a row in a menu. What it is never becomes a picture.

Visage carves it a mask. Not one picked out of a folder, one struck from that record's own fields, at run time, in code.


⚠️ 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. VisageRender.js — Visage [2/4] — the surface. Colour, the shipped faces, seeded grain, and the relief field every mask is lit from. v1.0.0
  2. VisageRead.js — Visage [1/4] — the reading. Turns an enemy, actor or troop record into a mask profile: structure, superstructure, pigment, house, age, break. v1.0.0
  3. VisageCarve.js — Visage [3/4] — the carving. Strikes a mask from a profile: ten face structures, twelve superstructures, banded pigment, inlay, wear, one break. v1.0.0
  4. Visage.js — Visage [4/4] — the scenes, parameters and commands. Every spirit and beast in your database is carved a mask, and your players see it. v1.0.0

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 Visage works in whatever order the Plugin Manager gives you. That is tested rather than hoped for: the headless suites, the store-plate renderer, the capture pipeline and the in-engine verification all load the four files alphabetically — which puts the entry file Visage.js first, before the carver, the reader and the drawing kit it uses, and that is the order you get by dragging the folder in — and the in-engine run asserts all four resolved anyway, with five plugin commands registered and both scenes live. Visage.js is the only one that touches RPG Maker at all; the other three are a reader that turns a database record into a mask profile, a carver and a drawing kit, and none of them knows the engine exists. Switch Visage.js off and nothing is patched.

Core methods extended — 5 by saved-original prototype extension, none replaced: Game_System.prototype.initialize, Scene_Boot.prototype.start, Window_MenuCommand.prototype.addOriginalCommands, Scene_Menu.prototype.createCommandWindow, Scene_Map.prototype.update.

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

It also extends 2 methods on core singletons, the same way — original saved and called through: BattleManager.processVictory, ImageManager.loadPicture. Another plugin patching those keeps working.

Where every part of the face comes from

  • the face structure comes from what the creature is: beast, humanoid, undead, spirit, construct, dragon, insect, aquatic, plant, fiend. Ten silhouettes, each a different shape, not one shape in ten colours
  • the superstructure comes from where it stands in your own database: its level, experience and maximum HP as a percentile of every other record you have written. A bare brow at the bottom, a sun disc at the top, twelve bands between. Your biggest monster wears the crown even in a small project, because rank is measured against your game and never against a table we shipped
  • the pigment comes from what it strikes with: its attack element, then the elements of its own skills, then what it resists. Eight painted elements, laid as a real layer with a lit lip and a shadow cast on the bare ground beside it. A creature that hits with Physical is left unpainted, and the bare wood or bone shows
  • the inlay and binding come from its house: a faction table you declare, a notetag, or, if you declare nothing at all, the goods it carries. A creature that drops a pelt belongs to a different house than one that leaves an axe. Six treatments
  • the wear comes from its rank and hardiness: grain exposure, chips on the lit edge, and a crack that lengthens with age across five ages

Change the record and the mask changes. Nothing here is an image file. The package contains ten files and not one of them is a PNG.

32,400 composable masks, and 56 of them in the demo database alone

10 face structures × 12 superstructures × 9 pigment states × 6 inlays × 5 ages. The second gallery image is that wall: 56 masks carved from one demo bestiary, every one traceable back to the record that made it. Nothing on that board was drawn by hand and nothing on it was chosen.

The three places your players meet a mask

  • The Unmasking. A full screen reveal: the mask hanging from one iron peg on a plank wall, lit from the upper left so the grain, the inlay and the cracks read, with a brass placard engraved underneath naming the creature and the four things that made its face. It happens by itself the first time the party defeats something, or on a plugin command when you want to choose the moment.
  • The Rack. The wall the player fills. A solved grid of pegs, each taken mask hanging at its own tilt, empty pegs still showing their peg and cord so the collection reads as incomplete. A brass count plate says how many of how many. One command on the main menu.
  • A mask in a cutscene. Show Mask Picture puts a mask into a Game_Picture, so it can be moved, tinted, timed and erased like any other picture in the event editor.

Overruling it

<visage type: beast>            beast humanoid undead spirit construct
                                dragon insect aquatic plant fiend
<visage rank: 9>                0-11, instead of the database percentile
<visage element: fire>          by name or by index
<visage faction: Barrow Kin>    the house it belongs to
<visage age: ancient>           green seasoned old ancient relic
<visage name: The Bog Wight>    what is engraved on the placard
<visage: skip>                  never carve this record

Seven notetags, on an Enemy or an Actor, for when you want to overrule anything it derived. Declare none of them and every enemy and actor in the project still gets a face, because everything is derived from fields you have already filled in. Every mask also carries exactly one seeded structural break, hashed from the record's own id, so a creature's mask is always the same mask.

It does not look like RPG Maker

No Window_Base, no windowskin, no default frame, no pause sign, and not RPG Maker's font. Both scenes are drawn from scratch. That is verified in the real engine by a chrome walk that is first proven able to see chrome on a stock scene: 0 windows and 0 buttons on both screens. Two typefaces ship with it, Cinzel and Crimson Pro, both SIL Open Font Licence and both free to ship inside your game, loaded through the browser's own FontFace loader so a missing font file is a fallback and never a crash.

It costs nothing per frame

Every mask is baked once into a Bitmap and cached by profile and size. Measured in the engine over 3,600 stepped frames, on both of its screens: 2 draw calls, 0 texture uploads, 0 bitmap dirties, 0 windows drawn and zero display object growth, with the plugin's half of the frame at 0.012 ms against a 2 ms budget.

What you get

  • Four raw, readable .js files. No minified build, full JSDoc on every public function, all of it yours to read and change.
  • Two .woff2 typefaces and their OFL licence files.
  • A Readme documenting every parameter, command, notetag and script call, where every claim is exercised by a check that runs against the shipped bytes.
  • Tested in the real engine rather than only in tests: the package is installed into a blank MZ project and used the way a buyer uses it before release.
  • One commercial licence, unlimited games.

Honest about what it is not

It does not replace your battler sprites and it draws no map. It is one thing done properly: the face your creature would wear, struck from the record you already wrote.

Also from Core Systems Asset Factory

Armorial draws a coat of arms for every character and faction from the deeds the playthrough recorded, the same houses Visage inlays into its masks. Elytra is the same idea pointed at insects, with its own collection screen.

More generated art plugins for MZ: Refectory · Cartouche · Courtcard · Liturgy


Made with AI assistance. Code: yes. Graphics: yes, the plugin generates every mask procedurally and the cover is a generated illustration. Sounds: no. Text and dialog: no.

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:

visage-plugin.zip 119 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.