Facet — every gem is cut and lit
A downloadable asset pack
Your database already knows which items are gems. It has never had a way to show one.
Facet reads $dataItems, $dataArmors and $dataWeapons and draws every gem, ore, crystal and socket-stone as a cut, lit stone — real facet geometry, per-facet reflectance under one fixed light, body colour that deepens with the distance light travels through the stone, and an inclusion that makes each one an individual.
No PNG. No atlas. No icon sheet. The whole package is five JavaScript files. Every stone you see is computed from the item's own name and price.
⚠️ 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:
FacetRender.js— Facet [1/5] — drawing and optics primitives. A counting context, seeded RNG, colour maths, 3-vector maths and the fixed-light reflectance model.FacetCorpus.js— Facet [2/5] — the hand-authored corpus. 12 cuts as FOUR different topologies, 16 species with published optical constants, 6 inclusion families and 5…FacetLapidary.js— Facet [3/5] — the lapidary. Turns a cut and a species into a lit stone: projection, per-facet reflectance, absorption depth, inclusions, mounts.Facet.js— Facet [4/5] — the system. Classifies your database into cut stones, caches them as bitmaps, and exposes them to commands and script calls. v1.0.0FacetTray.js— Facet [5/5] — the tray. A lapidary's scene that shows every stone your database defines, with the selected one inspected at size. 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 Facet works in any order — including the one you get by dragging the files in backwards. That is tested rather than hoped for: the suite loads all five files in five different orders, including fully reversed, and requires the identical stone out of each. FacetTray.js is the optional tray scene and can be switched off entirely.
It extends exactly one core method, by saved-original prototype extension, not replaced: Game_System.prototype.initialize.
Because nothing is clobbered, Facet co-exists with other plugins that patch the same seams, including large suites.
It reads your items, not a config file
Amethyst Shardis an amethyst. Always. A name that states a mineral wins over every guess underneath it.Tideglass Shardis a water stone andEmberdrift Oreis a fire stone — the element the name implies, or the entry's own damage element.Stone Flailis a flail. The last word decides what a thing is, so weapons and armour named after their material are left alone.Firestoneis a gem andWhetstoneis not — a compound counts when the word in front of it is one Facet already understands.- Six fire gems become six different stones, not one stone six times.
Disagree with any of it? <facet>, <facet:none>, <facet:cut=emerald>, <facet:species=sapphire>, <facet:inclusion=rutile>, <facet:mount=socket>.
The price decides the cut
A cheap ore comes out uncut rough. A treasure comes out a brilliant. The thresholds are read off RPG Maker's own database rather than chosen by us — the prices MZ itself ships are what set the ladder.
Real lapidary is honoured in both directions: an opaque mineral below the top tiers is cut as a cabochon, and a transparent stone at a grand price is never domed.
Why they look like stones and not like coloured polygons
A gradient can only say "this object is round and shiny". Four optical facts are what make a viewer read gem, and every one is computed:
- Light enters the table, bounces off the pavilion and comes back up — which puts a dark/bright pattern inside the outline. A gradient cannot do that, because the pattern is not radial.
- Facets shallower than the critical angle leak instead of reflecting. The critical angle is
asin(1/n)from the mineral's refractive index, so a diamond and a quartz cut identically still look like different materials. - Body colour follows the path length, so pavilion facets read deeper and more saturated than crown facets.
- Dispersion splits the highlight by wavelength — big on diamond, near zero on amethyst, using the published values. Which stones throw fire is a physical fact here, not a preference.
What is in it
| 13 cuts | brilliant · cushion · marquise · pear · heart · princess · trillion · emerald · baguette · table · rose · rough · cabochon |
| 16 minerals | each with its own published refractive index, dispersion and absorption |
| 7 inclusions | clean · rutile silk · garden · feather · colour zoning · asterism · chatoyancy |
| 5 settings | loose · in the palm · bezel · claw · socket |
13 × 16 = 208 base stones before inclusions and settings.
The cuts are four genuinely different facet topologies, not one shape with a varying vertex count: a brilliant's kites and stars, a step cut's concentric rectangles, a rose's dome of triangles with no pavilion at all, and unpolished rough. The cabochon has no facets and is shaded by a separate path entirely, which is why asterism and chatoyancy can exist at all.
The tray
One plugin command opens a jeweller's tray showing every stone your database defines, with the selected one inspected at size beside its measurements — mineral, refractive index, dispersion, critical angle, inclusion, setting.
It contains no Window_Base, so no windowskin can reach the screen. Custom typography, a solved grid, a gilt masthead. It does not look like RPG Maker, and that is deliberate.
Already using a socketing plugin?
Good — keep it. Facet does not implement socketing and does not want to. The socket setting draws your socket-stone seated in its well, which is the object a socketing system puts on screen as an icon. Use both.
Honest notes
- Facet writes nothing into your save file. Every stone is derived from the database entry, so there is no state to migrate and nothing to corrupt — and a save made with the plugin loads fine without it.
Math.random()appears nowhere. The same database cuts the same stones forever, so your screenshots reproduce.- It extends exactly one core method (
Game_System.prototype.initialize, original saved) and replaces none. - The tray scene will not inherit your window theme, because it has no windows. That is the trade for it not looking like the engine.
| Published | 4 days ago |
| Status | Released |
| Category | Assets |
| Author | CSAF — Core Systems Asset Factory |
| Made with | RPG Maker |
| Tags | assets, gems, Generator, inventory, items, javascript, plugin, Procedural Generation, RPG Maker, RPG Maker MZ |
| Languages | English |
| AI Disclosure | AI Assisted, Code, Graphics |
Purchase
In order to download this asset pack you must purchase it at or above the minimum price of $10.49 USD. You will get access to the following files:







Leave a comment
Log in with itch.io to leave a comment.