Move all atom/Destroy() behavior to atom/movable/Destroy() so turf/areas that get qdel()'d just get del()'d like they're supposed to. Also do tag = null, which should make more things GC.
Make cameras GC correctly and some misc grammar fixes.
Make smoke grenades GC.
Tell camera bugs to del() because I'm not working on complex behavior for one item.
Added the most important damn checks of this entire PR that got eaten by
Git when I synced
Added a visual indication of a pAI being paired with a computer - a tiny
blue light at the bottom
Forbid to pair with computers that have non-standard icons, except the
arcade machine.
When the arcade is emagged, if the pAI loses, it will explode like a
detonated PDA. If it's slotted into a PDA, it will explode with it.
Severs connection if the pAI and the computer are on different z-levels
It just puts the prefix of the borg into the $job var that is handled
internally by NTSL.
Also adds a var for the designation of the borg, it's kind of a
read-only variable that makes it fun & easy to get a cyborg's current
module without istyping.
Refactors the cyborg naming code a bit.
Removes additional fun (changes not shown in PR overview, 4317483141
counts of fun removed)
Hopefully nothing went wrong but you never know.
Conflicts:
code/FEA/FEA_fire.dm
code/controllers/supply_shuttle.dm
code/game/gamemodes/changeling/changeling_powers.dm
code/game/machinery/autolathe.dm
code/game/machinery/drying_rack.dm
code/modules/hydroponics/hydroponics.dm
code/modules/projectiles/projectile/magic.dm
code/modules/reagents/Chemistry-Recipes.dm
code/modules/reagents/reagent_dispenser.dm
Replaces Holodamage with Stamina damage, if your stamina damage exceeds your current health, you get weaken(5)'d. Stamina heals itself slowly over time.
Makes the hallucination enemies deal more stamina damage than they did holodamage, but stamina damage heals now so it's mostly for just seeming threatening at the moment.
Adds the Disabler, a gun that does stamina damage. It has a range of your screen, but no more. Adds a disabler crate to cargo (security lock)
Fixes Lasertag ED209's because they were busted as shit
Reduces ED209's view range to 9 from 12, which was several times longer than your screen view, now is only a little bit more
Lastertag now does stamina damage instead of an instant stun for that GRITTY LASERTAG EXPERIENCE
Adds formal uniforms, a black tango dress, and a professional black suit
(with added Memorizer for maximum CIA spookyness). To do: make this
stuff orderable from cargo, and add some of it to the lawyer's closet.
Works pretty well. If it can't GC something, it'll just del() it and be done.
Speed is amazing, holy shit.
New procs you should be aware of:
qdel(atom/movable) - sets up an object for garbage collection. Call this rather than del(atom/movable).
atom/movable/Destroy() - called right before the object is GC'd, so it still has a loc. Also called if the object is del()'d.
new controller - garbage.dm has all the details on this. Basically it nulls all references on GC'd objects and force del() them if necessary.
Generally speaking, objects should use Destroy() for behavior prior to deletion rather than Del(). You should also always call the parent so the object gets the right gc_destroyed var set.
ISSUES:
Tries to GC mobs atm. This actually works for new players, not so much for humans/monkies/simple_animals/anything. I'm guessing it needs to clear out their mind and HUD and maybe other things.
Gibbing is really bugged. It works, but the overlays just sit there for awhile and ugh. I'm very tempted just to del() mob/living and mob/camera and call it a day.
qdel() equipment doesn't unequip the item.
Pipes don't generally GC correctly. Debugging suggests they get referenced in many pipenets and that isn't cleared properly. However some do work fine. Need assistance here.
Bots don't GC, probably in the radio controller.
Lots of other shit doesn't GC but it's hard to find them because of the pipe spam.
I think I'm calling Destroy() twice by accident.