PoE2 Crafting Simulator Design: Why We Write No Exceptions
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
Do crafting tools really give the same results as the game?

Zundamon
Did that cause trouble?
Why Hand-Written Exceptions Break
Here are the bugs we found and the exception behind each one.

Zundamon
What kind of bugs were there?
| Bug | The exception that caused it | Reading 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 armour | Usable |
| Orb of Transmutation added a mod to an Absent Amulet | Magic slots were hard-coded as 1 prefix / 1 suffix, ignoring the implicit ±1 | Becomes Magic with no mods |
| Sceptres didn't get Bones | We had decided "no exclusive desecrated mods, so hide it" | Shown |
| Runes couldn't be socketed into a Corona Amulet | We had decided "jewellery has 0 sockets" | Can be socketed |
| Plain Catalysts worked on Jewels | We had decided "Jewels gain quality from Catalysts" without telling currency types apart | Not usable |

Zundamon
Every one came from a single line somebody decided on!

Zundamon
Were there more lines like that?
Rebuilding the Simulator Around Description Text
The fix was to stop adding exceptions and turn each currency's description into data.

Zundamon
What does turning a description into data mean?
| Part | Content | Not written here |
|---|---|---|
| What it targets | The 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 does | A 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 on | Code for a single currency |
| When it can't be used | Limits written in the description and the game's keyword text, such as "only one desecrated mod" | Caps or floors we made up |

Zundamon
How are Omens written?

Zundamon
Where do the differences between item types come in?
Zero Exceptions, and Sceptre Bones Just Work
Bones show it best. The weapon Bone's description reads "Desecrates a Rare Weapon or Quiver".

Zundamon
What happens when you break that text down?
| Part | Content | On a Sceptre |
|---|---|---|
| What it targets | Rare; Weapon or Quiver | It's a weapon, so it qualifies |
| What it does | Adds one Unrevealed desecrated mod | No exclusive desecrated mods, so the Reveal options come from the normal mod pool |
| When it can't be used | Only one desecrated mod; not on items below its minimum Item Level | Same as any other weapon |

Zundamon
There's no Sceptre line at all, and it still works!
"Remove" and "add" stay separate
The building blocks keep "remove" and "add" apart, to match how the game behaves.

Zundamon
If it removes and then adds, isn't one "replace" block enough?
| Currency | Remove | Add | Source |
|---|---|---|---|
| Chaos Orb | Removes | Picked by weight from whichever side has room (prefix and suffix both count), regardless of what was removed | — |
| Bone | If full, removes one non-Fractured mod | Adds to the side it removed from | poe2wiki ("If it removes a Prefix, it will add a Prefix") |
| Perfect Essence | If the side it adds to is full, a mod on that side is always removed | Adds afterwards | Owner's in-game check |

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
Did something go wrong with the shelf?

Zundamon
So what happens when a move is rejected?

Zundamon
Did the odds tables change too?
| Move you can't make | Old odds table | Odds table now |
|---|---|---|
| A Corrupted item | Showed odds | 0% |
| Omen of Catalysing Exaltation on an item with no quality | Showed odds | 0% |
| Gnawed bones on Item Level 65+ | Showed odds | 0% |
| A Bone that doesn't fit the item type | — | No table at all |

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
So what counts as the right answer for odds?
| Answer for | Source | Why |
|---|---|---|
| Names, tiers, level floors | poe2db | Our reference for names and numbers |
| Weights, ratios, roll behaviour | Craft of Exile | Descriptions don't give odds |
| Behaviour the text doesn't settle | Owner's in-game checks | No other source exists |

Zundamon
What rules were checked in game?

Zundamon
What about values no source gives?
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
How can I tell if a crafting tool is trustworthy?
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
- PoE2 crafting calculator mistakes: 3 bugs we caught
- PoE2 Desecration: which side does the Bone hit?
- PoE2 Fracturing Orb: desecrated mods can't be fractured
VOICEVOX: Zundamon / Shikoku Metan
Character art: Shikoku Metan / Zundamon standing art by Sakamoto Ahiru


