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
- New objective 'Escape with identity' requires the changeling to have the DNA and ID of their target when escaping
- Hallucination and transformation stings and engorged glands now require 3 absorptions.
- Can't purchase abilities you can't use. Cleans up the evolution menu.
- Extract DNA sting costs 1 point and doesn't count towards absorptions.
- Increased chemical recharge rate from 0.5 to 2. Engorged glands increase recharge rate by 1.
- You can absorb people even if you have their DNA already
Maroon
-Maroon objectives are a variation of assassination, where preventing the escape of the person also counts as a success.
-Aprox. 30% of assasinations will be maroonings instead
-Disincentivizes players from staying behind on the station when the shuttle leaves simply because "it's more safe"
Destroy
-Basically an assasination objective where the AI is the target
-All traitors have a 1% of getting this objective. Changelings have 2% chance.
-Adds variety, counterplay between those who want to destroy the AI and save/restore/steal it
-It is entirely possible to get Destroy AI and Steal AI at the same time. While it would be difficult, it's still entirely possible to destroy your target and steal a different AI. The chances of getting both are very slim, however.
-Encourages restoring the AI over killing it wherever possible. Discourages AIs from cooperating with antagonists.
And there you go, my hamhanded attempts at some new objective types.
-Will no longer be assigned to latejoiners
-Objective description will report the other agent's real_name
-Objective description will report what job the other agent is
-Objective description will properly rename itself if the other agent is renamed (e.g. clowns, mimes)
-Explanation text made more noticeable
-Cleaned up the code a bit
-Will no longer be assigned to latejoiners
-Objective description will report the other agent's real_name
-Objective description will report what job the other agent is
-Objective description will properly rename itself if the other agent is renamed (e.g. clowns, mimes)
-Explanation text made more noticeable
-Cleaned up the code a bit
Adds new steal objective "Secret Documents"
-A set of secret documents spawn in the vault's filing cabinet, but even syndicate documents qualify as valid steals
Adds the exchange objective for traitors
-If there are at least 6 traitors, two of them will be selected to make an exchange of secret documents
-There is a low (20%) chance that one of them will have an additional backstab objective, where they will require both sets of documents to win
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.
-Fixes a bug where a changeling could use revive after being husked by another changeling. The husk also loses his absorb points to the changeling that ate him.
-Fixes some objective text to use appropriate cases when dealing with numbered objectives ("1 genome", "2 genomes", so on)
-Resonant shriek now acts as a "flash" for cyborgs in range, giving changelings an in my opinion much-needed anti-silicon ability. Changelings in the area will also be able to hear the shriek.
-Spread Infestation requires fewer DNA absorptions now, but costs more chems to use and creates 1 fewer spiders.
-Lowers the max genome target by 1.
-40% chance of getting a debrain objective instead of a steal objective. They'll probably keep it in a jar on a shelf, the sickos.
-Chance to get a Survive objective removed.
-Changes the objective text to prevent confusion.
Minor ability cost changes. Fleshmend no longer heals toxin damage (that's covered by Panacea!)
-Removed head jumpsuits from the steal objectives list, as they were hardly taken seriously.
-Added Medal of Captaincy to list of steal objectives
-Readded Nuke Disk to list of special steal objectives. I've tested it and it DOES work.
-Grammar fix for special steal objectives
All usage of it on silicons is replaced by is_special_character()
is_special_character moved from admin.dm to mob_helpers.dm
Also fixed a runtime having to do with objectives.