Misc:
+Fixes unreported issue with initializing lighting on a specific zlevel
+Fixes two similar issues with moveElement and moveRange. Where fromIndex or toIndex could be adjusted incorrectly in certain conditions. Potentially causing bad-sorts, or out of bound errors.
+Rewrites listclearnulls(list/L) to no longer iterate through L.len elements for every null in the list (plus 1). i.e. went from L.len*(number_of_nulls+1) list-element reads (best-case), to L.len list-element reads (worst-case)
+New proc/getElementByVar(list/L, varname, value) which finds the first datum in a list, with a variable named varname, which equals value. You can also feed it atoms instead of lists due to the way the in operator functions.
+Fixes an unreported issue with Yota's list2text rewrite. Under certain conditions, the first element would not be converted into a string. Causing type-mismatch runtimes.
+New global map_ready variable. This is not fully implemented yet, but will be used to avoid duplicate calls to initialize() for map objects.
+All turfs now maintain references to all lights currently illuminating them. This will mean higher memory use unfortunately, due to the huge number of turfs. However, it will speed up updateAffectingLights significantly. I've used list husbandry to reduce baseline memory usage, so it shouldn't be any worse than some past atmos modifications memory-wise.
-Removed 'quadratic lighting', can add this back at some point. Sorry.
+modified the way lum() works slightly, to allow turfs to have overridden delta-lumen. i.e. space cannot be illuminated more than its default ambiance. This allowed removal of some iffy special-snowflake lighting areas implemented by somebody else.
+Lighting images in the dmi can now use arbitrary naming schemes. It is reliant on order now. This allows the dmi to be replaced by simply dropping in a new dmi.
-Removed all subtypes of /area/shuttle. Shuttles now create duplicate 'rooms' of /area/shuttle. (More on this later). This will conflict with most maps. Guide on how to fix to follow.
+All verbs/tools relating to world.tick_lag were refactored to use world.fps. However old config text for setting tick_lag will still work (it converts the value to fps for you)
+MC stats improved using smoothing. They now have their own tab so they dont get in the way when you're playing as an admin.
-removed the push_mob_back stuff due to conflicting changes. Sorry Giacom.
_OK, NOW THE ACTUAL INTERESTING STUFF_
Following systems moved over to subsystem datums:
air_master
garbage_manager
lighting_controller
process_mobs (aka Life())
nanomanager
power
sun
pipenets
AFK kick loops
shuttle_controller (aka emergency shuttle/pods), supply_shuttle and other shuttles
voting
bots
radio
diseases
events
jobs
objects
ticker
Subsystems hooks and variables should be commented fairly in-depth. If anything isn't particularly clear, please make an issue.
Many system-specific global variables have been refactored into
All tickers which previously used world.timeofday now use world.time
some subsystems can iterate before round start. this resolves the issue with votes not working pregame
- Emergency shuttle call/recall announcements will say when a tracing attempt has been successful, as well as explicitly telling players how to view them
- Clarified language further on how emergency shuttle tracing is done
- Increased tracing success rate from 60% to 70%
- Removed a lot of duplicated code by moving all the priority_announce() calls to incall()
-Cooldown for sending messages to centcom reduced to a minute. Often times conversations between the messenger and centcom are cut short by the very long cooldown time.
-Cooldown for AI priority announcements increased to 5 minutes. The fear I had when I implemented it was AIs misusing it by announcing pointless things for what should be reserved for actual important things.
-Ferry move request cooldown increased to a minute. Stop spamming us admins please.
-RC Announcements now produce news stories, too
-The AI may now make priority announcements via communications console that emulates the automated messages
-Centcom announcement proc merged with generic priority announcement proc
-Re-added the Captain Announces accompanied by a new pleasant sound, instead of the generic priority announcement
-Captain Announcements will automatically generate a newscaster article
-Priority announcements without any defined accompanying sound will play a generic "Attention" soundbyte as an audio cue
-Communications consoles will display who is currently logged in
You can open the communication console UI by using your ID card.
Added a config option for the shuttle refuel delay, defaults to 20 minutes.
Fixed a bug where the refuel delay was counting the pre-game lobby time.
Intended to cut down on shuttle ping-ponging caused by stealth comms consoles.
-After the second recall, centcom will attempt to trace the origin of emergency shuttle calls and recalls
-The results can be viewed on any authenticated communications console.
-Tracing has a 40% failure chance to further reduce the risk of metagaming the game mode
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.
-Added emergency maint access function to comms console. Removes access restrictions on maintenance and external airlocks. Can be toggled on and off. Captain-level access required.
-Minor modifications to map /area/s to make this work
-Updated Comms console interface (https://www.dropbox.com/s/zy33829tcqby9hd/comm.png)
-Message List is now restricted to Command Staff. (Classified transmissions go here!)
-AI can now control alert levels and emergency access via comms console