A downloadable tool

Buy Now$18.00 USD or more

Your quest plugin remembers what the player was told. Nothing remembers what they did.

There are seventeen quest plugins for RPG Maker MZ. Every one of them is a journal — a place to read back what an NPC already said. Not one of them decides what happens when the player picks a side.

So you build it yourself, out of switches. Switch 41 is "sided with the thieves". Switch 42 is "sided with the merchants". Three months later there is a path through your game where both are on, you cannot work out which event did it, and you are reading conditional branches at two in the morning.

Chronicle Core is the layer underneath the journal. Keep the quest log you already own. This is the part that decides what your choices actually do.

One idea, and everything follows from it

A quest does not own its progress. It reads the world.

There is one world-state store per save. Objectives, branch gates, quest availability and quest failure are all conditions over that one store. Which means a choice made in Act 1 changes a quest written in Act 3 and neither quest has to know the other exists. You write a fact; every quest that reads it moves.

That is why this cannot be bolted onto a journal, and it is the whole product in one sentence.

Branches are committed, not suggested

Branching is easy to offer and hard to guarantee. If siding with the thieves just sets a variable, nothing stops a later event from setting the merchants' one too.

Here, committing a branch permanently forecloses every other branch of that quest, and taking a foreclosed branch raises an error instead of quietly writing both. The engine's job is to make the impossible state impossible — not to warn about it in a readme.

A branch can also close because the window shut and the player missed it. That is a different story beat, and it is expressible.

Write conditions like a designer, not like a programmer

  • flag blacksmith_dead
  • count wolves_killed >= 5
  • rep thieves >= 25
  • quest guild_war is complete
  • chose guild_war side_thieves
  • flag reached_city and (rep thieves >= 25 or chose guild_war side_thieves)

One language, in every field that takes a condition. And a misspelled condition refuses to boot the game and names the quest and the field — because a typo that silently evaluates true is the bug you find months later with nothing to point at.

What you get

  • World state — named facts and counters every quest can read, packed into the save by id rather than by name.
  • Branching outcomes — mutually exclusive, enforced, permanent.
  • Faction reputation — integer standing with named tiers, and a reported event every time one is crossed.
  • Objectives that read the world — including hidden ones, so listing "Confront the traitor" doesn't tell the player there is a traitor. Progress counts against visible objectives only.
  • Quest failure — permanent, latching, and a first-class state.
  • The Chronicle — the record of what the player did: every choice, in order, expanded into the standing it moved and the consequence you wrote.
  • A four-tab journal scene — Active, Finished, Factions, Chronicle. Or skip it and draw your own; the engine has no dependency on the UI.
  • Twelve plugin commands and a script API$chronicle.check('rep thieves >= 25') drops straight into a Conditional Branch.

Built to a measured standard

  • 79 automated tests, all green. The engine is pure logic and tested headlessly.
  • Measured in the real engine, not estimated: 4.10–4.80 ms per frame with the journal open, 0 of 600 sampled frames over the 60 FPS budget.
  • The list draws only what is on screen, and that is a count rather than a timing — 12 draw calls per refresh at 2,000 quests and at 20,000.
  • Verified through a real save/load round trip, including a flag literally named __proto__.
  • Nothing overwrites a core method. Every hook keeps the original and calls it, so your menu, message and save plugins keep working.
  • Raw, uncompressed, fully commented source. You bought a plugin you can read, debug and extend. Full JSDoc on every public function.

Honest limits

Building the quest list is proportional to the number of quests — it happens once per tab change, not per frame, and measures 3.3 ms at 2,000 quests and 19.5 ms at 20,000. Frame cost is measured; presented frame rate is not claimed, because the measurement harness runs in a browser window where vsync pacing is not observable. The readme says all of this too.

Requires

RPG Maker MZ. No other plugins, no dependencies. Works alongside any quest log.


More from CSAF

  • Chimera Core — creature genetics, breeding, evolution & box storage
  • Chimera Battle — type chart, move sets, status effects & battle AI
  • Chimera Field — spawn tables, rarity tiers, variant rates & a Dex

Purchase

Buy Now$18.00 USD or more

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

chronicle-core-plugin.zip 38 kB

Leave a comment

Log in with itch.io to leave a comment.