Lightning Bolt:
*You can no longer throw the bolt whenever you want, it will fire itself once it's done charging. Fixes#12849
*Getting hit by a bolt will do a flat 30 burn now, as opposed to scaling with how long you spent charging the spell. Unless you made a habit of charging lightning bolt to near maximum every time you cast it this is a buff.
*Every time the bolt jumps the next shock will do five less burn damage.
*Lightning bolts can still jump back to the same body, so the maximum number of bolts you can be hit by in a single casting is three, and the maximum amount of damage you could take for that is 60 burn.
*Stun time is unaffected
Magic Missile:
*Cooldown raised to 20 seconds, up from 15
*Cooldown reduction from taking the spell multiple times raised from 1.5 seconds to 3.5 seconds. Rank 5 magic missile now has a cooldown of 6 seconds, down from 9, and is effectively a permastun.
Time Stop:
*Time Stop field now persists for 10 seconds, up from 9
*Cooldown raised to 50 seconds, up from 40
*Cooldown reduction from taking the spell multiple times raised from 7.75 seconds to 10 seconds. Rank 5 time stop now has a cooldown of 10 seconds, up from 9, and is effectively a permastun.
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.
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.
Moves holodeck code to modules/holodeck. Repaths holodeck structures a little. Cleans holodeck code and prepares for additional features (multiple holodecks, etc). Should fix#4828.
Necessary map bugfixen for Asteroid, Disc, Dream, Meta, and TG.
Adds Lounge, Emergency Medical, pet center, and holdout room to the rec holodeck.
All items spawned by the holodeck will do only stamina damage, except when emagged. This allows emergency medical to be staffed with scalpels and bonesaws and such. Emergency medical has some functioning equipment but the only drugs available are in the sleeper.
250 because any less seemed like you would have to page too much to browse the archive.
All actions preserve the current page.
Page splitting and calculation is cached on first load of the external archive for that computer (has to be per-computer because the html is cached and it needs to have the src arg)