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
- The RPED now sorts its parts when installing new equipment - It will
always use the best parts contained within.
- Made all the req_component lists of circuitboards actual paths instead
of pure text. Hopefully I fixed everything that broke when I did that.
Exosuits will now use the designs from RnD to create objects instead of having the object already created on their contents.
Each one of the default items to build are now designs.
Removed access required to use the exosuit fabricators.
Removed an unused mech syringe gun design and replaced with a new one, with no cost.
Added a temporal object, /obj/item/mechavars, to be able to use initalize() for the construction time. This will be later on removed and the construction time will be ported to the design datums.
Some minors issues are still present, due to the amount of files needed to fix these, it won't be part of this commit, but a future one.
Fixes issue #3893
Removed required access to access the setting controls of the RnD console.
Ports https://github.com/NTStation/NTstation13/pull/982 from NT.
Summary of changes:
- The Rapid Part Exchange Device (RPED) can now install stored parts
into unfinished machines! Once you have installed a circuit board to the
frame, use the RPED to add any required parts contained inside, then
finish with a screwdriver!
- Identical parts in the RPED are now shown in groups, just like a
mining satchel.
- RPED storage capacity increased. It can now contain up to 50 parts,
fewer if power cells are added as well. Maximum weight class of 100
(parts except power cells are class 2).
<b>The storage values are up for discussion. I chose the original values
based on the mining satchel.<\b>
Unrelated:
- The admin-only debug research item now includes plasma and engineering
tech.
- Plays every time the alert level rises, or emergency access is enabled
- Delayed the start of Intercept.ogg a bit so it doesn't overlap with the alert level sound
Head of Staff announcements (ie the ones made via request consoles) are now "Minor Announcements". While head announcements are unchanged, other in-game notifications have been expanded to use their format, including when the Captain joins the game, and early shuttly launch notifications.
They're basically meant to be big and noticable, but not as annoying and spammy as Priority Announcements.
I wanted to include a sound for them, but I've been unable to find one I was satisfied with.
*Reorganised and commented used procs for better visibility/maintenance
*Redid the PriorityQueue class
*Changed the euclidian distance to the byond one (so that we don't calculate float and square root when it's not necessary)
*Made the AStar algorithm use the closed list instead of just filling it
*Some optimization in the open list sorting : last entered is first in case of f ties, slightly less tiles are checked now
*Changes the order directions are checked when adding adjacents turfs to make for more 'realistic' path (read less 'drunk pathing' with lots of diagonals)
*Fixed some turfs densities not being check for diagonal movement
*Closed firedoors are now correctly seens as blocked by the algorithm
*Cleanbots now only moves in cardinal directions, like other bots.
*Updated the info text at the beginning of the file a bit
*Absolutely unrelated : simplified the turf.Bless() proc
Adds sound notifications for Ninja and Wizard Apprentice spawning -- hopefully means fewer afk antags.
Adds a ghostnotice span class, used in the new notify_ghosts proc. Upon creation, things that require ghostly attention (NarSie, golem runes) give more visible messages to the dead.
Retires the 'moderate' span class, which was only used in tomato throwing? Refactors tomato code (this ended up being the meat of this PR, somehow...)
Reorganizes some item definition/procs.
-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