* Fix bastard sword not getting duration passed to its callback (#78056)
## About The Pull Request
The cult bastard sword has a callback called on spin, that gives you
some buffs and effects based on the duration of the spin
33c9ffa6c8/code/modules/antagonists/cult/cult_bastard_sword.dm (L46-L62)
But... it didn't pass a duration.
So now it does.
## Why It's Good For The Game
Lol infinite stun absorption
## Changelog
🆑 Melbert
fix: Fix bastard sword granting infinite stun immunity
/🆑
* Fix bastard sword not getting duration passed to its callback
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* [NO GBP]Refactors how sheets are ejected from mat container (#77945)
## About The Pull Request
As #77936 pointed out an infinite while loop occurs in the recycler.
This was caused due to my recent mat changes as follows.
When the recycler eats up an item. If it found any material inside, it
would attempt to eject any sheets formed from it over here
ed71735fb3/code/game/machinery/recycler.dm (L199)
Inside this proc i first create the sheets in `null space` why is
explained in the comment
ed71735fb3/code/datums/components/material/material_container.dm (L599-L600)
After doing logging & stuff i then would move the sheets back into its
target turf so it could get merged again
ed71735fb3/code/datums/components/material/material_container.dm (L607-L608)
Unfortunately this would trigger `COMSIG_ATOM_ENTERED` signal which the
recycler is hooked onto. The recycler would then eat the newly ejected
sheets again, which would cause more sheets to be ejected, which would
again trigger the signal `COMSIG_ATOM_ENTERED` and you have your
infinite loop.
I did this because i had no clue how to stop the stack from merging when
it got spawned and this was a poor solution, so upon examining the code
i found there is a var to specifically stops stacks from merging
ed71735fb3/code/game/objects/items/stacks/stack.dm (L81)
Yup there is specific param called `merge=TRUE` which allows you to
explicitly stop stacks from merging. I now use this var and manually
merge stacks afterwards without calling `forceMove()` so it doesn't
trigger the recycler anymore which caused the infinite loops.
## Why It's good for the game
Writing checks to see if an object came from null space is weird. It
makes the code difficult to reason with as such situations never happen.
Now it makes sense for an atom to be moved "into" null space for e.g.
when it gets deleted but for an atom to "return back from it" never
happens and you shouldn't be bothered with figuring out how that
happened.
## Changelog
🆑
refactor: sheets are merged in a better way when ejected from machines &
material related stuff
/🆑
* [NO GBP]Refactors how sheets are ejected from mat container
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Progress bars & cleaning particles will centre on the tile occupied by large icon objects (#77940)
## About The Pull Request
Do_after bars always draw based on the top-left corner of the targetted
atom, for atoms with sprites that are larger than 32x32 this gives them
a weird offset instead of being centred, which bugs me.
I have tried my best to figure out a way to reverse this which does not
interfere with atoms which use pixel_x/pixel_y to visually appear to be
on a different tile.
## Why It's Good For The Game
Before:

he hates how you missed him completely 😦
After:

now you're cleaning his feet 🙂
## Changelog
🆑
image: progress bars and cleaning particles are now centered on the tile
occupied by the target, if it is a big sprite
/🆑
* Progress bars & cleaning particles will centre on the tile occupied by large icon objects
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Syndicate mobs no longer drop """unspent""" shells (#77971)
## About The Pull Request
Fixes: #76815
The shells the basic syndicate mobs were dropping were not actually
unspent, but they were not updating their description. They do that now.
## Why It's Good For The Game
small bugfix
## Changelog
🆑 Seven
fix: Syndicate ranged mobs (and probably other basic mobs) properly
update their shell's description to show they are spent.
/🆑
* Syndicate mobs no longer drop """unspent""" shells
---------
Co-authored-by: Lufferly <40921881+Lufferly@users.noreply.github.com>
* Fixes greyscale colors not updating when changing their colors via VV, and fixes some issues with accessories (#77806)
## About The Pull Request
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23214
This fixes a few bugs and cleans up code a bit:
1) Greyscale colors that were changed via the VV modify greyscale menu
will now update the mob's worn clothing accordingly. It wasn't doing
this before. Accessories in particular needed a bit of extra work to
update in this way because it wasn't coded with this case in mind.
2) Accessories will call `equipped()` and `dropped()` when they get
added/removed. This will fix issues like item flags being incorrectly
set, action bars not being added, etc.
3) Accessories will now be returned by `get_all_gear()`. This will
probably fix a few issues I'm not aware of.
## Why It's Good For The Game
<details><summary>Works</summary>

</details>
<details><summary>get_all_gear()</summary>

</details>
<details><summary>get_equipped_items()</summary>

</details>
<details><summary>item_flags get set now, hopefully preventing future
issues related to that</summary>

</details>
## Changelog
🆑
fix: greyscale colors will now update on the mob when modifying them via
the VV menu
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Fixes greyscale colors not updating when changing their colors via VV, and fixes some issues with accessories
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Fixes a bunch of callbacks that were being qdeleted, and code cleanup (#77904)
## About The Pull Request

Continuing the work of
https://github.com/tgstation/tgstation/pull/77850.
it started with finding one that was being missed and causing a
runtime...then I noticed a whole lot more. While I was doing this I
found callbacks that weren't being nulled in `Destroy()`, so I added
that wherever I found these spots as well as some general code cleanup.
There were a lot more of these than I initially hoped to encounter so
I'm labeling it as a refactor.
## Why It's Good For The Game
Fixes lots of runtimes, improves code resiliency.
## Changelog
🆑
refactor: fixed a bunch of instances of callbacks being qdeleted and
cleaned up related code
/🆑
* Fixes a bunch of callbacks that were being qdeleted, and code cleanup
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* fixes regal rats not running away (#77888)
## About The Pull Request
fixes the regal rat not running away from whoever attacked him. also
adds a new pet command behavior which makes the king's minions drop
whatever they are doing and defend their king from whoever has attacked
him.
## Why It's Good For The Game
the rats now behave right
## Changelog
🆑
fix: regal rats now run away from whoever attacked them
add: new pet behavior which makes pets defend their owners if they got
attacked
/🆑
* fixes regal rats not running away
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Adds error on qdeling callback, fixes errors this causes (#77850)
## About The Pull Request
You shouldn't ever qdel a callback. If you don't want to own it free
your ref (remove it from a list/set it to null). When all refs are
cleared it'll get cleaned up by byond itself
* Adds error on qdeling callback, fixes errors this causes
* Update cell_component.dm
* Update acid.dm
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Adds a check grep for using `src` as a trait source rather that `REF(src)` (#77836)
## About The Pull Request
Using `src` as a trait source is an error and can often lead to
hard-deletes
If you wish to tie a source to a certain datum, it is common to use
`REF(src)` instead.
Ideally, we would lint or test for any use of a reference rather than a
string in use in trait sources, but that's a bit harder to setup.
Currently (from what I can see) the *only* erroneous use of references
as sources are via `src`, so it being the most common error, I see it
fine to lint for it.
## Changelog
Nothing player facing.
* Adds a check grep for using `src` as a trait source rather that `REF(src)`
* Update style.dm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* General code maintenance for Mat container related stuff (#77671)
1. Removes `/obj/machinery/ore_silo/proc/remote_attackby()`. This proc
calls `datum/component/material_container/user_insert()` anyway which
performs all the checks necessary for inserting stuff into the ore silo
and `/obj/machinery/ore_silo/proc/remote_attackby()` was just repeating
its code & checks. So now inserting into the ore silo is directly
handled by the mat container without this proxy proc making the
operation slightly faster
2. Removed silo `attackby` code. Same operations can be done via
`screwdriver_act` & `crowbar_act` procs much cleaner
3. The ore silo now hooks onto signals
`COMSIG_MATCONTAINER_ITEM_CONSUMED` and
`COMSIG_MATCONTAINER_SHEETS_RETRIVED` and logs into silo when they are
triggered. This means when you insert/eject sheets from the silo the
connected machine performing the operation no longer has to do the
logging manually thus the proc `silo_log` has been removed from a lot of
places ,reducing overall code size
4. A lot of stuff that use materials from the ore silo follow this
pattern.
i.e. They first use the materials from the silo and then log it via
`silo_log` proc. This code pattern is repeated in a lot of places so
let's just merge these 2 lines with some extra sanity checks into a
single proc inside `remote_materials` itself. That's what was done and
the number of places where you log manually into the silo has been
removed further reducing code size everywhere.
5. Added auto doc & cleaned up some procs
Since logging is now done by the ore silo directly, we need a way to
pass the machine that is inserting items into the silo to the signal
handlers of the ore silo [via the `context` var]. So other code changes
elsewhere is because of this var
* General code maintenance for Mat container related stuff
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Mining mob tweaks (#77763)
## About The Pull Request
~~I wanted to do this after #77700 (wow cool numbers) but nobody has
merged it yet despite how simple it is so i'll just hope they don't
conflict.~~ Thanks san
I'm fucking about with mining mobs with the intention of making them
more interesting but not necessarily towards making mining _harder_, but
some of these changes unquestionably have done so.
These changes are mostly in response to feedback about Watchers who are
definitely significantly more threatening than previously, although some
of this is user error.
- Watchers are annoying when traversing lavaland because they use their
ability on you instantly upon acquiring a target, if you are trying to
escape other fauna this quickly becomes deadly.
- A lot of players don't really realise what the overwatch ability is
actually doing and so just complain about getting machine gunned.
- If you _do_ react properly to the ability it still makes fighting them
take a lot longer than it used to.
- The "look away" icon is hard to see in the dark sometimes
To ammeliorate these factors I have:
- Reduced watcher health by ~20%
- Display an alerted graphic over the head of the watcher every time you
trigger the overwatch.
- Multiple watchers now won't overwatch you at the same time (this made
the "penalty" volley essentially become instant death)
- The "look away" icon is rendered above the lighting plane so you can
always see it
- Added a new component which tracks how long a mob has had a specific
target.
- - Watchers will now only Overwatch you if they've seen you for at
least 5 seconds (usually they'll try and shoot at you twice before
this).
- - Goliaths will only tentacle you if they've seen you for at least 3
seconds.
If overwatch is still problematic after this I guess I can just nerf it
to not track movement at all and only respond to attacks.
## Why It's Good For The Game
I don't want to discourage miners from "actually mining" by having them
get sniped just for walking around and the added time-to-kill on these
guys could make clearing tendrils more tedious too.
## Changelog
🆑
balance: Watchers have less health
balance: You can't be overwatched by several watchers at a time
balance: Watchers won't overwatch you instantly upon seeing you
balance: Goliaths won't launch tentacles at you instantly upon seeing
you
/🆑
* Mining mob tweaks
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Miscellaneous fishing code changes. (#77739)
## About The Pull Request
This PR contains a few changes that I hadn't got to do earlier,
including: different pressure / air mixture thresholds for different
fish (if amphibious), fish being able to be fed directly without the
need of an aquarium, replacing the `available_in_random_cases` variable
with a weight define of value 0, the preset fishing sources global list
so we don't have to manually instantiate lazy fishing spots and assign
them stupid string defines, chasm detritus made into datums, a couple
balloon alerts and removal of unused code.
## Why It's Good For The Game
The fishing portal generator UI is unused, the perfect variable for the
fishing minigame is also unused.
There's no reason for chasm detritus to be an item instead of a datum.
It isn't a map spawner.
Chasm chrabs, if given the amphibious trait, should be able to survive
Lavaland/Icemoon's atmosphere.
I don't even know why I made a snowflake proc to instantiate the
evolutions global list instead of `init_subtypes_w_path_keys`
The shiny lover and wary fish traits were actually making the minigame
slightly easier.
The background icons for the UI had a zero-alpha, one pixel thin stripe
on top that needed to be colored.
Improved `fish_source/proc/dispense_reward`.
Some doc comments and a typo or two.
## Changelog
🆑
add: You can now feed fish with the can of fish feed without having to
put the fish in a aquarium first.
balance: Some fish may survive in different, harsher atmospheres if
given the amphibious trait, like chasm chrabs on lavaland.
qol: aquarium now uses balloon alerts when feeding fish.
fix: The wary and shiny lover no longer incorrectly remove difficulty
from the minigame if conditions aren't met.
/🆑
* Miscellaneous fishing code changes.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Removes some duplicated and redundant components from _datum_components() (#77615)
## About The Pull Request
As it stands, `_GetInverseTypeList()` (as used in `_JoinParent()` and
`_RemoveFromParent()`) has two issues:
1. As described in #76678, it adds duplicated components because even if
`current_type` is `/datum/component` AND we've already added it in `. =
list(our_type, current_type)`, the final line is outside the while loop
and adds it again.
2. Currently every `_datum_components` list has all of it's components
listed under the `/datum/component` key. It's used as an all-encompasing
list for when all the components an atom has need to be looped through,
but I think that's a questionable implementation. Making an entire new
list doesn't make much sense, given that accessing elements of an
associative list is very cheap, and it nearly doubles the work we do
when adding components to `_datum_components`.
Doing it with other parents at least removes the need for type checks to
get components of a given type, so I think those are fine to stay.
## Why It's Good For The Game
Closes#76678.
Avoids the questionably useful list of components with
`/datum/component` as its key from `_datum_components`.
I don't think there's anything player-facing here.
* Removes some duplicated and redundant components from _datum_components()
---------
Co-authored-by: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com>
* Automatic changelog for PR #23141 [ci skip]
* Replaces Big Mob Tiny Sprites With Togglable Clientside Transparency For Big Mobs
* Replaces Big Mob Tiny Sprites With Togglable Clientside Transparency For Big Mobs (#77361)
## About The Pull Request
This PR replaces the tiny mob sprite abilities for our large mobs with a
Toggle Seethrough ability. What this does when enabled is make yourself
transparent on your own client and makes you unable to click yourself.
With this, any sort of overlays that get added look correct while in
your tiny mob form and you can still appreciate your large size without
giving up the ability to click on targets that would be hiding
underneath your sprite.


In total, this ability is granted to all the mobs who had tiny sprites:
- Xenomorph Queen
- Space Dragon
- Megafauna (not that players ever get access to these normally, but it
might be nice for admins)
Along with all this, I've also gone and expanded the mobs who get access
to the Seethrough ability to mobs that are large but didn't have a
mini-sprite. This includes:
- Jungle giants (leaper and mega arachnid)
- Tree mob
- Festivus pole mob
- Lavaland elites
- Xenomorph Praetorian
- Wumborian Fugu
On top of all this, any simple/basic mob given a fugu gland also
automatically gains this ability.
This solution also fixes all the overlays bugs that tiny mob sprites
introduced to the game, most notably the xenomorph queen overlays being
screwy when in small form and space dragon's overlays being completely
disabled for everyone if he was in small form.
The only issue with this currently is that clicking on any overlays from
your mob will let you still click on yourself, though this issue is
pretty negligible.
## Why It's Good For The Game
Tiny mob sprite abilities clashed very hard with our overlay system,
leading to a lot of buggy and unintended behavior. This replacement
works a lot more smoothly with overlays and also requires much less
setup to give it to a mob than tiny sprites did. I would also imagine it
helps keep the fantasy of being a big monster alive by letting you still
see yourself being a big monster without it getting in your way when
trying to attack things.
## Changelog
🆑
del: Removed tiny mob sprite abilities for large mobs
add: Add a Self Seethrough ability, given to most large mobs and all
mobs affected by a fugu gland
fix: Space Dragon's overlay will no longer vanish at times
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Delete AutoChangeLog-pr-23141.yml
This is really weird
* Modular adjustments
---------
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Basic Watchers & Basilisks (#77630)
## About The Pull Request
This one is a double feature because Watchers and Basilisks share the
same typepath. You might see a couple more of those.
As is tradition I decided to fuck with them rather than just port them.
Here's what's up.
**Basilisks**


- Have a new soulless sprite which looks less like a living blue hedge.
- Walk at you and shoot you while you are not in range (just like
before).
- Become supercharged if they become "heated" by lava, lasers, or
temperature weapons. This was a feature they also previously had but
they would never encounter lava, so now it also works if you use the
wrong gun on them.
- Lose their supercharge if you cool them down.
- Otherwise pretty normal mobs.
**Watchers**
https://www.youtube.com/watch?v=kOq_Bf78k5A
Here's a traditional video of me intentionally getting hit by mechanics
(trust me its definitely on purpose)
- They glow emmissively a little bit so you can see them from further
away.
- Their eyes light up about 0.5 seconds before they are able to shoot at
you.
- No longer melee attack, instead try to stay out of melee.
- Will occasionally put you into "Overwatch", meaning they will shoot
you rapidly if you move or act while they're staring at you for a brief
time period (after which you become immune for 12 seconds, and during
which other watchers will play fair and stop shooting at you).
- If they start taking damage they will also start using their "Gaze"
attack, look away or suffer some kind of negative effect!
- - Normal watcher gaze flashes and confuses you.
- - Magmawing watcher gaze obviously burns (and briefly stuns) you.
- - Icewing watcher gaze freezes you and throws you backwards.
- Magnetically attract and eat diamonds. They also used to do this, but
just if they happened to coincidentally walk past some.
**Other accompanying changes**
All basic mobs will now adopt the "stop gliding" trait if they get
slowed down too much.
I moved behaviour for "fire a projectile from this atom" into a helper
proc because I was using it in three places and I will probably use it
in more places. There are probably other places in the existing code
which could be using this.
I think I made the basic mob melee attack forecast default a little more
forgiving, they were fucking me up too much and I am the playtester.
## Why It's Good For The Game
Another one off the list.
New tricks for old dogs.
Framework for making mobs with ranged attacks "fairer" (you can see when
they are ready to shoot you).
More (hopefully) versatile AI behaviours which we will reuse later (I
hope I'm not duplicating one someone already made).
If our players "enjoy" them enough we can give more mobs "don't look at
me" mechanics.
Removes some soul sprites.
## Changelog
🆑
refactor: Basilisks and Watchers now use the basic mob framework. Please
bug report any unusual behaviour.
sprite: Basilisks have new sprites.
add: Basilisks will go into a frenzy if heated by energy weapons or
temperature beams as well as by lava.
add: Watcher eyes will be illuminated briefly when they are ready to
fire at you.
add: Watchers can now briefly put you into "Overwatch" and penalise you
for moving while they can see you.
add: Wounded watchers will occasionally punish players who look at them.
balance: Unusual watcher variants are more likely to appear.
/🆑
* Basic Watchers & Basilisks
* Modular paths
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* mega arachnid basic monster (#77601)
## About The Pull Request
the mega arachnid is now a basic monster. he is a very tricky and
opportunistic creature he will plan his attacks carefully and only
attack the weak. he will first try to throw fleshy legcuffs at his
victims, if the victim becomes cuffed he will move in to attack him,
otherwise he will run away from him while trying to throw restraints at
his legs. while he is running away he will also release slippery acid to
slip his prey. also when he is looking for his prey, he will be
transparent for more stealth. after he finds his prey the transparency
will wear off. he is also a very stealthy creature, he will break any
lights and cameras near him and he can also climb trees to hide in them
while he is looking for a victim.
## Why It's Good For The Game
add more combat depth for the mega arachnid
## Changelog
🆑
refactor: the mega arachnid is now a basic monster ,please report any
bugs
feature: the mega arachnid now have an ability to slip victims
/🆑
* mega arachnid basic monster
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Fixes Ticked File Enforcement and Missing Unit Test (and makes said Unit Test Compile) (and genericizes the C&D list to the base unit test datum)
* Updates ignores
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Big Slappy | Giant Weapon DLC [MERGE READY!!!] (#77273)
## About The Pull Request
Big Slappy is a new illegal shovel/wrench which can be obtained through
illegals means. Parts you need to craft it can be found on the black
market uplink for a low price, but if it is not there you can find it on
the imports page on your hacked cargo console for 4400 credits usually.
Big Slappy makes you slow and you will get 10 recoil damage everytime
you hit someone and you will knock down your opponent for two seconds
while throwing people back like a baseball bat. It deals 30 damage and
is the fastest shovel/wrench out there. It can be folded into its wrench
form which will change its typing and makes it look like a wrench. It
also deals more damage in the wrench state, but also deals more recoil
damage and your target will not get knocked down. This weapon will
probably only appear in a few rounds since it has recoil damage, is slow
and costs a lot to obtain. It also has a longer meele attack cooldown.
To craft it you need 4 wrenches, 1 drill, 5 plasteel, 10 rods and 1 big
slappy parts using tools.

## Why It's Good For The Game
Cool new weapon.
## Changelog
🆑
add: Added big slappy
image: Added big slappy parts and big slappy sprites
/🆑
* Big Slappy | Giant Weapon DLC [MERGE READY!!!]
---------
Co-authored-by: Comxy <tijntensen@gmail.com>
* basic ice whelps (#77493)
## About The Pull Request
i have refactored ice whelps into basic mobs. They are now the artistic
sort as theyll mark their territory by seeking out icy rocks and carve
out statues of theirselves using their claws to serve as a warning to
players/animals that this is dragon turf and theyll also go out of their
way to burn any trees in vicinity just for the hell of it. they are now
gruesome cannibals if they find a corpse of one of their kin near them
theyll go eat it for nurishment. AS for combat, they have a new ability
which allows them to release fire in all directions however theyll only
use this ability once their enraged meter is full. to make it fair ive
given them a new component which allows them to telegraph abilities and
only do them after a delay so players can react in time for it.
## Why It's Good For The Game
basic mob refactor
## Changelog
🆑
refactor: ice whelps have been refactored to basic mobs
add: ice whelps have a new dangerous ability which theyll use once their
enraged meter is full
/🆑
* basic ice whelps
* Modular paths
---------
Co-authored-by: SMOSMOSMOSMOSMO <95004236+SmoSmoSmoSmok@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* fixes medbots made with tactical medical kits having the wrong skin (#77080)
Fixes#76996🆑 ShizCalev
fix: Medbots made with tactical medical kits now have the correct skin
/🆑
* fixes medbots made with tactical medical kits having the wrong skin
---------
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
* Give basic mob ranged attacks a cooldown (#77575)
## About The Pull Request
Atomised change from a different PR I am working on.
This changes the basic mob ranged attacks element into a component so
that it can also track an attack cooldown on the mob, preventing it from
firing until the cooldown is complete.
This was possible with simple mobs but wasn't kept going forwards when
converting things to basic ones.
## Why It's Good For The Game
Ideally player and mob behaviour should be unified as much as is
realistically possible. Currently mobs which are designed to fire a
powerful weapon slowly can blast as rapidly as the click cooldown if
placed under control of a player, which is not ideal.
This isn't currently aligned for melee attacks either but I will look at
that later.
## Changelog
🆑
fix: Player-controlled basic mobs with ranged attacks can now only fire
about as fast as AI-controlled ones.
/🆑
* Give basic mob ranged attacks a cooldown
* Modular update
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Unit Tests for AI Planning Subtrees not having required element/component (#77539)
## About The Pull Request
Hey there,
I've personally fallen for this stupid thing twice (in #77503 and #75627
(d3575161ca)), so I decided to spend a few
hours to crack out a unit test to ensure that I (and no one else) falls
for this stupid thing again.
Let me know if there's a smarter way to code something like this, but I
couldn't figure out a better way to accomodate the current framework and
be as agnostic to certain oddities as possible.
## Why It's Good For The Game
Catches stuff like this:
```txt
[2023-08-11 21:10:04.019] FAILURE #1: The mob Garden Gnome does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #2: The mob the morph does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #3: The mob the guard spiderling (946) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #4: The mob the ambush spiderling (255) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #5: The mob the scout spiderling (375) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #6: The mob the flesh spiderling (337) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #7: The mob the hunter spiderling (869) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #8: The mob the nurse spiderling (629) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #9: The mob the tangle spiderling (19) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #10: The mob the broodmother spiderling (855) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #11: The mob the viper spiderling (519) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #12: The mob the tarantula spiderling (963) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
- FAILURE #13: The mob the spiderling (100) does not have ANY instances of TRAIT_SUBTREE_REQUIRED_ELEMENT, but has a planning subtree (/datum/ai_planning_subtree/target_retaliate/to_flee) that requires it! at code/modules/unit_tests/ensure_subtree_element.dm:45
```
(ignore the part about gnomes and morphs, this was an earlier version of
the unit test. everything else was relevant and is fixed)
## Changelog
🆑
fix: Growing spiders will now retaliate against you like they were
always meant to.
/🆑
* Unit Tests for AI Planning Subtrees not having required element/component
---------
Co-authored-by: san7890 <the@san7890.com>
* Adds Summon Simians & Buffs/QoLs Mutate (#77196)
## About The Pull Request
Adds Summon Simians, a spell that summons four monkeys or lesser
gorillas, with the amount increasing per upgrade. The monkeys have
various fun gear depending on how lucky you get and how leveled the
spell is. If the spell is maximum level, it only summons normal
gorillas.
Added further support for nonhuman robed casting: Monkeys, cyborgs, and
drones can all now cast robed spells as long as they're wearing a
wizardly hat as well.
Made monkeys able to wield things again.
Wizard Mutate spell works on non-human races. It also gives you
Gigantism now (funny). If the Race can't support tinted bodyparts, your
whole sprite is temporarily turned green.
Made Laser eyes projectiles a subtype of actual lasers, which has
various properties such as on-hit effects and upping the damage to 30.
Improved some monkey AI code.
## Why It's Good For The Game
> Adds Summon Simians, a spell that summons four monkeys or lesser
gorillas, with the amount increasing per upgrade. The monkeys have
various fun gear depending on how lucky you get and how leveled the
spell is. If the spell is maximum level, it only summons normal
gorillas.
It's criminal we don't have a monky spell, and this is a really fun spin
on it. Total chaos, but total monky chaos. It's surprisingly strong,
but! it can very well backfire if you stay near the angry monkeys too
long and your protection fades away. Unless you become a monkey
yourself!!
> Wizard Mutate spell works on non-human races.
This spell is great but it's hampered by the mutation's human
requirement, which is reasonable in normal gameplay. Wizards don't need
to care about that, and the human restriction hinders a lot of possible
gimmicks, so off it goes. Also, wizard hulk does't cause chunky fingers
for similar reasons
> Made Laser eyes projectiles a subtype of actual lasers, which has
various properties such as on-hit effects and upping the damage to 30.
Don't really caer about the damage so much, this is more so that it has
effects such as on-hit visuals. Can lower the damage if required, but
honestly anything that competes against troll mjolnir is good.
> Added further support for nonhuman robed casting: Monkeys, cyborgs,
and drones can all now cast robed spells as long as they're wearing a
wizardly hat as well.
SS13 is known for 'The Dev Team Thinks of Everything' and I believe this
is a sorely lacking part of this or something. It's funny.
I want to see a monkey wizard.
> Made monkeys able to wield things again.
I really don't know why this was a thing and it was breaking my axe and
spear wielding primal monkeys. Like, why?
## Changelog
🆑
add: Adds Summon Simians, a spell that summons four monkeys or lesser
gorillas, with the amount increasing per upgrade. The monkeys have
various fun gear depending on how lucky you get and how leveled the
spell is. If the spell is maximum level, it only summons normal
gorillas.
balance: Wizard Mutate spell works on non-human races. It also gives you
Gigantism now (funny). If the Race can't support tinted bodyparts, your
whole sprite is temporarily turned green.
balance: Made Laser eyes projectiles a subtype of actual lasers, which
has various properties such as on-hit effects and upping the damage to
30.
add: Added further support for nonhuman robed casting: Monkeys, cyborgs,
and drones can all now cast robed spells as long as they're wearing a
wizardly hat as well.
balance: Made monkeys able to wield two-handed things again.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Adds Summon Simians & Buffs/QoLs Mutate
* Updates our modular file to take this into account (I hate that this exists)
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* [NO GBP] Mirror reflections no longer display progress bars or runechat. (#77446)
## About The Pull Request
I was thoroughfully worried this would had been a cursed issue until I
figured it out. Mirror reflections now use render targets to copy the
appearance of the reflected movable, not vis overlays, with a couple
caveats.
## Why It's Good For The Game
This will fix#77431.
## Changelog
🆑
fix: Mirror reflections no longer display progress bars or runechat.
/🆑
* [NO GBP] Mirror reflections no longer display progress bars or runechat.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes FRAG-12 recipe leaving reagents in the beaker after crafting (#77445)
## About The Pull Request
This PR changes the recipe to use 10 fluorosulfuric acid instead of 5
sulfuric and 5 fluorosulfuric. This doesn't function as a balance change
as sulfuric acid is actually required to craft fluorosulfuric acid, so
this shouldn't impact the difficulty of crafting it, just make it more
consistent.
This also fixes a minor grammar issue with the name of the crafting
recipe that bugged me. Just me being pedantic.
## Why It's Good For The Game
Fixes#77338.
There's probably something deeper going on with how crafting handles
materials that turn into other materials in crafts, but this is a simple
fix that makes sense in the short term to make them actually craft as
expected instead of leaving byproducts.
## Changelog
🆑 Vekter
fix: FRAG-12 shells no longer require sulfuric acid, instead needing 10
fluorosulfuric acid. This should prevent them from leaving byproducts if
crafted in a specific way.
/🆑
* Fixes FRAG-12 recipe leaving reagents in the beaker after crafting
---------
Co-authored-by: Vekter <TheVekter@users.noreply.github.com>
* [NO GBP] Fixes custom ice cream (#77477)
## About The Pull Request
Defines a name for Korta milk custom ice creams because it was
overriding the default custom ice cream recipe instead of adding it
alongside as intended
## Why It's Good For The Game
bug fix
## Changelog
I don't think anybody actually noticed this enough to justify a new
changelog lol
* [NO GBP] Fixes custom ice cream
---------
Co-authored-by: YakumoChen <king_yoshi42@yahoo.com>
* Crafting recipes without an explicit name are now named after their results. (#77465)
## About The Pull Request
What it says on the tin. The code comment accompanying the "name" var
suggests this was already the case, but it was only true for the
crafting UI.
Adjusted some other code that gets recipe names to account for this
change.
## Why It's Good For The Game
Convenient, both as a fallback and for the sake of avoiding repetition
where it isn't necessary. That said, I haven't gone out of my way to
remove pre-existing names that match the result, in case that practice
is still considered desirable.
It also fixes#77379 and similar issues.
## Changelog
🆑
fix: crafting recipes without a name, such as the mothic pizzas, will
inherit the name of the item they make
/🆑
* Crafting recipes without an explicit name are now named after their results.
---------
Co-authored-by: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com>
* Add admin blackhole(s) shuttle event (#77188)
## About The Pull Request
This adds a new **Black Hole** admin shuttle event while the escape
shuttle is in transit. The regular version spawns a small 1x1
singularity that falls through the ship. There is also a special
adminbus Kobayashi Maru version that spawns multiple black holes
rapidly.
## Why It's Good For The Game

Tell me this doesn't look fun?
## Changelog
🆑
add: Add admin blackhole shuttle event with a normal version and
suicidal version.
fix: Fix several shuttle event runtimes
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@ users.noreply.github.com>
* Add admin blackhole(s) shuttle event
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Time-Green <7501474+Time-Green@ users.noreply.github.com>
* Chen And Garry's Ice Cream: Ice Cream DLC (LIZARD APPROVED!) (#77174)
## About The Pull Request
Authored with help and love from @ Thalpy
I scream for ice cream!!

Introduces many new flavours of ice cream:
-Caramel
-Banana
-Lemon Sorbet
-Orange Creamsicle
-Peach (Limited Edition!)
-Cherry chip
-Korta Vanilla (made with lizard-friendly ingredients!)

Korta Cones! Now too can Nanotrasen's sanitation staff enjoy the wonders
of ice cream!
You can also substitute custom ice cream flavours with korta milk!
Finally, the meaty ice cream lactose-intolerants asked for is in reach!
## Why It's Good For The Game
I always thought the ice cream vat could use more flavours. The custom
flavour besides, it isn't as intuitive to rename the cone and the added
variety is good. The lack of a banana flavour already was questionable.
All the ice cream flavours used a selection of five sprites, now it's
just one sprite and better supporting more additions.
Some of the flavours don't use milk! You can't do this with the custom
flavour, making it slightly more interesting.
## Changelog
🆑 YakumoChen, Thalpy
add: Chen And Garry's Ice Cream is proud to debut a wide selection of
cool new frozen treat flavours on a space station near you!
add: Chen And Garry's Ice Cream revolutionary Korta Cones allow our ice
cream vendors to profit off the lizard demographic like never before!
code: Ice cream flavours now are all greyscaled similarly to GAGs
/🆑
* Chen And Garry's Ice Cream: Ice Cream DLC (LIZARD APPROVED!)
---------
Co-authored-by: YakumoChen <king_yoshi42@yahoo.com>
* Fixes things about goliaths: wallhacks/range hacks(no, really) and tentacles not spawning in mineral turfs; also fixes `find_potential_targets` wallhacks (#77393)
## About The Pull Request
Goliath's sand digging behaviour could potentially target a turf that's
actually unreachable by the goliath, e.g.
```
G#
#T
```
where G - goliath # - wall T - target turf. fixed that, but i think
there could be something easier here, maybe instead grabbing turfs in
goliath's `view()`? unsure
The component goliaths use to telegraph their attacks
(`basic_mob_attack_telegraph`) casts a `do_after()` to perform the
attack, but it was not actually checking for the target staying in melee
range, as it was using the source goliath as both `user` and `target`,
so it didn't actually care at all for the target. Implemented an
`extra_checks` to `Adjacent()` since that's the closest we get for melee
range shenanigans I suppose
This still allows the source basicmob to attack the target if the target
moves around the source basicmob.
`!`Goliaths were also able to summon tentacles on a target that moved
into cover and still stayed in the `find_potential_targets` target
range. Which meant more wallhacks. This was a thing for the base
`find_potential_targets`, meaning that every basic mob using it was a
dirty haxxor (or very vengeful). Fixed that by making
`find_potential_targets` also check for `can_see()` before proceeding
further down `find_potential_targets/perform()`. `!` The only exception
to this check currently are bileworms.
`!`Goliath tentacles were not spawning in mineral turfs as their
`Initialize()` checked for closed turfs before handling mineral turf
mining. Fixed that as well.
## Why It's Good For The Game

## Changelog
🆑
fix: fixed goliaths digging sand that they can't actually reach (behind
windows or inbetween closed turfs)
fix: fixed goliaths melee attacking their target despite the target
running away from goliath melee range
fix: fixed goliath tentacles not spawning in mineral turfs
fix: fixed goliaths summoning tentacles on targets that moved behind
cover but stayed in their targeting range. this applies for most basic
mobs, really, so if any basic mob was targeting you despite you hauling
ass behind cover, they shouldn't anymore
/🆑
* Fixes things about goliaths: wallhacks/range hacks(no, really) and tentacles not spawning in mineral turfs; also fixes `find_potential_targets` wallhacks
---------
Co-authored-by: Sealed101 <cool.bullseye@yandex.ru>
* 'Mirrors now display your reflection' Redux. (#77202)
## About The Pull Request
This is a revamp of #62638, which is in turn a remake of #49833, a
whooping 3 years old PR, that adds one component to the game, used by
mirrors, to do what it reads on the title. Thanks ChungusGamer for
reminding me about it.
This time with vampires not being shown in mirrors.
## Why It's Good For The Game
I'm going to post the old screenshots here since I've forgot to take
some during the latests tests, while I was busy cussing about a tiny
little detail I couldn't achieve (see the documentation on the component
path so I don't have to be verbose about it). They look more or less the
same, except the visuals look a little less cropped now, ergo
nicer-looking:

and here another from the previous attempt at PRing this:

## Changelog
🆑
image: Mirrors now display a reflection of the mobs next to them...
except for vampires.
/🆑
* 'Mirrors now display your reflection' Redux.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* [no gbp] Fixes runtimes in shuttle event and shuttle cling (#77343)
Fixes no-candidate runtime from pick() on an empty list
Fixes spawning null movables if run out of mobs to spawn
Fixes shuttle cling qdeling on Initialize due to lattices not counting
as hyperspace
🆑
runtime: Fixes runtimes in shuttle event and shuttle cling code
/🆑
---------
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* [no gbp] Fixes runtimes in shuttle event and shuttle cling
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Fixed uplink discount stocks affecting normal uplink item stocks (#77289)
## About The Pull Request
If an uplink item was discounted and purchased, it would prevent
purchase of the normal-priced uplink item, which is supposed to be
infinitely buyable. This fixes that
Closes#73560
## Why It's Good For The Game
Fixes an oversight in the uplink stock system.
## Changelog
🆑
fix: Fixed being unable to purchase regular-priced uplink items if you
bought the discounted variant of it.
/🆑
---------
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Fixed uplink discount stocks affecting normal uplink item stocks
---------
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
* Boss music stops on mob death (#77335)
## About The Pull Request
Listens for the death of people fighting w/ boss music and kicks them
out early if they die, which stops the music from playing to them.
## Why It's Good For The Game
You won't have to listen to boss music of something that just killed
you.
## Changelog
🆑
fix: Boss music cuts out when you die.
/🆑
* Boss music stops on mob death
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* fixes cursor catchers not working without widescreen (#77372)
## About The Pull Request
apparently vis x and vis y dont exist unless the object is transformed
## Changelog
🆑
fix: sniper scope and kinesis should work without widescreen
/🆑
* fixes cursor catchers not working without widescreen
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* [no GBP] Goliaths use TRAIT_NO_GLIDE instead of a movement cooldown element (#77370)
## About The Pull Request
Fikou noticed that Goliaths change their targets semi-randomly, this is
because the element I was using to curtail their movement caused the AI
pathfinding to fail and cancel the current action.
While investigating this I also realised that just "not gliding" makes
more sense than what I was doing anyway, and has fewer weird side
effects (like being unable to move diagonally).
At some point it would probably be sensible to figure out what speeds
make gliding look stupid and automatically apply this trait to
characters (maybe only basic ones rather than humans?) moving that
slowly, however I will do that in a future PR.
## Why It's Good For The Game
More reliable AI behaviour.
Better QoL when actually playing as a Goliath.
## Changelog
🆑
fix: Goliaths no longer intermittently reset their target and retarget
something else.
fix: Goliaths can once again step diagonally.
/🆑
* [no GBP] Goliaths use TRAIT_NO_GLIDE instead of a movement cooldown element
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Added Omen Spontaneous Combustion and light tube and mirror effects (#77175)
## About The Pull Request
Cursed crewmembers can randomly, extremely rarely, spontaneously combust
for no reason.
Cursed crewmembers can get zapped by nearby light tubes.
Cursed crewmembers can freak out when passing by mirrors.
To make up for these, triggering a cursed effect is slightly less than
half as likely now when walking around now.
## Why It's Good For The Game
Cursed is fun as hell, but after a certain point it gets kind of
monotonous - it's airlocks, vending machines, and the rest is too rare
to count. We need more ways to comically get hurt in the game.
You might dislike the 'reduced effects' bit but trust me it is
incredibly frickin' common to have shit happen to you. Add to the
occasional vending machine and airlock crushes the near-constant light
tubes all over the station? Yeah, that needs a toning down else it will
be just a tad too miserable to be funny. Also cause the poor janitor
unneeded stress.
## Changelog
🆑
add: Cursed crewmembers can randomly, extremely rarely, spontaneously
combust for no reason.
add: Cursed crewmembers can get zapped by nearby light tubes.
add: Cursed crewmembers can freak out when passing by mirrors.
add: To make up for these, triggering a cursed effect is slightly less
than half as likely now when walking around now.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@ users.noreply.github.com>
* Added Omen Spontaneous Combustion and light tube and mirror effects
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@ users.noreply.github.com>
* Lightgeist AI (#77287)
## About The Pull Request
The lightgeist AI controller was marked as "these aren't intended to
exist outside of player control" but this is actually untrue.
Lightgiests can appear under AI control either from a rare vent clog
event or in the "patch of eden" lavaland ruin.
As they heal things by "attacking" them, I made it so that they will
target wounded creatures to "attack" them, though they will only heal
them quite slowly, significantly less efficiently or effectively than a
medibot (for example).
While making this change I also added a couple more parameters to their
"healing hands" component, now they can no longer repair beepsky or heal
cyborg limbs. It's fleshies only.
Lightgeists will attempt to heal _anything_ they can see which is both
injured and has healable damage, which is notable because while this
makes the "Patch of Eden" ruin a nice place of respite for a wounded
miner you should be careful to let them finish up before you leave.
If they follow you out, they will attempt to heal any of the fauna that
you are attacking. Worse still, most Lavaland mobs are not signatories
of the Geneva convention and have no compunctions against killing field
medics.
The majority of listed file changes in this PR is that I made some
attempt at splitting our massive list of blackboard keys across several
files, in order to cause myself a headache based on which of my (or
other people's) open basic mob AI PRs gets merged first.
Also I fixed a bug where the goliath attack forecast would runtime if it
killed a mob which qdels itself on death (guess how I found that out).
## Why It's Good For The Game
Adds a bit more character to a lavaland area and rare event.
## Changelog
🆑
add: Lightgeists under AI control will selflessly heal any wounded
creature that they see.
balance: Lightgeists can no longer repair non-organic tissue.
/🆑
* Lightgeist AI
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Robotic organ and disease improvements (#76766)
## About The Pull Request
In the code description for the `ORGAN_ROBOTIC` flag, it says that
robotic organs are not supposed to decay or regenerate health. I went
and fixed this and added some more "robotic" behavior.
New changes for robotic organs:
- No longer heal damage passively
- No longer gain health from revival
- No longer heal in the smart organ fridge
- No longer heal from pluoxium
- Robotic ears no longer heal from ear healing items (earmuffs, etc.)
- Robotic eyes are immune to changeling blind stings
- Robotic eyes no longer heal from occuline
New changes for diseases:
- Some diseases now require an organ to work. A robotic organ will give
immunity to the disease symptom unless the disease has "Inorganic
Biology".
- The transmission methods for diseases require organs to work but
robotic organs are immune. (except inorganic biology) Airborne disease
transmission require lungs. Ingested (drunk or eaten) disease
transmission requires a stomach. Blood (inject or patch) disease
transmission requires a heart.
- Organs removed from a mob that is afflicted with a disease will be
infectious while handling or transplanting it. (again, robotic organs
are immune unless inorganic biology is present) Certain admin spawned or
special diseases are exempt from this transmission method.
- A stomach is required for nebula nausea, gastritium, carpellosis,
metabolic boost, vomit, weight loss, death sandwich poisoning,
- Lungs are required for choking, asphyxiation, cough, cold9, oxygen
restoration, sneezing, flu, cold, spanish flu, tuberculosis
- A liver is required for tissue hydration, plasma fixation, parasitic
infection
- Ears are required for deafness, sensory restoration
- A heart is required for toxolysis, heart failure
- Eyes are required for sensory restoration, hyphema
- A tongue is required for voice change, parrot possession, pierrot
throat
- Wizarditis no longer requires a head (wtf?) to function
## Why It's Good For The Game
Robotic organs should behave as intended. Not naturally healing (like
organic organs) was supposed to be their downside to counteract their
their ability to not decay upon death.
## Changelog
🆑
fix: Fix robotic organs to not gain health passively, from revival,
smart organ fridge, pluxium, occuline, and earmuffs.
add: Some diseases now require the appropriate internal organ to work. A
robotic organ will give immunity to the disease symptom unless the
disease has "Inorganic Biology".
add: Disease transmission methods now require an internal organ to be
successful. Robotic organs give immunity. (except inorganic biology)
Airborne disease transmission require lungs. Ingested (drunk or eaten)
disease transmission requires a stomach. Blood (inject or patch) disease
transmission requires a heart.
add: Organs removed from a mob that is afflicted with a disease will be
infectious while handling or transplanting it. (again, robotic organs
are immune unless inorganic biology is present) Certain admin spawned or
special diseases are exempt from this transmission method.
add: A stomach is required for nebula nausea, gastritium, carpellosis,
metabolic boost, vomit, weight loss, death sandwich poisoning
add: Lungs are required for choking, asphyxiation, cough, cold9, oxygen
restoration, sneezing, flu, cold, spanish flu, tuberculosis
add: A liver is required for tissue hydration, plasma fixation,
parasitic infection
add: Ears are required for deafness, sensory restoration
add: A heart is required for toxolysis, heart failure
add: Eyes are required for sensory restoration, hyphema
add: A tongue is required for voice change, pierrot throat
bal: Remove head requirement for wizarditis disease
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Modular parts
* Printing time
* Hah typos
* I cant spell
* Golden Shower feedback
* Posi-Time
* Update modular_skyrat/modules/synths/code/bodyparts/brain.dm
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>