Mostly efficiency changes to human icons, little bit of code deduplication in head icons.
The human overlay list has been changed to accept /list so that multiple items can be added to a layer without having to resort to adding overlays to an intermediary object like an /image.
changes:
Human skin color (not tone) is now stored as a hex string instead of a 3-value list.
Human body hair color (resomi only) is now stored as a hex string instead of a 3-value list.
Body markings now play nice with the human icon cache (Fixes#3110)
Hair properly uses its cache now in all cases.
Merged head organs and human icon's implementations of hair icon gen into a proc on human.
Replaced the individual hair and beard caches with a shared composited hair cache used by both head icon and mob icons.
Lists in the human overlay list are now flattened out onto the human, allowing for multiple objects within a single human icon layer without using an intermediary image.
Removed some unused caching lists.
Damage overlays no longer utilize overlays on a blank image for drawing, instead using a list in the human overlay list.
Shoe overlays no longer utilize overlays on the shoe image, instead using a list in the human overlay list.
Surgery overlays no longer utilize overlays on a blank image, instead using a list in the human overlay list.
changes:
Human-type hair (facial & head), eyes, and lips are now cached in SSicon_cache.
Underwear, undershirts, and socks are now cached in SSicon_cache.
Removed forced icon regen for update_body - if this actually did anything, the cache key for these icons needs to be made more detailed.
Organs now fully use SSoverlays to apply overlays (previously they partially used it, which may have caused bugs).
A couple of hair styles (bald, shaved) are pretty common, so this should remove/reduce the overhead of constantly regenerating their icons. Also means that BST's icons only really need to be generated once.
Removes a whole bunch of in world loops.
Reworks SSmachinery to hold two lists: all_machines and processing_machines. all_machines contains all machines 5ever. All of them. Literally. Forever. And ever. processing_machines only contains machines that process with the SSmachinery controller.
I checked most types at runtime on the live server to see whether they're in processing_machines or in all_machines, and did debug to ensure that most machinery ends up and stays in all_machines.
Includes a basic UT to make sure all mapped in machinery types remain within the all_machines list post-init.
changes:
Storage objects can now defer shrinkwrapping of contents until the next stackframe if things are being put in them without using fill() (such as autodrobes & BSTs)
SSair init properly yells at the admins when it's done.
Ports a new type of reference from bay: weakrefs.
They validate type like hard-refs, but don't block GC like soft-refs. Performance-wise are worse than both, but generally more convenient than softrefs.
changes:
Body marking icons are now cached in SSicon_cache.
Renamed the body-hair cache (used only by Resomi) to make it more clear what it is.
Humans now use SSoverlay for applying overlays, though they force-compile instead of waiting for it to tick.
Fixed a bug where getFlatIcon() did not work properly with SSoverlay overlays.
changes:
Replaces a lot of in-world loops with more specific lists.
Recipes are now copied in SSmachinery/Recover()
Fixed bad sorting on all_areas list.
Added skeleton Destroy() to SMESes as they did not have one and are failing to GC.
Seems to shorten SSatoms init a bit, maybe from removal of in-world in MULEs?
changes:
Fixed a bug where non-clothing custom loadout items would not spawn.
Fixed a bug where latejoining AIs would spawn at CC / Cryo instead of the core.
Added more SSjob debug statements.
Fixes#2942.
changes:
Openturf now uses ~200 MB less memory when sunlight is enabled.
Openturf now handles recursive OO copy better.
Lighting objects now update their existing color list if they can instead of creating a new one each time.
The sun can no longer fall out of the sky.
Openturfs should be a little gentler on clients.
Openturf darkening factor can be more easily changed.
Reset-Openturfs no longer hangs SSgarbage.
changes:
Lists are no longer created every time a movable moves (!)
Lists are no longer created every time a datum is destroyed (!)
Observation events now properly clean up references.
Removed the unused task_triggered event.
changes:
Holomaps now use an area flag instead of a proc to determine which areas do not draw on the holomap.
The supply shuttle once more has a roof.
The supply shuttle's landing zone is now dynamically lit.
Turfs only generate visibility updates on Initialize() after mapload - visualnet is not initialized by then anyways.
Merged /datum/gas_mixture/(init) into /datum/gas_mixture/New().
Converted a ZAS proc into a macro.
Made ZAS attempt to remove a turf from a zone instead of always rebuilding it in a certain case.
Macroized two misc procs.
Fixes#2947.
changes:
Added a isopenturf() macro, equivalent to istype(thing, /turf/simulated/open).
Converted most/all instances of istype(/turf/simulated/open) to isopenturf().
Made update_above()' aware of queue status & inlined a proc-call.
Implements mixed secret as a gamemode. It's another snowflake mode which taps into more snowflake functions. :ree:
Went over all references to "secret" and swapped them for a macro where applicable. SSticker.hide_mode now holds a reference to which type of secret was picked. "random" gamemode will now pick from both secret lists for added randomness!
Implementation of https://forums.aurorastation.org/viewtopic.php?f=18&t=8253
changes:
Clipboard overlays are now a little gentler on SSoverlays.
Ported potential performance improvements for getFlatIcon and listclearnulls from /tg/.
Icon smoothing now clears the base icon by default; SMOOTH_NO_CLEAR_ICON disables this behavior.
Potential SSoverlays performance improvement from /tg/.
Speculative fix for #2826.
changes:
Removed the privacy poll as it is unused.
Observing no longer creates a new mannequin, instead fetching one from SSmobs.
Observer ghosts now have a description again.
Converted new_player.dm to absolute pathing.
Fixed a bad init on holomaps.
Removed a sleep from light fixture Initialize().
Added a queue length stat to the MC panel for Icon Smoothing.
Halved time taken to create lighting overlay objects.
Species & body marking lists are now sorted alphabetically.
Commented out calls to lighting profiler to remove overhead of string interpolation in some procs.
Blood dries instantly if present during mapload instead of setting a timer.
Dramatically speeds up boot with testing (MC_TICKLIMIT_INIT > 100) configs; stoplag() would penalize procs that go over 100% tick-usage by delaying them further. This is not required during server boot & the lobby, and resulted in significantly longer boot times.
This PR ports a fix from /tg/ that forces stoplag() only sleep 1 tick if it sleeps during server boot, as well as adjusting the example config to be more suited for testing.
changes:
Fixed a bug where items overflowing from EquipCustomDeferred would not be passed to EquipItemsStorage.
Added debug lines to EquipCustom, EquipCustomDeferred, and EquipItemsStorage.
Fixes#2762.
Ports vorestation's implementation of /vg/'s holomaps.
Holomaps are an in-game object that shows a map of (most) of the station with departments highlighted, to aid in navigation around the station. Maintenance, high-security, and asteroid areas are excluded from the maps.
Adds approximately 1.5 seconds to server boot to generate maps.
Holomaps were added at:
Arrivals shuttle dock, north of checkpoint.
Surface level lift.
By entrance to security on main level.
North of the kitchen.
South of Engineering, near tech storage.
Beside the IA office.
Near the lift on each sub-level department.
Experimental tweaks to how parallax's movement hooks work; the current ones appear to be fairly expensive for all movable movement, doing locate(/mob) in src on every forceMove(). This PR creates a new lazylist (contained_mobs) containing a list of every mob directly contained by an object. contained_mobs is updated on mob/forceMove().
Not sure how to handle mobs located deeper than directly inside an object.
Only alternative to this I see is to make SSparallax tick.
changes:
Queued icon updates now update the atom's associated openspace overlay or openturf.
update_oo() renamed to update_above(), and moved up to /atom. Only meaningful on /turf (updates above openturf if present) and /atom/movable (updates associated OO if present).
Demoted SSfalling to a regular subsystem (1ds tickrate).
Increased SSlighting's tickrate from 2 ds to 1 ds.
changes:
Fixed various GC failures.
Converted integrated radios (used in PDA cartridges) to Initialize.
Added a missing Destroy to the QM PDA cartridge's integrated radio.
Fixed a runtime when mineturfs with no ore were destroyed by explosions.
Fixed a runtime when explosions attempted to Z-travel.
Minor radio performance improvements.
Converted radio globals to defines.
Changed the Security-I and Medical-I frequencies to use the same colors as their respective departments.
Fixes#2646.
Adds a dock at arrivals for the mercenary shuttle to dock, also places the admin shuttle to a dock in the bridge.
Also, fixes the belt at robotics at last and adds a hull shield to engineering. And adds a hacked candy vending to the wizard base and ninja spawn, together with a suit cooling unit for ipc ninjas.
changes:
Fixed an issue where time-delta calculations in SSeffects were completely broken.
Doubled the tick-rate of SSeffects, which fixes some issues with space bike ion trails & makes sparks disappear a bit faster.
The announcement system just got an upgrade.
Also made the delta siren more concerning.
And made a custom slightly annoying sound for the night mode announcement.
Updates the DMM Suite from /tg/ upstream, adding the ability to load tgm format maps, tick-checks, and better compatibility with SSatoms / Initialize().
Also adds some framework for random ruin generation, though it is not functional yet.
Halves the max duration of screen shaking and adjusts the bottom line a bit. Previously, pretty much any explosion would have max intensity screen shaking because the minimum threshold was so high, and likewise for duration.
Standing right next to the epicenter of a sufficiently large explosion (I tested with size 16 bombs, the standard) will still cause some hefty screenshaking, as well as blindness and flash. However, standing at the very edge of an explosion, or standing next to a very small explosion's epicenter (such as an exploding durand or a frag grenade) will have only minor - but still notable (as all screenshaking is) screenshake.
Features:
Removal of BOREALIS (python module) as it's not used.
Removes ToR ban feature in lieu of IPIntel.
New BOREALIS config to alert staff if server starts as hidden.
Adminhelps now inform admins on discord if dibsed (when they were sent to discord anyways).
Adds hub visibility to the server access control panel.
Adds mirror ban spotting via ban panel. It now redirects to the linked ban if one is found.
CCIAA now get alerted as to how many of them are online and active when receiving faxes and emergency messages via Discord.
Removed unused C/C++ libraries. The socket_talk module is a generic UDP shipper, of which Arrow implemented a better version. lib nudge is not even compiled for use. lib_nudge module is uncompiled and no longer used, as we use cURL for the bot.
Removed depracted APIs and config settings related to the previous point.
Whitelisted jobs now appear properly in the job selection window as [WHITELISTED].
Job ban reasons can now be viewed from player preferences window.
Await admin approval for final CCIAA requests and implement. RIP CCIAA.
Fix age bans for jobs and antags (dynamic ones, ofc).
Implement https://forums.aurorastation.org/viewtopic.php?f=18&t=8283
changes:
Machinery now uses machinery_process() instead of process(), allowing machines to be put into SSprocessing-style lists in addition to the machinery list.
Automatic power calculations now involve less proc-calls.
This PR unifies the various manual implementations of custom loadout equip into three procs located inside the job subsystem, as well as updates all custom loadout code to use the new procs.
Fixes custom loadout items not overriding job items in character setup.
changes:
Machines can now be in processing-type subsystems while also being in the machines list. Yes this means you can get two different subsystems to call process(). No you should not do that.
The machines list will prevent duplicate entries from being added.
Printing now uses timers instead of spawn.
SSassets now actually sends the NT logo image to clients.
Ports the bay's character preview system, which is far better to observe aesthetic changes in the character creation, also solves the issues such as markings don't showing up at the character selection menu.
changes:
Reduced power usage of oven and fryer.
Reduced warm up time of oven and fryer.
Oven now heats up to exactly 200C instead of to 198.85C.
Fixed some issues with cooking appliances' sanity checks.
Recipe datums are now initialized once instead of per-appliance.
Moved some cooking verbs to the Objects tab instead of a null category.
It's harder to mess with the shuttle and after failing to return so many times it boots people off. It also connects the airlocks to distro and gives it a backup canister.
Adds a SOFTREF macro because it's an actual PITA to write out. Refactors all applicable usecases of it to use it. I've left out some NanoUI stuff because you know my preference at being explicit when needed.
changes:
Minor performance tweaks & light fixes to wall shield generators.
Added more subsystem targets to the subsystem panic verb.
Speculative fix for #2532.
Fix non-human voidsuit helmets not having a light overlay on the on-mob sprite.