* Turns existing comments in the file DMdoc comments, adds like one new comment (#58894)
Co-authored-by: Your mother <mothmilk666666666666@ tfwno.gf>
* Turns most extant comments into DMdoc comments and adds one new comment for a variable in code/game/objects/structures/fluff.dm
Co-authored-by: interestingusernam3 <51925758+interestingusernam3@users.noreply.github.com>
Co-authored-by: Your mother <mothmilk666666666666@ tfwno.gf>
* Fixes a fuck ton more harddels (#58779)
Redoes how geese handle eating shit, it was fucking stupid and caused harddels, and while this method is technically slower in the best case, it's a fucking goose
Fixes action related harddels, I hate how they work but at least this way they won't hold refs.
Fixes the hierophont causing its beacon to harddel
Removes the M variable from megafauna actions, it was used like a typed owner and caused harddels, so I burned it
Fixes target and targets_from harddels, replaces all setters of target with LoseTarget and GiveTarget, which should help maintain behavior. I'm not sure if this breaks anything, but if it does we should fix the assumptions that code makes instead of reverting this change
Fixes more area_senstive_contents related harddels, we need to allow the mob to move before clearing out its list.
Fixes marked object harddels (I'm coming for you admin team)
Fixes a language based human harddel
Fixes managed overlay related harddels (This was just emissive blockers, but I think this is a good safety net to have. If we clear the overlay list we should clear this one as well)
Fixes bot core harddels, I hate the fact that this exists but it has no reason to know who its owner is
Adds a walk(src, 0) to simple_animal destroy, it's the best bang for the buck in terms of stopping spurious harddels. Walk related harddels aren't that expensive in the first place, since byond does the same thing I'm doing here, but this makes finding mob harddels easier, so let's go with it
I fixed another source of part harddels, I hate fullupgrade so much
Fixes all the sound loop harddels
* Fixes a fuck ton more harddels
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes bitwise flag negation errors. (#58870)
These have been in the codebase for many years. Love, ZeWaka
* Fixes bitwise flag negation errors
Co-authored-by: ZeWaka <zewakagamer@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>
* Convert PDAs to GAGS (#58844)
* Convert PDAs to GAGS
* Leave the clown PDA as it was
Co-authored-by: celotajstg <celotajstg@ users.noreply.github.com>
* Convert PDAs to GAGS
Co-authored-by: Celotajs <81999976+celotajstg@users.noreply.github.com>
Co-authored-by: celotajstg <celotajstg@ users.noreply.github.com>
* Lighter Grammar Fix (#58813)
* Sing -> Singe Replacement
Self explanatory. Replaces sing with singe
* Removes Scorch, Just In Case
* Lighter Grammar Fix
Co-authored-by: Beatrice <83368538+SpaceDragon00@users.noreply.github.com>
* RCD repairs grilles before adding windows to them (#58812)
* RCD repairs grilles before adding windows to them
- Grilles need to be clear of unanchored items for a window to fit on them
- Attempting to build a window on a grille with unanchored items on it will automatically move 20 of them to your tile
- If more than 20 items are on a tile, adding the window will fail (but you can just do it again to move 20 more)
- Grilles no longer rely on a subtype to break
* Uses text macro thing for simpler code
* RCD repairs grilles before adding windows to them
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
* Fixes gib code creating more then one rot component per gib (#58838)
Co-authored-by: Fikou <piotrbryla@ onet.pl>
* Fixes gib code creating more then one rot component per gib
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Fikou <piotrbryla@ onet.pl>
* PDAs reset the alert overlay when you read your messages (#58820)
* PDAs reset the alert overlay when you read your messages
Co-authored-by: Tom <tomforde4@gmail.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>
* fixes stuff made with bronze sheets deconstructing into tiles or not being able to make bronze golems (#58708)
* fixes poopy bronze tiles sstuff
Co-authored-by: Fikou <piotrbryla@onet.pl>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Converts the atmos senstive component over to connect_loc (#58266)
* Makes all uses of atmos_senstive pass in mapload as context
* Converts atmos senstive to connect_loc, does some general cleanup to the element, and makes it check the state of the tile the thing is on assuming creation didn't happen as a part of map loading
* Updates connect loc to match the new arg list
* Converts the atmos senstive component over to connect_loc
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Plants don't get their positions ruined when dropped (#58806)
Tiny atomic one line change that makes plants stay in the same place when you drop them.
What's the point of being able to hide in a plant if anyone with basic object permanence can see that a plant that used to be offset off the tile is now centered?
Also I was tired of seeing all the plants in the bar turn really ugly and offset the second Pun Pun gets to them with no way of centering them again.
* Plants don't get their positions ruined when dropped
Co-authored-by: Kokonut <38844529+maxymax13@users.noreply.github.com>
* New carpets & wood, version 2 (#58797)
maxymax13, /vg/station, Citadel Station
I really wanted #58190 (A port of cit tiles, fucking ahewhads) but then nobody gave it mergies so i've redone it except not stale, not merge conflict'd and not using stack crafting instead of tile floofing!
I fully replaced the fugly diagonal one with my own nicer parquet one, adjusted red carpet to be less noisy, and made a damaged state.
Much more customization for wood flooring enjoyers, and it's obtainable ingame, in an out-of-the-way method! Think of the bar remodels you could do with this and some cans of paint! Now all we need is to make the vinyl siding and wood panel siding decals place-able...
3 new variations for wooden tiles are available (large, parquet, and tiled), the same way you color titanium tiles! Remember, use a screwdriver and not a crowbar!
A new red planetary pattern design is available for arcade carpet!
* New carpets & wood, version 2
Co-authored-by: Kokonut <38844529+maxymax13@users.noreply.github.com>
* Borg apparatus now can use hotkeys to drop items; Right click to spill. (#58494)
* scrapped out
* Update code/game/objects/items/robot/robot_items.dm
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Update code/game/objects/items/robot/robot_items.dm
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Update code/game/objects/items/robot/robot_items.dm
Co-authored-by: AnturK <AnturK@ users.noreply.github.com>
* review changes
* small mistake
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: AnturK <AnturK@ users.noreply.github.com>
* Borg apparatus now can use hotkeys to drop items; Right click to spill.
Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: AnturK <AnturK@ users.noreply.github.com>
* tweaks rupee's in-game sprite and adds some failtext to using them like cash. (#58726)
* Tweaks rupee's in-game sprite and adds some failtext with IDs.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* PDA Painter can now reset the linked Economy Account (#58784)
* IDs now reset their account when imprinted
ID's can now properly be reused without giving people random economy accounts as the imprinting on the PDA painter now sets the ID's account back to null
* PDA Painter can now reset the linked Economy Account
Co-authored-by: 小月猫 <alina.r.starkova@gmail.com>
* Adds in-hand sprites for the RSF and Plumberers (#58747)
Does what it says on the tin! I've noticed that the Rapid Service Fabricator and the science/chemistry plumbing devices had no in-hand sprites, and decided "screw it" and made some for them!
New sprites, especially for things that exist but have no in-hands, is awesome!
* Adds in-hand sprites for the RSF and Plumberers
Co-authored-by: Imaginos16 <77556824+Imaginos16@users.noreply.github.com>
* Adds new recipe: Risotto. (#58734)
I realized while playing cook the other day that we did not have risotto as a recipe, I was very disappointed to see we did not have it.
Risotto is good, therefore it is good for the game. Our rice recipes are quite dull so hopefully, this will be a neat new thing to do with it.
Sprites borrowed/stolen from Aurora's Synnono Aurorastation/Aurora.3#2567
* Adds new recipe: Risotto.
Co-authored-by: carshalash <carshalash@gmail.com>
* Adds a new obj_flag that prevents building on objects that shouldn't be built on. (#58719)
Adds a new obj_flag that prevents building on objects that shouldn't be built on.
Adds it to the stasis bed and the sleeper, as well as some machines that become undense when the doors opens (nanite chambers, DNA scanners, suit storage unit, and gulag teleporter).
If I forgot any feel free to lmk.
Fixes#58528 (Operating table + stasis bed memes)
Some objects/machines that aren't dense (or become undense in certain states) shouldn't be able to be built upon, so this flag allows for specifying that you can't build on it.
* Adds a new obj_flag that prevents building on objects that shouldn't be built on.
Co-authored-by: Seth Scherer <supernovaa41@protonmail.com>
* Corrects a define regarding the amount of mail arriving on station + QOL changes. (#58723)
There was a math error in mail's implementation in the economy SS when I switched it over to delta_time, so that basically the time-based define MAX_MAIL_PER_MINUTE was being multiplied by delta_time. Just one problem, delta_time was being considered in deciseconds as usual, but my chimp brain failed to recognize that, meaning that the maximum amount of mail arriving on station was around 100x more than expected.
This corrects the delta_time variable to think in terms of MINUTE time defines, not just a static decimal multipliers.
Junk mail is funny and good, but you'll never read any of these if you get 200+ letters every shift just like it.
Additionally, adds some fluff text to the examine_more of letters, to let players know that you can use destination taggers to sne and distribute letters once they arrive.
QOL tweak is just to make cargo players and in-game purists lives easier.
* Corrects a define regarding the amount of mail arriving on station + QOL changes.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Changes mentions of °K as it doesn't use degrees (#58739)
The Kelvin scale doesn't use degrees as it's an absolute scale, so chem grenades now just show Kelvin instead of Kelvin degrees
* Changes mentions of °K as it doesn't use degrees
Co-authored-by: Urumasi <Urumasi@email.cz>
* Makes the explosive compressor and blastcannon actually use the TTVs they're given + the explosion changes to support that. (#58015)
* Adds explosion SFX to the blastcannon and explosive compressor
- Extracts the explosion SFX and screenshake proc from the SSexplosions explosion handling proc and lets the explosive compressor and blastcannon use it.
* Miscellaneous changes
- Adds defines for the internal explosion arglist keys
- Reverses the values of the explosion severity defines
- Changes almost everything that uses `/proc/explosion` to use named arguments
- Removes a whole bunch of argname = 0 in explosion calls.
* Removes named callback arguments.
* Changes the explosion signals to just use the arguments list
Adds a simple framework to let objects respond to explosions occurring inside of them.
Changes a whole bunch of explosions to use the object being exploded as the origin of the explosion rather than the turf the object is on.
Makes the explosive compressor and blastcannon actually use the TTVs they are given.
Adds support for things responding to internal explosions.
Less snowflake code for the explosive compressor and blastcannon calculating bomb range.*
Less confusing explosion severity defines.
Less opaque explosion arguments
*does not guarantee that the solution to letting them actually use the TTV is any less snowflake.
* Makes the explosive compressor and blastcannon actually use the TTVs they're given + the explosion changes to support that.
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* More Food Sorting (#58649)
* Organizing
Moves the following:
Enchiladas, from MEAT, to MEXICAN
Meat Bun, from PASTRIES, to MEAT
Hotdog, from PASTRIES, to SANDWICHES
Melon Bowl, from MISC, to SALADS
Oatmeal, from SALAD, to SOUPS (And changes the object path to match.)
Does the traitorous task of adding the GRAIN tag to Enchiladas. May god have mercy on my soul.
* Adds a trailing new line
Co-authored-by: Winter Flare <7543955+Owai-Seek@ users.noreply.github.com>
* More Food Sorting
Co-authored-by: Winter Flare <7543955+Owai-Seek@users.noreply.github.com>
Co-authored-by: Winter Flare <7543955+Owai-Seek@ 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>
* mail fixes 😎 (#58716)
now mail doesn't get sent to... BAD recipients. (Antags arm, just say antags)
fixes incorrect unwrapping message (bad usage of a visible message)
mail recipients wasn't shuffling either. I'm fairly certain this was leading to some people always getting mail and some never getting it.
* Fixes incorrect unwrapping message, and now mail doesn't get sent to... BAD recipients.
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* screwdrivers no longer randomize their pixel_y on initialize (#58707)
removes the 75% chance on screwdrivers initialize to have a random pixel_y between 0 and 16
it looks bad now that the screwdriver is centered on the tile
* screwdrivers no longer randomize their pixel_y on initialize
Co-authored-by: Fikou <piotrbryla@onet.pl>
* Stops hangover station trait from making bottles spawn in the walls/windows/dense objects (#58681)
* Stops hangover station trait from making bottles spawn in the walls/windows/dense objects
Co-authored-by: Seth Scherer <supernovaa41@protonmail.com>
* Fixes Chameleon Projector Dummies escaping containers (#58683)
You can see why this is bad from the issue, but it applies a lot of other places you can cram the projector into. Like transit tubes! Or vehicles! Or free escapes from welded lockers! Spooky.
* Fixes Chameleon Projector Dummies escaping containers
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>