Some trophies, mostly those found in Deep into the Dark Mist, carry random properties. Their stats are fixed by the trophy type, but each stat's value is rolled once from a range when the trophy enters your inventory. The roll is permanent: these trophies cannot be enhanced, reforged or used as reforge material.
How the roll works#
For each of the trophy's (up to 4) properties the game looks up a range row with a lower bound, an upper bound and a step, then computes:
value = Lower + Step × R, where R is a whole number from 1 to (Upper − Lower) / Step, drawn by a generator seeded with RandomSeed + RandomTimes (one call per property).
| Pool row | Lower | Upper | Step | Possible values |
|---|---|---|---|---|
| 50101 Attack (+0) | 20 | 32 | 1 | 21 to 32 (12 values) |
| 60601 Health (+0) | 50 | 100 | 5 | 55 to 100 (10 values) |
All ranges divide evenly, so the upper bound can always be rolled, but the listed lower bound never can (the smallest roll is one step above it).
The random number does not come from the clock. It comes from a seed kept in your story save: seed = RandomSeed + RandomTimes, and RandomTimes goes up by 10 on every call, one call per property. A three-property trophy uses three consecutive seeds. RandomTimes wraps back to 0 after passing 999,999.
Pools#
Values shown as the possible range for each trophy level (the item's "+N"; the item id's hundreds digit is N).
| Pool | Property | +0 | +1 | +2 | +3 | +4 | +5 |
|---|---|---|---|---|---|---|---|
| 501 | Attack | 21-32 | 34-45 | 47-58 | 60-71 | 73-84 | 86-100 |
| 502 | Atk vs Humanoid | 5.1%-8% | 8.2%-11.1% | 11.3%-14.2% | 14.4%-17.3% | 17.5%-20.4% | 20.6%-24% |
| 503 | Atk vs Beasts | 5.1%-8% | 8.2%-11.1% | 11.3%-14.2% | 14.4%-17.3% | 17.5%-20.4% | 20.6%-24% |
| 504 | Atk vs Sendril | 5.1%-8% | 8.2%-11.1% | 11.3%-14.2% | 14.4%-17.3% | 17.5%-20.4% | 20.6%-24% |
| 506 | Crit Damage | 3.1%-5% | 5.2%-7.1% | 7.3%-9.2% | 9.4%-11.3% | 11.5%-13.4% | 13.6%-16% |
| 507 | Crit Rate | 2.6%-4.7% | 4.9%-6.7% | 6.9%-8.7% | 8.9%-10.7% | 10.9%-12.7% | 12.9%-15% |
| 601 | Defence | 13-22 | 24-33 | 35-44 | 46-55 | 57-66 | 68-78 |
| 602 | Element Res | 19-29 | 31-41 | 43-53 | 55-65 | 67-77 | 79-90 |
| 603 | Poison Res | 19-29 | 31-41 | 43-53 | 55-65 | 67-77 | 79-90 |
| 604 | Arcane Res | 19-29 | 31-41 | 43-53 | 55-65 | 67-77 | 79-90 |
| 605 | Shadow Res | 19-29 | 31-41 | 43-53 | 55-65 | 67-77 | 79-90 |
| 606 | Health | 55-100 | 110-170 | 180-230 | 240-300 | 310-370 | 380-450 |
| 701 | Stamina Regen | 26-40 | 42-60 | 62-80 | 82-100 | 102-120 | 122-140 |
| 702 | Stamina | 31-50 | 52-65 | 67-80 | 82-95 | 97-110 | 112-125 |
| 703 | Sanity | 6-7 | 9-10 | 12-13 | 15-16 | 18-19 | 21-22 |
| 704 | Crit Rate | 2.1%-3.8% | 4%-5.7% | 5.9%-7.6% | 7.8%-9.5% | 9.7%-11.4% | 11.6%-13.3% |
| 705 | Crit Damage | 2.6%-4.3% | 4.5%-6.2% | 6.4%-8.1% | 8.3%-10% | 10.2%-11.9% | 12.1%-13.8% |
Random-property trophies#
Each type exists at +0 to +5 (all 17 are also listed in the Trophy list, and their level odds per chest in Trophy sources#Dream Chests). Most also come in three effect strengths that share the same stat pools: ids 67xxx (described as a slight effect), 68xxx (moderate) and 69xxx (great). The strengths differ only in the trophy's special effect (LogicParam; see Trophy effects#Random trophies: the Abnormal and Lunatic families).
| Trophy | Category | Item ids | Levels | Pools (property) |
|---|---|---|---|---|
| Bloodthirsty Eye | Scars | 67001-69501 (18) | 1-6 | 507 Crit Rate, 502 Atk vs Humanoid, 506 Crit Damage |
| Beastheart Stone | Scars | 67002-69502 (18) | 1-6 | 507 Crit Rate, 503 Atk vs Beasts, 506 Crit Damage |
| Glowing Crystal | Scars | 67003-69503 (18) | 1-6 | 507 Crit Rate, 504 Atk vs Sendril, 506 Crit Damage |
| Skullcutter | Scars | 67004-67504 (6) | 1-6 | 501 Attack, 502 Atk vs Humanoid, 503 Atk vs Beasts |
| Beast Chain | Scars | 67005-67505 (6) | 1-6 | 501 Attack, 503 Atk vs Beasts, 504 Atk vs Sendril |
| Meteor Bracelet | Scars | 67006-67506 (6) | 1-6 | 501 Attack, 504 Atk vs Sendril, 502 Atk vs Humanoid |
| Raw Gem Amulet | Scars | 67007-69507 (18) | 1-6 | 501 Attack, 507 Crit Rate, 506 Crit Damage |
| Poison Arrowleaf | Resistance | 67008-69508 (18) | 1-6 | 606 Health, 602 Element Res, 603 Poison Res |
| Pagan Icon | Resistance | 67009-69509 (18) | 1-6 | 606 Health, 604 Arcane Res, 605 Shadow Res |
| Mist Bracer | Resistance | 67010-69510 (18) | 1-6 | 606 Health, 601 Defence |
| Brass Mask | Resistance | 67011-69511 (18) | 1-6 | 601 Defence, 606 Health, 605 Shadow Res |
| Flamel's Ring | Resistance | 67012-69512 (18) | 1-6 | 601 Defence, 606 Health, 602 Element Res |
| Zealot's Crest | Nightmare | 67013-69513 (18) | 1-6 | 704 Crit Rate, 705 Crit Damage, 502 Atk vs Humanoid, 504 Atk vs Sendril |
| Executioner's Gloves | Nightmare | 67014-69514 (18) | 1-6 | 702 Stamina, 705 Crit Damage, 701 Stamina Regen |
| Stag Rings | Nightmare | 67015-69515 (18) | 1-6 | 702 Stamina, 701 Stamina Regen, 704 Crit Rate |
| Hunting Claw | Nightmare | 67016-67516 (6) | 1-6 | 703 Sanity, 704 Crit Rate, 705 Crit Damage |
| Daemon Mask | Nightmare | 67017-67517 (6) | 1-6 | 703 Sanity, 702 Stamina, 705 Crit Damage |
Eight more Nightmare items with untranslated Chinese names (67068-67075) also have the random-property flag. They appear in no maze drop list. Each has two pools (for example 67068: Attack and Stamina Regen), and their internal names (such as an attack bonus during abnormal collapse) do not match those pools, so they look like test or cut items.
Where they come from#
- Maze drops: the Deep into the Dark Mist drop lists (
StoryMazeDrop) contain random-property trophies on every maze level, and the best version on offer rises with depth. Level 1 lists only +0; the highest listed version is +1 at level 2, +2 at level 3, +3 at level 4, +4 from level 7 and +5 from level 16. Levels 10-15 list only +3/+4, and from level 21 on only +4/+5 (counted from drop-list entries, not weighted by theirProbchances). - Trophy boxes (Dream Chests) from merchants: buying a "trophy box" item picks one trophy from the box's drop list for the current story, weighted by each entry's
Prob. That pick uses the same save seed and counter, and if the picked trophy has random properties, its values use the next seeds in the sequence. The purchase is refused when your trophy inventory is full.
Hidden mechanics#
- Rolled at pickup, then frozen. The roll happens when the trophy object is created in your inventory (a drop, a reward or a merchant purchase). The values are written into the save as two lists (
RanTtypes,RanVvalues) and loaded back unchanged; the game only rolls again if a saved random trophy has no stored values. - The level does not change the roll. Each "+N" version is a separate item whose property ids already point at the +N pool rows, so the pool comes from the item id, not from enhancing (which these trophies cannot do anyway).
- Save-scumming does not help (inferred from the code). The seed and the roll counter are saved with your story. If you reload a save and pick up the same trophies in the same order, they should roll exactly the same values. You can only change the outcome by changing what else uses the counter before the pickup, such as another random-property trophy or a merchant trophy box (inferred from the shared counter).
- New seed when the maze is cleared. Choosing to return to Mist Camp after the last maze floor (the prompt about the Terror Obsessions being dispersed) rolls a brand-new 5-digit seed (10000-99999). A new story also starts with a new seed. The roll counter
RandomTimesis not reset by this, so the sequence of seeds still continues. - The bottom of each range is unreachable. For example, an Attack +0 pool row reads 20-32, but the lowest possible roll is 21. Every value in between is equally likely (one uniform draw per property).
- Consistency check. A developer test save embedded in the game code holds a Raw Gem Amulet +5 (69507) with Attack 93, Crit Rate 14.5% and Crit Damage 14.8%, and Stag Rings +5 (69515) with Stamina 114, Stamina Regen 126 and Crit Rate 12.8%. All six values fall inside the +5 ranges above.
- Stats stack normally. Random values go into the same stat totals as fixed trophy stats and reforged sub-properties.
Sources#
reference/lua_src/luascript/structdata/fs_trophyitemdata.lua:7-30(rolled in the constructor only when no saved values exist),:237-258(RandomProperty formula).reference/lua_src/luascript/structdata/ms_trophyrandomproperty.lua:8-28;gamedata/structdata/exportdata/es_trophyrandomproperty.luarows 50101-70506 (102 real rows; the other 846 rows are empty PropertyId 0 placeholders).reference/lua_src/luascript/common/mathhelper.lua:240-246(getRandomWithSeed);reference/lua_src/luascript/structdata/fs_savestory.lua:93-94, 264-265, 737-748(seed and counter saved),:3874-3886(GetRandomSeed +10 per call, ResetRandomSeed).reference/lua_src/luascript/controller/controllerstorymode.lua:7493-7501(seed reset when returning to Mist Camp).reference/lua_src/luascript/structdata/fs_trophyequiplist.lua:42-65, 107-130andfs_itemlist.lua:64-67, 97(RanT/RanV saved and applied).reference/lua_src/luascript/ui/controller/exchangectrl.lua:248-256, 1600-1621(trophy box purchase: weighted pick fromStoryItemDropfor the current story, using the same seed).reference/lua_src/luascript/controller/controllerstorymode.lua:5494-5539andstructdata/fs_itemlist.lua:155-168(trophy created on pickup);structdata/ls_game.lua:356(developer test save used for the consistency check).- Re-check:
build/wiki/scripts/refute_trophy_reforge/check2.py(all 102 pool rows and the 17 trophy pool lists) andmaze.py(maze drop levels). es_trophydata.lua: ItemIds 67001-69517 (RandomProperty = 1, EmotionType = 1), e.g. 67001 vs 68001 vs 69001 (LogicParam 125/170/200);StoryMazeDrop(MazeLevel vs ItemId).