Preamble
Stage 2
This is Stage 2 in a line of suggestions. Stage 2 is self-contained; it does not require knowledge of Stage 0 or Stage 1.
Stage 0
Stage 1
Differences with Stage 1
This section is optional. It is intended for Stage 1 readers.
Name
From here on out, the name that will be used is “Mob Configuration” or “mconf”. Any references to “Mob Definition” is a remnant of a previous draft and should be flagged for correction. Any references to “Mob Collection” is unintentional and should be flagged for correction. The name “Mob Configuration” was chosen over “Custom Mob Waves” or “Custom Mob Rounds” for two primary reasons, minimalism(three words is a bit too much) and clarity. For reasons expanded on later, this proposal no longer allows mobs to be added to a specific wave, as such naming the proposal “Custom Mob Waves” would be misleading.
Waves
The ability to define mobs down to the specific wave they spawn has been deemed niche and is promptly removed to reduce complexity.
Syntax Key
This proposal’s command syntax follows the convention TShock and Microsoft uses.
<Argument>
instead of[Argument]
for required.[Argument]
instead of(Argument)
for optional.<Argument...>
or[Argument...]
instead of{Argument}
for repeatable.
Decoupling
Rather than being linked to and bound to a map, mob configurations exist separately and can be used multiple times across different maps.
Command Translation
The commands that are prefixed with the emoji do not have a direct translation, while those prefixed with the
emoji is removed for one reason or another.
/zcoll use [map name/default] (event)
.
No translation fordefault
./mconf edit <Name>
/map edit <Map Name>
/mce add
/mce setevent [Event]
/zcoll new ([event] [start month] [start day] [end month] [end day]
./zcoll select (event)
.
/mconf edit <Name>
is the closest translation./zcoll edit [type] [value] [value 2]
./zcoll test [collection]
→/mconf forceuse <Name>
./zcoll delete
→/mconf delete <Name>
.
The name must always be specified, the command will not attempt to delete the currently selected mob configuration./selectround [round number]
→/m editr <Round Start>
./zwave [number of waves wanted in the round]
.
Removed./clearround [round number]
.
Accident-prone; will not implement./clearwave [wave number]
.
Obsolete./zwave list [wave number]
.
No direct translation. Rough equivalents are List (All) and List (Round)./zmob add {[name of mob] {[wave number]} (amount)}
.
No direct translation due to{[wave number]}
, but the closest is/m add <Count> {Mob Name|ID}
./zmob del [name of mob] {[wave number] (mob entry ID)}
.
No direct translation due to[wave number]
. The closest translations are/m rem {Mob Name|ID}
and/m remid <Entry ID...>
./zmob mod [name of mob] {[wave number] (mob entry ID) [modification type] [value]}
./zmob mod 211 1 0 99999999999999999999999999 1 1 999999999999999999999999999
→/m mod 211 -h 999999999999999999999999999
. Due to technical limitations,999999999999999999999999999
isn’t a value and damage(0) isn’t configurable./zmob mod 211 1 2 1 constant
→/m mod 211 -r constant
./zmob mod 222 10 3
→/m mod 222 -T random
.
How this suggestion affects
Zombies Managers
- Are granted additional permissions to manage events, mob configurations, mob configuration partners, mobs, and map-mob configuration entries.
- Can create and start events without needing developers.
- Can change the default mobs without needing developers.
Zombies Map Builders
- Are granted additional permissions to edit mobs.
- Can submit custom mobs for their maps.
Players
- Get faster updates to mobs, because they are separate from Zombies updates.
- Are notified of a round’s mobs before the round starts.
Objects / Model
This post will use seven base objects or models. How they interact will be defined later:
- A “map” refers to a region in the Zombies’ world that constitutes as playable area. Also known as “arena”.
- An “event” refers to a limited time occurrence that activates or deactivates features in Zombies.
- A “mob” refers to a non-playable character or NPC that spawns inside a Zombies game.
- A “mob configuration” refers to a list of mobs and how they spawn in a game.
- A “mob configuration partner” or simply “partner” refers to an account that is a maintainer and/or a contributor.
- A “mob configuration maintainer” or simply “maintainer” refers to an account that can edit the mob configuration.
- A “mob configuration contributor” or simply “contributor” refers to an account that is credited for creating the mob configuration. The title is cosmetic and does not grant any permissions.
- A “mob configuration editor” or simply “editor” refers to an account that is both a maintainer and a contributor.
- A “map-mob configuration entry” refers to link between a map and a mob configuration.
Basic Relationship Graph:
Events
An event consists of an ID, a name, a date on which it begins, a date on which it ends, and a function “Active”. The name is what the event is called; for example, it could be “Halloween” or “Christmas”. The start and end date is when the event starts and ends. The function “Active” returns true(or yes) if the current date is between the start and end date, and false(or no) otherwise.
The event object should be designed specifically to be independent of maps and mob configurations so that it is usable for other features.
Time Handling
The start time check must happen in UTC+12, while the end time check must happen in UTC-12. Checking at the aforementioned time zones ensures the event starts as soon as anyone reaches the start date, while the event stops as soon as everyone passes the end date.
The start time should be set to 12:00 while the end time should be set to 11:59.
Mob Configurations
Reserved Names
The following names are reserved for internal use,
Default
Hardcore
Rapid
Expert
Naming Scheme
The naming scheme is as follows [Map Name] - [Event Name] {Default|<Custom Name>}
.
Examples of valid names,
Halloween Default
Christmas Default
Jungle's Echo - Default
Jungle's Echo - Christmas Hell
Submissions may propose a <Custom Name>
, but Zombies Managers are not obligated to use and may change it as they see fit.
Publishing
There must always be at least two versions of a mob configuration, the public version which is used in public lobbies, and the private version which is editable. No editors(apart from Zombies Managers) can edit the public version.
Mobs
A mob consists of an ID, the amount of mobs to spawn, the round it starts spawning in, and the round it stops spawning in, among other modifications.
Map-Mob Configuration Entry
A map-mob configuration entry consists of a map ID and a mob configuration ID, as well as a weight, event name, and pool number.
Weight
The weight specifies how often the mob configuration will be chosen, relative to other mob configurations. That is, if there are two mob configurations, X(with a weight of 90) and Y(with a weight of 10), then X will be chosen 90% of the time and Y will be chosen 10% of the time. The default weight is 1
.
Event Name
The event name specifies the event the entry is linked to. The mob configuration can only be chosen if the event is active.
Pool Number
The pool number is a number(which starts from 100000) that specifies which pool an entry belongs to. If any mob configuration in higher pools are available for choosing then no mob configuration in lower pools will be chosen. The pool number allows events to exclude other mob configurations while it is active.
Pool number 0 is reserved for the default fall back configuration, while pool numbers 1 through 99999 is reserved for default events such as Halloween and Christmas.
Pool number 0 will always contain the fallback configuration. Adding entries to pool 0 makes the game use either the fall back configuration or the specified configuration.
Display
When a game starts, the mob configuration used as well as its contributors are announced in chat. And before a round starts, the mobs to be encountered must also be announced in chat.
Round
Rounds are an emergent property from mobs rather than explicitly defined. That is, mobs define rounds, not rounds define mobs. The property allows for mobs to be easily added to multiple rounds without copying it multiple times over. If a round does not have any mobs that will spawn in it, then it will use the previous round’s mobs.
Commands
Syntax Key
Event
The commands to create, read, update, and delete events.
Edit
Syntax
/event edit <Name>
Examples
/event edit Halloween
→ Sets the user’s selected event to Halloween.
Edit (ID)
Syntax
/event editi[d] <ID>
Examples
/event edit 1
→ Sets the user’s selected event to the event with the ID of1
.
Create
Syntax
/event create [<YY>/]<MM>/<DD> [<YY>/]<MM>/<DD> <Name>
Examples
/event create 03/17 03/17 St. Patrick's
→ Creates an event namedSt. Patrick's
that starts at 12:00 on March 16th of any year and ends at 11:59 on March 18th of that same year. The command also sets the user’s selected event to the newly created event./event create 24/12/25 12/25 Christmas
→ Creates an event namedChristmas
that starts at 12:00 on December 24th of 2024 and ends at 11:59 on December 26th of 2024. The command also sets the user’s selected event to the newly created event./event create 10/28 27/11/05 Halloween
→ Creates an event namedHalloween
that starts at 12:00 on October 27th of any year and ends at 11:59 on November 6th of that same year but will not start again after 2027. The command also sets the user’s selected event to the newly created event.
Delete
Syntax
/event delete <Name>
Examples
/event delete Halloween
→ “Are you sure you want to delete the Halloween event?” →/event delete Halloween
→ “Deleted event Halloween.”/event delete Christmas
→ “Are you sure you want to delete the Christmas event?” →/event delete Christmas
→ “Deleted event Christmas.”
Rename
Syntax
/event rename <New Name>
Examples
/event rename Spooky Season
→ Renames the user’s currently selected event toSpooky Season
.
Reset Dates
Syntax
/event dates [<YY>/]<MM>/<DD> [<YY>/]<MM>/<DD>
Examples
/event dates 24/10/29 24/11/1
→ Sets the user’s currently selected event to start at 12:00 on October 28th of 2024 and end at 11:59 on November 2nd of 2024.
List Active
Syntax
/event lista[ctive] [Page]
Examples
/event lista
→ Lists the first 10 active events ordered ascendingly by name./event lista 3
→ Lists the third 10 active events ordered ascendingly by name.
List
Syntax
/event list [Page]
Examples
/event list
→ Lists the first 10 events ordered ascendingly by name./event list 3
→ Lists the third 10 events ordered ascendingly by name.
Information
Syntax
/event info [Name]
Examples
/event info
→ Displays information about the user’s currently selected event./event info Halloween
→ Displays information about the eventHalloween
.
Information (ID)
Syntax
/event infoi[d] [ID]
Examples
/event infoi
→ Displays information about the user’s currently selected event./event infoi 1
→ Displays information about the eventHalloween
.
Mob Configuration
The commands to create, read, update, and delete mob configurations. The command /mconf
is an alias for /mobconfiguration
.
Edit
Syntax
/mconf edit <Name>
Examples
/mconf edit Default
→ Sets the current user’s targeted mob configuration toDefault
.
Edit (ID)
Syntax
/mconf editi[d] <ID>
Examples
/mconf editi 1
→ Sets the current user’s targeted mob configuration with an ID of1
./mconf editid 2
→ Sets the current user’s targeted mob configuration with an ID of2
.
Create
Syntax
/mconf create <Name>
Examples
/mconf create Jungle's Echo - Default
→ Creates a mob configuration namedJungle's Echo - Default
and sets the current user’s targeted mob configuration to it.
Delete
Syntax
/mconf delete <Name>
Examples
/mconf delete Jungle's Echo - Default
→ “Are you sure you want to delete the mob configuration Jungle’s Echo - Default?” →/mconf delete Jungle's Echo - Default
→ “Deleted mob configuration Jungle’s Echo - Default.”
Rename
Syntax
/mconf rename <New Name>
Examples
/mconf rename Extra Hardcore
→ Renames the user’s currently selected mob configuration toExtra Hardcore
.
List
Syntax
/mconf list [Page Number]
Examples
/mconf list
→ Lists the first 10 mob configurations ordered by name in ascending order./mconf list 3
→ Lists the third 10 mob configurations ordered by name in ascending order.
Information
Syntax
/mconf info [Name]
Examples
/mconf info
→ Displays information about the mob configuration the user is currently editing.Default Mob Configuration ID: 1 Partners: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
/mconf info Default
→ Displays information about the mob configuration the user is currently editing.Default Mob Configuration ID: 1 Partners: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
Information (ID)
Syntax
/mconf infoi[d] [ID]
Examples
/mconf infoi
→ Displays information about the mob configuration the user is currently editing.Default Mob Configuration ID: 1 Partners: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
/mconf infoi 1
→ Displays information about the mob configuration with the ID of1
.Default Mob Configuration ID: 1 Partners: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
Force Use
Forces the mob configuration to be used for the next game.
Syntax
/mconf forceuse [Name]
Examples
/mconf forceuse
→ Forces the mob configuration to be the user’s currently selected mob configuration in the next game./mconf forceuse ""
→ Lets the game decide the mob configuration again./mconf forceuse Hardcore
→ Forces the mob configuration to beHardcore
in the next game.
Force Use (ID)
Forces the mob configuration to be used for the next game.
Syntax
/mconf forceusei[d] [ID]
Examples
/mconf forceusei
→ Forces the mob configuration to be the user’s currently selected mob configuration in the next game./mconf forceuse ""
→ Lets the game decide the mob configuration again./mconf forceuse 0
→ Lets the game decide the mob configuration again./mconf forceuseid 2
→ Forces the mob configuration to be the mob configuration with the ID of2
in the next game.
Clone
Clones the currently selected mob configuration to a new one.
Syntax
/mconf clone <New Name>
Examples
/mconf clone Experimental Default
→ Clones the currently selected mob configuration to a new mob configuration namedExperimental Default
Copy
Overwrites the target mob configuration with the currently selected mob configuration’s data.
Syntax
/mconf copy <Name>
Examples
/mconf copy Default
→ "Are you sure you want to overwrite mob configuration Default? →/mconf copy Default
→ Copies the currently selected mob configuration’s data into theDefault
mob configuration.
Mob Configuration Partners
The commands to create, read, update, and delete mob configuration partners. /mconfp
is an alias for /mconfpartner
and /mobconfigurationpartner
.
Add
Syntax
/mconfp add{m|c|e} <Account Name>
Examples
/mconfp addm Bob Joe
→ Adds the accountBob Joe
as a maintainer to the mob configuration the user is currently editing./mconfp addc Bob Joe
→ Adds the accountBob Joe
as a contributor to the mob configuration the user is currently editing.
Remove
Syntax
/mconfp rem[ove]{m|c|e} <Account Name>
Examples
/mconfp remm Bob Joe
→ Removes the maintainerBob Joe
from the mob configuration the user is currently editing./mconfp remc Bob Joe
→ Removes the contributorBob Joe
from the mob configuration the user is currently editing.
Add or Remove (ID)
Syntax
/mconfp bulk <{m|c|e}{+|-}Account ID...>
Examples
/mconfp bulk e+27 e-29 m+3 m-5 c-2 c+5
→ Applies a bulk operation on the mob configuration the user is currently editing.- Adds the account with the ID of
27
as an editor. - Removes the account with the ID of
29
from editors, maintainers, and contributors. - Grants maintainer permissions to the account with the ID of
3
. - Removes maintainer permissions from the account with the ID of
5
. - Removes or unsets the account with the ID of
5
as a contributor. - Adds or sets the account with the ID of
5
as a contributor.
- Adds the account with the ID of
List
Syntax
/mconfp list [Name]
Examples
/mconfp list
→ Lists the maintainers and contributors for the mob configuration the user is currently editing.Partners for Default: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
/mconfp list Default
→ Lists the maintainers and contributors for the mob configurationDefault
.Partners for Default: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
List (ID)
Syntax
/mconfp listi[d] [ID]
Examples
/mconfp listi
→ Lists the maintainers and contributors for the mob configuration the user is currently editing.Partners for Default: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
/mconfp listid 1
→ Lists the maintainers and contributors for the mob configuration with the ID of1
.Partners for Default: Joel(Editor), PR27(Maintainer), Lp29(Contributor)
Mobs
The commands to create, read, update, and delete mobs inside mob configurations. The command /m
is an alias for /cmob
and /configurationmob
.
Edit Round
Syntax
/m editr[ound] <Round Start> [Round End]
Examples
/m editr 1
→ Sets the user’s selected round to 1./m editr 1 9
→ Sets the user’s selected round to 1 through 9. Any mobs added will be added to all of the selected rounds. Any mobs deleted will only be deleted if the mob spawns between round 1 and round 9.
Add
Syntax
/m add <Count> {Mob Name|ID} [Flags]
Examples
/m add 10 Blue Slime
→ Adds10
Blue Slime
s to the user’s currently selected round./m add 10 Zombie -h 1 -s 200%
→ Adds10
Zombie
s with1
HP and2
x strength to the user’s currently selected round.
Remove
Syntax
/m rem[ove] {Mob Name|ID}
Examples
/m remove Blue Slime
→ Removes allBlue Slime
s from the user’s currently selected round.
Remove (Entry ID)
Syntax
/m rem[ove]id <Entry ID...>
Examples
/m remi 1 2 5 7
→ Removes the mobs with the entry IDs of1
,2
,5
, and7
from the user’s currently selected mob configuration.
List (All)
Syntax
/m lista[ll] [Page]
Examples
/m lista
Lists the first 10 mobs of the mob configuration ordered by mob ID in ascending order./m listall 4
Lists the fourth 10 mobs of the mob configuration ordered by mob ID in ascending order.
List (Round)
Syntax
/m listr[ound] [Round]
Examples
/m listr
Lists all the mobs of the user’s currently selected round ordered by mob ID in ascending order./m listr 1
Lists all the mobs of round 1 in the user’s currently selected mob configuration ordered by mob ID in ascending order.
Modify
Syntax
/m mod[ify] {Mob Name|ID} <<Flag> <Value>...>
Examples
/m mod Blue Slime -s 1000%
→ Modifies allBlue Slime
s in the user’s currently selected round to be10
x stronger./m mod Blue Slime --score-type hit
→ Modifies allBlue Slime
s in the user’s currently selected round to give points on hit./m mod 1 +sTBH ++score-type
→ Removes the strength, spawn type, boss, health, and score type modifications from allBlue Slime
s in the user’s currently selected round./m mod 1 -sTBH 200% Even yes 1
→ Modifies allBlue Slime
s in the user’s currently selected round to spawn evenly as a boss with2
x strength and 1HP
.
Flags
-t "{Mob Name|ID}"
or--type "{Mob Name|ID}"
-t 1
- Sets the mob entry to spawn Blue Slimes instead.-t "Blue Slime"
- Sets the mob entry to spawn Blue Slimes instead.
-c <Count>
or--count
-c 10
- Sets the mob entry to spawn 10 mobs.
-s <Round>
or--round-start
-s 12
- Sets the mob entry to start spawning at round 12.
-e <Round>
or--round-end
-e 15
- Sets the mob entry to stop spawning at round 15.
-T {Random|Even|Waves}
or--spawn-type
-T Random
- Sets the mob to spawnCount
times with each at randomly selected spawns.-T Even
- Sets the mob to spawnCount
times evenly split across the spawns, with the remaining mobs each spawning at randomly selected spawns.- [Default]
-T Waves
- Sets the mob to spawn spawnCount
times every wave.
-B {true|false|yes|no}
or--boss
-B yes
Sets the mob as a boss and announcesBoss Round!
at the beginning of the round that the mob spawns in.
-H <Health Points>
or--health-points
or--hp
-H 1
Sets the mob’s spawning HP to1
.
-S <Strength>%
or--strength
-S 200%
Makes the mob2
x stronger.-s 70%
Makes the mob30
% weaker.-s 50%
Makes the mob half as strong,2
x weaker, or50%
weaker.-s 100%
Makes the mob always spawn with default strength regardless of the world’s difficulty.
-p <Points>
or--points
or--score
-p 50
Makes the mob give 50 points.
-n {Hit|Split|Kill}
or--points-type
or--score-type
- [Default]
-n hit
Makes the mob give the configured points every time it’s hit. -n split
Makes the mob give the configured points proportional to the damage over its original health points rounded down. That is, if a mob with 100 HP is configured to give 50 points, then it will give 1 point per 2 damage done rounded down. The rest of its points will be granted on kill.-n kill
Makes the mob give the configured points when it dies.
- [Default]
-r {constant|inverse|gradualstairs|boss}
or--score-change
- [Default]
-r constant
Sets the mob’s score to be constant and not change over time. -r inverse
Sets the mob’s score to decrease by half every minute.-r gradualstairs
Sets the mob’s score to decrease by 10% its original value for every minute after it has been spawned for 2 minutes. The decrement will stop after 10 minutes, which is when it has reached the minimum of 10%. The function is defined as follows \text{reward}=(-\frac{\text{score}}{10})\operatorname{ceil}\left(\min\left(\max\left(x-2,0\right),9\right)\right)-\text{score}.-r boss
Sets the mob’s score to decrease over time using the current Boss score algorithm.
- [Default]
Modify (Entry ID)
Syntax
/m mod[ify]id <Entry ID> <<Flag> <Value>...>
Examples
/m modid 12 -s 500% +b
→ Modifies the mob with the entry ID of12
to have5
x strength and removes the Boss modification.
Map-Mob Configuration Entry
The commands to create, read, update, and delete map-mob configuration entries. /mce
is an alias for /mcentry
and /mapmobconfigurationentry
.
Add
Syntax
/mce add ["<Map Name>"] ["{Mob Configuration Name|ID}"]
Examples
/mce add
→ Adds the currently selected mob configuration to the (pool 0)list of mob configurations the currently selected map can use./mce add "Jungle's Echo"
→ Adds the currently selected mob configuration to the (pool 0)list of mob configurations the mapJungle's Echo
can use./mce add "Jungle's Echo" "Rapid"
→ Adds the mob configurationRapid
to the (pool 0)list of mob configurations the mapJungle's Echo
can use.
Remove
Syntax
/mce rem[ove] <Entry ID...>
Examples
/mce rem 12 14
→ Removes the entries with the ID of12
and14
from the list of mob configurations the mapJungle's Echo
can use.
List (Map)
Syntax
/mce listm[ap] [Map Name]
Examples
/mce listm
→ Lists the mob configurations the currently selected map can use./mce listm Jungle's Echo
→ Lists the mob configurations the mapJungle's Echo
can use.
List (Mob Configuration)
Syntax
/mce listc[onf] [Mob Configuration Name|ID]
Examples
/mce listc
→ Lists the maps the uses the currently selected mob configuration./mce listc Rapid
→ Lists the maps that uses the mob configurationRapid
.
Set Weight
Command must be ran twice, once to trigger, and another to confirm.
Syntax
/mce setweight <Entry ID> <Weight>
Examples
/mce setweight 1 90
→ Sets the weight of the entry with the ID1
to90
.
Set Event
Command must be ran twice, once to trigger, and another to confirm.
Syntax
/mce setevent <Entry ID> <Event Name>
Examples
/mce setevent 1 Halloween
→ Sets the entry with the ID1
to be Halloween-exclusive.
Set Pool Number
Command must be ran twice, once to trigger, and another to confirm.
Syntax
/mce setpool[number] <Entry ID> <Pool Number>
Examples
/mce setpool 1 2
→ Sets the pool number of the entry with the ID1
to2
.
Submission Format
Mob configurations must be submitted on a topic separate from the map submission.
Example
<Map Name>
If possible, name the configuration “Basic”.
Rounds
Round 1
Mob ID Mob Name Count 3 Zombie 10 Round 2
Mob ID Mob Name Count Properties 3 Zombie 10 1 Blue Slime 20 - Strength: 2
- HP: 10
Example Use
10 Possessed Armors For Every Wave (Round 10 Waves)
Stage 1
/selectround 10
/zmob add 140 all 10
Stage 2
/m editr 10
/m add 10 140
Round 5 Boss (The Last Wave Of Round Five Which I’m Guessing Is 6)
Stage 1
/selectround 5
/zmob add 280 6 1
/zmob mod 280 6 1 1000
/zmob mod 280 6 2 15000 decreasing
Stage 2
/m editr 5
/m add 1 280
/m mod 280 -hrp 1000 boss 15000
Three Wandering Eyes (Round 6, Wave 1)
Stage 1
/selectround 6
/zmob add 133 1 3
# what even is this
/zmob mod 133 1 3 3
/zmob mod 133 1 2 1000 constant
Stage 2
/m editr 6
/m add 3 133
/m mod -pn 1000 kill