If minimap generation is disabled, the system will now first try to load the map from its cache, and failing that, try to load it from backup minimap files
Also adds a config for space ruin budgets
When a user's cid doesn't match their last cid, we just close the connection, faking a read error. If it's still mismatched when they reconnect, we reject the connection and let them know we are on to them.
Basically, they key difference between StonedMC and CarnMC is that when multiple ticks want to run at the same byond tick, we divvy up the tick between the subsystems, rather then allow one subsystem to hog it all.
The key difference between StonedMC and GoonPS is that we allow the subsystems to tell us how to divvy up the tick using flags and priority.
The new SS_ flags allows us to select behaviors that used to be piggybacked as side effects of dynamic wait or default but sometimes unneeded behavior.
Dynamic wait is 100% gone, lower priority and SS_BACKGROUND are better more refined ways of doing this when combined with MC_TICK_CHECK
I have by design never looked at the inners of goonPS, so this is all original code but I know it uses two loops because of comments by goon devs on reddit threads, that design didn't make sense before, but when I can tell a SS how much of a byond tick it is allowed to have, knowing how many need to run this tick is helpful I also know a bit more about how it works from piecing together comments in #vgstation.
Detailed list of changes:
Subsystems now have flags, allowing fine grain control over things like rather or not it processes, inits, rather it's wait is how long between runs (post run timing) or how long between starts, and rather or not late fires should cause the next fire to be earlier.
Mc now has two loops One loop handles queuing shit, one loop handles running shit.
MC now splits up tick allotment rather than first come first serve Subsystems can even request a bigger share using higher priorities. (It will even resume subsystems it paused if other subsystems hadn't used as much as it predicted they might need)
Default fps is now 20 This is related enough to the MC and it's a change that's really long since over due
All code oddities are most likely to be necessities to lower overhead on the mc since it runs every tick
* Initial start of lavaland ruin budget system
Weights are dumb, we're gonna use BUDGETS!
To be clear, each round, there will be a budget for ruins.
HERE IS A ROUGH APPROXIMATION OF THE AIMED PROCESS
- Pick a ruin
- Can we afford it? If not, start again.
- Try a bunch of times to place it.
- Did we place it? Good, then reduce our budget accordingly
Does this look a little like syndicate surplus crates? That's the point.
* Subclassery
* Budget based ruin loader is GO
* Cryostasis (with a s)
* Adjusted costs, added no-duplication
* No dupes on the major ruins
* Deleted files, budget is config
* Corrected description
* Fixed ruins failing to load, duplication
* The zoo goldgrub will no longer burrow away
* Space descriptions and names
* No more weird Xenonest loops, should be all good
* Adjusted costs based on feedback
Peacekeeper borgs now have a config option
"Harm Alarm" now respects and is blocked by earmuffs
Secborg/peaceborg disable config option is now more verbose :^)
Caveat: All humanized monkeys will still be human, I tried to fix this but thanks to what seems to be a race condition doing so made roughly 50% of all humans drop dead at the first life tick.
Updates the race list in game_options.txt. Our servers don't auto update config files, so this is just for anyone who makes a server going forward.
Replaces typesof(path) - path with subtypesof(path) in obvious places. I was a bit conservative, there's probably a few more places that could use this.
If the list is missing, it will default to which races are defined as roundstart in the species datums. Plasmamen have been removed from this list pending bugfixes.
If JOIN_WITH_MUTANT_RACE isn't set in config, humans only will still be enforced regardless.
Basic premise: Get all mob movement delays calculated in movement_delay() instead of having half of them in Client/Move(). Except for the slowdown from grabbing, which is so shit I can't even. The idea here is to eventually have the AI movements be at the same speed as client-initiated ones.
Let's try this again: Removes TickComp because it's a useless pile of shit that's based on a false idea of how BYOND's ticks and tile-based movement work.
This should enable more murder death kill at round end before the next round starts.
New servers will default to 90 seconds while old servers will default to the old 25 seconds until they import the config option to their server.
Adds a config option for the map rotation chance.
Ups default rotation chance from 50% of round length to 75% of round length.
Moves the procs around.
Adds two new admin verbs:
Force map rotation.
Change map.
Only applies to non-ghost, non-camera mob movement. Scales automatically to any fps and any move delay.
Also took this oppurtunity to remove tickcomp because it was USELESS and shit.
All the rounding is because of floating point imprecision. round(2.7, 0.9) != 2.7, for example. 2.7 + world.time would wind up being < than world.time 3 ticks later even though they should be equal.