Replies: 2 comments 1 reply
-
So instead of having selecting a random item from a list, you're suggesting that maybe it could work more like a queue, but with a chance of returning the same item twice? This actually seems a lot more balanced and better to work with than a traditional loot table. Since this is a multiplayer game, do you think the prize pack I guess "pointer" would be for each players or shared among players? Also, lets pull @Nodding into the conversation. |
Beta Was this translation helpful? Give feedback.
-
I forgot all about this, but I like it a lot. To me it makes the game feel less grindy. I assume when implementing the pointer for what will drop would be handled by the map host, but I am not 100% sure, I haven't jumped far into the current system and how it works. I'd love to hear from @Elginive and @fornclake about this though, it deserves some attention. |
Beta Was this translation helpful? Give feedback.
-
In Zelda games, loot is handled rather deterministically. Bosses, mini bosses, chests and so on all have a fixed loot assigned to them. Common enemies on the other hand don't have a fixed loot each, but they rather belong to a specific prize pack. Over time players know which item drops to expect from certain enemies and keen observers will be able to predict which item will drop if they kill the next enemy of a certain type. Cutting grass might drop randomly selected loot each time, but it could also be implemented using a prize pack with tweaked settings.
A single prize pack contains a list of loot that is dropped in succession, looping back to the first item once the last item has dropped. A prize pack for early and easy enemies might just contain small amounts of currency or a small healing item. Higher level prize packs might contain more valuable loot, like bombs, arrows or greater amounts of currency.
A prize pack also has a fixed chance to drop the current item. Most often, the chance is 0.5 (a coin flip), but there will probably be packs with a chance of 0 (no drop at all) or 1 (the player gets a loot drop every time). In other words, the chance determines how many enemies you have to kill on average to get the next item to drop.
Additionally, a prize pack keeps track of how many times it was called and how often it has resulted in a drop. To determine which item of its loot list will drop, the prize pack simply uses the drop counter modulo the length of the loot list as an index pointing at the next item to drop.
Instead of calling each prize pack individually from kill methods, there should be a higher level method that decides which pack to use. So all enemies can call the same prize pack function with an individual argument, the index of the prize pack for the higher order manager to use.
I did a small JavaScript demo to showcase this concept. The first prize pack on that page has a chance of 0, it never drops anything, while the second pack drops an item every time an enemy of this pack gets killed. The third pack drops an item from its list on about every second kill.
In the demo, the ghost is the only enemy that belongs to prize pack 0, so no matter how many ghosts you kill, you will never get loot. Prize pack 1 is bound to skulls, skeletons and demons and might drop either a single heart refill or a bomb, always one after the other. The last prize pack is triggered when you kill aliens and space invaders and it will award you one of three medals after you killed roughly two enemies, but you will always get the next medal from the pool of three, not a random one.
I also did a GdScript implementation last year, that is functional, but not embedded into the kill method of each mob. Each enemy needs to get assigned to either a fixed loot (e.g. a certain boss will always drop a specific item) or a prize pack. When an enemy gets killed, the kill method has to request the loot to drop accordingly.
On top of that we can use the kill counters of the prize packs for statistics or to implement something like the acorn/triforce power up drops seen in Link's Awakening.
Beta Was this translation helpful? Give feedback.
All reactions