Open garbagemule opened 6 years ago
I'll start off with 2 things, both of them will probably be impossible or really hard to work on but they're ideas, so I'll throw em in anyways.
A heavy debug log button to toggle before you enter an arena, have it print EVERY single thing MobArena does, and if it errors out slightly it will print that as well, now where should it print too? Maybe in a log file, and to the console as well.
A custom way to set how hard the waves get the longer you are in there. I'm sure this would be AMAZING for some peeps running MobArena, since you would no longer have to create special "One-Time" waves for every single wave, and this could provide a new special challenge for players as well!
To "log everything" is usually a knee-jerk reaction to experiencing glitches, but it usually doesn't help much. Bugs typically creep into nooks and crannies where logging can't see. Many of MobArena's existing bugs are usually due to a non-defensive development approach, which is unique to the older parts of the code base.
Scaling difficulty is a different matter. What does it mean for an encounter to be more difficult than another? Typically we'll scale on number-valued properties like health and attack power, or projectile size or count, etc. What kind of scaling are we talking about? How is it going to be configured? What would be an example of a session progression with scaling difficulty?
Configuration would probably either happen via command or gui, and could be modified directly in the/a config file. Now what to scale and what would be scaled? Well I would assume every nbt attribute there IS in Minecraft, mob count, stuff like that, maybe arena creators want mobs to get slightly more health but a ton more damage every wave. Something like that.
NBT is a no-go.
We need some concrete examples. Can you provide an example of how a session would progress and what's "in" the session? From the point of all players readying up, what happens (with players, mobs, environment) and how could we represent that session configuration? What would we have to write in a config file to achieve that session configuration?
Well, alright. Lets disregard session difficultly, for now, another question I'd like to ask is that is it possible to have some sort of gear on the mobs that spawn in a certain wave? And does it have to be all the mobs with the gear? Or maybe just a certain type (Zombie, Skeleton, Etc.)? And of course, avoiding touching NBT.
As mentioned in the non-goals section, mobs are not the focus of this rework. The fact that we can use different mobs in different parts of the sessions is enough. How the mobs differ is irrelevant.
One thing that will definitely make it into this rework is the notion of pre-spawned monsters that aggro on damage and proximity. This will open up the possibility of arenas that are more like dungeons than waves of monsters spawning around you. Setting this up in-game would mean having to walk around and place "packs" of mobs on different locations. A wool block could represent a pack (and then upon spawning, the mobs in the pack would spawn in a radius around that wool block), or perhaps a spawn egg could be used to place all of the mobs of a pack at the same time as "dumb" mobs whose AI is disabled so they just stand still until setup is complete, and then they despawn until the arena starts. The in-game tool would have to be invoked by either selecting a pack configuration or monster type from a UI or with a command of sorts.
Another thing that will make it into this rework is "triggerable locations" - fixed spots in the arena structure that can "do stuff". One such thing could be a redstone block such as a button or a lever, which is invoked after a specified delay or when a monster reaches 50 % health or something like that. Another thing could simply be a collection of blocks that spawn to block off entry ways, locking the players in a given room until an encounter has finished. This would make for much more interesting fights where the environment changes and things "happen" throughout the fight so that it's not just "monster with lots of health and fixed rotation of boring abilities".
These suggestions revolve around the sessions, encounters, the environment, and in a way, "anything but mobs".
Environment events could be made by the user placing signs(which would act as toggles) with a name in the first line, which is then configurable in the config to have an effect on the environment, like that sign becoming a mob or a portal or a block anytime on a timer(or random timer) or per wave. Naturally this sign would become an invisible armor stand when the mob arena isn't in edit mode also it would be unkillable by /butcher and the alike. It could also be a redstone activated of sorts.
As for big changes, I think mobarena could have "snapshots" of areas. You would select an area with a wand, copy/paste it elsewhere and modify it as you wish, now there are 2 or more nearly equal areas or totally different. With what was said above, a sign could change these areas accordingly, imagine a gate opening on wave 10 and then closing again on wave 11, or the whole arena turning nether like slowly per wave.
Example Configured Sign:
signname(1st line):
signtype(or multiple): {snapshot, portal, script, monster1, monster2/boss, etc}
snapshop: MobarenaFrozen/MobarenaMelt, MobarenaNether/MobarenaEnd
***this would replace MobarenaFrozen area with MobarenaMelt and MobarenaNether with MobarenaEnd.
timer: true/20
***this would mean the timer is true and it would activate every 20 seconds.
wave: true:10
***this would mean it would also activate on wave 10.
script: This could where other plugins come in.
monster1:
(normal config here)
zombie:4
bunny:1
monster2:
(normal config here)
zombie:4
bunny:1
Non linear Progression: This would be great. You could either branch according to milestone OR you could respawn dead comrades a la "Left For Dead," once milestones are reached. You'd have to define what valid milestones are. Like reaching a sign/block/pressure plate, killing a mob, or maybe both.
Interaction with the environment: This was the first need I recognized while building my arena. I'd like milestones I can set so users can't progress until completing a goal or set of goals. Could be tied to eliminating all mobs in the area or reaching a pressure plate/block -- perhaps while being "chased" by rising lava to add urgency.
Ease of Setup: A lot of conversational code work was done with Denizen. Maybe some code can be donated/reused from these developers? Don't know how complicated it would be from scratch if you use NPCs reading from text files or simple Holographic text appearing where necessary.
Along the line for "persistent stats," it would be helpful to aggregate stats by UID. A mysql database would be best of course but would that be an option? A Linux old timer like myself would also gravitate to text files but I'm cognizant of the performance hit this presents to scalability. At the same time, I thought it would be great to award Crackshot weapons to users who achieve multi-game milestones instead of making them buy the weapons via Shopper NPCs as I do now. So you'd need a way to tie execution of a command/reward to an aggregated milestone.
On "scaling difficulty" one way to improve it would be to have wave time intervals decrease as payers progress. So perhaps wave intervals decrease by x seconds every x waves until it is reduced by some configurable amount, say 50%. Mobs get x% faster, health increases by x%, attacks produce x% more damage and increase in type. Mobarena can specify attack types already. Can all mobs evolve according to config files?
Perhaps I could configure mobs with guns? That may be possible right now for all I know. I haven't checked yet.
Packs of prespawned mobs would be great but may come at a performance premium. If I could edit an arena, place a mob, and then have him respawn when the arena resets we would be halfway there already. All I'd need then is a way to edit his powers to make him a boss. Then perhaps a pressure plate to release him. Being able to spawn him at will would be best though.
Without reading the messages above, I suggest this:
A more dungeon-like arena. To give server owners more freedom to a more open and planned experience it would be great to implement a way to configure the exact thing you want to happen. When does it happen? What will happen? When will it happen? What happens after?
The config would be able to set manual spawns per wave, instead of the now "spawnpoints" that makes the mobs spawn near the players. Let's say you want mobs to only spawn on x1 and x2 on the first wave. Config could be something like this:
waves
single:
name_of_wave:
type: defined
wave: 1
monster: zombie ##Define one or more types with commas. Ex zombie,skeleton,spider.
amount: 3 ##It will spawn 3 of each defined monstertype.
monster2: skeleton ##Allows people to spawn more exactly what they want by defining a single mob, but allowing to define multiple mobs.
amount: 1
spawn_location: 100 64 200 ##Defined by XYZ. Might need to be set up in the spawnpoints when doing the arena setup.
Being able to define when something will happen could be things like:
Make MobArena greater (again) JustMeForFun also suggested on Discord to allow the arena to place redstone blocks to "activate doors and such". I've seen multiple people suggest something like this in the past. And I think that is a really neat idea, so I am stealing it and putting it here:
The config could look something like this:
name_of_setting ##I'm out of ideas for the name, but it's the same as waves, rewards and such.
name_of_action:
place: redstone_block
cordinates: 100 64 200 ##Again defined by XYZ and might need to be in "spawnpoints", maybe even a new tool to define "name_of_setting"?
wave: 2
when: start/end/death/boss_kill
You could even use it to remove blocks by placing "air" instead of a redstone_block. Maybe it even could remove from 10 64 20 to 20 64 30 and make a square whole in a floor (10x10), or even remove the whole floor or a wall. Usefull if you want to close up the area before the next one (and someone decides to camp on the first place you fight). - remove the floor and drop them in some hot lava.
This way you can make "progressive arenas" where players need to do a x amount of waves or kill the boss, sacrefice a player/ maybe even a mob - to make a block be placed/removed to open up a new area, where you then again can define the next waves to begin and a boss to spawn.
Hopefully this was some great input and gives some ideas of what to do next with MobArena. - Nesseley
Without reading the messages above, I suggest this:
A more dungeon-like arena. To give server owners more freedom to a more open and planned experience it would be great to implement a way to configure the exact thing you want to happen. When does it happen? What will happen? When will it happen? What happens after?
The config would be able to set manual spawns per wave, instead of the now "spawnpoints" that makes the mobs spawn near the players. Let's say you want mobs to only spawn on x1 and x2 on the first wave. Config could be something like this:
waves single: name_of_wave: type: defined wave: 1 monster: zombie ##Define one or more types with commas. Ex zombie,skeleton,spider. amount: 3 ##It will spawn 3 of each defined monstertype. monster2: skeleton ##Allows people to spawn more exactly what they want by defining a single mob, but allowing to define multiple mobs. amount: 1 spawn_location: 100 64 200 ##Defined by XYZ. Might need to be set up in the spawnpoints when doing the arena setup.
Being able to define when something will happen could be things like:
* start of an arena * end of an arena * start of a wave * end of a wave * start of a bossfight * end of a bossfight * player dies * x mobs killed * total mobs killed
Make MobArena greater (again) JustMeForFun also suggested on Discord to allow the arena to place redstone blocks to "activate doors and such". I've seen multiple people suggest something like this in the past. And I think that is a really neat idea, so I am stealing it and putting it here:
The config could look something like this:
name_of_setting ##I'm out of ideas for the name, but it's the same as waves, rewards and such. name_of_action: place: redstone_block cordinates: 100 64 200 ##Again defined by XYZ and might need to be in "spawnpoints", maybe even a new tool to define "name_of_setting"? wave: 2 when: start/end/death/boss_kill
You could even use it to remove blocks by placing "air" instead of a redstone_block. Maybe it even could remove from 10 64 20 to 20 64 30 and make a square whole in a floor (10x10), or even remove the whole floor or a wall. Usefull if you want to close up the area before the next one (and someone decides to camp on the first place you fight). - remove the floor and drop them in some hot lava.
This way you can make "progressive arenas" where players need to do a x amount of waves or kill the boss, sacrefice a player/ maybe even a mob - to make a block be placed/removed to open up a new area, where you then again can define the next waves to begin and a boss to spawn.
Hopefully this was some great input and gives some ideas of what to do next with MobArena. - Nesseley
First of all, thx for the credit ^^
Also, i don't know code so i cant give actual examples and i'm not a native english speaker so sorry in advance for any spelling or grammar mistakes.
Another idea to use this mechanic is to use it for area's. With just spawning a redstone block to active redstone powered doors the doors people will build are limited by how big the redstone behind the door can get, This will also cause tons of lighting updates and such from the redstone itself. So the bigger the door the more lag it will produce for the server
By selecting an area and linking it to a Phase in the config for example you can say: When wave X starts/ends set area X to air. This way people can make doors in all sizes and shapes, allowing for way more freedom in the creation of maps/arena's. This also should reduce server lag since you are not updating any redstone or moving any blocks.
As discussed in the Discord; I think it would be great if we had sort of way to make it so that players can bring in their own items and then possibly die and lose these items that they bring in. On top of this, I would like players to be able to keep the items they pick up from mobs as additional loot. This would make the mob arena more vanilla-like and less of a minigame.
I'd imagine this would be very useful for Skyblock servers as it is hard to give players access to all the different mobs within Minecraft and their drops.
Could we also get some way to customize the formula used for base
? I would like to allow players to use their own items, but then players with stronger gear will not want to participate in games that are with weaker players due to more mobs being spawned in. I'd like to decrease how much the mob count is affected by the player count.
EDIT: On second thoughts, I think a better way of solving this issue would be to add a config option that makes it so that the forumla uses the current amount of players alive in the game, instead of the amount of players that the game started with. This would mean that if the weaker player dies then the increased mob count will go away, meaning stronger players will be happier. @garbagemule should I put this idea into a different issue (since I think this can be done outside of the session rework), or just leave this here?
@TheWranger it's fine to leave it here. And it's a nice little topic for discussion. I want to address two things: balancing challenges in general, and expressing different opinions as behavior strategies in the plugin.
To understand why MobArena uses the base player count rather than the current player count, we have to talk about MobArena's primary source of inspiration for various implementation details - World of Warcraft. In WoW, everything in a dungeon is predefined before you even join it. Mobs have fixed health values, abilities have fixed behavior, and nothing is really "dynamically scaled", and this is because they are balanced around X players (this is actually untrue nowadays since scaling raids were introduced). A dungeon fight in WoW doesn't get easier if more people are dead - the fixed difficulty parameters remain the same, and the fight becomes harder if people don't stay alive. This is a very important design decision, because it means everyone is a liability - it promotes team work (and, on the downside, finger pointing). If the fights scaled down based on the number of players currently alive, it would make sense for only the good players to be alive for any given fight, as that would make it significantly easier. In MobArena, this could lead to no team work and an "every man for himself"-attitude. The suggested behavior change would ruin the spirit of the plugin.
I can, however, appreciate the desire to stray from the original goal of the plugin to promote a different kind of style. It would be weird if everyone's interpretation of the plugin was the same (at least with a plugin in this context). The big issue here is that MobArena is quite opinionated, and working against the implicit opinions by shoehorning the plugin into a different context than what it was designed for is going to result in never-ending inadequacy. This is why I like to keep saying "we can do better" until we can't do any better anymore. Simply exposing how the base values for the scaling algorithms are calculated is a knee-jerk reaction to "I kinda sorta wanna do something else". I would pose that the underlying problem here isn't the scaling, but the way MobArena forces people to play together...
Perhaps a much better solution here is to allow for "parties" to join an arena together, and to allow for "instances". Consider 8 people wanting to play MobArena, 3 of them good friends who are highly skilled, and 5 of them random other people. Perhaps the 3 friends would like to just play together without any other people. If those 3 friends were not "held back" by the other 5 randoms, they'd be able to advance - with team work - to a much higher wave for much better rewards.
It would be nice if the leaderboards became real leaderboards.
Just gonna shoehorn some ideas in and things I'd like to see myself personally as a longtime user of MobArena.
1. Player Respawning & Multiple Lives One of the most common complaints I get when I invite people to play on some of my MobArenas is that when they die, they just get really really bored because they have to wait for the other players to finish the arena before trying it again. This normally wouldn't be a problem for shorter arena types, but for someone like me who likes to create 50+ wave arenas, this is a very big issue.
I personally like to keep people engaged and having fun rather than trying to worry about balancing. Adding a respawn mechanic would also allow arena creators to balance the arena off the idea that players can respawn, so they could probably balance the difficulty around that. There could also be a config option to set the amount of times a player could respawn, whether it be infinite or limited. There should also be multiple ways on how to respawn players. I will list some common examples below.
- Start of wave Respawning - The most basic type and mimics COD Zombies. At the start of a new wave, the arena respawns all dead players. It should also be configurable on how often this happens, for example the arena could respawn players at the start of every 3rd round instead of every round. You could also set specific waves to respawn players, so for example you could set it so that players only respawn on wave 3, 7, and 15.
- Buying a Respawn - This could be another interesting one and hooks into another concept of MobArena that I will discuss later. The basic idea of this type of respawn is that players alive fighting inside the arena could BUY a respawn by either clicking a sign inside the arena or typing in a command (I highly recommend the sign since typing commands is kinda hard when you're surrounded by mobs). The cost of a respawn could be multiple things, it could be an item the player has in their inventory, it could be regular economy currency, or it could be a custom currency that only MobArena uses. Which is a concept I'll dive into here in a second.
- Condition Respawning - This isn't very easy to explain, but essentially you could respawn players based on unique events that occur inside of your arena. Here are a few basic examples: Players defeating a boss, Players killing X amount of mobs, Players unlocking X area, Players flipping a lever or activating some sort of redstone. Those are just a few ideas, there could probably be a lot more. This will probably be the hardest thing to actually write into the plugin, but it could lead to a lot of customization if it is completed.
- Quite literally immediately after death - This one is very simple. If the player dies, they respawn at the starting zone immediately, even if a wave is in progress.
If were gonna have respawning then it should also be configurable on if the players keep the items they gained "in-arena". What do I mean by this? Well lets say I choose a class that has iron armor and a iron sword, and during the arena session I obtain a health potion via a supply chest. If I die, do I get to keep the health potion I got during the arena? Or do I revert to what I had at the start of the arena? (If I reverted to what I had at the start of the arena, then I would respawn with just my iron armor and iron sword, since that's the class I selected)
If you reverted back to your regular class gear, then it would give players motivation on not dying, since if they do die then they lose a ton of progress with their equipment. But on the other note, they still get to play the MobArena and attempt to survive the big setback, which in my opinion is a lot more fun than just... watching other people until the arena session ends.
"How would people ever lose? Wouldn't the arena session just last forever then?". Well losing would still be the same, at any point if all players in the arena are dead, the arena session ends.
2. MobArena Currency This is mostly just a thing I MYSELF would really really enjoy, but perhaps others might be interested in this idea, if you are then please let me know! So what this essentially is is like a currency exclusive to MobArena itself, and when fighting inside the arena you gain this special currency and can use it to buy items, upgrade gear, single use commands, permissions, and maybe spawn ally mobs to help you fight. The possibilities are nearly endless. One might ask "wait, can't you just do that with normal Vault currency?" well... yes... you can, but then that leads to a major issue of players coming into the arena and having tons of money to buy everything at the start, and what if you don't want your normal Vault currency affecting anything inside MobArena?
Anyways, HOW would you gain this currency? Well there could be multiple ways (obvious answer I know), here are some examples once again: Killing mobs (you could specify in the arena config what each mob is worth), Per-wave rewards, Unlocking X area, Killing a boss, and How many mobs you kill before you are hit. If you really wanted too, you could make it possible to convert some Vault currency to MobArena currency just like how Hypixel does it with their "Vampires" minigame.
There could also be a SECOND unique currency exclusive to this plugin (This is kinda taking an idea from another certain plugin that I'm sure some of you will recognize). You would use this currency, or points, whatever the heck, to upgrade certain classes, player attributes, supply wave upgrades, and how many rewards you get per wave! This feature is mostly going to be here to give motivation to players to play your MobArena more. They feel like they're earning something, getting progress. For a guy like me, who's entire server is built around this single plugin, it would be really awesome to have a feature like this to keep players playing more.
3. Controlling what mobs spawn and when This is somewhat of a repeat point that Nessely said earlier, but I can't empathize enough on how cool this would be. When you place spawnpoints for mobs down, there should also be a ton of different configuration options for them. Examples are: How far do the players have to be from it in order to be ignored?, what type of enemies can spawn here?, at what point in the arena session does it start spawning mobs?
Right now is it impossible to make a dungeon like MobArena because mobs might spawn in an area players haven't unlocked yet, leaving them stuck forever unless the "clear-wave-before-next:" option is turned off, but at that point its not really a dungeon then. There are also other examples where this might be useful, what if you want mobs spawning in certain locations each wave while ignoring player distance? Right now I believe there is a hardcoded limit on that if the players are too far away from the specified spawnpoint, then the mob will be placed somewhere closer to the player instead, although I'm not 100% on that. If I am true then this hardcoded limit should be something that the players can configure per-arena. And having mobs spawn when you unlock a new area, complete a certain mission, respawn players, and activate redstone would also be really cool.
4. New unlockable areas This is again probably another repeated point, but I'll go over it again anyways. Players should be able to unlock new parts of the arena by meeting certain conditions, once these areas are unlocked, the arena can start spawning mobs there. Some examples of conditions to unlock these areas are: Paying Vault currency, paying MobArena currency, defeating X amount of mobs, defeating a boss, activating redstone, reaching a certain EXP level, getting a certain item, and literally blowing up the entrance with TnT. I can't tell you how many amazing things people would be able to do with this feature.
I'm interested to know what your opinion is on all of these ideas, and Server owners, are you interested in anything thats listed on here? Please let me know down below!
I'm not sure if this has been suggested yet (there are a lot of amazing suggestions in this thread!), but since it's up in the air under "How to Contribute" by the mention of game modes... What about a Defend gamemode?
If Waves is the standard mode currently that everyone has come to know and love, a Defend mode could perhaps have the arena contain a block that the creator would set as a Core or something like that, which mobs would try to target (maybe require it to have a 3x3 or 5x5 space around it, and any mobs coming into contact with it knock off a hitpoint and are force despawned, while bosses knock it out completely, or even better this being configurable), and players have to defend.
Place some neat spawnpoints in disgustingly clever spots here and there, overwhelm them with mobs, F in chat! The "Core" would be configurable to have hitpoints or just be a one shot.
That's all there really is to this, a rather simple suggestion, but it would open up for a lot of possibilities I think :>
In response to @PrinceOfIonia's big list of suggestions just above
I genuinely love these and just wanted to echo that, @Nesseley also had a very good suggestion as well. The idea of a Dungeon mode sounds awesome, and I love the ideas of being able to set a respawn type. MobArena currencies that can be earned by playing, surviving waves, killing enemies, etc. with server owners being able to enable, disable, and configure all of that!
Honestly, the thing I love the most about MobArena is just how customizable and configurable it is. Features like these would just extend that flexibility even further <3
Motivation
Arena sessions are a bit of a mess. They can be considered single-phase, multi-wave, linear progression, time-/clear-based encounters that are very rigid in structure and setup. Let's take MobArena sessions to the next level. It's a massive undertaking, but there are plenty of wildly imagined use cases (Icecrown Citadel from World of Warcraft) and feature requests to work from.
Goals
Non-goals
How to contribute
Just throw your ideas for the rework as comments on this issue. What would you like to see in a rework of how MobArena sessions work? Is there any type of encounter or game mode you'd like to see support for? Any games to draw inspiration from?