* 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>
* Fixes full unrestrained interaction while buckled to a xeno nest. (#58617)
* Fixes full unrestrained interaction while buckled to a xeno nest.
Co-authored-by: Seth Scherer <supernovaa41@protonmail.com>
* Fixes a bunch of invalid icon states. There's more, but my brain isn't fried enough for that. (#58608)
gibup1 and gibdown1 don't exist
items_and_weapons.dmi doesn't have an icon state called his_grace_ascended, in fact nothing does
items_cyborg.dmi doesn't have an icon state called laser, it does however have an icon state called
laser_cyborg
no porta_turret has an icon state with the _unpowered suffix, in fact I'm convinced none of them ever have
* Fixes a bunch of invalid icon states
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Allows you to repair trophy cases (the ones found in the library) (#58588)
Apparently you haven't been able to repair these for the last four years.
Fixes#27926 (Trophy cases being perma broken)
All other display cases can be repaired, why shouldnt this one be able to.
* Allows you to repair trophy cases (the ones found in the library)
Co-authored-by: Seth Scherer <supernovaa41@protonmail.com>
* Tank holders can be anchored and have better examine descriptions. (#58348)
* Tank holders can be anchored
* Better description
* One word
* Requested change
* Tank holders can be anchored and have better examine descriptions.
Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
* REOPEN: REVERT: Changes faster fireman carrying from a trait on gloves to a skillchip (#58268)
Co-authored-by: SuperNovaa41 <supernovaa41@ protonmail.com>
* REOPEN: REVERT: Changes faster fireman carrying from a trait on gloves to a skillchip
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: SuperNovaa41 <supernovaa41@ protonmail.com>
* Firelocks can't close if an holofan is placed on their turf (#58332)
* Firelocks can't close if an holofan is placed on their turf
Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
* Allows the connect_loc element to have a listener different from the tracked object (#58276)
* Allows the connect_loc element to have a listener different from the tracked object
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* Placing a fireman carried person onto a table no longer harms them (#58147)
Previously, clicking on a table with a fireman carried person while not in combat mode would start a do_after(), then harmfully smash the person you fireman carrying into the table. This harmful smash has been replaced by your character merely placing the fireman carried person onto the table, like what happens when you click on a table while not in combat mode while you have someone in a grab. You can still click on a table with a fireman carried person while in combat mode to perform a limb smash, if you wish.
* Placing a fireman carried person onto a table no longer harms them
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
* RCD now rebuilds existing constructs faster and with less resources (#58029)
* RCD now rebuilds faster
* Reconstructing now costs less
* Fix _
* Remove unused flag, use helper proc
* Add sound
* Remove previously useless, now inaccurate comment
* Add MIN_COMPILER_VERSION warning
* RCD now rebuilds existing constructs faster and with less resources
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Persistence now cleans up json entries (fixes a lot of runtimes involved) (#58084)
* super duper persistence cleaning
* compiles now, much better written
* Persistence now cleans up json entries (fixes a lot of runtimes involved)
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* changes most uses of SSvis_overlays.add_vis_overlay() inside of update_overlays() to true overlays (#57985)
* changes most uses of SSvis_overlays.add_vis_overlay() inside of update_overlays() to true overlays
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Layer overhaul (#57915)
## About The Pull Request
Changes up some layer and plane defines for no particular reason lol
## Why It's Good For The Game
Planes actually override layers, and layers control ordering within planes. A lot of the usage of plane and layer was wholly unnecessary. This refactor helps future maintainability while also being needed staging for _future features._
* Layer overhaul
* aaaaaaaaa
a
Co-authored-by: Rob Bailey <actioninja@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Minor tramstation and train-rail-fluff fixes (#57639)
Fixes an incorrectly-shifted sprite for floor tram rails and adds some missing tram-rail fluff objects
Also does some minor renaming (railing -> rail)
cl
fix: Nanotrasen railroad engineers have done some minor repairs to their in-station tram rails.
/cl
* Minor tramstation and train-rail-fluff fixes
Co-authored-by: Emmanuel S <mrdoomboyo@gmail.com>
* Adds a plumbing layer manifold (#57494)
Adds a multilayer plumbing manifold, I also murdered the multilayer duct
You can now alt-click the plumbing RCD to change the layer it prints. I made a whole thing where right clicking changed the settings and you could use that to change machinery aswell. I even did that with the plunger, it was absolutely beautiful. Anyway that drained the life out of me because apparently there's no attack_obj_secondary and afterattack_secondary ALSO called attack_obj (left click). I just hate whoever made it with intensity
Plumbing now uses three layers. They should be easier to navigate. I tried to make layer connecting the same as cross-color connecting, but that would take more of my soul then there is to take
* Adds a plumbing layer manifold
Co-authored-by: Time-Green <timkoster1@hotmail.com>
* Ice cream revamp: Ice cream is a component and cones can hold multiple servings of ice cream now. (#57415)
* Ice cream rework WIP
* I'm done!
* i'll deal with my verbose engrish at a later date. I'm dead tired.
* linter aaaaaa
* Take a bite!
* FINALLY, A COMPONENT!
* ghost macro.
* Review, typos, beheading of a lame comsig.
* Typo. Now I'm self-obliged to test it again.
* It works.
* Ice cream revamp: Ice cream is a component and cones can hold multiple servings of ice cream now.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes items in toilet cisterns being deleted / null'd on deconstruction (#57864)
* banished
* drop loc
* Fixes items in toilet cisterns being deleted / null'd on deconstruction
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* tram hotfix hopefully maybe (#57646)
The cause of the blender was the fact the UI wouldn't update properly if left open and you walked away, meaning you could tell the tram to go to a destination it was already at and brrrrrrrrrr.
TGUI really isn't my strong suite and forcing it closed guarantees the info on the UI is updated so no blender.
* tram hotfix hopefully maybe
Co-authored-by: MMMiracles <lolaccount1@hotmail.com>
* Some explosions code cleanup (#57493)
Clears out two deprecated explosions systems (explosion ids and explosion levels)
Refactors a bunch of contents_explosions procs to be maybe slightly faster.
Cleans up a bunch of ex_act code.
Slightly cleaner code
A few less unused vars on /atom and /turf
* Some explosions code cleanup
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* More harddel fixes + Tram sanity check (#57828)
* Fixes a harddel caused by the FUCKING MACHINE VAR WHAT THE FU-
* Fixes a tram related harddel, the proc that removed things from the riders list worked on stuff passed in by Uncrossed, but failed with the qdeleting signal. I've made a wrapper proc to better support these things, added signal handlers, and removed an if check that hid nulls (If it's breaking I need to know)
* More harddel fixes + Tram sanity check
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Tramstation: choo choo MORE MAP COMIN' THROUH
* Tramstation: Skyrat Edition (#4104)
* Decals Fixed
* Modularity? Whatever
* Fuck me if I need to make a second PR for this
* Blueshield + Cryo + Ian Fursuit
* Automatic changelog generation for PR #4104 [ci skip]
Co-authored-by: MMMiracles <lolaccount1@hotmail.com>
Co-authored-by: Cheshify <73589390+Cheshify@users.noreply.github.com>
* Replace some turf in range() with RANGETURFS and fix(?) bspace trauma (#57566)
* Replace some turf in range() with RANGETURFS and fix(?) bspace trauma
Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com>
* Adds Directional Presets To Several Common Wall Mounts For Mapping (#57463)
* Adds Directional Presets To Several Common Wall Mounts For Mapping
Co-authored-by: Paxilmaniac <57122098+Paxilmaniac@users.noreply.github.com>
* At first i thought that i was being forced to add a feature 🤮 but then i realized i was being encouraged to refactor 😄. Electrified chair is now a component instead of a failure (#57117)
* At first i thought that i was being forced to add a feature 🤮 but then i realized i was being encouraged to refactor 😄. Electrified chair is now a component instead of a failure
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* a
* :hhh:
* reworks hotel
* iron repath eee
* modularize
* arcade
* cables
* fills unused areas
* does this fix it 🤔
* pipe
* plants and office touchup
* bruh
* manager role
* adds a little carpet
* door access reqs
* original hotel revert
* gitkraken hates me
* swaps out flooring, adds some more lights
* plating
* modularisation
Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com>
* Rework plumbing reaction chamber, purity support (#57071)
Currently does four things:
The reaction chamber now supports purity! It has a yellow (acid) and green (basic) input for buffers, aswell as a setting to automatically dispense either an acidic or alkalic buffer when above/below a certain pH! Now you can make a 100% pure meth factory! The buffer connects are on an alternate layer.
Probably going to be less loved, but I removed the reaction chambers ability to pick reagents from the net. Instead, it will pull untill a set volume is reached. Then it'll start reacting. While this means that players will have to be more creative and use a wider array of machinery.
Also new machine! Buffers! They fill the hole that reagent chambers left. They can be set with a threshold volume and will only start putting out chems when ALL of their neighbouring buffers also are also above this threshold. You might have a lot of one chem and have to wait for a more specialized chem to be produced, and with the cleverness of reaction chambers gone, bufferers can do just that: wait.
I also removed all but two layers. I want to make it obvious what layer the buffer connects are on. Also layers are basically unusable and I'm gonna give them a rework very soon. I'll put the things back in then when they actually have something to contribute
* Reworks plumbing reaction chamber, purity support
Co-authored-by: Time-Green <timkoster1@hotmail.com>