* Move conveyor belts to their own system, rename conveyor2 (#62911)
Renames conveyor2.dm to conveyor.dm, and removes the historical comment about "new conveyor belts". As a reminder, comments should be about what the code is now, not what it used to be. (Muh history -Lemon)
Moves conveyor belts to their own SS with an identical wait. It is very common, as an admin, for me to want to adjust conveyor belt processing, either to make it faster (for laughs) or to disable it when it is causing heavy lag. It is very difficult to do this (especially the former) because it just uses fast process.
* Move conveyor belts to their own subsystem for easier disabling, rename conveyor2 to conveyor
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Locker Shoving Re-Reloaded (#62618)
* Locker Shoving Re-Reloaded
The signals here were weird, converted them to connect loc. I did my best to make sure behavior matched what
existed pre arcane pr
Unshat shove code considerably, believe it or not it used to be worse.
* Locker Shoving Re-Reloaded
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Locker based combat, evolved. (#60000)
* Locker bullying, reloaded.
* Start work on refactoring the whole gosh damn thing
* I'm stuck.
* Checkpoint
* Restart work: Lets get this scrap to compile
* Workin on it, having to swtich back to walls project
* Revert "Restart work: Lets get this scrap to compile"
This reverts commit baa1814fd1ed2c86f2009a54a90d9306264762fc.
* Compiles (Check), Signals are backwards (Fix)
* 90% complete yet again I have grown powerful
* I HAVE GOT IT WORKING PERFECTLY
* Removes a small part of commented code
* Perfection*
* Locker based combat, evolved.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Modernizing Radiation -- TL;DR: Radiation is now a status effect healed by tox healing, and contamination is removed
* Fixing conflicts
* Makes it compile, yeet all the RAD armor from everywhere (thanks RegEx!)
* Removing more lingering rad armor (woo)
* Damnit powerarmors
* Bye bye rad collectors!
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Refactor /turf/var/intact (#62331)
Turfs have a variable, intact, which conflates three meanings:
Determining whether there's something that can be pried out, such as directly with a crowbar or indirectly with a tile stack and a crowbar off-hand.
Determining whether underfloor pieces are visible.
Determining whether underfloor pieces can be interacted with - by players with tools, through interaction with effects like chemical acid, or foam.
When plating is hit with a stack of tiles, /turf/open/floor/attackby checks whether the turf is intact, and if so, ends the attack chain regardless of whether or not the attempt to hotswap a turf (with a crowbar) is successful or not. However, turfs which want the underfloor to be visible - such as catwalks and glass - set the intact variable to FALSE, and so can be repeatedly placed over one another, as if they were the first tile to be placed over the plating.
This refactors /turf/var/intact into two distinct variables:
/turf/var/overfloor_placed, for whether or not there is something over plating.
/turf/var/underfloor_visible, for whether or not the various underfloor pieces should be invisible, visible, or both visible and interactable.
All references to /turf/var/intact have been replaced with an equivalent overfloor_placed or underfloor_visible reference, depending on which check is appropriate. underfloor_accessibility can take one of UNDERFLOOR_HIDDEN, UNDERFLOOR_VISIBLE, or UNDERFLOOR_INTERACTABLE. This prevents cases such as acid foam or tools phasing through glass floors to affect the underfloor pieces underneath, and covers all kinds of unusual, not-wiring-visiblity usage such as Holodeck completeness, Revenant interaction, or station integrity checking.
* Refactor /turf/var/intact
* Thank
Co-authored-by: esainane <esainane+github@gmail.com>
Co-authored-by: Funce <funce.973@gmail.com>
* no more regal rat runtimes, and, cheeeeeeeeeeeese can now be eaten by it (#62032)
* no more regal rat runtimes, and, cheeeeeeeeeeeese can now be eaten by it
Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com>
* Adds the interrupt signal to the delay component, reorganises BCI files and circuit code improvements (#61393)
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Adds the interrupt signal to the delay component, reorganises BCI files and circuit code improvements
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Fix disposal eject speed (#61255)
Disposal outlets no longer constantly shoot you out at an incredibly dangerous speed, and no longer deal a base 35 damage + guaranteed dislocation/likely hairline fracture when you hit a wall or other person. Instead, they're back to the old 10 brute damage they were at last year, though you can still multitool/emag them to make them shoot out things faster....
* Fix disposal eject speed
Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com>
* Refactors how components are triggered and refactors how ports are ordered (#60934)
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Refactors how components are triggered and refactors how ports are ordered
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* EVEN MORE HARDDEL FIXES (#60228)
Fixes a ton of harddels, sourced from #59996
I think this brings us down to like, ~100 per round from ~200, with only like 20 of those being proper hell failures. I've seen harddel profiles below 1 second of total cost. Feeling good.
See you on the other side
Makes the cryopod control computer into a weakref, never trust bee code
Converts brig door timer internal lists to weakrefs
Fixes a harddel caused by qdeling a motion sensitive camera after it had left its source area, jesus christ why didn't we do this already holy shit
Converts the radio implant ref held by the antenna mutation to weakrefs because it isn't reliably cleaned up, makes the radio implant actually qdel its fucking radio
Removes the target var from the throwing datum, it does literally nothing and just exists to cause harddels, mostly for the singularity
Fixes a cable harddel sourced from things that try to enter blueprints after smoothing, but before roundstart. IE, shuttles. Removes shuttles from the blueprints
Fixes emmisive blockers being added post qdel
Removes some manual ghosting from cryopods, I initially did this for harddel reasons, but I figured out a better fix for that. I'm now doing it because it's got this really strange logic for like "re-entering the game" that doesn't actually link to what the ghostize proc does. We should remove this at some point
Fixes robot hud objects harddeling due to hanging refs
Fixes buildmode related hanging refs, I'm coming for you admin team
Fixes a few instances of trying to add the forensics component post qdel, hhhhhhhhhhh
Fixes some split personality harddels/weirdness
Replaces a use of disconnect_duct with an init qdel hint, I suspect there's more issues with duct harddels, I've seen some odd logs about ahhh the area_contents list, but we can worry about that later
Makes teleporter targets into weakrefs, properly types them as /atom
Makes frequency devices into weakrefs
Makes cameras remove themselves from camera nets on Destroy
Makes tgui ui datums implement destroy, this means if I ever see one hang a ref to user or whatever, I know there's an error with calling close() properly. I've seen this harddel once, but not after this change so I assume there was some error with close(). IDK maybe this is a papering over? Would have to ask @ stylemistake
I've seen logs of beartraps being in world post del, putting a return there just in case. The same is true of nerf darts, but I haven't really looked into that yet
Makes a shoe's ref to untying alerts a weakref, yes this is needed.
Moves clearing client_in_contents to the Login of the new mob. This prevents doing things like ghosting someone before a mob qdel causing harddels
Fixes a harddel set sourced from adding a status effect to a qdeleted thing. Is this an error? I'm honestly not sure.
Converts bsa code to weakrefs
Converts the partner var of heat exchangers to weakrefs
Converts camera assemblies to weakrefs
Fixes some dumb behavior with ammo casings and assuming you'll be on a turf post Destroy parent call
Fixes? merger related harddels, you were never cleared from your own members list, so origin objects would end up making a new list, creating harddels. Potential input from @ ninjanomnom about the logic
Chasms store a static list of "falling atoms", which only exists for chasms that go somewhere else. This list wasn't being cleared of qdeleted objects, which is what happens when you fall in most chasms. Fixes this, and converts the list to weakrefs.
Fixes some runtimes in both sheet code, and the weather listener element. This is here because runtime spam made testing more of a pain, didn't think it needed its own pr
Fixes colorful reagent harddels sourced from reagents that were qdel'd before roundstart. I'm only like 50% sure this actually got it, but the issue may have been solved by #60174, so eh
Turns the nuke op antag datum's ref to the war button into a weakref
Fixes some holopad code that was not nulling refs all the time
Converts camera bugs to weakrefs, this was the result of the bug being "reworked" like 6 years back without taking the existing ref clearing into account. Whole item needs a redo, but this'll do for now.
Ensures that the both pulling and pullee refs are cleared on Destroy
The crew monitor held all users in a non clearing list, makes that list a weakref because I hate everything
Oh and I removed all sources of gas_mixture qdeletion, I'm kinda unsure on this since it's not technically supported, but any harddels from it might? indicate something going wrong with like, gas passing logic. I'd like @ MrStonedOne's thoughts, since I trust him to call me an idiot if I'm wrong.
<!-- Please add a short description of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding. -->
## Why it's not good for the game
I crashed sybil like 10 times to get this data, I'm gonna put it to good use. Don't think you're safe sybilites, I'm coming for you.
* EVEN MORE HARDDEL FIXES
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Adds set_density()
Fixes one instance of a duplicate density assignment on an object.
Comments two hacky usages of density which will have to forgo using the setter for now.
Lets us append code to the event of density changing.
Pretty sure this is leading up to some multitile object thing -Lemon
Co-authored-by: Rohesie <rohesie@gmail.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>
* Convert wrapping paper sprites to GAGS (#59374)
Wrapping paper has been put through GAGS. You can set the base color and ribbon color with right click, then apply it to a package.
Co-authored-by: coiax <yellowbounder@ gmail.com>
* Wrapping Paper GAGS
Co-authored-by: RaveRadbury <3204033+RaveRadbury@users.noreply.github.com>
Co-authored-by: coiax <yellowbounder@ gmail.com>
* Some associated move fixes (#59299)
* Moves the loc assignment for null doMove target locations to before exited() is called, making it consistent with other uses of the proc, and fixing a harddel caused by deleting something inside of an open storage component. The component assumes that the removed object has already exited its contents, and so readds it to the screen, causing PAIN
Co-authored-by: Kylerace <kylerlumpkin1@ gmail.com>
* Some associated move fixes
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Kylerace <kylerlumpkin1@ gmail.com>
* Removes some boiler plate from working with atmos code (#58885)
Everything that called turf.assume_air and turf.remove_air was already updating turfs, and all that not tying
the two together did was add more boiler plate, and break things when people forgot about it.
This shouldn't add any overhead outside of hotspots, but I think that's trivial
* Removes some boiler plate from working with atmos code
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* RPD can destroy broken disposal pipes (#58814)
Aims to speed up the replacement of broken disposal pipes by making it less demanding on the player. Hopefully this will lead to it happening more often. Does this by:
Allowing the RPD to destroy broken disposal pipes
Automatically destroying broken disposal pipes before trying to secure new ones of the same direction over the top of them
Automatically crowbarring floor tiles while trying to secure disposal pipes over the top of them if a crowbar is held in the offhand
Speeds up the rate at which broken disposal pipes can be replaced.
At the moment to replace a disposal pipe you have to weld each end of the broken pipe. It requires fuel, activation of eye protection and three seconds per end. This becomes time consuming when you have a lot of pipes to replace. It only serves to further disincentivise repair of everything but small breaches.
This PR lessens the requirement to only an RPD and half a second per end. You can also just place a pipe of the same direction over a broken pipe and the ends will be deleted for you. If you place a disposal pipe over a broken pipe that's above a floor tile while holding a crowbar, the floor tile will be removed so the RPD can secure the pipe. All that's left is welding the pipe and replacing the floor tile.
Hopefully this will lead to more people replacing disposals. There's still undesirable difficulty in finding out where pipes went and which ones were used (if you can't figure it out the only solution is making do or looking at the .dmm -- usually it just doesn't get fixed) but that's out of scope for this pull request. Replacing disposal pipes is just one of several jobs involved in repairing hull breaches that players don't want to do. Hopefully this eases the tedium of replacing obvious pipes.
* RPD can destroy broken disposal pipes
Co-authored-by: cacogen <25089914+cacogen@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>
* 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>
* 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>
* Fixes cargo barcode payouts paying 50x what the sale is worth (#56914)
* Fixes cargo barcode payouts paying 50x what the sale is worth
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
* Refactor ventcrawling flag into traits (#56620)
Instead of using var/ventcrawling on `/mob/living`, it is now instead
two traits. It functions in exactly the same way.
This now ensures that manipulation of ventcrawling will not clash with
any other manipulation, such as a proposed genetics ability to give
people ventcrawling, versus abductor organs.
---
Intended to be a pure refactor, no functionality should change.
* Refactor ventcrawling flag into traits
* Update true_changeling.dm
* Update true_changeling.dm
Co-authored-by: coiax <yellowbounder@gmail.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* reverts Adds Neon Carpet (#55782), it appears to have been causing massive amounts of maptick (#56496)
It appears to have been causing massive amounts of maptick, this'll need a testmerge so we can test my hypothesis
* Reverts Adds Neon Carpet (#55782)
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* fixes rod duplication bug with reinforced floors and disposals (#56246)
fixes the infinite rod bug where disposal pipes ejecting things under a reinforced floor will break off a rod, but not actually remove the reinforcement, allowing for loops to get infinite rods and by extension metal material. this forces reinforced floors to break when this occurs
if people make a new tile that this doesn't want to be forced they can code it, i ran into some issues about actually spawning the stack item not working properly regardless of checks about whether the floor can pop or not, so its just going to be forced at all times
* fixes rod duplication bug with reinforced floors and disposals
Co-authored-by: 小月猫 <alina.r.starkova@gmail.com>
* [READY] Creates Datumized AI and applies it to monkeys (#55238)
New AI system, implemented for monkeys.
* [READY] Creates Datumized AI and applies it to monkeys
Co-authored-by: Qustinnus <Floydje123@hotmail.com>