* Replaces `/obj::` -> `parent_type::` (#81146)
## About The Pull Request
This just seemed like a minor error with the new syntax that popped up:
The intent of these seem to be "take our obj flags and add
`NO_DECONSTRUCTION` to it", which was perfectly serviceable in a
majority of places, as the parent type had the same obj flags as `/obj`.
But in a small handfull of places (such as any table subtypes) this was
not the case, and it caused some objects to have missing flags that they
were otherwise intended(?) to inherit.
So I replaced `/obj::` with `parent_type::` meaning rather than using
the base obj flags and then adding `NO_DECONSTRUCTION`, they use their
parent type's obj flags and then add `NO_DECONSTRUCTION`.
## Changelog
🆑 Melbert
fix: You can build on some niche tables again, such as the Wabbajack
Altar.
/🆑
* Replaces `/obj::` -> `parent_type::`
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Alien nests and some other stuf can be hit again. (#80418)
## About The Pull Request
Another small issue fixed. Thanks Melbert for telling us what's wrong
with it.
EDIT: other objects were rendered unhittable by that flags refactor PR.
## Why It's Good For The Game
Fixes#80311. I made the xmas tree indestructible because the comment to
the `NO_DECONSTRUCTION` flag didn't make a load of sense since that
doesn't stop it from getting destroyed anyway.
## Changelog
🆑 MrMelbert, Ghommie
fix: Alien nests, and some other stuff, can be physically attacked
again.
balance: x-mas trees (the ones with presents), are indestructibles.
Truly protected by a yuletide spirit.
/🆑
* Alien nests and some other stuf can be hit again.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Attack chain refactoring: Broadening `tool_act` into `item_interact`, moving some item interactions to... `atom/item_interact` / `item/interact_with_atom`
* Patches up merge skew (#80197)
## About The Pull Request
Yeah #79968 (1e76fd70b4) was not
compatible with master but no one said anything on the PR so i got
jebaited into merging it. The code should be up to the same standards
per the documentation I read (preventing thwacking the target in certain
situations while not returning anything in other situations)
master will definitely compile now though
* Patches up merge skew
* Merge conflicts
* Modular adjustments
* Removes this entirely duplicated proc...
* Update tool_override.dm
* Update weldingtool.dm
* Update tool_override.dm
* Update tool_override.dm
* Nope. Copy paste begone.
A skyrat edit is so much easier to deal with here
* Update brand_intelligence.dm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Deletes unused hydroponics code (#80156)
## About The Pull Request
`/obj/item/seeds/sample` was completely unused, ever since it's
inception in #16082
(d513f52244)
as far as I can tell
(Me when "adds plant samples for future use" never makes use of them in
the future)
All this does is complicate hydro code so it dies.
Anything it is doing should be handled by genes probably
While I was here I made sure nothing in `can_add` will break and touched
up the code a tiny tiny bit. I kept it as `SHOULD_CALL_PARENT` even
though it doesn't make use of it at the moment because every trait
currently calls parent / respects return value, so sure, why not
## Changelog
Not necessary
* Deletes unused hydroponics code
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Demotes the "electrical conductivity" flag from `flags_1` to `obj_flags` (#80033)
## About The Pull Request
Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game
Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.
I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
* Demotes the "electrical conductivity" flag from `flags_1` to `obj_flags`
* Modular
* Update misc.dm
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Retools `renamedByPlayer` into TRAIT_WAS_RENAMED (#80013)
## About The Pull Request
On the tin, this lived on the `/obj` level and polluted a lot of stuff
even though only a very small fraction of stuff actually leveraged it.
Let's make it a trait for that boolean-like behavior so I can be happier
scrolling through view-variables with less non-necessary things.
I wish we could tie it to unique sources but that whole drinking glass
thing makes me suspicious of weirder things so I think the way we do it
(source being a `REF()` to the thing itself) is probably fine enough for
the time being.
## Why It's Good For The Game
Same behavior one can expect but just a bit cleaner on the backend.
## Changelog
Nothing that particularly concerns players.
* Retools `renamedByPlayer` into TRAIT_WAS_RENAMED
* Update Blueshift.dmm
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* More code compression for reagent holder (#79796)
## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.
**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"
We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code
**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code
**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code
## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑
* More code compression for reagent holder
* Update hemophage_organs.dm
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Hydrotray consumes nutrients disregarding the mixture contents (#79794)
## About The Pull Request
Hydrotrays were using `remove_any` which led to weird behaviour when you
mix fertilizers.
It could randomly select which reagents to consume from the hydrotray,
and which reagents should stay unotuched.
With `remove_all`, the plant now simply consumes a unit of the mixture,
disregarding the contents.
## Why It's Good For The Game
This simple fix unlocks an entire new level of gameplay for botany, as
you can make mixtures that work consistently.
## Changelog
🆑
fix: Hydrotrays consume nutrients according to their proportion in the
mix, instead of randomly picking reagents to consume every cycle.
/🆑
* Hydrotray consumes nutrients disregarding the mixture contents
---------
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.
The following code changes can be summarized into points.
**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code
**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE
**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.
We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code
**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves so
the while loop has been removed
## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
* Code compression for reagent holder. Lowers plumbing reaction chamber tick usage
* Modular update
* Update alcohol_reagents.dm
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Big enough carrots get a chance to be turned into full-sized carrot swords instead of shivs (#79718)
## About The Pull Request
A funny little interaction I came up with while sitting in a toilet.
Since high potency carrots can be quite big, you could definetly cut
more than a shiv out of them. A sword, for example. A bit of reward for
making such a high-potency carrot in the first place.

## Why It's Good For The Game
Comedic purpose, and who knows, maybe someone will be a gimmick
botany-knight based on these?
## Changelog
🆑
add: Adds a chance that, when sharpened, a sufficiently potent carrot
will turn into a sword instead of a shiv.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: carlarctg <53100513+carlarctg@ users.noreply.github.com>
* Big enough carrots get a chance to be turned into full-sized carrot swords instead of shivs
---------
Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
Co-authored-by: carlarctg <53100513+carlarctg@ users.noreply.github.com>
* Fix holodeck items from being juiced or grinded with a biogenerator or pestle and mortar (#79397)
Hologram food from the holodeck could still be processed into reagents
via these methods. This has now been fixed.
* Fix holodeck items from being juiced or grinded with a biogenerator or pestle and mortar
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
* Plonts takke2 (#79484)
## About The Pull Request
Okay; Take two at this ~~because I totally didn't delete my sprites and
set myself back when all I had to do was fix a few merge issues and
instead decided to entangle myself in adding another plant.~~
This PR aims to add THREE new plants; Pepper-Corn, Saltcane and
Butterbeans.
Peppercorn can be ground for black pepper.
Saltcane can be ground for salt or dried into a seaweed sheet
replacement.
Butterbeans can be pressed into a small slice of butter, or ground for a
small amount of milk/cream and fermented for yoghurt.
I have also added fermentation of Soybeans to produce soysauce... since
that's literally how authentic soysauce is made.
## Why It's Good For The Game
I personally feel this will be good for the game as it means the kitchen
can rely on their botanists to produce higher quality ingredients and
don't have to harass other places or hemorraghe money to make good food
for the crew. Easier access to condiments allows for easier production
of a varied amount of food.
* Plonts takke2
---------
Co-authored-by: xXPawnStarrXx <53197594+xXPawnStarrXx@users.noreply.github.com>
* You can fish out of hydroponics trays (#79443)
## About The Pull Request
Adds a fishing spot to hydroponics trays.
Chances
- 33% nothing
- 33% grass
- 20% random seed (discludes rarer seeds, such as gatfruit and most
mutations)
- 10% grass seeds
- 1% strange seed
- 1% axolotl
- 1% frog
Lightly inspired by something (I think) is possible on Goon, but
obviously entirely new code.
## Why It's Good For The Game
Mostly just for laughs, they're basins of water so surely you can get
something out of it.
## Changelog
🆑 Melbert
add: Fishers can now try their luck at fishing out of hydroponics
basins.
/🆑
* You can fish out of hydroponics trays
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* New botany plant - Lanternfruit (#79204)
## About The Pull Request
So I noticed the code references an Ethereal plant called
"Lanternfruit," a sour pear-like fruit used as flavoring for a few foods
and drinks. However, this plant doesn't actually appear in the game,
this pr hopes to remedy this while also bringing some new hybrid
potential to the table for botany.
In essence, the plant contains sugar, liquid electricity, and sulfur;
making it the easiest way to obtain the latter two chems, allowing
botanists to experiment more with potential chemical recipes, and in
theme with the plant itself, make flash powder. The justification for
containing sulfur being that grapefruit gets its signature smell from a
sulfur compound.
The plant can also be fermented into voltaic wine, which has some
gimmick potential for particularly snobby Ethereals.
* New botany plant - Lanternfruit
---------
Co-authored-by: Toastgoats <63932673+Toastgoats@users.noreply.github.com>
* Adds back in corn oil to fix Glycerol's recipe. (#79285)
## About The Pull Request
fixes#78087
This PR adds back in corn oil and changes the vegetable oil reagent in
corn to become corn oil, and glycerol's recipe has been changed back to
using corn oil.
Corn also produces corn oil when grinded now, where it previously would
only produce cornmeal.
## Why It's Good For The Game
The foodening accidentally changed corn oil to vegetable oil when it was
actually a crafting ingredient for a chemical. This PR makes it still a
consumable oil so that there's the best of both worlds.
Having glycerol being able to be made by vegetable oil changed a rare
chemical into something you could get by just going to the cook's
cooking oil vat. Considering this is the chemical used to make the
instant death shotgun shell, that's pretty bad.
* Adds back in corn oil to fix Glycerol's recipe.
---------
Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
* Adds a Syndicate Monkey Agent beacon uplink item (#79012)
## About The Pull Request
Adds a Syndicate Monkey Agent beacon uplink item. It spawns a dapper
monkey that must follow your orders.
Added a monkey gun case to the uplink, which contains monkey guns!
Though they aren't very powerful.
Added a more modularlike subtype for antagonist spawners to reduce
future hardcoding.
Gave the syndicate turtleneck a monkey sprite, from SS14!
## Why It's Good For The Game
I want to see the clown driving security insane with 2-3 monkeys and an
incredible amount of pranking. Or an assistant killing everyone with his
monkey friends while wearing a monkey suit. Or a geneticist sending out
mutated monkeys to kill people. Or a scientist equipping his monkeys
with bombs or xenobiology equipment and sending them out to wreak havoc.
6 TC is only enough for two monkeys, but you can get a third if you
finish any kind of objective.
> Added a monkey gun case to the uplink, which contains monkey guns!
Though they aren't very powerful.
We can't have the monkey mafia without guns, come on. The guns are weak
and only usable by monkeys. Additionally, they're restricted to
entertainment only.
Credit to SS14 for the monky turtleneck sprite.
## Changelog
🆑
add: Adds a Syndicate Monkey Agent beacon uplink item. It spawns a
dapper monkey that must follow your orders.
add: Added a monkey gun case to the uplink, which contains monkey guns!
Though they aren't very powerful.
refactor: Added a more modularlike subtype for antagonist spawners to
reduce future hardcoding.
sprite: Gave the syndicate turtleneck a monkey sprite, from SS14!
/🆑
---------
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Adds a Syndicate Monkey Agent beacon uplink item
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Fixes some items produced by using plants not inheriting reagent purity (#79123)
## About The Pull Request
In #78322 I removed the reagent purity initialize argument from grown
items, thinking it was only used by butter. It was actually used in two
other places which I missed, in which I have implemented the same
functionality.
Rather than passing the desired purity on creation we instead just set
the purity of contents reagents after initialising the atom. This
broadly replicates what the edible component was doing, as these items
only get reagents from being edible.
## Changelog
🆑
fix: Meatwheat Clumps, Bungo Pits, and Eggplant Eggs should once again
inherit reagent purity from the grown item which produces them.
/🆑
* Fixes some items produced by using plants not inheriting reagent purity
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* new syndicate item - bee smoker (#78988)
## About The Pull Request
this adds a new item for traitor botanists they can buy for 4 tc. it
releases smoke which hypnotizes bees to follow ur every command, it can
be used on a single bee or it can be used on a hive to hypnotize all the
bees who live there. u can command the bees to enter or exit their
beehive, and u can also command them to spiral around u where they will
follow u and swirl around u to confuse whichever opponent u are
fighting, and u can also command them to attack people. the bee smoker
comes with some fuel but u can recharge it by putting cannabis into it.
the stronger the weed the more fuel it will provide
https://github.com/tgstation/tgstation/assets/138636438/18c9a350-8e24-4c49-abfa-dffb7622502f
## Why It's Good For The Game
adds a traitor item which gives a new gameplay alternative for botanist
and pacifist players. also i noticed the pet targetting datum was using
some copy paste code so i made it a subtpye of the basic targetting
datum
## Changelog
🆑
add: added a new syndicate item - the bee smoker
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* new syndicate item - bee smoker
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* A comprehensive refactor / cleanup of `bullet_hit` and `on_hit` to cut out a single bad species / mob proc (#79024)
## About The Pull Request
- Refactored `bullet_act`. Adds `should_call_parent` and refactors
associated children to support that.
- Fixes silicons sparking off when hit by disabler fire.
- Desnowflakes firing range target integrity and cleans up its
bullet-hole code a bit.
- Cleans up changeling tentacle code a fair bit and fixes it not taking
off throw mode if you fail to catch something.
- The Sleeping Carp deflection is now signalized
- Nightmare projectile dodging is now signalized and sourced from the
Nightmare's brain rather than species
- Refactored how cardboard cutouts get knocked over to be less
snowflaked / use integrity
- Also adds projectile `on_hit` `should_call_parent` and cleans up a bit
of that, particularly their arguments.
- On hit arguments were passed wrong this entire time, it's a good thing
nothing relied on that.
## Why It's Good For The Game
This is cringe.
1863eb2cd8/code/modules/mob/living/carbon/human/_species.dm (L1430-L1442)
Bullets should overall act more consistent across mob types and objects.
## Changelog
🆑 Melbert
fix: Silicons don't spark when shot by disablers
fix: Changelings who fail to catch something with a tencacle will have
throw mode disabled automatically
fix: Fixes occasions where you can reflect with Sleeping Carp when you
shouldn't be able to
fix: Fixes some projectiles causing like 20x less eye blur than they
should be
refactor: Refactored bullet-mob interactions
refactor: Nightmare "shadow dodge" projectile ability is now sourced
from their brain
/🆑
* A comprehensive refactor / cleanup of `bullet_hit` and `on_hit` to cut out a single bad species / mob proc
* Modular changes
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Distillation fixed (#79045)
## About The Pull Request
The recent changes to the food defines have broken the quality scaling
for the fruit wine. This PR fixes the regression.
## Why It's Good For The Game
Bug fix
## Changelog
🆑
fix: Distilled drink quality is fixed - can't give a mood debuff anymore
/🆑
* Distillation fixed
---------
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Fixed several Foodening taste issues. (#78481)
## About The Pull Request
Fixes a number of issues with taste that arose from the Foodening:
- Foods with special `check_liked` callbacks were having these thrown
out without effect. This made food with special "liked" conditions get
ignored - for example, security lizards didn't like donuts anymore.
- Ageusia was completely ignored when determining taste reactions (the
entire point of the quirk!).
- Foods with a toxic ingredient still gave the normal toxic reaction,
but would not always show up as inedible on examine if they were very
complex or had several liked foodtypes.
These issues have been fixed through a rewrite of the
`get_perceived_food_quality()` proc - all relevant checks are now made
within this proc rather than some coming before (and being partly
discarded).
Food quality checks take on the following hierarchy:
`silver slime toxicity > check_liked > toxic foodtypes > ageusia > liked
+ disliked foodtypes`
- **Silver slime toxicity** is about the same as before, except it will
return a toxic result early if the eater is not a jellyperson, or
increase the perceived quality by 2 if they are.
- **check_liked** will return early with a value based on the result of
the callback: -8 (toxic) if toxic, -2 (disliked) if disliked, and 2 (a
nice meal) if liked. As before, these ignore all further foodtype
calculations.
- **Toxic foodtypes** will return the toxic threshold if present.
- **Ageusia** will always return 0 - you can't taste anything, so if it
doesn't poison you it tastes completely neutral.
- **Liked + disliked foodtypes** are how things already work - save for
toxic foodtypes no longer being needlessly factored into the math.
As part of unifying two disparate sets of checks, perceived food quality
of -8 or lower now gives the toxic reaction rather than the disliked
one. This threshold would be incredibly difficult to reach via disliked
food alone, requiring four different disliked foodtypes at once in a
non-handcrafted food. This could potentially be set to a less extreme
value, like -4, if you wanted disliked-enough food to act as toxic -
but, as this would be a minor balance change, I haven't done that here.
Finally, as a miscellaneous change, a vestigial "fraction" field has
been removed from the invocation of check_liked - this was not used, and
was inconvenient for the rewritten code.
## Why It's Good For The Game
Restores several features that were lost or muddled in the Foodening,
and should not have been.
Note that, while this change generally preserves old behavior, it
diverges somewhat from the _intended_ design of the Foodening. Namely,
toxic foodtypes will _always_ give the toxic disgust/moodlet (unless
superseded by the above hierarchy), rather than being weighed against
the other foodtypes. I personally think this is fine, as I disagree with
the notion that wrapping poison in nice ingredients will make them
edible.
## Changelog
🆑
fix: Foods that have special conditions for liking/disliking them (such
as donuts for sec officers) have these conditions again.
fix: Characters with ageusia properly ignore non-toxic food types that
they eat.
fix: If you examine toxic food, it can no longer appear to you as
edible.
/🆑
* Fixed several Foodening taste issues.
---------
Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
* seedling basic mobs (#78224)
## About The Pull Request
this is a mob that was removed from the game since years ago. this pr
refactors them and readds them to the game. seedlings now can have
different colored petals!

to obtain this monster, botany can now grow them out of 'seedling' seeds
that they can find in the exotic seeds crate. this mob loves to help all
plants and when its grown out of the seed, it will help the botanists
look after their plants. it can water plants (if it finds a bucket),
remove weeds and remove dead plants. they will also use their solarbeam
ability to provide small healing to damaged plants. it will try to
refill its bucket with water if there is a water source near by. it will
also follow the orders of whoever harvested it.

traitors can buy a seed from the uplink that grows an evil version of
the seedlings, they can command them to attack people and use abilities
and to cause chaos on the station.
## Why It's Good For The Game
refacotrs the seedlings into basic mobs
## Changelog
🆑
refactor: seedlings have been refactored into basic mobs please report
any bugs
add: seedlings now can have different colored petals and can look after
botanys plants
add: seedlings are re-added to the game! they grow out of seedling seeds
obtainable from exotic seed crates or traitor uplink
/🆑
* seedling basic mobs
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Fixes lingering bugs with inedible grown food items (#78414)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/78375
Fixes #78402Fixes#78389
This is a followup to https://github.com/tgstation/tgstation/pull/78322
I am not really a fan of the solution in the above PR being overridding
the `New()` for `obj/item/food/grown`--I was told we should not be doing
that for atoms, hence my removing them, and now they're back! lol.
If we are going to do this (which please let's just do it, I'm tired of
being pinged for this and I'm sure Jacquerel is too) then we need to do
the same for the constructor of `/obj/item/grown`
This is because `to_prod` gets cast as `obj/item/food/grown` (shown
below) and the args must match the constructor for both types if we are
using a keyword there.
b44fcdedfb/code/modules/hydroponics/seeds.dm (L226)
Why do we have to do this? because keyword args in constructors do not
work unless you explicitly override the New() proc with those kwargs.
Just doing it in Initialize() is not going to work. And once again,
because `t_prod` can be either `obj/item/food/grown` or `obj/item/grown`
we have to override `New()` for both types if we want that keyword
constructor arg above to work.
## Why It's Good For The Game
Bugfix

## Changelog
🆑
fix: fixes inedible grown items (such as tower caps) becoming
unclickable when harvested, fixes their seeds disappearing when inserted
into the seed machine
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Fixes lingering bugs with inedible grown food items
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Removes some food initialize arguments (#78322)
## About The Pull Request
A prior PR added some new initialize arguments to the food subtype which
did not strictly need to be there, this caused a large number of bugs as
a result of places which already had extra initialize arguments not
correctly accounting for these new ones.
As a result I have removed these again in favour of performing the
required operations in a different way (one of these arguments was
seemingly used for butter purity and literally nothing else), for this
food and also some of its subtypes.
In some other cases where it _did_ make sense to have arguments in
`initialize` I also added them to `new` so they can be passed by name.
This will hopefully make the food more maintainable if in the future if
someone does something similar, and solve any remaining bugs related to
"not passing the arguments properly".
## Changelog
Hopefully not player facing
* Removes some food initialize arguments
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Fixes a fruit wine runtime and fixes runtime when trying to add inedible plant seeds to the seed extractor (#78319)
Fixes https://github.com/tgstation/tgstation/issues/78315
Fixes https://github.com/tgstation/tgstation/issues/69282 (same issue)
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23586 (same issue)
## About The Pull Request
@ Jacquerel end me please.
This fixes the linked issue and the other issue that was mentioned in
the comments. They are unrelated, but this is a two for one.
First bug is caused by fruit wine trying to blend `filling_color`, which
is actually unset for the majority of plants. As such it will runtime
when trying to make wine from just about every plant in the game. It
could be a nice project for someone to set those for all the plants so
they have more accurate colors when smashed or made into fruit wine...
But for now the bug is fixed by just having it use the reagent's `color`
for the blending when the `filling_color` var is unset.
---
~~As for the other issue mentioned in the comments of #78315, this is
because it turns out the code in hydroponics.dm treats `/obj/item/grown`
and `/obj/item/food/grown` the same, so we need to make sure that their
constructors match (even if we aren't using the args).~~
~~It's an issue born ultimately of bad OOP design. Both should be
basetype of obj/item/grown really but the way that food code works it
has to be this way.~~
As per @ Jacquerel 's request I am going to remove this portion of the
fix. I've fixed the runtime that occurs when adding the seeds to the
extractor but as for the fix for the mutation traits I will leave that
in their capable hands.
## Why It's Good For The Game
## Changelog
🆑
fix: fixes a bug that would cause grown inedible plant seeds (like tower
cap) to vanish from existence upon being added to the seed extractor
fix: fixes a issue that would cause fruit wine to bug out when trying to
blend its reagent color
/🆑
* Fixes a fruit wine runtime and fixes runtime when trying to add inedible plant seeds to the seed extractor
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Fixing this dead mouse related harddel (#78150)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/78085
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23510
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23506

When the foodening added some args to the constructor of
`/obj/item/food` some instances of the constructor being passed stuff
got overlooked and were not updated.
This resulted in a mob ref potentially being passed in to
`starting_reagent_purity` in some cases, ultimately resulting in this
harddel.
@ SyncIt21 this is exactly the reason I was being so paranoid with #77946
the other day. Tracking constructor uses down can be such a pain when
they aren't prefaced with a type, and are almost guaranteed to get
overlooked during refactors if the compiler does not say anything about
it.
I hate DM.
edit: and I just tested this only to find a second bug with the ice
cream. I can confirm that it is in fact working now after fixing that
one too.
<details><summary>evil ice cream</summary>

</details>
## Why It's Good For The Game
Fixing a harddel that was causing many CI failures
## Changelog
🆑
fix: fixes creamatorium not producing any suspicious ice cream, and
fixes a dead mouse related harrdel
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Fixing this dead mouse related harddel
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Watering hydroponic trays can no longer add more water than the container has. (#78005)
## About The Pull Request
What it says on the tin. Previously it would not check whether the
amount set to transfer was greater than the amount contained, and so you
could have a gardening can with 10u of water fill the tray with 100u if
you set it to that.
Also, I removed a (seemingly) pointless part of the check in line 885.
All it achieves as far as I can tell is that if you have decimal (less
than 1) amounts of water in a container, it will be incorrectly added to
the nutrient count rather than the water count.
## Why It's Good For The Game
## Changelog
🆑
fix: containers can no longer add more water to hydroponic trays than
they actually contain.
fix: watering a hydroponic tray with amounts of water lesser than 1 will
no longer be added to nutrients rather than water
/🆑
* Watering hydroponic trays can no longer add more water than the container has.
---------
Co-authored-by: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com>
* Harvesting podpeople seeds now requires explicit approval (#77526)
## About The Pull Request
Podpeople seeds have a popup saying "This tray has no soul, are you sure
you want to harvest right now?", but it will still harvest if you x out
of the tab instead of clicking cancel. This flips it so you have to
explicitely say yes for it to go through.
## Why It's Good For The Game
When you X out of a tab, you did not mean to say yes.
## Changelog
🆑
fix: X'ing out of the podpeople no soul prompt will no longer harvest
the seeds.
/🆑
* Harvesting podpeople seeds now requires explicit approval
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Spiders don't automatically grant an antag datum (#77523)
## About The Pull Request
Fixes#77501
Spider egg ghost role spawners grant the spider antag datum, rather than
the act of being a spider.
This means that gold core, mapstart, polymorph belt, and other spiders
will not have an antagonist datum.
While doing this I also made a new abstract `mob/living/basic/spider`
type which all three kinds of spider life stage (`spiderling`, `young`,
`giant`) extend from, because there was a gross amount of copied code.
Now there isn't.
Also the Flesh Spider and Event Midwife eggs now simply hatch adult
spiders instead of child ones.
This is because there is no reason for either of these to have a two
minute wait time before they get going. Midwife spiders spawned by the
event should just start spidering immediately, and Flesh Spiders are
made by changelings and shouldn't be effected by measures introduced to
balance the spider gamemode.
Eggs which are laid during a round and _can_ hatch into midwife spiders
still hatch baby spiders.
Also I swapped some white pixels on the animation of the ambush
spiderling for a different colour because they looked bad.
## Why It's Good For The Game
While the policy is always "if you turn yourself into something, you're
not an antagonist" the presence of the antag datum still confuses
people. Plus that code was gross and I didn't like it.
## Changelog
🆑
fix: Giant Spiders only have an antag datum if created by the round
event.
balance: Flesh spider eggs hatch into adult spiders instead of baby
spiders.
balance: The eggs spawned by the start of the spider infestation event
hatch into adult Midwife spiders instead of baby ones.
/🆑
* Spiders don't automatically grant an antag datum
* Modular paths
* Modular paths
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Biogenerators can be unwrenched (#77366)
## About The Pull Request
Biogenerators can be unwrenched
## Why It's Good For The Game
If significantly more round impacting things like smoke machines and
hydro trays that drop plants that turn into meth bath salts krokodil
smoke can be unwrenched i dont see why this cant
## Changelog
🆑
qol: Biogenerators can be unwrenched
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Biogenerators can be unwrenched
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
make the mushroom a basic monster (#76570)
## About The Pull Request
i maked the mushrom from the simple monster to a basic monster so he is
dont a simple anymore but now he is a basic.i followe the instrucions in
the guide learn-ai.md to maked this pr. i also give the mushrom a extra
feture he will go and hunt food mushroms on the floor to ate them and
when he ate them he will heal small his hp
## Why It's Good For The Game
he is now a basic monster so he is not simple anymore. it is good
because he is a more advance ai and he will stil go and do the same stuf
he did when he is simple but he is now a basic
## Changelog
🆑
refactor: Mushrooms have been refactors, please report any
bugs/unintended behavior
add: the mushroom basic mob can eat the mushroom plant to heal itself
/🆑
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
* Adds a unit test to stop elements from using identical lists for their arguments. (#76322)
## About The Pull Request
Ok, so a few days ago I made an issue report about multiple instances of
identical elements being generated because of uncached lists.
ninjanomnom (the mind being the element datums) cleared it up and said
an implementation of GetIdFromArguments() that also checks the list
contents wouldn't be worth the performance cost, while adding that a
unit test should be written to check that it doesn't happen at least
during init, which should catch a good chunk of cases.
Also, i'm stopping RemoveElement() from initializing new elements
whenever a cached element is not found. Ideally, there should be a focus
only unit test for that too, but that's something we should tackle on a
different PR.
Some of the code comments may be a tad inaccurate, as much as I'd like
to blame drowsiness for it. Regardless, the unit test takes less than
0.2 seconds to complete on my potato so it's fairly lite.
## Why It's Good For The Game
This will close#76279.
## Changelog
No player-facing change to be logged.
* Adds a unit test to stop elements from using identical lists for their arguments.
* Fixes unit test
* seeing double
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* made the bee a basic insect (#76971)
## About The Pull Request
the bee now a baisc insect he will now go to find his home and he will
go and pollinated the plants and helped the queen make children by
polliniting the plants and he will. the queen will leve the hive more
rarely than the normal bees so she can stay in the hive to make kids
## Why It's Good For The Game
the bee now is a basic insect so it means he have a better ai
## Changelog
🆑
balance: the bee now can fly over the machines so its easy for him to go
to the hydroponics machine
fix: player bees now will not be stuck inside the hive if he entered it,
they can now leave it
fix: fixed a har deleted when the hive is deleted all the bees still
have a refence to the hive now its fixed
fix: now when a player interacted with the bee hive the bees will now
leave the hive to defend the hive (it was glitched)
refactor: the bees now are a basic insect.
/🆑
* made the bee a basic insect
* Merge conflict
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Stabilizes code that flicks overlays to view/all clients (#76937)
## About The Pull Request
Rather then using images and displaying them with client.images, we can
instead simply make an object, give it the passed in image/MA's
appearance, and then vis_contents it where we want.
If you want to animate things, you can just use the atom we return from
the proc call.
This ends up costing about 25% of the best case scenario (one guy
online)
It will save more time with more users, but it also allows us to avoid
the hypersuffering that is passing GLOB.clients into the flick proc. So
I think I'm happy enough with this.
For context, here's average per call cost for flick_overlay_view() right
now.
It winds between 5e-5 and 1e-4. With these changes we should pretty
consistently hit the low end of this, because none of our work really
varies all that much.

(I was using sswardrobe for this, but it ends up being a lot slower so
like, why yaknow)
```
/atom/movable/flick_visual
New: 3.65625ms
Provide: 7.4375ms
Qdel: 9.4375ms
Stash: 9.46875ms
```
## Why It's Good For The Game
Using our tools should not make your code eat cpu time for no reason.
Hearers is expensive, iterating clients is expensive, let's not be
expensive.
* Stabilizes code that flicks overlays to view/all clients
* Not every client needs to see this
* and these could be using SECONDS
* grr DM
* Convert these modular files to seconds too
* Update dance_machine.dm
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Icon folder cleaning wave one
* Fixe a merge conflict
* Fixes some more merge conflicts
* Fixes some modular icon paths
* Fixes even more modular icon paths...
Hopefully that's the last of them
* Fixes some merge discrepencies
* More merge issues
* ok
* not ok
---------
Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
* Coroner additions and tweaks (#76534)
## About The Pull Request
Serrated bone shovels can be created with any kind of shovel now, not
just a spade (???)
Serrated bone shovels can be used in place of circular saw in most
surgeries.
Added a duller (still deadly) variant of the serrated bone shovel as
coroner mail.
Autopsy scanners now act as advanced health analyzers on dead and
seemingly-dead people.
Increased the force, throwforce, and wound bonus of inert ritual knives
and scythes.
Coroner gloves can quickly apply medicine like nitrile gloves.
## Why It's Good For The Game
> Serrated bone shovels can be created with any kind of shovel now, not
just a spade (???)
Weird ass bug.
> Serrated bone shovels can be used in place of circular saw in most
surgeries.
It's serrated, it's cool, it's rare, it has a fast toolspeed.
> Added a duller (still deadly) variant of the serrated bone shovel as
coroner mail.
Very thematic for the coroner, should probably also be a heirloom item
but whatevs. Weaker so there's still a reason to seek out the OG.
> Autopsy scanners now act as advanced health analyzers on dead and
seemingly-dead people.
Scanning corpses is pretty important during surgery - it tells you how
much blood they have, organ damage, diseases... these things don't
appear in the surgical computer readout, which means the coroner has to
go out of his cave to pick up a boring light blue meatbag wound scanner.
This also incentivizes coroners to do their job by giving them something
cool that only works on dead bodies.
> Increased the force, throwforce, and wound bonus of inert ritual
knives and scythes.
These two options in the MortiDrobe are pretty frickin' badass,
especially with how SICK the Coroner looks with them, double especially
in combat.

However, there's the large issue that as actual weapons they're really,
really weak. Not enough damage, when I use them in combat I both feel
badass but also get a nagging feeling in the back of my mind that I'm
intentionally gimping myself, and with only 10 damage I can *really*
feel it. I find it unfair that these are objectively worse than a
welding tool or even a Butcher's Cleaver when they're a lot more
involved to find, and scarce besides. These arguments apply equally to
the Wizard's ritual knife, and the scythe.
Additionally on the scythe, the crew really needs more good ghetto
weaponry that isn't the boring same ol' of baseball bats, spears,
cleavers... and making scythes useful is a great way to help bridge that
gap. They deal a satisfying amount of damage now, with the clear
downside, of course, being that they're bulky and hard to lug around.
> Coroner gloves can quickly apply medicine like nitrile gloves.
'Fast medicine' doesn't just cover sutures, it also covers medical gel.
Specifically, sterilizer gel. I find it annoying that the Coroner is
encouraged to give up his drip for the boring life-saver nitrile gloves,
because the difference in applying time really does make a difference -
it makes gel applying go from annoying to smooth, which is important
considering the whole purpose of sterilizer gel is to make surgeries go
faster. The Coroner has surgery and thus medical locker access to begin
with, so this isn't a balance problem, (and nitrile gloves are found by
the dozen anyways) especially with how rare the coroner gloves are.
## Changelog
🆑
fix: Serrated bone shovels can be created with any kind of shovel now,
not just a spade (???)
add: Serrated bone shovels can be used in place of circular saw in most
surgeries.
add: Added a duller (still deadly) variant of the serrated bone shovel
as coroner mail.
add: Autopsy scanners now act as advanced health analyzers on dead and
seemingly-dead people.
add: Increased the force, throwforce, and wound bonus of inert ritual
knives and scythes.
add: Coroner gloves can quickly apply medicine like nitrile gloves.
/🆑
* Modular Scythes
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>