Fix two old as shit runtimes, one that occurs on every local server involving making a random name. The other coming from my recent removal of call() from client/move, istype is being called upon the object instead of the variable which isn't blocking other types.
Makes mobs gibbed or dusted not force del and also makes the atom/movable/overlays they use for their death animation not force del.
Also removes the call() from client/move because WHY THE FUCK was it there.
No, I don't know how to manually fix conflicts on a PR, and this doesn't
make me wanna figure out how it's done
Fuck you too for not even trying when you were working on Endgame @N3X15
Also thanks for fucking up my PR by stealth-merging a fix @Comic
Because Baystation has finally gotten around to it, and because the code
looked simple, I decided to get my hands on porting a system that allows
up to define base_turfs. As a bonus, it also defines them per Z-level.
So if you wanted, you could have a space station, and a Z-level on a
map-spanning asteroid, and then an away mission on land, all in the same
file
Note that you can modify it mid-round via a DEBUG flag verb, it will
however only affect destroyed turfs (it won't change space, which I
suppose is intentional)
Tested were destroying walls and floors and even dropping a bomb in the
middle of Medbay
Not tested were more finicky conditions like the Singularity or
buildmode. I simply replaced all ChangeTurf() instructions that pointed
to space, because that is how Baystation implemented it
Only problem with this is that it doesn't work on a per-map basis, so
unless some wizardry is done on that code, it'll be hard to get anything
interesting going with it
Discussions go below. Since this is pure code refactor, I doubt there'll
be much up to debate
- Old PR over at #5192
- Older PR over at #5167
Example picture (with the current code, there would be no lattices over
the sand) :

Makes material datums not lag by not calling del() when a datum pool is overrun, instead just cutting the oldest one loose from the pool.
Made the pull from earlier called 'optimizations' work properly, this method is almost identical except it works fully and is only minimally less efficient.
Instead of looping through the exclusion lists every time, it only loops through the variables. Instead of calling initial every time, it merely copies a value from an associative list.
Optimizes reset variables, initial costs about 1e-5 to 1e-6. Whereas an operation that just sets a variable in an associate list using another variable in an associative list has a negligible cost even at extremely high calls. Therefore all the variables are initialized only once in a single associative type list holding all the vars.
Optimizes recursive_hear_check as used within say() code. Currently it checks all atom/movables within view which is a minimum of 225 lighting overlays, and checks each of these atom/movables recursively and then uses the list OR operator to add them in due to possible overlap. Instead recursively checks turfs only once and adds them to the found list due to eliminating the possibility of overlap.