* Adds Collapsible AM rifle, and adds case with parts and 5 shots to Uplink. Separates it and intended merc version, both costing default telecrystal amount. Does NOT make them antagonist type specific.
* Addresses review.
* Makes rifle case traitor/merc specific. Enables ability to have specific uplink items be available only for specific antags.
Adds a traitor device to warn the traitor if they're being spied or are about to be spied on by the AI or anyone using a camera console.
It will warn the holder by changing color, beeping a specific tone, and sending a message to their chat log. It only does this when the state of spying changes, so it will not spam the chatlog if nothing changes. Only the holder can hear the warnings. It also functions like a regular multitool.
Shuttles now set themselves up upon being instantiated instead of relying on a monolithic proc in the shuttle controller.
Shuttles can now be defined more cleanly on a per-map basis, as well.
Accidentally fixes a broken admin shuttle.
* Settings for specific z-levels are defined in datum types, allowing the lists of Z levels to be automatically configured. This solves the problem of being unable to use the z-level #defines in associative lists.
* Converted the example and northern star maps to use the new system.
Jams the three devices that I'm aware of that use subspace communications: Headsets, PDAs, and Communicators.
All three will be unable to communicate if in range of a jammer. The default range is 7 turfs, the battery that comes in the jammer is a weapon cell (just to make it a little harder to find replacements) and lasts 60 seconds. The range and power use are variables.
Speaking through a headset will produce 'soft' or 'loud' static depending on how far you are, allowing you to sort of dead-reckon your way to a placed jammer. You can just carry them, otherwise.
I've got no experience with adding tator items so I'll leave that sort of thing up to you guys.
* Creating new objects is cheap, in fact comparable to the cost of getting it out of the pool, so it doesn't help there.
* Placing items in the pool is far more expensive than letting them garbage collect due to the resetting of vars and such.
While I was rooting around in hydroponics code, I saw that a list was being regenerated with UI interaction, so I threw the list into the plant controller.
No proper sprites for the Floral Somatoray's new mode yet, but it uses the gun sprite from mutate mode, and the projectile sprite from yield mode.
Adds a fairly simple system that allows adjusting various numbers like max health, incoming damage, outgoing melee damage, etc. The nice part is that changing certain variables this way (like max health) is a lot safer than manually setting the max health var directly.
Changes a lot of short lines of code to point towards a variable's getter or setter helper instead of reading the var directly so the modifiers can work.
Endoarmor, delayed toxin sting, Enfeebling sting, and recursive adrenaline overdose now use the modifier system.
Enfeebling sting now only lasts two minutes, from five minutes, however it now also reduces the victim's melee damage by 25%/50%, and increases the damage they suffer by 10%/35%, for normal and recursive respectively.
Delayed Toxin Sting's effects are now felt all at once instead of over the course of a few minutes.
Controller with deferrals and SCHECKs to be specific. Won't lag while updating the sun, weather, or temperature.
Also moved some vars around. Namely the planet walls are stored on the planet, not in the weather_holder.
Planets now have their own turfs, the controller 'gives' them to the planets each cycle if there are any unallocated turfs in the global lists, to avoid iterating over other planets' turfs if you have more than one, then cuts the lists if you were crazy and some turf added some invalid type. This saves us type-checking in the for() loops later to make them crunch faster. The former operation should only happen once at the start of the game (and maybe very rarely when turfs are added/removed from a map during the game).
With regards to the temperature updates, rebuilding the zone entirely is an intensive operation. Instead we can use this new cheaty proc to do it from over here. ZAS code outside ZAS oh noooo. Well, the option is to snowflake this case into ZAS which is maybe worse?
Only downside to all this is that if you manually set weather and time it might take between 1-60 seconds for the controller to get around to checking if you wanted to update it. That's not that big a deal. If you really want you can now debug that controller and call doWork on it.