What is Zombie Console?
The more and more acquainted I became with zombies mechanics, the more intrigued I became into deeper analysis across different game scenarios, but would encounter limitations in existing software. By late 2020, I decided to provide you this tool to help you, as it has helped me. Over time, I developed various scripts to speed up my game analysis. Zombie Console is essentially a conglomeration of this effort, in java. Back then, I had wished something like Zombie Console was around when analyzing my or other peoples’ games. At the time, Zombacus calculator was the closest tool available when it came to sph and time projections, but it is neither sound nor sufficient enough for such questions. Zombie Console provides you with accurate results, backed by accountable/predictable nature and quantifiable aspects of the game...and it's all packaged up in a way where you can copypaste game scenarios straight into a command.
Currently, the interface is built as a command line tool. Future versions of this page will have a more comfortable and updated, webfriendly user interface.
For a *much* more detailed explanation of how to use this program to its full potential, reference the Zombie Console Documentation.
Because Zombie Console was created for the community, its future direction(s) depends on your feedback. Questions and discussion of this program can be found at our discord server.
Thanks to everyone that has supported Zombie Console!
Enjoy!
Terminology
 maxammo rounds(aka dog rounds): the rounds in which no zombies spawn
 horde: the max number of simultaneously active zombies allowed
 sph: "seconds per horde"
What Can You Do with Zombie Console?
 time arithmetic
 calculate worst, average, & bestcase combinations across multiple ingame or hypothetical scenarios
 exact sph or sph range
 accurate time projections for all bounds (worst, average, & best maxammo rounds)
 exact time/scenario to beat an existing record, given each sph
 zombie count across any rounds, players, or maxammo rounds
 quantify your results, which you may plot & visually inspect your results (like rolling sph/time) against a friend's (graphs coming next release)
 rank leaderboards or players by sph
 ...all of which can be used for analysis of yours or another person's pre, post, or ingame gameplay, not to mention hypothetical scenarios
Notable Future Release Plans
 a more userfriendly interface
 twitch extension
 visual graphs/plots
 nonlinear sph games and their time projections: e.g. first room, no power
 weapon stats
 waw, aw, ww2, bo4 hardcore, bocw
 mapspecific input (essentially, removes i and f)
How the Heck do I Use This?
As stated previously, future versions of this page will have a more comfortable and updated, webfriendly user interface, but for now, it is barebones as a commandlinelike interface.
Communicating with the interface follows:
The syntax for all questions into Zombie Console is as follows:
<function> <parameters>
The available functions and their associated parameters follow.
Available functions
add, sub, mult, div, zombies, comb, sph, time
Available parameters
Each function has a set of accepted or optional parameters. They start with a single dash if they accept a value. Some parameters are dependent (like i and f discussed below)
Parameter 
Description 
r 
the round(s) 
p 
the number of players = {1,2,3,4} 
t 
the time, e.g. 25:01:01 ≡ "1 day, 1 hour 1 min 1 sec" ≡ "25 hours 1 min 1 sec" ≡ "1501 min 1 sec" ≡ "1 hour 1441 min 1 sec" ≡ "90061 secs" ≡ 90061, et cetera

s 
the sph 
m 
the bounds you wish in your result, which can take on (a) the actual maxammo rounds (e.g. m [7, 12, 17, 22, 27]) or (b) a particular case: none, all, worst, avg, best. Choosing m all will result in projecting all the bounds together. When m is one of the last four cases (all, worst, avg, or best), then in addition, the i and f parameters are required 
i 
initial maxammo round(s)
(only necessary when m is set to worst, avg, best, or all) 
f 
maxammo round frequency
(only necessary when m is set to worst, avg, best, or all) 
Examples
Time Arithmetic
The parameters to these particular functions are TIMEs or SCALARs, appropriately. Time units supported are seconds, minutes, hours, and days.
Addition
If you add 23 hours, 14 minutes and 55 seconds to 45 minutes and 5 seconds,
you get 24 hours exactly.

add "23 hours, 14 minutes and 55 seconds" "0 days, 0 hours 45 min 5 sec"
24:00:00

You may choose the TIME format that best suits you

add 23:14:55 "45 min 5 sec"
add 23:14:55 45:05
add "1394 min 55 secs" 45:05
add 00:1394:55 45:05
add "83695 secs" 45:05
...all of which result in:
24:00:00

