* When another player late joins it will correctly update the UI locally
* Resolve passengers not displaying the correct message in late join
* Improve final boolean comparison of button disabled state to be a bit neater
* Fix test
* Kill float accumulators
* Use entity proxy methods
* DataField auto name generation where possible
* Kill comp properties
* Clean up server comps
* Make events record structs
* Clean up shared body code
* Clean up server body code
* Rename organ events to be same names as in med refactor
As far as I know, the Box of Hugs only spawns on the clown and is used in the construction of a honkbot such that if the clown decided earlier to craft a honkbot or if the low price of some 3000 spesos is insufficient this bounty is impossible. Similarly, Donk Pockets are not a renewable resource and it has happened that a station has eaten too many for the bounty to be completed only to get it in rotation and esssentially lose a bounty slot forever. I would like it if each bounty was at least theoretically possible on any station it's likely to occur in, and there are too many where there aren't enough of these obtainable to complete the bounty, which is no fun.
Don't always mark after interact event as handled for welder tools. Done with a view towards allowing disposal interaction post tool system handling.
Co-authored-by: MQuatermain <misterquatermain@pm.me>
* Fix cuffs breaking after they stop being pulled
* Do proper interaction check for UncuffAttempt
* Minor cleanup
Take as much out as possible from _net.IsServer() if blocks.
Misc cleanup
* Make mind shield implants unable to be implanted more than once
* Default AllowMultipleImplants to false and update implanters.yml
* Use TryComp instead of TryGetComponent
* Deny multiple implants for fun implants too.
* Make comment more precise
* SS14-17313 Chat Censorship Systems
Adds some systems to manage chat censorship:
1. No-op: does nothing
2. SimpleCensor: a regex-free censor with a variety of rules to use
3. RegexCensor: a censor that uses regex.
This exposes a singleton backed by a builder pattern (ChatCensor) that
is set up, probably during the code init phase, and then globally available
for your censorship needs.
* Migrate to Shared
* Add a reset function to the builder.
* Resolve PJB's feedback; add unit tests
* Adds Church Bells
* I'm dumb.
* The bell is no longer haunted.
* forgot attributions
* change sounds so scary law no hunt
* One day I'll stop needing to make an immediate micro-commit. One day.
* God damn it.
* Wearable Instrument Base + Changed harmonica base
Created the BaseWornInstrument base and updated the Harmonica to use it, being equipable in the neck slot.
* Update instruments_wind.yml
* compositions are cool and awesome
* Add DeviceNetworkJammerComponent & System
Allows for entities to "jam" DeviceNetwork packets.
Whenever a device attempts to send a packet, the
DeviceNetworkJammerSystem listens for the BeforePacketSentEvent.
From there if any entity with the jammer component is within range of
either the sender or receiver of the packet the event will be cancelled.
Additionally jammers can only block packets in certain networks. If a
packet is not being transmitted in one of the networks it can block then
even if the jammer is in range the event will not be cancelled.
The range is stored in the jammer component along with the networks it
can jam.
Jammable network ids are stored as strings which seems to be how custom
networks are stored (E.g. network ids for suit sensors).
To allow for all of this, the BeforePacketSentEvent was modified to
provide the NetworkId.
* Make JammerSystem for the radio jammer use the DeviceNetworkJammer. Remove redundant event.
* Replace calls to TryDistance with InRange
Adds versions of the holoprojectors (janitoral, fan, and field) that start without a battery and changes the lathe recipe to use these instead. This is consistant with flashlights, which when made do not start with a cell.
Also it's a bit silly to have cargo printing a bunch of these to sell.