I mentioned this in another thread -- currently, the frequency of a given item depends in part on the frequency of all other items that can possibly be generated. As an overly-reductive example, if the only item in the game is a rocket launcher, then of course only rocket launchers will be generated...but those rocket launchers will also be generated in massive numbers, even if rocket launchers are nominally extremely uncommon items.
This wreaks havoc on attempts to balance the game via item frequency, because any change to any item's allocation rules has an effect on all other items' drop rates. This applies to egos (and presumably to artifacts) as well. Most notably, if we decide to make junky items less common, then we de facto make non-junky items more common. This is why "big 3" weapon egos are such a big deal right now -- the Too Much Junk initiative meant that they don't have nearly as much competition at deeper dungeon levels. It's also why we had to add the junky DSM of Craftsmanship to "push out" DSMs of Speed and Elvenkind.
Here's my proposal to address this issue. Right now, we have a sort of "unitless" allocation rule. Let's change that to explicitly being "N out of every million items will be this item". For example, a Potion of CLW having an allocation of 10,000 at dlvl5 means that 10,000 out of 1,000,000 (i.e. 1%) of items generated at dlvl5 will be CLW. For any given dungeon level, it will be an error if indicated item frequencies sum to more than 1,000,000.
For each depth, we examine the frequencies for all items that have an allocation rule for that depth, and build a table of length 1,000,000 of the different odds. In our example, at dlvl5 CLW would occupy 10,000 slots on this table. The table will have gaps in it -- not every slot will be taken (the table generator can at least enforce that we do not overfill it). If we want to generate an item, we roll, find the corresponding item if any, and generate it. If we don't find an item (an "allocation miss"), then nothing is generated.
Note that we don't actually have to build out an entire table. We just need a list of all possible valid items at each depth, then make a random number between 1 and 1,000,000, and walk along the list until we hit the corresponding item or run out of items.
Artifacts slot into this rather nicely -- we can just say that the One Ring has a 1 in 1 million chance of being any given item at any depth. Egos are trickier, because they need a base item to be applied to. I believe this can be handled with a separate allocation table, though. Say we choose e.g. to generate a Dagger. This is an item that is potentially eligible for egos, so we look up in another table of ego frequencies, which contains all the egos that can be applied to a Dagger, as well as the frequency for merely good items (we can gloss "good" as . If we get an allocation miss on that table, then the item is generated as average.
For uniques or other situations where we want to boost the drop quality, I see two major possibilities. The simplest is to just drop the item as if it were at a deeper dungeon level. The second is to pick multiple times from the table, and choose the "best" result. That might mean applying some item power heuristics, but maybe it just means we take the least-likely result.
The overall process is straightforward. I recognize that it does make the numbers a little less pleasant-looking when writing allocation rules. However, the fact that allocation rules are now very clear about what they mean seems like a huge win compared to the current system.
This wreaks havoc on attempts to balance the game via item frequency, because any change to any item's allocation rules has an effect on all other items' drop rates. This applies to egos (and presumably to artifacts) as well. Most notably, if we decide to make junky items less common, then we de facto make non-junky items more common. This is why "big 3" weapon egos are such a big deal right now -- the Too Much Junk initiative meant that they don't have nearly as much competition at deeper dungeon levels. It's also why we had to add the junky DSM of Craftsmanship to "push out" DSMs of Speed and Elvenkind.
Here's my proposal to address this issue. Right now, we have a sort of "unitless" allocation rule. Let's change that to explicitly being "N out of every million items will be this item". For example, a Potion of CLW having an allocation of 10,000 at dlvl5 means that 10,000 out of 1,000,000 (i.e. 1%) of items generated at dlvl5 will be CLW. For any given dungeon level, it will be an error if indicated item frequencies sum to more than 1,000,000.
For each depth, we examine the frequencies for all items that have an allocation rule for that depth, and build a table of length 1,000,000 of the different odds. In our example, at dlvl5 CLW would occupy 10,000 slots on this table. The table will have gaps in it -- not every slot will be taken (the table generator can at least enforce that we do not overfill it). If we want to generate an item, we roll, find the corresponding item if any, and generate it. If we don't find an item (an "allocation miss"), then nothing is generated.
Note that we don't actually have to build out an entire table. We just need a list of all possible valid items at each depth, then make a random number between 1 and 1,000,000, and walk along the list until we hit the corresponding item or run out of items.
Artifacts slot into this rather nicely -- we can just say that the One Ring has a 1 in 1 million chance of being any given item at any depth. Egos are trickier, because they need a base item to be applied to. I believe this can be handled with a separate allocation table, though. Say we choose e.g. to generate a Dagger. This is an item that is potentially eligible for egos, so we look up in another table of ego frequencies, which contains all the egos that can be applied to a Dagger, as well as the frequency for merely good items (we can gloss "good" as . If we get an allocation miss on that table, then the item is generated as average.
For uniques or other situations where we want to boost the drop quality, I see two major possibilities. The simplest is to just drop the item as if it were at a deeper dungeon level. The second is to pick multiple times from the table, and choose the "best" result. That might mean applying some item power heuristics, but maybe it just means we take the least-likely result.
The overall process is straightforward. I recognize that it does make the numbers a little less pleasant-looking when writing allocation rules. However, the fact that allocation rules are now very clear about what they mean seems like a huge win compared to the current system.
Comment