Although the material distribution algorithm is fair in the long run, it can be brutal in the short term. I have proposed methods for assigning materials after the run before, but I may have hit upon a better idea that works better with the "assign-as-you-go" model. The method is as follows:
1) Each player starts with a percentage value for each * level material. When a material is picked up, the RNG rolls to determine who gets that material. The person receiving the material has their percentage value decreased accordingly, and everyone else gets theirs increased- but only for that * level.
2) When a person joins a run, they are assigned a percentage value of P = 1/N, where N is the number of people. Everyone else has their percentage value subtracted by P/(N-1). This is done for each * level.
3) When a person leaves a run, their current percentage value is divided by the number of remaining players, and each player gets that number added to their percentage value. This is also done for each * level.
To illustrate, here is an example. I will use the format (playername)[0*, 5*] to denote each player's percentage values. (I will omit the values for 1*-4* from now on to make reading easier, since my example will only involve two material pickups, a 0* and a 5*)
1) Players A and B start a run. A[.5, .5]; B[.5, .5].
2) A blue shard is picked up (0*). The RNG rolls, and determines that player A gets it. Player A now has their 0* value decremented, say be 10%, and the amount is distributed to all other players (in this case, just B). Thus, A[.45, .5]; B[.55, .5]
3) Player C joins the run. They are assigned a percentage value of 1/3: C[.33, .33] Since percentages must add up to 1, Players A and B have (.33/2) subtracted: A[.28, .33]; B[.39, .33]. Notice how it maintains fairness- the next time a shard (0*) is picked up, player A, who has already picked one up, is less likely to receive it, and player B is more likely to receive it.
4) Now, a flame soul is picked up. The RNG determines it goes to player C. The percentage values for 5* are modified accordingly- perhaps a greater penalty of 50% is assessed because 5* mats are rarer. Thus, C's 5* percentage value becomes (.33*.5), and the 0.165 percentage points are distributed to A and B: A[.28, .41]; B[.39, .41]; C[.33, .17]
5) Lastly, Player B leaves. His percentage values (.39, .41) are divided by the remaining number of players, and distributed evenly. The percentage values now look like this: A[.48, .62]; C[.52, .38].
Notice that a 'memory' that A picked up a blue shard, and C picked up a flame soul, are maintained by the percentage values. Because the system still relies on the RNG to make the distribution decision, and maintains a separate percentage value for each material, one cannot game the system as in a round-robin distribution scheme. I believe this weighted distribution method could reduce the amount of perceived unfairness in the material distribution system.
If seems like a good idea, but i got a bit confused. I'll get to that later. I just don't really agree with you on how the current system is flawed. Not that your isn't right, but why work on this as opposed to new boss dungeons, items, or just general expansion? It wouldn't be the most thrilling change.
Now, back to your method, lemmie try to dumb it down for myself, since you seemed to lose me after the example.
Say there are 2 people on a level, just started.
They each have a 50% chance of getting a 1 star item, and a 50% chance of getting a 2 star item, and a 50% chance of getting a 3 star item. For simplicity, their on a level with only 1 to 3 star.
The first guy picks up a 1 star item, so his precentage of getting the next 1 star decreases, and the second guy's precentage increases.
Then the second guy randomly get's a 2 star item, so his precentage of getting that decreases, increasing the other players precent.
Nobody found a 3 star, so that's still 50/50% chance of either of them getting it.
What I missed was how much the precent decreases, and how much it will change if someone else joins. Other than that, I think I got it.