Sub-plugin: UHC gamemode
Honney opened this issue ยท 4 comments
UHC = Ultra Hardcore. This will require the following additions:
Configuration Settings
- Custom terrain generator. This will likely be distributed with an empty folder to force the server to generate a random world with a random seed. This distribution should be simple, lightweight, and will fit the model given by other custom distributed maps with no additional logic to be implemented.
- Size of borders, including rate and amount of border resizing
- Starting supplies (given after teleport)
- Is Nether allowed? And if so, time limit in minutes
- Announcement settings
Start Up
- Players need to be either on a starting platform to be safe or invisible to mobs.
- This can likely be addressed by preventing mob spawning previous to a match beginning, as the logic is already present in AutoReferee.
- Once game starts players are:
- Randomly teleported near the borders
- Fed, healed, and (optionally) given basic initial supplies
- Unfrozen
- Countdown begins for shrinking borders
Gameplay
- Hardcore settings
- Once a player dies, set them to spectator mode (invisible)
- Equip spectator with teleportation/tracking tools
- Give teleportation priviliges to spectators
- Once a player dies, set them to spectator mode (invisible)
- Hunger is replenished from any food but health does not naturally regenerate
- Golden Apple (8 gold ingots + apple) heals 2 hearts
- Healing potions work as well
- Border shrinking at regular intervals
- Announce time of shrink (amount of time until next shrink, countdown)
- Announce size of border when shrunk (coordinates)
- Announce size of reduction in border (percentage? area?)
- If player is outside of new border, teleport inside
- Try not to teleport two players too close to one another?
- Decide if Nether will be allowed
- If allowed, implement time limit
- If not allowed possible care package including nether wart, slime balls and blaze rods added to start up sequence
- Time limit on how long a person can stay still underground
- Give leniency for players if they are AFK (maybe an
/afk
command?) - Disallow strip or branch mining (process direction when underground)
- People can dig down staircases or spiral to get into a cave for ores
- Give leniency for players if they are AFK (maybe an
- Additional announcements:
- When a player dies
- Damage taken to players and what caused the damage
- Possibly location of player dying of natural causes to increase chances of PvP amongst survivors
Win Conditions
- When all players are dead except one, surviving player is declared the winner
Here's a list of some feature suggestions, mainly from https://github.com/itsmartin/TesseractUHC, which might be good to include, either as core features or as add-ons. Some of these are probably already covered above.
- Trails - players leave a trail where they travel - e.g.
- grass sometimes turned to dirt when walked on
- "star trails" - glowstone blocks appear at sky limit above player
- Proximity notifications for spectators (when players are within 100 blocks of each other, or of pre-defined points of interest on the map, such as villages, desert temples)
- Variety of different start location options - e.g.
- radial points a certain distance from spawn
- Everyone starts from a single central location
- Scatter players randomly across map
- User-defined start points read from a config file
- Loot chest containing a starter kit at player start points
- "Cornucopia" type setup where loot chests at certain locations on the map get replenished from time to time
- Team vs team and free-for-all modes
- Permaday mode, perhaps automatically at a certain time
- Alternative modes post-death
- Kick/ban
- become spectator
- Penalty for spending too much time tunneling underground - e.g. hunger penalty and mining fatigue effects if too many blocks are broken in a certain time period below a certain Y coord
Just some thoughts on this topic (although I don't have much experience with the codebase, so some of this may be wrong. I have looked it over and think what I'm saying applies though):
First, would it be best to implement a way of adding different game modes to autoref and have the setup and utilities be central, but most components separate? This would make it easiest for future expansion to different types of games, but require a reasonable amount of restructuring.
If not, this is how I see it being able to be implemented:
For the border shrink, it might work to have a set of regions and every x minutes it sets the outermost to noentry. It would probably be good to have an option to just stop movement into noentry regions instead of killing as it does currently.
For the victory for last player alive, that would require adding a new method of checking victory conditions. I think this is a good thing anyway since I know that there are maps that require killing a villager (for example).
The option to have health regeneration cancelled is good to have anyway as an option and would be simple to use.
The hardcore options should be simple enough to add as an option (and I could see this being used for other modes too).
For announcing death locations and damages, I have already written plugins that do this that I could easily grab the code from.
The option to start with supplies would be great and possibly useful on rfw maps as well (and was already mentioned in issue #63).
There already exists a UHC mod which could have code taken from (with appropriate permissions and citations of course).
When the border shinks, there should first be a soft border that allows players some lenient time to arrive within the new border before a forced teleport. The forced teleport should teleport linearly towards the center of the new border region.
Maybe /afk should tell all spectators that said player is afk. Then after a reasonable amount of time (5 min), tell all players that a player is afk. After a longer duration (7 min), tell all the position of the player. When an extreme amount of time has passed, kill the player. Making it impossible for a player in afk mode to win would also be useful. A player that has stood still for a while should also be forced into afk mode.
What should happen if border changes when someone is afk? We need to teleport that player but it wouldn't necessarily be fair to simply teleport the player to his/her death (mob, lava, suffocation, next to a player).