* kills 4 object definitions that are inside of proc arguments (#61152)
thanks to putnam for reporting this in coderbus
/obj/machinery/smartfridge/drying_rack/load(/obj/item/dried_object)
looks pretty harmless right? youd think that this would make a proc argument called dried_object of type /obj/item but no, this defines a new /obj/item class definition called dried_object with zero changes from /obj/item
you can use this to do weird things, like /obj/machinery/smartfridge/drying_rack/load(/obj/item/var/dried_object = 3)
creates a new var on /obj/item called dried_object and is very cursed
gets rid of 4 of these abominations, they dont seem to have caused any bugs except for maybe behavior that relies on typesof(/some/path)
* kills 4 object definitions that are inside of proc arguments
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Fix xenos not taking damage while in crit (#61058)
Fixes#61022
Xenos will now slowly take damage while in crit state.
* Fix xenos not taking damage while in crit
Co-authored-by: Tim <timothymtorres@gmail.com>
* makes fake artefacts better (#61185)
adds the lefthand and righthand icons to the artefact, and gets rid of the big blue x overlay
* makes fake artefacts better
Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com>
* Adds a loose syndicate brand MMi to robo/rd/doctor/cmo traitors only for 2 tc (#61219)
Sometimes emagging a borg could leave serious damage to its interface being immediatly noticed when you tinker with the cyborg.
yes i know you can get this by buying a big ass black dufflebag which makes you scream out TRAITOR sometimes just having something loose apply better to jobs who already got the tools to tinker with people, while surgery bags apply more to people who don't have the tools.
* Adds a loose syndicate brand MMi to robo/rd/doctor/cmo traitors only for 2 tc
Co-authored-by: jughu <melvin2626@live.nl>
* Reimagines the imaginary friend as a fancy new smite. (#61218)
Fixed imaginary friends being unable to turn by movement or holding down ctrl. I assume this was broken when abstract_move was implemented.
Makes some tweaks to the Imaginary Friend mob. It no longer cares about any brain traumas and can exist standalone.
Added the ability to take a set of datum prefs as an argument. It will attempt to create an imaginary friend as per those datum prefs.
This imaginary friend can be a cyborg or an AI core.
Takes this improved behaviour and packages it into a brand new smite that allows admins to inflict anyone with a permanent imaginary friend. This is not tied to a brain trauma. You can probably give imaginary friends imaginary friends. You can probably give the AI eye an imaginary friend. I have not tested this. It is probably a bad idea.
You can give simplemobs imaginary friends. Basic mobs. Silicons.
You choose whether the imaginary friend takes on the preferences of the person you choose to be the imaginary friend or is random
* Reimagines the imaginary friend as a fancy new smite.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Pirates now speak piratespeak. (#61215)
Apparently we have had this thoughtless (like many other small features) language datum ever since late 2018 that only costume pirate hats use: Piratespeak . Space pirates don't even use it also because their hats aren't a subtype of the costume pirate hat for good reasons like armor and EVA. Yea, this is also an oversight since space pirates were added before the language.
* Pirates now speak piratespeak.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Restores Ethereal Taste (#61238)
Restores Ethereals' sense of taste, as was removed in #48309. It is slightly more sensitive than the human sense of taste.
Approved by Mothblocks, I can't get an image of it so if @ Mothblocks could confirm in the comments that would be wonderful
* Restores Ethereal Taste
Co-authored-by: EOBGames <58124831+EOBGames@users.noreply.github.com>
* makes rslve button in admin help panel not wrap around (#61239)
makes admin help panel wider so rslve doesnt wrap around to the bottom line
* makes rslve button in admin help panel not wrap around
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Gibber will now give 3 pieces of meat at tier 1 (#61222)
* Update gibber.dm
* Update gibber.dm
* Update code/modules/food_and_drinks/kitchen_machinery/gibber.dm
Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
* Update gibber.dm
Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
* Gibber will now give 3 pieces of meat at tier 1
Co-authored-by: jughu <melvin2626@live.nl>
Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
* Fixes a regression about skeleton pirates not having milk bottles. (#61217)
* Fixes a regression about skeleton pirates not having milk bottles.
* aaaa
* Fixes a regression about skeleton pirates not having milk bottles.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes can_interact() (#61211)
when i refactored can_interact() I thought ". = ..()" meant it would return with whatever the return value of the parent is... turns out thats not true, and i didnt catch it because there was only TWO machines that had issues from this, namely operating computer had unlimited range to view its tgui, and protolathes let you build things from unlimited range, provided the html window was open (you couldnt click any buttons out of range, except build buttons, weird, but whatever)
i also broke admin AI checks on machines, i added an explicit check back in
I also removed a redundant fingerprint from protolathes, their parent call already adds a fingerprint, they dont need to add it again
* Fixes can_interact()
Co-authored-by: 小月猫 <alina.r.starkova@gmail.com>
* Uncouples the cultist red eye trait examine text from requiring cultist status or a certain eye colour. (#61199)
Renames TRAIT_CULT_EYES to TRAIT_UNNATURAL_RED_GLOWY_EYES.
This trait now always displays a (slightly modified) message about unnatural glowy red eyes regardless of if the person is a cultist and regardless of what their eye colour is.
The examine is decoupled from eye colour because as it turns out, players can select the bloodcult red eye colour as part of character prefs. Anything that gave this trait set the eye colour to red anyway. Because there's now no guarantee the eyes themselves are red with this trait, the examine has been reworded slightly to reinforce that the eyes are merely glowing red and not necessarily are red themselves.
The examine is also decoupled from being a cultist. The trait can be added from multiple sources. Removing the cultist check means other things that want to tread the line of cult paranoia can add it too. Like Chaplain maint sect eyes and admin shennanigans.
This now means that the Chaplain's maint sect night vision eyes actually add the examine flavour text, instead of what they did before which is only add the examine flavour text if the player was a cultist that had bloodcult red coloured eyes. In other words, if they were risen and already had glowy eyes.
* Uncouples the cultist red eye trait examine text from requiring cultist status or a certain eye colour.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Using a soulstone on a construct shell no longer destroys it and the shade if no option is taken. Plus code improvement
* Fixed the merge conflicts.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Fix broken mech delay (#61163)
This seems to have been supposed to be a delay for god knows what reason
I assume it was supposed to slow you down or something but its not needed or useful and currently breaks changes your speed
* Fix broken mech delay
Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com>
* Replaces bees and hivelord MOUSE_OPACITY_OPAQUE with a component. (#61032)
I have replaced the mouse opacity setting for bees and hivelord, its brood and legion skulls with a component that adds an almost (has to be 1 alpha to catch the click) invisible underlay to its target that doesn't block the entire turf.
The component prevents the underlay from shrinking or expanding above/below certain boundaries when the attached atom transform matrix is vv'd by an admin or if it's a mob being resized.
The component can be added to any atom, though there's no common signal for when objects are resized.
* Replaces bees and hivelord MOUSE_OPACITY_OPAQUE with a component.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes mousetraps causing mice to become invisible when splatted (#61201)
* Fixes mousetraps causing mice to become invisible when splatted
Co-authored-by: aaaa1023 <74441292+aaaa1023@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>
* Added permission verification to the change_admin_rank proc. (#61137)
Checks if usr has R_PERMISSION before going any further in the change_admin_rank proc.
* Added permission verification to the change_admin_rank proc
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
* Pen & Paper Bin minor resprite (#61159)
sprites for thing that didn't have one, and they look better i think probably
* Pen & Paper Bin minor resprite
Co-authored-by: Kokonut <38844529+maxymax13@users.noreply.github.com>
* Adds in asexual-themed socks. (#61175)
Adds in the asexual socks, called the ace socks because i like the abbreviation as it makes it sound cooler.
Also fixes bee socks being ordered improperly in the code.
* Adds in asexual-themed socks.
Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
* mechas have their 5 default damage back (#61167)
mechas used to have 5 force, this was broken in the mecha refactor making the non-combat ones do no damage with punches
* mechas have their 5 default damage back
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Reorder the POPUP button (#61174)
Hurts muscle memory in a way I didn't anticipate. New version puts it behind the REJT button.
* Reorder the POPUP button to be behind closure links
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Cayenne can now strip people (#61160)
Cayenne was given the ability to pick up the disk in their mouth with #57395, which also gave them the trait advancedtooluser for them to strip.
A while later, the ability to strip people was moved to a separate trait, which removed Cayenne's ability to strip.
This PR restores that functionality, and also makes Cayenne able to drop the nuke disk without deleting it.
Also cayenne putting the nuke disk down would runtime and just delete the disk entirely, so this fixes that also.
* Cayenne can now strip people
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* adds a gun circuit shell (#61156)
adds the circuit gun shell, every projectile it hits with outputs the shot mob, everytime its shot charge from an attached circuit is transferred to it, it deals no damage
increases the range of the to string circuit to 7 tiles from 5, now should get everything in view range
* adds a gun circuit shell
* Update gun.dm
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* [s] Audits object say() uses to make handling text more safe (#61147)
Made all say()s deal with encoding, audited all uses of say() to prevent double encoding or like, manually inserting span().
I left some stuff without sanitize that only draws from the code, since it's hell to clean up otherwise. That
and I let admins do whatever the fuck they want
* [s] Audits object say() uses to make handling text more safe
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Free up smart pipe direction on disconnect (#61135)
Previously, a smart pipe that was attached in a given direction would
continue to hog that direction even if the attached piece was removed.
* Free up smart pipe direction on disconnect
Co-authored-by: esainane <esainane+github@gmail.com>
* Vents and scrubbers get unique name tags again (#61133)
You used to be able to mouse over a vent or scrubber to see its ID tag, in order to match it to its entry in an air alarm panel. However, this id tag is currently missing from the name.
* Vents and scrubbers get unique name tags again
Co-authored-by: esainane <esainane+github@gmail.com>
* Fixed the Bloodcrawl spell not ejecting users if somehow lost. (#61076)
* Fixed the Bloodcrawl spell not ejecting users if somehow lost.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* large refactor of machine/power code to cut down on processing time and wasted lists (#60317)
original pr here: #59789 (Closed because he didn't think it was good enough)
came back to this because i realized that
all machines were area sensitive, meaning they had a list with at least a reference to themselves (assuming they arent in the contents of another movable which most arent) for the purposes of handling power differences when their area changes
pipes are machines
there are ~14k machines and ~6k pipes
i made this problem worse with a recent pr by making it a nested list
so i needed to track what machines needed power, and this pr had work already done that could be used for that purpose. now machines that have use_power == NO_POWER_USE do not have this extra memory overhead for no reason
currently every machine that uses power draws that amount from its area from a dynamic channel via auto_use_power() which is called every SSmachines fire(), then in apc/process() the area's dynamic power draw is reset and the power is used. with static power its not calculated then reset every loop, its just taken from the grid. so now machines handle updating their static power usage from their current area (this doesnt touch power machines that require a wire connection). in order to allow this, use_power, idle_power_usage, and active_power_usage have setters to track state correctly and update the static power usage on the machines current area and handle area sensitivity.
also goes through a lot of heavy abusers of SSmachine processing time and tries to make it faster. makes airalarm/process() into a signal handler for COMSIG_TURF_EXPOSE since air alarms only need to process for changes.
Why It's Good For The Game
SSmachines isnt the heaviest hitter in terms of total cpu and certainly not in terms of overtime, but its not a lightweight. it frequently takes > 50ms to complete a run and seems to be in the top 5 or so of subsystem costs looking at some round profilers
also gets rid of a few thousand lists since every pipe no longer has two useless lists each (and any other machines that dont use power)
Love ya kyler
Co-authored-by: Rohesie <rohesie@ gmail.com>
* large refactor of machine/power code to cut down on processing time and wasted lists
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Fixes a plasmaman autoignition oversight (#61083)
Adds a check to see if there are any organic plasmaman limbs or any plasmaburnt limbs (which are obtained by exposure to plasma lava on icebox) before igniting plasmemes so that a plasmeme with fully replaced limbs can stop burning
* Fixes a plasmaman autoignition oversight
Co-authored-by: ArcaneDefence <51932756+ArcaneDefence@users.noreply.github.com>
* [modular][ready]adds a fashionable baseball cap
* Update head.dm
* the rumors were true....
* Update head.dm
* timb living ass
* huh
* improved sprite
* Update head.dmi
* ok there
Co-authored-by: louiseedwardstuart <bonniefluff>
* R.field
* i hate modularization
* AAAAAAAAAAAAAAAAAAAAAAAA
* agony
* almost done
* h
* Delete admins.txt
* Add files via upload
* Update and rename admins.txt to config/admins.txt
* Update admins.txt
* rwrwawdaw
* fuckfuckfuck
* Apply (safe) suggestions from code review
not committing all of them, gonna test them on my PC first
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* asaaaaaaaaaa dont merge this aaaaaaaaaaa
* i hate gitignores with a passion./
* HATE> HATE GITIGNORE.
* final tweaks
* quite possibly the worst code i have ever written
* i forgot to remove this comment
* prefs
* THE SPAGHETTI CODE IS GONE (also more maintainable)
* Update readme.md
* why was it unticked
* more maintainability
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Fixes being able to spam ghost role notifications. (#61085)
There are methods that let players spam the everloving shit out of ghosts with BONG BONG BONG BONG BONG BONG BONG etc. through being able to constantly poll ghosts for roles with no restriction or cooldown.
Examples are laughter and slaughter demon antag_spawners.
It makes no sense to be able to concurrently poll for the same mob. As a result, I've now added a guard against this. The proc has been given a static list of mobs it's polling for ghost roles for. If it's already polling for ghost roles for a given mob, then it just early returns with an empty list, otherwise it adds the mob to the static list when the poll starts and removes it when the poll ends.
I've also done a little cleanup in var names and the proc name, with a find-and-replace done. There weren't many things calling it and none used named keywords in the args so should be fine.
There is also poll_candidates_for_mobs (also included in my cleanup) - This proc is basically only called by admins via sentience balloons and they have their own guards against spamming (the balloon pops and thus can only be used once)
Also fixes an issue in /mob/living/silicon/robot/proc/replace_banned_cyborg() where incorrect args were used in the proc call to poll for candidates.
* Fixes being able to spam ghost role notifications.
* a
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* lava and weather immunities refactor (also jump boots fix) (#61003)
In remembrance of all those people who used jump boots to cross lava unaware of an issue c*ders wouldn't fix....
EDIT: This is now a lava and weather immunities refactor:
Weather immunities are now status traits since they have a multitude of sources (especially for lava) which might conflict with one another otherwise.
The lava burn_stuff proc has also been been refactored in different procs, mostly because of that snowdin subtype with inconsistent, old checks.
Weather datums should now use can_weather_act instead of weather_act to check if something can be affected by weather or not, as they should.
All movables can protect contained mobs if they have the relative weather immunity traits. This works at any contents depth.
No more snowflake weather_protection variable for closets.
Removed the weather_immunities list from living mobs (simple animals still have it but it's only for traits assignment on init because way too many child types lack the immunities of their parents).
Removed some unused defines.
Renamed some variables as per guidelines.
It has been tested.
And yea, jump boots fixed because that's the original scope of this PR.
(Initially just made throwing make you fire immune, that was blocked because it breaks perma stuff, instead it ended up be a refactor to make jumpboots usable with weather immumnity stuff
* lava and weather immunities refactor (also jump boots fix)
* Update Ashwalkers.dm
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>