ExileDesk

Blog

PoE2 Crafting Simulator Design: Why We Write No Exceptions

crafting simulatoremulatorDesecrationBoneCraft of Exile

Our PoE2 crafting simulator design comes down to one rule: every currency and Omen runs on a breakdown of its own description text, with no per-item exceptions. When we audited ExileDesk, about 40 of our roughly 130 hand-written rules had no source, and every bug we found traced back to an exception someone wrote.

Zundamon

Zundamon

Do crafting tools really give the same results as the game?

Metan

Metan

Honestly, the old ExileDesk was weak there. For each currency we kept adding "on this item type" and "can't be used when", one line at a time.

Zundamon

Zundamon

Did that cause trouble?

Metan

Metan

Within two days we found bugs like "Sceptres don't get Bones". Here's how we fixed it, and why the fixed version deserves more trust.

Why Hand-Written Exceptions Break

Here are the bugs we found and the exception behind each one.

Zundamon

Zundamon

What kind of bugs were there?

Metan

Metan

Five of them. Here's the table.

BugThe exception that caused itReading the text as written
Talismans couldn't take the lord Omens (Omen of the Sovereign / Liege / Blackblooded)Talismans were missing from the Bone item-type table, so they were treated as armourUsable
Orb of Transmutation added a mod to an Absent AmuletMagic slots were hard-coded as 1 prefix / 1 suffix, ignoring the implicit ±1Becomes Magic with no mods
Sceptres didn't get BonesWe had decided "no exclusive desecrated mods, so hide it"Shown
Runes couldn't be socketed into a Corona AmuletWe had decided "jewellery has 0 sockets"Can be socketed
Plain Catalysts worked on JewelsWe had decided "Jewels gain quality from Catalysts" without telling currency types apartNot usable
Zundamon

Zundamon

Every one came from a single line somebody decided on!

Metan

Metan

Right, a line written as "it's probably like this". It looks correct when you write it.

Metan

Metan

But it breaks the moment an unexpected pairing shows up, like Talisman plus Omen.

Zundamon

Zundamon

Were there more lines like that?

Metan

Metan

We listed every hand-written rule. Of roughly 130, about 40 had no backing in poe2db or in the game's own text.

Rebuilding the Simulator Around Description Text

The fix was to stop adding exceptions and turn each currency's description into data.

Zundamon

Zundamon

What does turning a description into data mean?

Metan

Metan

Every currency (and Omen) is written in three parts.

PartContentNot written here
What it targetsThe description's own words. Rarity (Normal, Magic, Rare) plus groups like "weapon", "armour", "jewellery", "a ring or amulet", "quiver" and "Jewel"Individual item types
What it doesA few shared building blocks: change rarity, add n mods from a pool, remove n non-Fractured mods, add one Unrevealed desecrated mod, reroll values, fracture one mod, and so onCode for a single currency
When it can't be usedLimits written in the description and the game's keyword text, such as "only one desecrated mod"Caps or floors we made up
Zundamon

Zundamon

How are Omens written?

Metan

Metan

As a tweak to those same blocks: "change how the next action works".

Metan

Metan

Omen of Dextral Annulment just narrows "remove" to the suffix side. A lord Omen just guarantees that lord's mod among the Reveal options.

Zundamon

Zundamon

Where do the differences between item types come in?

Metan

Metan

One- or two-handed, slot counts with implicit ±N, socket counts and so on are read from item data, not typed by hand.

Zero Exceptions, and Sceptre Bones Just Work

Bones show it best. The weapon Bone's description reads "Desecrates a Rare Weapon or Quiver".

Zundamon

Zundamon

What happens when you break that text down?

Metan

Metan

This.

PartContentOn a Sceptre
What it targetsRare; Weapon or QuiverIt's a weapon, so it qualifies
What it doesAdds one Unrevealed desecrated modNo exclusive desecrated mods, so the Reveal options come from the normal mod pool
When it can't be usedOnly one desecrated mod; not on items below its minimum Item LevelSame as any other weapon
Zundamon

Zundamon

There's no Sceptre line at all, and it still works!

Metan

Metan

Exactly. It also matches poe2wiki: "Sceptres do not have exclusive desecrated prefixes or suffixes".

Metan

Metan

In the owner's words, read the Bone literally and it works on Sceptres.

Metan

Metan

By deciding the rules too narrowly up front, we had removed uses the game allows.

"Remove" and "add" stay separate

The building blocks keep "remove" and "add" apart, to match how the game behaves.

Zundamon

Zundamon

If it removes and then adds, isn't one "replace" block enough?

Metan

Metan

Then you couldn't see the difference between Chaos and Bones. So we deliberately don't have one.

