The One Man MMO Project
The story of a lone developer's quest to build an online world :: MMO programming, design, and industry commentary
All the Lootz
By Robert Basler on 2019-09-27 14:44:25
Homepage: onemanmmo.com email:one at onemanmmo dot com

One of the big new features in Unnamed Update is the revamped loot system. I've been working on this for quite some time as part of other features I've been doing. The most visible change is that players will now get the new consumable crates in battlefield loot crates after enemy units are destroyed. Internally there have been a lot of changes.

Where there used to be just one loot table, there are now a number of them for various features within the game, and the loot you get from any particular loot table will change as players advance in level. I also reworked the way the game determines the value of units within the game so that more valuable units give more loot.

[TFW: You log in, and immediately hear "Unit under attack! Unit lost. Unit lost. Unit lost. Unit lost." Zoom to that area. "Aww damn."]

I took the last step with the planned changes to the loot system this week and made it so I can accurately specify the probabilities of getting any particular piece of loot. In the old system every loot item had a point value assigned to it. The loot system summed the point values of all the items in a loot table and picked a random number in that range to select the loot item for the player from the table. Once I had things such as Attribute Crates where I wanted them to have specific probabilities, this system fell apart because the probability for an item depended entirely on what other items were in the loot table.

To specify these new precise probabilities I initially used floating point numbers. It seemed the natural way to do it. Sum the probabilities, select a random in the range 0-1 and off you go. It turns out that floats are fraught with peril when you are concerned with the accuracy of an item's probability. The first problem I encountered was that if I had 11 items each with 1/11 probability of being chosen, the sum of the probabilities was actually a little bigger than 1?!? That's because floats can't accurately represent all numbers and addition compounds individual items' errors. The next problem I ran into is that floats only have 7 significant digits so any one-in-a-million super-rare items weren't going to work. In the end I ripped out the floats and went back to integers where every item in the table has a chance out of million. I also added a report so I can see all the loot tables in the game and it checks that none of the loot tables have total probabilities greater than 1000000/1000000. To help ensure those probabilities are accurate, loot is now running on a crypto-grade random number generator.

I'm still tweaking the loot system. At the moment players get loot a lot less often (fewer crates on the battlefield) however individual crates can have a lot of items in them. The loot system takes into consideration the player's Luck Attribute, if they have a luck consumable (not yet available) and in PvP, the level difference of the players. Double loot weekends are also now just a database value change away. On the server side, the old system for selecting loot wasn't very efficient, this new one is much faster.

## Weapon Effects

One of the issues with Miranda's component-based RTS given my limited art capacity, is that units' appearance doesn't necessarily indicate their strength or abilities. That has now changed for weapons. Once they start shooting you can tell what you're facing. Each weapon effect now has four levels, representing it's power relative to all other weapons with the same effect. The ranges are 0-9%, 10-50%, 51-90% 91-100%. Note that player stats don't affect which visuals are chosen, so it is possible for weapons to hit a bit harder/softer than their effect would indicate.

[Purple weapon effects are good, very, very good. Unless you're the tank.]

Starting with the next build, 3.2 will be the new minimum required OpenGL version. This should not be an issue unless your video card is very old. nVidia and AMD have been shipping OpenGL 4 for years. I upgraded Miranda's renderer to use the OpenGL Core Context so I can use RenderDoc the next time I need to do some renderer debugging. Thought it would be easy, it wasn't. Thought I'd at least get a little better framerate out of it, I didn't.