* Stock Part Datumization Complete (#72559)
So i accidently reverted all my commits in #72511 when resolving a merge
conflict So ummm yeah fuck my bad anyway
Finishes what was started in #71693 and completes the
[initiative](https://github.com/tgstation/dev-cycles-initiative/issues/1)
Except for `obj/item/stock_parts/cell` and its subtypes. All machines
now use `datum/stock_part` for its requested components & component
parts
Not sure if i caught every machine & stuff in the game so merge with
caution
🆑
code: datum stock part for every obj stock part
refactor: all machines & dependent experiments to use datum stock parts
/🆑
* Fixes a teeny tiny Funce mistake :)
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Makes a few previously microwave only cooking options also doable in an oven (#72473)
## About The Pull Request
Make the following list of things that can only be cooked in the
microwave currently also able to be cooked in an oven:
Uncooked rice
Raw spaghetti
Wet leather (YUM!)
Aloe
Onion slices
Cheese curds
Eggs, rotten or not
Ready donk
## Why It's Good For The Game
We've already got stuff that's microwave-oven interchangeable (donk
pockets), sometimes you don't have a microwave and you're just locked
out of more than a few recipes because something that could easily be
made in an oven isn't coded to be. The simple solution is just not have
that be the case.
## Changelog
🆑
qol: A few recipes that were microwave only (like boiling rice, heating
ready donk, so on) can now also be made in an oven
/🆑
Co-authored-by: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com>
* Autounlock techwebs are shared between machines that use them. (#72515)
## About The Pull Request
Did you know that for every Autolathe, Limbgrower, Biogenerator, ORM,
and Smelter that was built, an entire new techweb was made? The average
round has 2 ORMs (smelters count) if not more from ORM deconstruction
objective, 2 biogenerators, several autolathes and generally 0-1
limbgrower, I think there's more techwebs being created than we need.
Creating a whole techweb was a pretty terrible way to optimize this, so
I made a global list that stores these techwebs. Created on demand,
these autounlocking techwebs now share between the machines that use
them. It also generate all hacked nodes which will be visible if the
machine is hacked, instead of 'researching' them for each hacked
individual machine.
The 'specialized' techweb subtype was removed because its sole purpose
was to allow autounlocking to be a subtype of it. Now autounlocking is
just the direct subtype. I also removed mechfab autounlocking type
because it wasn't used, mechfabs use techwebs directly.
Autolathes and Limbgrowers now locally store 'imported designs' which
are things uploaded from technology disks. Outside of this, the
autounlocking techweb subtype now stores 'hacked designs' which unlocks
when the machine is emagged.
While doing this, I saw ORMs and Biogenerators had disks you can insert
into them, but I did not find anything that can actually be uploaded to
them (I saw Alien Alloys as a possibility, but there's no such disk to
allow uploading this alloy to the machine, and I didn't think an entire
system for 1 single alloy was worth keeping around), so I removed this
unused feature from both machines.
I merged 'Hacked' and 'Emagged' categories because they served the same
purpose, 'hacked' being on hacked autolathes and 'emagged' being on
hacked (emagged) limbgrowers.
Tech disk techwebs (which is created every time a disk is made, however
I hope to change this in the future) into it's own subtype, so admins
understand where its from when looking in VV panel (because I was
confused when I saw them at first).
``autolathe_crafted`` proc was removed because it was entirely unused
too.
Now it looks like this, which I consider an improvement:

## Why It's Good For The Game
We no longer initialize a brand new techweb for no reason whatsoever.
Each techweb made is making entire lists of experiments and research
papers, all of which is never to be seen in-game and is completely
useless to the player. Cutting down on these techwebs is a good first
step to this needless initializing.
## Changelog
🆑
qol: Removed the tech disk part of the ORM's UI as it was entirely
unused, now it's a little more compact with less scrolling needed.
refactor: Autolathes, Limb growers, Biogenerators, ORMs and Smelters now
share techwebs with other machines of their types, rather than all make
new techwebs each time. This means they only build their nodes once,
including hacked ones. Instead of researching nodes on hacking the
machine, they now show hacked ones depending on if it's hacked.
/🆑
Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com>
* Autounlock techwebs are shared between machines that use them.
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com>
* Biogen shows default reagent container icons instead of beakers (#72247)
## About The Pull Request
With the new crafting menu some reagents now have default container
assigned.
I applied these to visualize reagents in biogen UI too.
<img alt="060ybChTkI"
src="https://user-images.githubusercontent.com/3625094/209483256-e4159a05-46ae-47b8-bc42-9d003cf6c303.png">
## Why It's Good For The Game
Better representation of a reagent.
## Changelog
🆑
qol: Biogenerator shows default reagent containers instead of beakers
/🆑
* Biogen shows default reagent container icons instead of beakers
Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
* Food code sweepups + heart boxes have more chocolate variety (#72127)
- Chocolate boxes now contain bonbons (formerly tiny chocolates),
truffles, and peanut butter cups
- Slices of bread now taste like their respective breads instead of
tasting "indescribable"
- Fiesta skewers have food categories now
- Misc food file has had more split out of it into sweets.dm,
vegetables.dm, and packaged.dm
- Removed a bunch of redundant food_reagent code
- Changed the sugar in clown cakes' food_reagents to banana juice
- Increased the amount of vitamin in pound cakes (it's four whole cakes
and the amount of vitamin doesn't go up?)
* modular foods
* Fixes the first merge skew of 2023 (#72414)
https://github.com/tgstation/tgstation/pull/72232
skews with
https://github.com/tgstation/tgstation/pull/72127
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* [ready] unit tests all worn icons (#72370)
Fixes#71692🆑 ShizCalev
code: Added a unit test for ALL worn icons.
fix: Fixed a bunch of broken worn icons!
/🆑
* [ready] unit tests all worn icons
* Should have fixed most of the failures now
* Here, hopefully that should fix what was left
* Okay maybe it just hadn't been fixed yet
* I can be a bit dumb sometimes
* Okay, now it's going to work, I promise
* I'm so tired of this
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Crafting/Cooking menu update
* Yeeted away all of the merge conflicts, time to fix the code
* Okay, now it compiles, and after testing, it seems to work just fine
* Actually, early addition of an upstream fix, so those that don't have hunger can still open the cooking menu
* Fixes the units tests by removing the extra comma in the Stuffed Muli Pod recipe
Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Smoothing groups optimization, save 265ms with configs, more on production & w/ space ruins (#71989)
This one is fun.
On every /turf/Initialize and /atom/Initialize, we try to set
`smoothing_groups` and `canSmoothWith` to a cached list of bitfields. At
the type level, these are specified as lists of IDs, which are then
`Join`ed in Initialize, and retrieved from the cache (or built from
there).
The problem is that the cache only misses about 60 times, but the cache
hits more than a hundred thousand times. This means we eat the cost of
`Join` (which is very very slow, because strings + BYOND), as well as
the preliminary `length` checks, for every single atom.
Furthermore, as you might remember, if you have any list variable set on
a type, it'll create a hidden `(init)` proc to create the list. On
turfs, that costs us about 60ms.
This PR does a cool trick where we can completely eliminate the `Join`
*and* the lists at the cost of a little more work when building the
cache.
The trick is that we replace the current type definitions with this:
```patch
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_FLOOR_ASH)
- canSmoothWith = list(SMOOTH_GROUP_FLOOR_ASH, SMOOTH_GROUP_CLOSED_TURFS)
+ smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_ASH
+ canSmoothWith = SMOOTH_GROUP_FLOOR_ASH + SMOOTH_GROUP_CLOSED_TURFS
```
These defines, instead of being numbers, are now segments of a string,
delimited by commas.
For instance, if ASH used to be 13, and CLOSED_TURFS used to be 37, this
used to equal `list(13, 37)`. Now, it equals `"13,37,"`.
Then, when the cache misses, we take that string, and treat it as part
of a JSON list, and decode it from there. Meaning:
```java
// Starting value
"13,37,"
// We have a trailing comma, so add a dummy value
"13,37,0"
// Make it an array
"[13,37,0]"
// Decode
list(13, 37, 0)
// Chop off the dummy value
list(13, 37) // Done!
```
This on its own eliminates 265ms *without space ruins*, with the
combined savings of turf/Initialize, atom/Initialize, and the hidden
(init) procs that no longer exist.
Furthermore, there's some other fun stuff we gain from this approach
emergently.
We previously had a difference between `S_TURF` and `S_OBJ`. The idea is
that if you have any smoothing groups with `S_OBJ`, then you will gain
the `SMOOTH_OBJ` bitflag (though note to self, I need to check that the
cost of adding this is actually worth it). This is achieved by the fact
that `S_OBJ` simply takes the last turf, and adds onto that, meaning
that if the biggest value in the sorting groups is greater than that,
then we know we're going to be smoothing to objects.
This new method provides a limitation here. BYOND has no way of
converting a number to a string at compile time, meaning that we can't
evaluate `MAX_S_TURF + offset` into a string. Instead, in order to
preserve the nice UX, `S_OBJ` now instead opts to make the numbers
negative. This means that what used to be something like:
```dm
smoothing_groups = list(SMOOTH_GROUP_ALIEN_RESIN, SMOOTH_GROUP_ALIEN_WEEDS)
```
...which may have been represented as
```dm
smoothing_groups = list(15, MAX_S_TURF + 3)
```
...will now become, at compile time:
```dm
smoothing_groups = "15,-3,"
```
Except! Because we guarantee smoothing groups are sorted through unit
testing, this is actually going to look like:
```dm
smoothing_groups = "-3,15,"
```
Meaning that we can now check if we're smoothing with objects just by
checking if `smoothing_groups[1] == "-"`, as that's the only way that is
possible. Neat!
Furthermore, though much simpler, what used to be `if
(length(smoothing_groups))` (and canSmoothWith) on every single
atom/Initialize and turf/Initialize can now be `if (smoothing_groups)`,
since empty strings are falsy. `length` is about 15% slower than doing
nothing, so in procs as hot as this, this gives some nice gains just on
its own.
For developers, very little changes. Instead of using `list`, you now
use `+`. The order might change, as `S_OBJ` now needs to come first, but
unit tests will catch you if you mess up. Also, you will notice that all
`S_OBJ` have been increased by one. This is because we used to have
`S_TURF(0)` and `S_OBJ(0)`, but with this new trick, -0 == 0, and so
they conflicted and needed to be changed.
* Sorting how did I miss it
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Funce <funce.973@gmail.com>
* Unfuckies pod blood (#72323)
I broke it in #72220
Thanks to @ Fikou for catching this
list(variable = 0.1) doesnt work on byond, so I last-minute improvised
and changed it to
list("[variable]" = 0.1), using a string instead of a typepath. I
already tested it thoroughly so decided it was probably good without
thinking of it anymore
🆑
fix: fixes pod blood I swear
/🆑
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
* Unfuckies pod blood
Co-authored-by: Time-Green <timkoster1@hotmail.com>
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
* Botany fix and clean up (#72234)
## About The Pull Request
On local server I found out that hydroponic trays had weird behaviours.
Forexample:
If you use radium on trays, the subtype of radium which is uranium would
also get in effect meaning:
You add radium to the tray and get radium AND uranium effect on it.
Radium wasnt the only reagent others would show the same effect.
So I fixed them
I also cleaned up some code bits, there were some inconsistency with the
on_hydroponics_apply proc, I made them all consistent. There was also
for some reason a duplicate on_hydroponics_apply proc for blood reagent
one of them was unfinshed
## Why It's Good For The Game
Botany will behave correctly and the code is more cleaned up
## Changelog
🆑
fix: using chemicals on botany wont have unrelated side effects
/🆑
* Botany fix and clean up
Co-authored-by: Salex08 <33989683+Salex08@users.noreply.github.com>
* Biomass overlay thresholds use sine function (#71859)
In recent PRs, biogen cap got raised to 5000 units, which is far more
than people usually have during most shifts.
This makes the biomass overlay icons pointless, because it will always
have the same icon untill you go above 714 biomass, which is higher than
the previous cap and more than anyone needs for normal tasks.
I made the overlay use sine interpolation to make the icon change faster
at lower levels, but slower when the visual cap is near.
Linear thresholds (Old):
Min biomass at 1, 714, 1428, 2142, 2856, 3570, 4285
Sine thresholds (new):
Min biomass at 1, 440, 930, 1420, 1940, 2560, 3300
* Biomass overlay thresholds use sine function
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Natural booze (#71842)
## About The Pull Request
Makes fermented booze take quality and power from the endurance and
lifespan stats of the fruit.
These are the most neglected plant stats, and usually plants that have
these high by default, do not have much nutriments.
This change makes fermented drinks a bit more desirable because your
effort is reflected in their stats. And you get better mood buff by
making them higher.
Fruit wine and other reagents get a "Natural" prefix when made through
fermentation.

I consider turning it into a more general solution so that dispensed
drinks will also have purity and if the barman wants to aim for an
absolute quality cocktail, he may want to cooperate with botany like
chef does.
## Why It's Good For The Game
Fermented drinks are now a bit special compared to the free booze
dispenser variants.
## Changelog
🆑
add: Fermented drinks give mood buffs according to the stats of
fermented fruit
/🆑
* Natural booze
Co-authored-by: Andrew <mt.forspam@gmail.com>
* IV drip injects only to injectable things (#71709)
## About The Pull Request
Previous PR https://github.com/tgstation/tgstation/pull/71217 made IV
drip work with any containers which, after a while led to some undesired
cases.
People could add reagents to medipens, making them free hypospray.
Refilling extinguishers with things other than water. And just
sabotaging pills, patches, etc.
Now IV drips inject only into injectable containers.
I added INJECTABLE flag to a few other things that were not originally
injectable - hydroponic trays, smoke machine, chem separator. May later
whitelist some other items that may be injectable by logic, but don't
lead to undesired accidents.

## Why It's Good For The Game
Free sleepy pens are not OK.
## Changelog
🆑
fix: IV drip now injects only into injectable things
/🆑
* IV drip injects only to injectable things
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Fermentation and barrel refactoring (#71475)
## About The Pull Request
The barrel was essentially a grinder that also added a lot of wine on
top of other reagents. Now it converts only nutriment and vitamin into
the wine.
Also the Auto-Distilling Composition plant gene didn't make fruit wine
and gave only half of the distilled drink volume.
- Now the fermentation is consistent and it happens in one place - the
`ferment()` proc of the plant. Both gene and barrel use it.
- Added some sounds and ballon alerts.
- Increased the barrel volume to 600, as other stationary reagent
containers have even more.
https://user-images.githubusercontent.com/3625094/203582992-8d31cff6-15bd-416f-b2fb-c7a0f6cfbcb4.mp4
## Why It's Good For The Game
Barrels are cute, we should use them more.
## Changelog
🆑
qol: barrel works with the plant bag now
balance: barrel volume increased to 600 units
fix: barrel now properly converts nutriments into wine
fix: added 4% nutriments to sugar cane, to allow rum creation
refactor: barrel logic and fermentation refactoring
/🆑
* Fermentation and barrel refactoring
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Biogen Refactor and Code Cleanup, Faster Biomass Conversion and No More Biomass Cap! (#71563)
## About The Pull Request
So, I looked at the Biogenerator code and there was just, _so_ much old
and undocumented code, that I just spazzed out and started documenting
and refactoring everything. There's now a lot less usage of contents
lookups and for loops, and _almost_ everything is documented, now, too.
As for the changes, as you can see in the title, I made biomass
conversion faster. How much faster, you ask? 5 times faster with default
parts, up to 20 times faster with the best parts. It was painfully slow,
and that's not fun for anyone.
I also lifted the biomass cap. It wasn't useful, it wasn't fun, and
Melbert didn't really agree with it either. However, I enjoyed the look
of the biomass going up, so I gave it a max visual amount of 5000, so
you get to see it gradually filling up as you put your first 5000
biomass in. After that, you do you, chief. Watch the funny numbers go up
all you want.
I also improved the maths so that it wasn't just rounding stuff
constantly, and also gave a little bit more insight on how much biomass
everything would cost you, down to two decimals. If there's no decimals,
it won't show them, however.
<details>
<summary>Here's what that looks like now:</summary>
That's one screenshot per different decimal places, there's no trailing
zeros because I think we can all universally agree that those look bad
in this kind of setting.



</details>
There's now also more information displayed when you examine the biogen,
namely, how many items it has stored, and how many it can hold. I also
fixed the formatting a bit, so it looks ever so slightly cleaner.
Other than that, I just improved the code everywhere I saw it to be
fitting, there shouldn't be any single-letter variables in there
anymore, and the code should be more spaced out. Honestly, at this
point, I wrote most of this code six hours ago so I don't remember all
of it, and I'm too lazy to go through and check what I've changed again.
Diff and changelog are there for that.
## Why It's Good For The Game
So, I'll be honest, there were two big reasons that motivated me to do
this. First of all, the biomass cap. That was a little silly, anyone
that has spent more than one shift in Hydroponics knows that you usually
only put Watermelons in the biomass generator as they're usually the
thing that nets you the most biomass. Botanists will generally stock the
fridges first, and if they have a lot of excess, they'll put it in the
generator if they want, but that's rarely what was done. I've talked
with @ MrMelbert about it and he gave me the go-ahead, as can be seen
here:

The other reason was the excruciatingly slow processing speed, which
I've fixed. So we're good now. :)
## Changelog
🆑 GoldenAlpharex
refactor: Went through and refactored a lot of the old code of the
biogenerator, and made multiple improvements to its logic, which should
hopefully make it behave more consistently. Nearly all of it is now also
fully documented, so as to make it easier for anyone else that has to
sift through it in the future.
qol: The biogenerator now processes items five times faster, up to 20
times faster if properly upgraded!
qol: The biogenerator is no longer capped on biomass. Its visuals will
change up until 5000 biomass, but you're free to go as high as you'd
like with it! Sky's the limit!
fix: Fixed the logic of the biogenerator that would make it so the
amount of biomass used for recipes was wildly inconsistent. Now, there's
no more back-end rounding up, it's all on the front end when it needs to
be, so there's no loss or gain of biomass when there shouldn't be.
spellcheck: Fixed a capitalization issue with the seaweed sheets in the
biogenerator recipes.
spellcheck: Fixed multiple inconsistencies between the messages sent to
your chat by the biogenerator.
/🆑
* Biogen Refactor and Code Cleanup, Faster Biomass Conversion and No More Biomass Cap!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Save 0.6-0.7s of init time by splitting registering lists of signals into its own proc, and optimizing QDELETED
* modular RegisterSignals
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
* Gives bread and cake slice_types and adds screentip verbs to proccessed foods (#71449)
## About The Pull Request
A side effect of my pizza PR #71202 I added contextual screentips as
part of processable.dm. In doing this, I noticed that with a few
exceptions, almost every single bread and cake type copies the proc
exactly the same for every single child of cake or bread, so I put the
proc on the parent of bread and cake and gave them slice_types, making
them more similar to pizza.dm
For everything else I've changed the default that I put in
processable.dm into "slice" or "cut" for things that use the knife and
"flatten" for things that use the rolling pin.
Finally, you can slice bread with saws now, because I think its silly
that only pizza gets this luxury.
## Why It's Good For The Game
Because it wasnt the focus of #71202 I didn't mess with screentips
outside of the pizza file a lot, but now that it's merged I figure I
should go and do that.
As Bread and Cake's processables are almost fully standardized it seems
silly for them to call on the proc 12 times in the same document so I
did this, which also allows for more versatility in editing how they
work as well allow people to, if they want to, add more tool behaviours
in the future without adding in 12 lines of code. Also means that people
who want to add new cake or bread have one less thing to do.
## Changelog
🆑
add: you can saw bread with a saw into bread slices
qol: added screentip verbs to a bunch of food files
code: bread and cake now have slice types and all only have one call on
the processable.dm proc
/🆑
* Gives bread and cake slice_types and adds screentip verbs to proccessed foods
* sco'ish
* fuck me ig
Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
* Biogen backend optimization and bugfix (#71460)
## About The Pull Request
In previous PR I didn't touch the backend much, but I've learned that
while loop the biogen was using is not very good when we have the
`process()`.
I replaced that with a cleaner `process(delta_time)`, it should also be
less resource intensive.
No real player-facing changes.
Also fixed a bug with non-stackable items not spawning more than 1 copy
on purchase. This was working on dev branch but somehow broke recently.
And increased the size of the most important buttons slightly, while I
was at it:

## Changelog
🆑
fix: biogenerator now properly gives non-stackable items
refactor: biogenerator backend optimization
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Biogen backend optimization and bugfix
Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* [NO GBP] Biogen power usage hotfix (#71443)
## About The Pull Request
Fixes the active power usage for biogenerator (300kw -> 3kw active
usage) because of wrong time conversion change in
https://github.com/tgstation/tgstation/pull/71175
There is also another bug with biogen, that looks like a regression of
some other PR as it wasn't there before the merge:
`build_path(drop_location(), amount)` ignores amount for non-stackable
items. Not sure why it got broken.
## Changelog
🆑
fix: biogenerator active power usage fix
/🆑
* [NO GBP] Biogen power usage hotfix
Co-authored-by: Andrew <mt.forspam@gmail.com>
* Biogenerator tweaks, leather makes more belts and clothing
* merge conflicts
* medbando is a leather recipes like the others, updated meat product biogen design
Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
* Changing z-level after being cleaned no longer makes the bubbles re-appear (#71201)
* Fixes plants showing up as errors when made into cells when their icon isn't in the same file as the other plants (#71247)
Basically, any cell made from a plant that didn't have its icon located
at the same place as all the other plant icons would turn into an error
(with the proper battery overlay though) when turned into a botanical
cell.
This fixes that, which means that it'll be one less thing to think about
when `harvest.dmi` gets eventually split into multiple files.
* Fixes the arms and legs not being printable from the Limb Grower (#71143)
Basically, https://github.com/tgstation/tgstation/pull/70422 broke the
limb grower's ability to grow limbs, because it was still, for instance,
trying to spawn a `/obj/item/bodypart/r_leg` for right legs, instead of
a `/obj/item/bodypart/leg/right`, because it uses the `id` variable of
the design associated with the limb/organ being grown.
As such, I simply updated the `id` variable of the different arms and
legs, and now they all work as expected again, instead of throwing a
runtime!
* Funny merge skew from banana (#71039)
When a food feature PR and a food refactor come together, and get merged
without re-running checks, something very funny happens.
A merge skew.
Edible component uses inherent component so this is fine.
* Funny merge skew from banana
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Clowns will now always like bananas. (#70919)
## About The Pull Request
Clown's liver makes them like bananas, ignoring their racial food
preferences.
## Why It's Good For The Game
I don't think clown moths should vomit from eating bananas. They are
clowns, after all.
Also clowns are healed from eating them, so it's a bit silly that they
vomit from their funny medicine.
## Changelog
🆑
balance: Non-human clowns enjoy eating bananas now.
/🆑
* Clowns will now always like bananas.
Co-authored-by: Striders13 <53361823+Striders13@users.noreply.github.com>
* Adds a bar to the biogen to show how full a container is (#70407)
About The Pull Request
Adds a bar to the UI of the biogen to show how full the container inside is
2022-10-08.23-47-27.mp4
I tidied it up a little bit but forgot to record it so here's a screenshot of how it looks now
image
Why It's Good For The Game
Helpful so you don't have to keep doing math over how many u's of reagents you'll have room for in a container
Changelog
cl Wallem
qol: The Biogen will show how full the container inside it is
/cl
* Adds a bar to the biogen to show how full a container is
Co-authored-by: Wallem <66052067+Wallemations@users.noreply.github.com>