CurrencyRemoveAddSource
Chaos OrbRemovesPicked by weight from whichever side has room (prefix and suffix both count), regardless of what was removed—
BoneIf full, removes one non-Fractured modAdds to the side it removed frompoe2wiki ("If it removes a Prefix, it will add a Prefix")
Perfect EssenceIf the side it adds to is full, a mod on that side is always removedAdds afterwardsOwner's in-game check
Zundamon

Zundamon

Same "remove and add", but the side it lands on is decided differently.

"Can't Use It" Follows the Game's Text Too

The second rule: whether a currency shows on the shelf depends only on whether the game accepts it.

Zundamon

Zundamon

Did something go wrong with the shelf?

Metan

Metan

Liquid Emotions vanished from it. The tool had test-applied them in the background, seen them rejected, and hidden them.

Metan

Metan

Peeking at the result first isn't how the game works, so we stopped. Now we only check conditions that don't depend on randomness: item type, rarity, Corrupted, open slots and Omen prerequisites.

Zundamon

Zundamon

So what happens when a move is rejected?

Metan

Metan

You get the same message as the game, the currency isn't spent, and the step log records the rejection. We don't invent our own caps or floors either.

Metan

Metan

Our rule is to treat anything unknown as "rule unconfirmed" instead of hiding it.

Zundamon

Zundamon

Did the odds tables change too?

Metan

Metan

They now come from the same parts. Before, some tables showed odds for moves you couldn't even make.

Move you can't makeOld odds tableOdds table now
A Corrupted itemShowed odds0%
Omen of Catalysing Exaltation on an item with no qualityShowed odds0%
Gnawed bones on Item Level 65+Showed odds0%
A Bone that doesn't fit the item type—No table at all
Zundamon

Zundamon

Moves you can't make really show 0% now.

Where the Right Answers Come From

The description tells you what a currency can do, but not how likely each result is. For that we lean on outside sources.

Zundamon

Zundamon

So what counts as the right answer for odds?

Metan

Metan

It depends on what kind of answer you need.

Answer forSourceWhy
Names, tiers, level floorspoe2dbOur reference for names and numbers
Weights, ratios, roll behaviourCraft of ExileDescriptions don't give odds
Behaviour the text doesn't settleOwner's in-game checksNo other source exists
Zundamon

Zundamon

What rules were checked in game?

Metan

Metan

One is "if the roll hits a mod on a side that's over its limit, the whole move fails and the orb isn't spent".

Metan

Metan

That one is also written as a limit on "remove", not as an exception.

Zundamon

Zundamon

What about values no source gives?

Metan

Metan

Values we have to choose ourselves go in one place with a source and date, and the in-tool help labels them as assumed. That's the plan.

Metan

Metan

They aren't gathered in one place yet, though. That work is still ahead.

Not yet verified (2)
  • Every rule compared with Craft of Exile was settled on 2026-10-16 to 10-17, but in three places the owner chose to differ from Craft of Exile: how Omen of Light stacks with Omen of Sinistral / Dextral Annulment, whether Flux also changes mods outside its table, and how much quality Catalysts and similar items add.
  • During the rebuild we replayed every combination against the old code and got identical results. That shows the rebuild didn't change behaviour, not that it matches the game. Our current tests also only watch for changes.
Zundamon

Zundamon

How can I tell if a crafting tool is trustworthy?

Metan

Metan

Check whether its "can't use this" messages match the game, and whether assumed values say they're assumed.

Code built from piled-up exceptions breaks on combinations nobody expected. Running currencies on their broken-down descriptions, with odds taken from outside sources, makes any gap with the game easier to spot.

Where the Numbers Come From

Show sources (6)
  • The five bugs, ~130 hand-written rules and ~40 without a source: ADR-004 (docs/decisions/004-currency-as-description.md, audit of 2026-10-14). Record
  • The switch (v0.1.523, 2026-10-16), 390,000 targeted-pick cases matching, about 860 lines of exception code removed, about 170,000 odds-table cases matching the old tables: the progress log in the same ADR. Engine
  • Craft of Exile comparison and the three deliberate differences: docs/reviews/2026-10-17-rule-checklist.md. poe2db / CoE
  • Perfect Essence and over-limit side rules: owner's in-game check (2026-10-14). Game
  • Shelf rules and the Liquid Emotions case (2026-10-12): ExileDesk rule notes (feedback-game-rules-as-written). Record
  • Sceptre and Bone side behaviour: poe2wiki text (as quoted on 2026-10-14)

Try It Yourself

Use an Orb of Transmutation on an Absent Amulet on the crafting bench to see how the implicit ±1 changes the slot count. Moves the game rejects show the reason as text.

Related posts

VOICEVOX: Zundamon / Shikoku Metan

Craft it on the Craft Stage

ExileDeskTesting Path of Exile 2 crafting by running it through the engine

Character art: Shikoku Metan / Zundamon standing art by Sakamoto Ahiru

More posts