Byond will queue all browse(), browse_rsc(), and winset() calls to the client, to ensure they load in order, and ensure any resources from a browse_rsc call (css/html/js) are already at the client by the time any html windows loads.
How ever, each file is processed separately, and byond will wait for the reply from the client before it will send the next file.
Our current system sends all of these html resource files to the client at once when they connect, this is the sole cause of the lag when a client connects. Byond will not send the client a file it already has, but it has to ask the client first, and it does so one file at a time, waiting for a reply from the client before sending the next one down the pipe.
This system fixes that.
Basically it works like this:
Client connects: nothing happens, no massive queuing of browse_rsc() calls, so no interface delay
Client opens a asset_cache controlled html based interface
Asset cache gets notified by the html based interface what assets the client needs to have.
Asset cache checks to see if it's sent that client those files.
Asset cache sends the missing ones, adding them to the list of assets the client has.
This basically spreads out the delay to when you first open a window that uses resources, where it is much more manageable.
I've kinda done a halfass port without too much thought, I see some room for improvement to better fit /tg/'s coding style and make the system more flexible. I'm PRing this because if I don't, it will never get finished.
PDAs and html_interface has been imported in to the new system lazily to test. at 100ms connection start interface lag went from 35 seconds to 16 seconds. Nanoui hasn't been imported, and once it is, that should drop down to almost nothing.
I'll work on this some more after some sleep.
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.
Why use replacetext with no arguments? I have no idea.
This wasn't runtiming because of the bygex stuff I guess.
Thanks octareroon91 for reporting this to me ingame.
For finding a spawn point, it will now use this logic to find a spawn point, stopping at the first one it finds
Empty job spawn point
Filled up job spawn point (spawning them on top of eachother if it can't find enough spawn points)
Late join spawn point
Random tile in the arrivals shuttle area.
If it hits either of those two final points it will pop a message in the runtime log.
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.
Previously, security officer scaling was between 5-12 no matter what was configured.
Now, security officers will have (spawn positions)-12 spawn and total position slots.
This can be set in jobs.txt or admin set through the jobs controller while in the lobby.
This is only used when officer scaling is set.
Also, the number of extra security equipment closets spawned is relative to the number of total job positions configured, with or without officer scaling. Previously if officer scaling was not set, no additional closets could spawn.
Adds myself to admins.txt after like 3 years of contributing
The jobs controller's list of occupations was reset during roundstart which completely undid that whole load from file thing. It also would have undone any admin edits done while sitting in the lobby.
Also fixed a couple instances where people thought that lists get copied with the = operator instead of passing by reference.
It would lock up the MC for 30 seconds while it was compiling, meanwhile ticks are queuing.
After the map was compiled, there would be 15 mob ticks, 15 object subsystem ticks, 15 mechinery ticks, 60 atmo ticks, etc all queued up and would attempt to fire all at once.
Beds (and chairs) now have buildstacktype and buildstackamount vars to handle how many sheets of what they should drop on deconstruction.
They also have a foldabletype var to handle folding into item (currently only used by roller beds) so that people can add foldable chairs in the future.
Fixes swivel chairs not dropping the correct amount of metal sheets.
Fixes some other potential issues coming from changing a few del() to qdel().
Fixes not being able to shoot mob on same tile as the shooter.
Fixes being able to shoot oneself by simply clicking our mob.
Fixes not being able to shoot non human mobs right next to us.
dynamic wait buffer is the amount subtracted off of the process cost before calculating the new dynamic wait.
1.5 was too much and dynamic wait wasn't kicking in until after atmos was causing lag, 0.7 seems much better after testing on sybil.