* Makes mutant bodyparts and mutcolors into editable genetic traits (plus a whole shitload of otherwise out of scope code improvements because I just HAD to touch old code)
* Mirror
* genetically-editable mutant bodyparts and colors - skyrat edition
Co-authored-by: Funce <funce.973@gmail.com>
* makes some instances of x^y into x**y because thats what exponents are in dm (#60050)
caught by monster at yogstation13/Yogstation#11703
probably not intended, 2^15 = 13 in dm so dont call this proc more than 13 times sequentially i guess
I have a suspicion that it doesn't matter assuming it gets caught by tick_usage being different but just in case
also fixes two other instances in code shown to me by mso
* makes some instances of x^y into x**y because thats what exponents are in dm
* Update lighting.dm
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Drastic Lag Mitigation Subsystem: SSlag_switch (#59717)
Requested by oranges and inspired by the upcoming event. A new subsyetem, non-processing (for now), aimed at providing some toggle switches that can be flipped as a last ditch effort to save some CPU cycles by sacrificing some non-critical mechanics. Below you can see each individual toggle.
Screenshot of the admin panel:
image
Surely there are more opportunities for toggles I missed, but adding new ones is not very difficult at all.
Why It's Good For The Game
Better performance during extreme pop, I hope.
Changelog
cl
code: Introduces the Lag Switch subsystem for when a smoother experience is worth trading a few bells and whistles for. Performance enhancement measures can be togged by admins with the Show Lag Switches admin verb or enabled automatically at a pop amount set via config.
config: Added a new config var: number/auto_lag_switch_pop
* Drastic Lag Mitigation Subsystem: SSlag_switch
* mirrored the changes to the modular file
Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Fix forensic component inheritance inserting null entries into lists and causing to_chat errors. (#59873)
Fixing the following runtime:
[17:13:04] Runtime in to_chat.dm,88: Empty or null string in to_chat proc call.
proc name: to chat (/proc/to_chat)
usr: Cowboy_penis_monster/(Zackary Mason)
usr.loc: (Telecomms Control Room (105,89,2))
src: null
call stack:
to chat(Zackary Mason (/mob/living/carbon/human), "", null, "", 0, 1, 1, 0)
the forensic scanner (/obj/item/detective_scanner): add log("", 1)
the forensic scanner (/obj/item/detective_scanner): scan(Control Room (/obj/machinery/door/airlock/command/glass), Zackary Mason (/mob/living/carbon/human))
Forensic scanner attempting to add "" to the logs, which eventually gets output to_chat.
Tracked error down to forensic component lazylists and the fun of trying to OR two lazylists together.
* Fix forensic component inheritance inserting null entries into lists and causing to_chat errors.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Correctly pluralize multiple projectiles (#59702)
When something gets hit by multiple projectiles whose names end in "s", an extra "s" gets added to pluralize them. Sadly \s doesn't add the es, so I've made a proc with the other conjugation methods and used it for projectiles.
* Correctly pluralize multiple projectiles
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
* Fixes OOC heart commendations (#59543)
At some point in the last few weeks, the OOC heart commendations that players were polled for during the shuttle's return trip at the end of the round stopped appearing for people on the live servers, even though admin logs showed it was still calculating how many people were supposed to be asked, and it seemed to be working fine on my local server. My only guess is it might somehow be related to #58419 since that was the last PR to touch hearted.dm, even if it's not clear how it might've broken it.
I also neaten up the code for commendations a bit, making it so the procs are easier to follow and have less unnecessary checks. Also, the proc nominate_heart has been reworked to receive_heart, since it makes more sense for it to run on the person receiving the commendation as opposed to the person sending it. It will also properly cancel polling if the "how many to ask" check returns 0 people, rather than always polling at least one.
Edit: Figured it out, #58419 was indeed the culprit, it blindly replaced src with usr without considering that src and usr aren't necessarily the same thing (as it was here, since query_heart() was called by the ticker SS)
* Fixes OOC heart commendations
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
* Ads
* dddd
* a
* a
* a
* Update uniform_digi.dmi
* Update uniform_digi.dmi
* Update uniform_digi.dmi
* Some random new potted plants!
* a
* Update flora.dm
* a
* fixes
* a
* a
* e
* Converts the new span_ procs to macros, fixing a few oversights/errors along the way (#59685)
This is a partial re-implementation of #59645
oranges has expressed a desire for the span_ procs to instead be macros.
I agree. Even though it's a small micro-optimisation, a well contained macro can be self-linting. I've already caught one edge case thanks to this in launch_pad.dm
Similarly, there was an edge case where a [ was escaped inappropriately (that errored out) in watercloset.dm and a case where a ] that should probably have been escaped actually wasn't in robot_defense.dm
I have opted to make an exception to the ALLCAPS convention for these macros.
I have guaraded these macros in parenthesis. In doing so, additional error states can be captured as part of the build process as malformed inputs will then cause errors and prompt further investigation.
* Converts the new span_ procs to macros, fixing a few oversights/errors along the way
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Fixes powerfist randomly not working when using mixed gas types (#59234)
Adds a bit of wiggleroom so QUANTIZE being called on gas_mixture.remove() doesn't randomly and occasionally makes the powerfist think there isn't enough gas. This seems to be the only feasible way of fixing it.
Adds a helper proc to do this generically
* Fixes powerfist randomly not working when using mixed gas types
Co-authored-by: RandomGamer123 <31096837+RandomGamer123@users.noreply.github.com>
* Adds Neon Carpet (#59140)
Adds a couple varieties of neon carpet.
Makes decals care about their plane in addition to their layer.
* 0
* A
* a
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Turns lighting objects into a datum, makes all lighting be performed with an underlay. big maptick fix very good!
* Mirror!
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Funce <funce.973@gmail.com>
* Fix jatum (#59048)
Jatum was not hanling non assoc list very well, due to a try not throwing an error like it should. This fixes that
Note that jatum still cannot be 100% trusted with datum serialisation, as it bugs out in this specific case:
datum/a
var/datum/b/a_datum
var/list/datum/b/a_list_of_datum_b
if a_datum is in a_list_of_datum_b, jatum will not correctly deserialise the full list (as the reference is already seen)
The fix was tested for : https://github.com/tgstation/TerraGov-Marine-Corps/pull/6599
* Fix jatum
Co-authored-by: BraveMole <bsouchu@gmail.com>
* I hate TGUI even if its better than what we had before
* this is why linters exist
* you need to be a Head or the Warden to get items
* does this please you linter?
* foundation
* basic interactions
* yea I can spell okay?
* linters please leave me alone
* begone debug code
* if you are dead, no interacting
* linters leave me alone
* linters are stealing my soul
* forgot to do this
* sound framework, probably wont work though
* max length, and interaction cooldowns
* message can now be a list and minor code improve
* I am a slave and linters are my master
* fix improper static reference
* add json loading/saving functionality
* default for message is now a list
* jsonize def interactions; implement requirements
* bad
* bug fix; CtrlShiftClick to interact
* minor qol fix
* fix CtrlShiftClick and remove debug code
* haha docker has security measures
* this was painful
* why are you in this branch
* begone
* bruh
* begone
Co-authored-by: Matthew <matthew@tfaluc.com>
Co-authored-by: Matthew J <GoldenKeyboard@users.noreply.github.com>
* unlags the ai upload (#59262)
makes the procs for finding unslaved borgs and active ais look through silicon and ai lists respectively instead of the alive mob list, also improves readability of those procs
* unlags the ai upload
Co-authored-by: Fikou <piotrbryla@onet.pl>
* added get content recursive flag check (#59191)
* Fixes bombproof containers not protecting their content in some cases
Co-authored-by: Mickyan <38563876+Mickyan@users.noreply.github.com>
* Balloon alerts - Text for minor actions w/o other feedback (#59130)
Currently only applies to beakers changing amounts as a proof of concept of an action that we can't really provide any non-text feedback on, as opposed to something you could have different sounds for.
Inspired by SS14.
Why It's Good For The Game
In the right place, balloon alerts will let you keep your eyes on the game itself, rather than constantly looking at the chat. This is especially important when chat messages will collapse into each other. This is in most cases warranted, but can make other cases (such as changing beaker amounts) confusing.
Changelog
cl
qol: Changing a reagent container's transfer amount will now give you feedback in the form of text on the container itself.
/cl
* Balloon alerts - Text for minor actions w/o other feedback
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* (code bounty) refactors all uses of Crossed() and Uncrossed() into signals sent to loc, tracked by connect_loc
* WHEW THAT WAS EASY
* Update ammo.dm
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* it is coming
* fuckin' spelling
* more :)
* saaave meeeee
* id/pda work
except roundstart 😠
* kindaworks ehhh
* special request :)
* manifest me baby
* I am a coder with high standards
i can make spaghetti
oh no you're meeting all my standards
* hos is the department dead
* modularisation begin
* /
* manifest sorting
and by that I mean oh god the lists
* manifests, but modular
* plug n play
* module complete
* blueshield ipcs have monitors for heads :)
* fuck
* Update _job.dm
* Update jobs.dm
* more titles
* even MORE
* i forgot the document
* Update jobs.dm
* counsellor and code cleanup
* Liberty. Reason. Justice. Civility. Edification. Perfection.
* MAIL.
* Update jobs.dm
* Update _job.dm
* couple title changes
no bug fix yet gimme time
* i
* CRITICAL FIX
and some modularisation
* Off-duty
* brigoff, and some cleanup
* everybody loves a clown
so why don't you?
* Update job.dm
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Fixes uplink type being unchangeable and radio uplink frequency (#58908)
* Fixes uplink-related bugs
* Actually fixes radio uplink properly
* Fixes uplink type being unchangeable and radio uplink frequency
Co-authored-by: RandomGamer123 <31096837+RandomGamer123@users.noreply.github.com>
* Makes icon2html support mutable appearances again (#58796)
Fixes prayers not having the cute little icon attached to them
* Makes icon2html support mutable appearences again
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Emissive system refactor (#58130)
The emissives system is the system that both lets computer screens and vendors glow in the dark and lets mobs and items block those glows. The current implementation relies on using filters to let mobs and items mask out the glow in the dark overlays on some structures. This is difficult to extend properly without massively increasing maptick. This PR changes the emissives system to use BYONDs native image layering to mask emissive overlays. This should prove to be a more extensible option.
tldr; There exists a system that lets computer screens glow on the dark and lets mobs and items block the glow. It isn't very extensible and this PR attempts to make it more extensible.
How emissive overlays used to work
Currently emissive overlays and the emissive blockers that mask those overlays are handled using a system of inter-masking planes. The emissive overlays and the emissive blockers are placed on separate, hidden plane masters. These are essentially rendering layers and groups. The emissive blocker plane is then used to mask the emissive overlay plane which effectively allows the emissive blockers to block the emissive overlays from being seen. After is has been masked the emissive overlay plane is used to mask the lighting plane, essentially creating holes in the shadows wherever an unblocked glowing thing exists.
Why this is a potential problem
This system works fine. In fact it works great! The computer screens glow, any person or item that winds up on a computer blocks the glow, and everything just works. However, this system runs into some issues when you try to extend it to work on things other than structures. Namely, the current system only supports emissive overlays on structures and emissive overlays that are completely unblockable by any means. As a result, several interesting uses to the system require extending the system.
As a result, if you want to apply emissive overlays to items (which exist between structures and mobs) or emissive overlays to turfs (which exist below structures) you must extend the emissives system to get the emissive overlays and emissive blockers to properly function. Doing this naively, by adding extra emissive overlay and emissive blocker planes and applying all of the relevant masking filters, is not exactly performant.
Maptick is a major contributor to lag and the higher the maptick the more free lag you, the player, get delivered fresh to your client. Trying the naive method resulted in #55782 (1f1b58bb26), an attempt to add glowing carpet to the game. Since the PR revolved around adding glowing carpet it had to extend the emissives system to allow for emissive turfs and emissive blocking structures. Extending the system was done naively as described above and you can see the results. 1.5 times the maptick across the board. Ouch.
So, we know that extending the system in it's current form is impractical. At least if done naively. Thus we are stuck.
tldr; The emissive system currently uses inter-plane masking to allow for emissive blockers to function. This is difficult to reasonably extend without murdering maptick. See #56496 (1f1b58bb26) for the results of naively extending this system.
How emissive overlays are going to work
Alright, so we know that the current system of using planes to let the emissive blockers mask the emissive overlays is difficult to extend in it's current form. The solution is to change how the system works so that it can be extended in a more efficient manner. What we want is a system that allows one set of images to be out masked by another set of images and for the first set of images to be capable of masking the light plane. Preferably, we would also like the ability to interleave the masking effect between emissives and emissive blockers with almost arbitrary layering.
Conveniently, this layering and masking is something BYOND already does to normal items and objects. If we put the emissive overlays and the emissive blockers on the same plane we can use their layers to interleave them almost arbitrarily like any normal structures and items! All we need is a way to mask away the emissive blockers from the resulting rendered plane and we can mask the lighting plane with the remaining emissive overlays.
Luckily, BYOND has provided a single filter that is capable of this task. The color matrix filter. This filter can be used to apply a color matrix to an image! Provided that the emissive overlays and the emissive blockers are different colors we can use a color matrix filter to effectively mask out the emissive blockers from the plane! The resulting emissive plane can be applied as an alpha mask to the lighting plane as it used to, to the same effect. The best part is, we get layering practically for free!
This is exactly what this PR does. It converts the emissives system from the old plane and masking based blocking to a new layer-based system which uses BYONDs native layer handling to mask the emissive overlays.
* Emissive system refactor
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* sanity and bug splat (#58606)
Admin verb podspawn did not add items from specification, which meant the paths to spawn was getting created as a list with a null in it
Paths to spawn was not getting removed properly for var edits
* Fixes Podspawn Issues
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Revert "Fixes Destroy() runtiming when mob had a disease (#52810)" (#58564)
This reverts commit 199a99e839.
This did not fix anything, it merely obscures a blantant bug by supressing the runtime from trying to call methods on an already nulled list.
* Revert "Fixes Destroy() runtiming when mob had a disease"
Co-authored-by: oranges <email@oranges.net.nz>
* Changes corner icon smoothing to use appearance overlays instead of text (#58467)
Splitting this off from some other work where it helps in debugging. This makes corner style smoothing use appearances instead of text to apply overlays which is slightly more performant in the overlays subsystem.
* Changes corner icon smoothing to use appearance overlays instead of text
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* refactors pods, new helper for spawning items from pods through code (#58222)
* refactors pods, new helper for spawning items from pods through code
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Colorblind users can now examine the atmos components to read on what color they are (#58254)
* Colorblind users can now examine the atmos components to read on what color they are
Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
* Sets up ambition logging baseline framework
* That's one line, how did I write it
* Have to rewrite all the logs!
* I don't know what I'm doing anymore
* I think this is the last thing
* Log ambition is now added to config
* Ambition flag now correctly checks for the ambition flag
* Okay /here/ we go
* No more lowercase ckeys in admin chat
* Admin actions are now logged too