If your time value is simply a number alone, then its unit is assumed to be in seconds.

add 83695.0 45:05
24:00:00

Currently, decimal precision is only supported for time in seconds only.

add 00:1394.5:25 "45 min 5 sec"
Error: TIME or REAL>= 0, but instead received 00:1394.5:25

If your time unit is seconds only, you may increase your time precision in the decimal range. All time calculations final results are rounded to the nearest second.

add 83695.4 45:05
24:00:00
add 83695.5 45:05
24:00:01

Subtraction
Subtracting that amount (45 minutes and 5 seconds) from 1 day, we get 23 hours, 14 minutes and 55 seconds again

sub "1 day" "45 min 5 sec"
23:14:55

Division
There are exactly 60 amount of minutes (00:01:00) in 1 hour (01:00:00).

div 01:00:00 00:01:00
60.0

How many 59 seconds are there in 1 hour?

div 01:00:00 00:00:59
61.016949152542374

So there are exactly 61.016949152542374 amount of 59 seconds in 1 hour. Hence, 1 hour divided by that, is exactly 59 seconds. Notice how this time we're using a SCALAR as the second parameter.

div 01:00:00 61.016949152542374
00:00:59

Multiplication
And to beat the point to death, 59 seconds accumulated 61.016949152542374 times is exactly 1 hour.

mult 00:00:59 61.016949152542374
01:00:00

Number of zombies
On solo, how many zombies on just round 30 alone? 
zombies r 30 p 1 m none
105

Total zombies (if they came every round) from 1 to 30 (exclusive) 
zombies r [1,30] p 1 m none
1396

What is the expected average number of zombies? Remember there are maxammo rounds that don't spawn zombies. Simply by specifying the initial rounds and the frequency of these rounds, we can subtract these zombies that never came from our total. In this example, dog rounds start on round 5, 6, or 7 (i [5,7]), and frequent every 4 or 5 rounds (f [4,5]). 
zombies r [1,30] p 1 m avg i [5,7] f [4,5]
1062.0

Besides the average number of zombies, we could also determine the worstcase or the bestcase number of zombies possible. 
zombies r [1,30] p 1 m all i [5,7] f [4,5]
Best/Average/Worst: 1012.00/1062.00/1126.00
If no MaxAmmo Rounds:
1396.00

Q: My kills don’t match up to the output 
A: Certain game aspects (like nukes) don’t add to the tally of kills in your ingame stats, so your kills will be different, by an unavoidable, but small amount. See section 3.3.3 in the doc.

Round Combinations
The best, average, and worst possible combinations of maxammo rounds, given a particular game scenario. This is the most abstract of the functions and is by far the most useful aspect when it comes to sphtime calculations. This has many uses and is general for that purpose. For an explanation of how the averagecase works for maxammo rounds, see section 3.2.3 in the doc.
What kind of dog rounds should I expect on Kino from rounds 1 to 30? 
comb r [1,30] p 1 i [5,7] f [4,5] m all
Best:
[5, 9, 13, 17, 21, 25, 29]
Worst:
[7, 12, 17, 22, 27]
Average(s):
1: [6, 10, 15, 19, 24, 28]
2: [6, 11, 15, 20, 24, 29]

So having best dogs implies that you have dogs on these rounds: 5,9,13,17,21,25,29 

Seconds per Horde
Zombie Console provides not only a sound sph, but one that is much more accurate than any previous sph measurements before because it takes into account the maxammo rounds, ultimately providing you with any bound (best, average, worstcase) you desire. Hence, your results are much more rich, with probabilistic interpretation, and in which case, for the first time ever, especially since the lower bound (i.e. the bestcase) is now accessible to you, you may now form accurate time projections! Huzzah!
Say the total gametime for a solo Kino 30 speedrun was 29:09. Then what is the sph? Well, it all depends on the maxammo rounds, so we need m, i and f again. 
sph r [1,30] p 1 t 29:09 i [5,7] f [4,5] m all
EXACT SPH: 31.0934.61
AVG SPH: 32.97
If no MaxAmmo Rounds:
25.08

