* Fixes cigarettes making you so lame that they spill the spaghetti from your pockets (and also keep falling off) (#59352)
Wack
Fixes#59342
Changelog
🆑
fix: Smoking no longer spills spaghetti from your pockets
fix: Lit cigarettes no longer keep falling off
spellcheck: Removed extra "the" from item knockdown messages
/🆑
* Fixes cigarettes making you so lame that they spill the spaghetti from your pockets (and also keep falling off)
Co-authored-by: Mickyan <38563876+Mickyan@users.noreply.github.com>
* Fixes human burgers not naming after the meat donor (#59286)
- Adds custom materials to result of grilling
- Adds custom materials to result of atom processing
- Adds source name and job to mob_meat material if available
- Makes processed atoms have same pixel offsets as their source but randomise with each subsequent one
* Fixes human burgers not naming after the donor
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
* Fixes runtimes related to forensic components on deleted things. (#59315)
* Fixes runtimes related to forensic components on deleted things.
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
* Fixes an issue in how processing is done for gas leaks (#59322)
Couple issues fixed that were found in testing along side the stationary canister rework. Not sure how I missed this but I should have done thorough testing again after changing the processing list used after I had finished an earlier round of testing.
I don't think it will have any visible effects? Just runtime and hard dels.
How did I miss this
* Fixes an issue in how processing is done for gas leaks
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* [READY]Updates knockoff component and adds it to prescription glasses (#59006)
* [READY]Updates knockoff component and adds it to prescription glasses
Co-authored-by: Mickyan <38563876+Mickyan@users.noreply.github.com>
* Makes canister leaking and blowing up use a component and element respectively (#59075)
I want to use this behavior on some other things so into a component and element it goes. Gas leaking is handled by a component so it can process whereas the object breaking and causing an explosion is handled by an element. Some minor changes were made so canisters were more consistent in leaking.
* Makes canister leaking and blowing up use a component and element respectively
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* use SIGNAL_HANDLER REEEEEE (#59242)
makes as many procs as i can find use the SIGNAL_HANDLER define which i assumed they all already did
* USE SIGNAL_HANDLER REEEEEE
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Fixes being unable to feed chickens to get eggs (#59267)
Fixes being unable to feed chickens for eggs.
`eggs_left` is always less than `max_eggs_held` 'cause you can't give them food to increase the amount of eggs 'cause `eggs_left` is less than `max_eggs_held` 'cause you can't give them food to increase the amount of eggs 'cause...
* Fixes being unable to feed chickens to get eggs
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* optimizes some internals of signal and component code (#59154)
* optimizes some internals of signal and component code
* comment and a better var name
* gets rid of DF_SIGNAL_ENABLED and all referencing code because its dumb
* gets rid of NONE | CallAsync(stuff)
* fixes conflicts
* puts NONE back in
* optimizes some internals of signal and component code
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* makes LoadComponent() a macro like AddComponent() is so it supports named arguments
* Update miscellaneous.dm
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Fixes a bug in signal unregistration code that was causing unrelated objects to lose their registration in a (#59116)
This was causing unrelated objects to lose their registration in a hyper rare case.
The process went something like:
when object foo is registered to something and object bar is registered to the same object with a different
signal it will remove foo's signal only when foo is the only one registered to the object with that signal
Why it's good for the game
This was breaking #58918 when blood wasn't qdel'd post test. I'm so happy I found this.
It's a rare case, so I doubt it'll effect a lot of things, but I can trust UnregisterSignal again, which is very nice.
* Fixes a bug in signal unregistration code
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fix issue where Plumbing Reaction Chambers can get stuck filling (#59131)
About The Pull Request
This Pull Requests aims to fix the issue #58993 by changing two parts of the logic I've seen the chambers get stuck on.
Chamber gets stuck requesting a unit that is always rounded down to 0
Chamber gets stuck requesting an insanely small number that gets eaten by float math
Part 1 Explanation
Take the example where a chamber is trying to request one unit of chemical from three synthesizers. A chamber will divide it's request amongst all suppliers who can satisfy it. In this case, 1 / 3 becomes asking each synthesizer for 0.33 (due to rounding). After one update, the chamber has 0.99 of the chemical, not 1. On the second update, it then requires 0.01 of the chemical and asks each chamber for 0.0033, which gets rounded down to 0. This means the chamber NEVER fills as it spends every update cycle doing the same logic and trying to transfer in parts of 0 in size.
This has been fixed by changing it from flat dividing the amount required by the number of suppliers to a more dynamic approach that looks at the target volume and how many requests it needs to make. This mean that instead of asking for 0.33 three times in the above example, it actually works out more to asking for 0.33 then 0.34 then 0.33. Meaning it gets the whole 1 it wanted in the first update, fixing the issue.
Part 2 Explanation
Even with the above fix, when working with the right numbers, floats do not add as expected. Take the above example. I lied. 1/3 as a float is NOT 0.33. 0.33 does not exist as a float, so the actual closest value is 0.32999998, which is what the code will use, even when rounding to 0.01. What this causes is, in some scenarios, chambers getting incredibly close to their target volume but never being able to actually reach it because currentVolume + missingAmount comes out as just currentVolume, due to the insanely small float that it's missing having no impact on the larger float when added together. Again, this is due to how floats work.
So to avoid a chamber getting stuck on 98.9999999998 when it needs 99, I'm adding the CHEMICAL_QUANTISATION_LEVEL constant (used elsewhere for similar issues) to the chamber's volume when checking if it has enough. This way, the chamber will exit the filling mode even though it was short by a tiny fraction. These discrepancies seem to get handled anyway in the actual reaction code so I haven't seen any changes/problems to my outputs. For all intents and purposes, 98.9999999998 is 99 in float arithmetic when rounding as we do.
Why It's Good For The Game
Fixes an incredibly annoying issue that plagues chemistry automation. Machines, in many scenarios, currently get stuck when they shouldn't. This means a chemist has to actively keep monitoring all their machines and then do some investigation when suddenly something stops. Eventually finding the problem chamber that is stuck on "Filling" and then plungering it. Not all Chemists know of this either and just assume it's something they have done or that it's just broken and unaware how to fix it.
Now a Chemist can move on to automating more or helping elsewhere rather than babysitting their setups.
Changelog
cl
fix: fixed issue where plumbing Reaction Chambers get stuck on "Filling"
/cl
* Fix issue where Plumbing Reaction Chambers can get stuck filling
Co-authored-by: mGuv <mguv.dev@gmail.com>
* changes duct layer of alkaline input in reaction chamber to 4th (#59095)
* Changes Duct Layer of Alkaline Input in Reaction Chamber to 4th
Co-authored-by: Greniza <61635418+Greniza@users.noreply.github.com>
* Stop singularities from consuming themselves (#58987)
This bug was fixed by one of the connect_loc PRs, but this is still useful as it contains a CRASH for when it happens if this bug comes back again.
* Stop singularities from consuming themselves
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Fixes a ci error caused by adding an element to something that'd being deleted (#59108)
So that's why mythril coins kept harddeleting.
Man I'm glad I added an error on adding elements to qdeleted objects.
* Fixes a ci error caused by adding an element to something that'd being deleted
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Adds deflection messages for no damage attacks against objects (#58873)
* Adds deflection messages for no damage attacks
* Changes the addition to ", which doesn't leave a mark" instead
* Adds deflection messages for no damage attacks against objects
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
* Fixes some fucked Destroy()s (#58973)
Some stuff was failing to return qdel hints, might as well sweep that upppppp
(Hey mothblocks I know you're reading this, we should really lint for this, but don't push yourself over it I
know you're busy as it is)
* Fixes some fucked Destroy()s
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* validate THIS integration tests (#59024)
Hi, the #58882 PR missed that validate takes an item, no parent var lookup required.
Why It's Good For The Game
UNFUCKS MASTER
* [SPEEDMERGE CANDIDATE] Validate THIS integration tests
Co-authored-by: Funce <funce.973@gmail.com>
* fixes master (adds a name to the venomous prefix, fixes bad signal in udders.dm)
* Update signals.dm
* AAAAA
* Update udder.dm
* Update CentCom_skyrat_z2.dmm
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Kills BOTH /poison paths by turning poisonous into an element. (+fantasty prefix, sanity on attackingtarget signal, and more) (#58882)
* Kills BOTH /poison paths by turning poisonous into an element. (+fantasty prefix, sanity on attackingtarget signal, and more)
* AAAAAAAA
* Update spellbook.dm
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* GOOFUDDERS: YOU CAN MILK ANYTHING (You can only milk cows, goats gutlunches but with componentized goodcode) (#58910)
Co-authored-by: 81Denton <32391752+81Denton@ users.noreply.github.com>
Co-authored-by: Qustinnus <Floydje123@ hotmail.com>
* GOOFUDDERS: YOU CAN MILK ANYTHING (You can only milk cows, goats gutlunches but with componentized goodcode)
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: 81Denton <32391752+81Denton@ users.noreply.github.com>
Co-authored-by: Qustinnus <Floydje123@ hotmail.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>
* Add admin tool for adding specific fantasy affixes (#58884)
A new option when using VV on atom movables is to add a custom
fantasy "affixes".
* admins can add specific fantasy affixes to items
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* 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>
* Component readme file now links to the Signals, Components, and Elements HackMD page instead of the forum (which links to the hackmd page now anyways) (#58876)
* Component readme file now links to the Signals, Components, and Elements HackMD page instead of the forum (which links to the hackmd page now anyways)
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Fixes gunboots shooting the wearer (#58651)
For whatever reason, gunboots could immediately shoot the person wearing them when they fired. This obviously isn't ideal, so this fixes that. Once the bullet has ricocheted off something, of course, they're once again fair game to be hit. This also kills the projectile_shooter component because it was pointless
Fixes: #58242 (Bullets fired from gunboots hit the wearer)
As if the trail of people trying to kill you for wearing this isn't bad enough, you don't need the shoes themselves doing you in
* Fixes gunboots shooting the wearer
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* woops (#58757)
I was an idiot in #57797 and forgot to make the rune wizards can buy to add shield charges to their shielded hardsuits actually delete after being used, allowing you to use one rune infinitely. Oops! This PR fixes that.
No more invincible wizards
* Fixes infinite wiz shielded hardsuit charges
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* 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>
* Add Show Hiddenprints action to VV on atoms (#58657)
This displays the hiddenprint log from /datum/component/forensics in a simple to view form, sorted by last touch. I didn't make it fancy, it's very bare bones.
I could have refactored hiddenprints to use lists in lists, which would make getting data out a lot easier, but I worry about the additional memory overhead on every atom that gets touched, so I left it as strings in lists. I did reformat it a little bit, however, to make it simpler to sort, and it looks a little nicer. Namely moving the timestamp in front of the name.
It can help a lot in admin investigations on whodunnit. Right now they have to look at the forensics component, and that's if they even know about it. This way it is discoverable by using the VV tool.
* Add Show Hiddenprints action to VV on atoms
Co-authored-by: Jonathan Rubenstein <jrubcop@gmail.com>
* Full Auto Update: no crit firing, no spamclicking, more autofire, more balance
* aaa
* Update fullauto.dm
* aaaaa
Co-authored-by: Fikou <piotrbryla@onet.pl>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Fixes pop restricted uplink items not properly unlocking (#58542)
Makes it so if you become a traitor when specific items are pop locked, they will update accordingly as the population increases.
* Fixes pop restricted uplink items not properly unlocking
Co-authored-by: Seth Scherer <supernovaa41@protonmail.com>