The sph calculation is precise (i.e. a "tight bound") as long as we remove the maxammo rounds from the calculation. If the maxammo rounds are unknown, then what you get is the range of possible sph's, as well as the expected sph. So in this example, your exact sph is contained somewhere in these bounds: 31.0934.61, and on average, you'd expect your sph to be close to 32.97. 
Now if instead you were playing a map without maxammo rounds, like Nacht for instance, then your sph would be 25.08. In this Kino 30SR example, if you had average dogs, you'd expect an sph of 32.97 seconds per horde. If you had best dogs, you'd expect 34.61; on worst dogs, 31.09. This makes sense if you think about it  your sph will increase if your dog rounds are more ideal, because then you're doing less work (killing less zombies) but in the same amount of time (29:09). 

I should mention that these sph values returned above here are rounded to the nearest hundreds place to be easier to read. For more precision, or to follow a function's process, run your command with the verbose option. 
sph r [1,30] p 1 t 29:09 i [5,7] f [4,5] m all verbose
Worst/Avg/Best: 31.097690941385437/32.97175141242938/34.60079051383399
25.083094555873927 if no maxammo rounds

Now if you indeed know the actual dog rounds, then by all means, use them for the value to the m parameter to get your exact sph. 
sph r [1,30] p 1 t 29:09 m [5,9,13,17,21,25,29]
34.60079051383399

...Or maybe you weren't lucky enough to get best dogs: 
sph r [1,30] p 1 t 29:09 m [5,9,13,17,21,25,30]
31.517551755175518

Time Projections
Say your sph is 34.61 for rounds 130 on solo kino. Then your time projections are: 
time r [1,30] p 1 s 34.61 i [5,7] f [4,5] m all
Best/Average/Worst: 00:29:09/00:30:21/00:31:54
If no MaxAmmo Rounds:
00:38:23

Say your sph is 32.97 for rounds 130 on solo Kino. Then your projections would be: 
time r [1,30] p 1 s 32.97 i [5,7] f [4,5] m all
Best/Average/Worst: 00:28:00/00:29:09/00:30:37
If no MaxAmmo Rounds:
00:36:48

And finally, the worst case: 
time r [1,30] p 1 s 31.09 i [5,7] f [4,5] m all
Best/Average/Worst: 00:26:41/00:27:46/00:29:09
If no MaxAmmo Rounds:
00:34:58

Notice how 29:09 made its way as the best, average, and worstcase scenario time in each of these projections. These sph values were pulled straight from the bounds calculated in the previous section. We received exactly what we expected  29:09 appropriately for each case. 

Q: "My time/sph calculations are off slightly." 
A: Be careful to check your significant digits against your precision or else your analysis may result in rounding errors. (See section 3.1.4.1 in the doc for more details). Remember, using verbose may reveal more precision in your results.

Final Words
Throughout these examples, at any time we could have changed the rounds (r), number of players (p), or other tweaks to fit our scenario. If you're interested in getting deeper into the functionality or mechanics of how these things work, the doc goes into much more detail.
Your Feedback Is Needed!
Feel free to start up a discussion in our discord. Like many software projects, this is an ongoing effort, so if you notice a technical error, please open a ticket. Please provide all appropriate details in a bug report, such as a replicable example, your system, browser, versions, etc.
Your changes and suggestions may get into future releases.
Troubleshooting
zombies r 9 p 1 m [5, 9]
All params must start with "" or "".

Parameter values cannot have excess whitespace. Removing the space fixes the error:
zombies r 9 p 1 m [5,9]
0
Alternatively, you could quote them, so they're distinguished, and in which case any excess whitespace within the quotes will be ignored:
zombies r 9 p 1 m " [ 5 , 9 ] "
0 
sph r [1,6] p 1 t 00:00:50 m [5]
***Error: Impossible to have completed this quickly [. . . ] time must be > 00:00:50 
The time you provided is too fast to finish the rounds. So in this example, it's impossible to finish the first five rounds (r [1,6]) in 50 seconds. Because the sph and time functions take round delay into account (see section 2.5.1.3 in doc), in order to form realistic queries, your times must be larger
than this timedelay accumulation. Running the command again with a time just slightly over 50 seconds (say, 50.0000001 seconds) will result in a very small sph close to 0:
sph r [1,6] p 1 t 50.0000001 m [5]
5.3333333956591863E8 